1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }