View Javadoc
1   /**
2    * Copyright 2004-2014 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.kpme.core.job.web;
17  
18  import org.apache.commons.lang.StringUtils;
19  import org.kuali.kpme.core.api.job.Job;
20  import org.kuali.kpme.core.api.namespace.KPMENamespace;
21  import org.kuali.kpme.core.api.permission.KPMEPermissionTemplate;
22  import org.kuali.kpme.core.groupkey.HrGroupKeyBo;
23  import org.kuali.kpme.core.job.JobBo;
24  import org.kuali.kpme.core.lookup.KPMELookupableImpl;
25  import org.kuali.kpme.core.role.KPMERoleMemberAttribute;
26  import org.kuali.rice.core.api.mo.ModelObjectUtils;
27  import org.kuali.rice.kim.api.KimConstants;
28  import org.kuali.rice.kim.api.identity.Person;
29  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
30  import org.kuali.rice.krad.util.GlobalVariables;
31  
32  import java.util.*;
33  
34  public class JobLookupableImpl extends KPMELookupableImpl{
35      private static final ModelObjectUtils.Transformer<Job, JobBo> toJobBo =
36              new ModelObjectUtils.Transformer<Job, JobBo>() {
37                  public JobBo transform(Job input) {
38                      return JobBo.from(input);
39                  };
40              };
41  
42      protected List<JobBo> filterLookupJobs(List<JobBo> rawResults, String userPrincipalId)
43      {
44          List<JobBo> results = new ArrayList<JobBo>();
45          for (JobBo jobObj : rawResults)
46          {
47              Map<String, String> roleQualification = new HashMap<String, String>();
48              roleQualification.put(KimConstants.AttributeConstants.PRINCIPAL_ID, userPrincipalId);
49              roleQualification.put(KPMERoleMemberAttribute.DEPARTMENT.getRoleMemberAttributeName(), jobObj.getDept());
50              roleQualification.put(KPMERoleMemberAttribute.GROUP_KEY_CODE.getRoleMemberAttributeName(), jobObj.getGroupKeyCode());
51  
52              HrGroupKeyBo groupKey = jobObj.getGroupKey();
53              if(groupKey != null) {
54                  roleQualification.put(KPMERoleMemberAttribute.LOCATION.getRoleMemberAttributeName(), groupKey.getLocationId());
55                  roleQualification.put(KPMERoleMemberAttribute.INSTITUION.getRoleMemberAttributeName(), groupKey.getInstitutionCode());
56              }
57  
58              if (!KimApiServiceLocator.getPermissionService().isPermissionDefinedByTemplate(KPMENamespace.KPME_WKFLW.getNamespaceCode(),
59                      KPMEPermissionTemplate.VIEW_KPME_RECORD.getPermissionTemplateName(), new HashMap<String, String>())
60                      || KimApiServiceLocator.getPermissionService().isAuthorizedByTemplate(userPrincipalId, KPMENamespace.KPME_WKFLW.getNamespaceCode(),
61                      KPMEPermissionTemplate.VIEW_KPME_RECORD.getPermissionTemplateName(), new HashMap<String, String>(), roleQualification)) {
62                  results.add(jobObj);
63              }
64          }
65          return results;
66      }
67  
68      @Override
69      protected Collection<?> executeSearch(Map<String, String> searchCriteria, List<String> wildcardAsLiteralSearchCriteria, boolean bounded, Integer searchResultsLimit) {
70          String userPrincipalId = GlobalVariables.getUserSession().getPrincipalId();
71          List<JobBo> rawSearchResults = new ArrayList<JobBo>();
72          
73          if (StringUtils.isNotEmpty(searchCriteria.get("firstName")) || StringUtils.isNotEmpty(searchCriteria.get("lastName"))) {
74              Map<String, String> fields = new HashMap<String, String>();
75              fields.put("firstName", searchCriteria.get("firstName"));
76              fields.put("lastName", searchCriteria.get("lastName"));
77              List<Person> people = KimApiServiceLocator.getPersonService().findPeople(fields);
78              for (Person p : people) {
79                  Map<String, String> personSearch = new HashMap<String, String>();
80                  personSearch.putAll(searchCriteria);
81                  personSearch.put("principalId", p.getPrincipalId());
82                  personSearch.remove("firstName");
83                  personSearch.remove("lastName");
84  
85                  List<JobBo> res = (List<JobBo>)super.executeSearch(personSearch, wildcardAsLiteralSearchCriteria, bounded, searchResultsLimit);
86                  rawSearchResults.addAll(res);
87              }
88          } else {
89              searchCriteria.remove("firstName");
90              searchCriteria.remove("lastName");
91              
92              rawSearchResults = (List<JobBo>)super.executeSearch(searchCriteria, wildcardAsLiteralSearchCriteria, bounded, searchResultsLimit);
93          }
94  
95          List<JobBo> filteredResults = filterLookupJobs(rawSearchResults, userPrincipalId);
96          return filteredResults;
97      }
98  
99  
100 }