Coverage Report - org.kuali.rice.kns.lookup.PessimisticLockLookupableHelperServiceImpl
 
Classes in this File Line Coverage Branch Coverage Complexity
PessimisticLockLookupableHelperServiceImpl
0%
0/53
0%
0/34
5.75
 
 1  
 /**
 2  
  * Copyright 2005-2011 The Kuali Foundation
 3  
  *
 4  
  * Licensed under the Educational Community License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  * http://www.opensource.org/licenses/ecl2.php
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package org.kuali.rice.kns.lookup;
 17  
 
 18  
 import org.apache.commons.lang.StringUtils;
 19  
 import org.kuali.rice.core.api.util.RiceKeyConstants;
 20  
 import org.kuali.rice.kim.api.identity.Person;
 21  
 import org.kuali.rice.kim.api.identity.principal.Principal;
 22  
 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
 23  
 import org.kuali.rice.kim.impl.KIMPropertyConstants;
 24  
 import org.kuali.rice.kns.util.FieldUtils;
 25  
 import org.kuali.rice.kns.web.ui.Field;
 26  
 import org.kuali.rice.kns.web.ui.Row;
 27  
 import org.kuali.rice.krad.bo.BusinessObject;
 28  
 import org.kuali.rice.krad.document.authorization.PessimisticLock;
 29  
 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
 30  
 import org.kuali.rice.krad.service.PessimisticLockService;
 31  
 import org.kuali.rice.krad.util.BeanPropertyComparator;
 32  
 import org.kuali.rice.krad.util.GlobalVariables;
 33  
 import org.kuali.rice.krad.util.KRADConstants;
 34  
 import org.kuali.rice.krad.util.KRADPropertyConstants;
 35  
 import org.kuali.rice.krad.util.ObjectUtils;
 36  
 
 37  
 import java.util.ArrayList;
 38  
 import java.util.Collections;
 39  
 import java.util.Iterator;
 40  
 import java.util.List;
 41  
 import java.util.Map;
 42  
 
 43  
 /**
 44  
  * This class is the lookup helper for {@link org.kuali.rice.krad.document.authorization.PessimisticLock} objects
 45  
  *
 46  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 47  
  *
 48  
  */
 49  0
 public class PessimisticLockLookupableHelperServiceImpl extends AbstractLookupableHelperServiceImpl {
 50  0
     private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PessimisticLockLookupableHelperServiceImpl.class);
 51  
 
 52  
     private static final long serialVersionUID = -5839142187907211804L;
 53  
     private static final String OWNER_PRINCIPAL_ID_PROPERTY_NAME = "ownedByPrincipalIdentifier";
 54  
     private static final String OWNER_PRINCIPAL_NAME_PROPERTY_NAME = "ownedByUser.principalName";
 55  
 
 56  
     private List<Row> localRows;
 57  
 
 58  
     /**
 59  
      * Hides the applicable links when the PessimisticLock is not owned by the current user
 60  
      *
 61  
      * @see org.kuali.rice.krad.lookup.LookupableHelperService#getCustomActionUrls(org.kuali.rice.krad.bo.BusinessObject, java.util.List, java.util.List pkNames)
 62  
      */
 63  
     @Override
 64  
     public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) {
 65  0
         PessimisticLock lock = (PessimisticLock)businessObject;
 66  0
         if ( (lock.isOwnedByUser(GlobalVariables.getUserSession().getPerson())) || (KRADServiceLocatorWeb
 67  
                 .getPessimisticLockService().isPessimisticLockAdminUser(GlobalVariables.getUserSession().getPerson())) ) {
 68  0
             List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>();
 69  0
             anchorHtmlDataList.add(getUrlData(businessObject, KRADConstants.DELETE_METHOD, pkNames));
 70  0
             return anchorHtmlDataList;
 71  
         } else {
 72  0
             return super.getEmptyActionUrls();
 73  
         }
 74  
     }
 75  
 
 76  
     /**
 77  
      * This overridden method checks whether the user is an admin user according to {@link PessimisticLockService#isPessimisticLockAdminUser(Person)} and if the user is not an admin user the user field is set to Read Only and the lookup field
 78  
      *
 79  
      * @see org.kuali.rice.krad.lookup.AbstractLookupableHelperServiceImpl#getRows()
 80  
      */
 81  
     @Override
 82  
     public List<Row> getRows() {
 83  0
         Person currentUser = GlobalVariables.getUserSession().getPerson();
 84  0
         if (KRADServiceLocatorWeb.getPessimisticLockService().isPessimisticLockAdminUser(currentUser)) {
 85  0
             return super.getRows();
 86  
         } else {
 87  0
             if ( (ObjectUtils.isNull(localRows)) || localRows.isEmpty() ) {
 88  0
                 List<Field> fieldList = new ArrayList<Field>();
 89  0
                 int numColumns = -1;
 90  
                 // hide a field and forcibly set a field
 91  0
                 for (Iterator<Row> iterator = super.getRows().iterator(); iterator.hasNext();) {
 92  0
                     Row row = (Row) iterator.next();
 93  0
                     if (numColumns == -1) {
 94  0
                             numColumns = row.getFields().size();
 95  
                     }
 96  0
                     for (Iterator<Field> iterator2 = row.getFields().iterator(); iterator2.hasNext();) {
 97  0
                         Field field = (Field) iterator2.next();
 98  0
                         if (!(KRADPropertyConstants.OWNED_BY_USER + "." + KIMPropertyConstants.Person.PRINCIPAL_NAME).equals(field.getPropertyName()) &&
 99  
                                         !Field.BLANK_SPACE.equals(field.getFieldType())) {
 100  0
                             fieldList.add(field);
 101  
                         }
 102  0
                     }
 103  0
                 }
 104  
                 // Since the removed field is the first one in the list, use FieldUtils to re-wrap the remaining fields accordingly.
 105  0
                 localRows = FieldUtils.wrapFields(fieldList, numColumns);
 106  
             }
 107  0
             return localRows;
 108  
         }
 109  
     }
 110  
 
 111  
     /**
 112  
      * This method implementation is used to search for objects
 113  
      *
 114  
      * @see org.kuali.rice.krad.lookup.AbstractLookupableHelperServiceImpl#getSearchResults(java.util.Map)
 115  
      */
 116  
     @Override
 117  
     public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) {
 118  
         // remove hidden fields
 119  0
         org.kuali.rice.kns.lookup.LookupUtils.removeHiddenCriteriaFields(getBusinessObjectClass(), fieldValues);
 120  
         // force criteria if not admin user
 121  0
         Person currentUser = GlobalVariables.getUserSession().getPerson();
 122  0
         if (!KRADServiceLocatorWeb.getPessimisticLockService().isPessimisticLockAdminUser(currentUser)) {
 123  0
             fieldValues.put(KRADPropertyConstants.OWNED_BY_PRINCIPAL_ID,GlobalVariables.getUserSession().getPerson().getPrincipalId());
 124  
         }
 125  
 
 126  
         //set owner's principal id and remove owner principal name field 
 127  0
         String principalName = fieldValues.get(OWNER_PRINCIPAL_NAME_PROPERTY_NAME);
 128  0
         if (!StringUtils.isEmpty(principalName)) {
 129  0
             Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(principalName);
 130  0
             if (principal != null) { 
 131  0
                 fieldValues.put(OWNER_PRINCIPAL_ID_PROPERTY_NAME, principal.getPrincipalId());
 132  
             }
 133  0
             fieldValues.remove(OWNER_PRINCIPAL_NAME_PROPERTY_NAME);
 134  
         }
 135  
         
 136  0
         setBackLocation(fieldValues.get(KRADConstants.BACK_LOCATION));
 137  0
         setDocFormKey(fieldValues.get(KRADConstants.DOC_FORM_KEY));
 138  0
         setReferencesToRefresh(fieldValues.get(KRADConstants.REFERENCES_TO_REFRESH));
 139  0
         if (LOG.isInfoEnabled()) {
 140  0
                 LOG.info("Search Criteria: " + fieldValues);
 141  
         }
 142  
         
 143  
         //replace principal name with principal id in fieldValues
 144  
         List searchResults;
 145  0
         searchResults = (List) getLookupService().findCollectionBySearchHelper(getBusinessObjectClass(), fieldValues, true);
 146  
         // sort list if default sort column given
 147  0
         List defaultSortColumns = getDefaultSortColumns();
 148  0
         if (defaultSortColumns.size() > 0) {
 149  0
             Collections.sort(searchResults, new BeanPropertyComparator(getDefaultSortColumns(), true));
 150  
         }
 151  0
         return searchResults;
 152  
     }
 153  
 
 154  
     @Override
 155  
     public void validateSearchParameters(Map fieldValues) {
 156  0
         super.validateSearchParameters(fieldValues);
 157  0
         if (StringUtils.isNotEmpty((String)fieldValues.get(OWNER_PRINCIPAL_NAME_PROPERTY_NAME))) {
 158  0
             Person person = KimApiServiceLocator.getPersonService().getPersonByPrincipalName((String)fieldValues.get(OWNER_PRINCIPAL_NAME_PROPERTY_NAME));
 159  0
             if (person == null) {
 160  0
                 String attributeLabel = getDataDictionaryService().getAttributeLabel(getBusinessObjectClass(), OWNER_PRINCIPAL_NAME_PROPERTY_NAME);
 161  0
                 GlobalVariables.getMessageMap().putError(OWNER_PRINCIPAL_NAME_PROPERTY_NAME, RiceKeyConstants.ERROR_EXISTENCE, attributeLabel);
 162  
             } 
 163  
         }
 164  0
     }
 165  
 
 166  
 }
 167