1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.module.tem.businessobject.lookup;
20
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.commons.lang.StringUtils;
27 import org.kuali.kfs.module.tem.TemConstants;
28 import org.kuali.kfs.module.tem.businessobject.TemProfile;
29 import org.kuali.kfs.module.tem.businessobject.TravelerProfileForLookup;
30 import org.kuali.kfs.module.tem.identity.TemKimAttributes;
31 import org.kuali.kfs.sys.KFSConstants;
32 import org.kuali.kfs.sys.context.SpringContext;
33 import org.kuali.kfs.sys.identity.KfsKimAttributes;
34 import org.kuali.rice.kew.api.WorkflowDocument;
35 import org.kuali.rice.kim.api.KimConstants;
36 import org.kuali.rice.kim.api.permission.PermissionService;
37 import org.kuali.rice.kns.util.FieldUtils;
38 import org.kuali.rice.kns.util.KNSGlobalVariables;
39 import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
40 import org.kuali.rice.kns.web.struts.form.KualiForm;
41 import org.kuali.rice.kns.web.struts.form.LookupForm;
42 import org.kuali.rice.krad.bo.BusinessObject;
43 import org.kuali.rice.krad.service.SessionDocumentService;
44 import org.kuali.rice.krad.util.GlobalVariables;
45
46
47
48
49
50 public class TravelerProfileDocLookupableHelperServiceImpl extends TemProfileLookupableHelperServiceImpl {
51 protected PermissionService permissionService;
52
53
54
55
56
57 @Override
58 public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) {
59 final Map<String, String> viewRecordPermissionDetails = getPermissionDetailsForViewRecordsCheck();
60 final String currentUserPrincipalId = GlobalVariables.getUserSession().getPrincipalId();
61 final String documentTypeName = updateAuthorizationDocumentType(getCurrentDocumentTypeName());
62
63 final List<TemProfile> allProfiles = (List<TemProfile>)super.getSearchResults(fieldValues);
64 List<TemProfile> qualifyingProfiles = new ArrayList<TemProfile>();
65 for (TemProfile profile : allProfiles) {
66 final Map<String, String> roleQualifier = getRoleQualifierForViewRecordsCheck(profile, documentTypeName);
67 if (getPermissionService().isAuthorizedByTemplate(currentUserPrincipalId, KFSConstants.PermissionTemplate.VIEW_RECORD.namespace, KFSConstants.PermissionTemplate.VIEW_RECORD.name, viewRecordPermissionDetails, roleQualifier)) {
68 qualifyingProfiles.add(profile);
69 }
70 }
71 return qualifyingProfiles;
72 }
73
74
75
76
77 protected Map<String, String> getPermissionDetailsForViewRecordsCheck() {
78 Map<String, String> permissionDetails = new HashMap<String, String>();
79 permissionDetails.put(KimConstants.AttributeConstants.COMPONENT_NAME, TravelerProfileForLookup.class.getSimpleName());
80 return permissionDetails;
81 }
82
83
84
85
86
87
88 protected Map<String, String> getRoleQualifierForViewRecordsCheck(TemProfile profile, String documentTypeName) {
89 Map<String, String> roleQualifier = new HashMap<String, String>();
90 roleQualifier.put(KfsKimAttributes.CHART_OF_ACCOUNTS_CODE, profile.getHomeDeptChartOfAccountsCode());
91 roleQualifier.put(KfsKimAttributes.ORGANIZATION_CODE, profile.getHomeDeptOrgCode());
92 roleQualifier.put(KfsKimAttributes.PROFILE_PRINCIPAL_ID, profile.getPrincipalId());
93 roleQualifier.put(TemKimAttributes.CUSTOMER_PROFILE_ID, profile.getCustomerNumber());
94 roleQualifier.put(TemKimAttributes.PROFILE_ID, profile.getProfileId().toString());
95
96 if (!StringUtils.isBlank(documentTypeName)) {
97 roleQualifier.put(KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME, documentTypeName);
98 }
99
100 return roleQualifier;
101 }
102
103
104
105
106
107 protected String getCurrentDocumentTypeName() {
108 final KualiForm form = KNSGlobalVariables.getKualiForm();
109 if (form != null) {
110 if (form instanceof KualiDocumentFormBase) {
111 return ((KualiDocumentFormBase)KNSGlobalVariables.getKualiForm()).getDocTypeName();
112 } else if (form instanceof LookupForm) {
113 final String docNum = ((LookupForm)KNSGlobalVariables.getKualiForm()).getDocNum();
114 if(!StringUtils.isBlank(docNum)) {
115 WorkflowDocument workflowDocument = SpringContext.getBean(SessionDocumentService.class).getDocumentFromSession(GlobalVariables.getUserSession(), docNum);
116 return workflowDocument.getDocumentTypeName();
117 }
118 }
119 }
120 return null;
121 }
122
123
124
125
126
127
128 protected String updateAuthorizationDocumentType(String documentType) {
129 if (!StringUtils.isBlank(documentType) && (TemConstants.TravelDocTypes.TRAVEL_AUTHORIZATION_CLOSE_DOCUMENT.equals(documentType) || TemConstants.TravelDocTypes.TRAVEL_AUTHORIZATION_AMEND_DOCUMENT.equals(documentType))) {
130 return TemConstants.TravelDocTypes.TRAVEL_AUTHORIZATION_DOCUMENT;
131 }
132 return documentType;
133 }
134
135
136
137
138
139 @Override
140 public Class getBusinessObjectClass() {
141 return TemProfile.class;
142 }
143
144
145
146
147
148 @Override
149 public String getSupplementalMenuBar() {
150 return KFSConstants.EMPTY_STRING;
151 }
152
153
154
155
156
157
158 @Override
159 protected void setRows() {
160 List<String> lookupFieldAttributeList = null;
161 final Class<? extends BusinessObject> businessObjectClazz = TravelerProfileForLookup.class;
162 if (getBusinessObjectMetaDataService().isLookupable(businessObjectClazz)) {
163 lookupFieldAttributeList = getBusinessObjectMetaDataService().getLookupableFieldNames(
164 businessObjectClazz);
165 }
166 if (lookupFieldAttributeList == null) {
167 throw new RuntimeException("Lookup not defined for business object " + getBusinessObjectClass());
168 }
169
170
171 List fields = new ArrayList();
172 try {
173 fields = FieldUtils.createAndPopulateFieldsForLookup(lookupFieldAttributeList, getReadOnlyFieldsList(),
174 businessObjectClazz);
175 } catch (InstantiationException e) {
176 throw new RuntimeException("Unable to create instance of business object class" + e.getMessage());
177 } catch (IllegalAccessException e) {
178 throw new RuntimeException("Unable to create instance of business object class" + e.getMessage());
179 }
180
181 int numCols = getBusinessObjectDictionaryService().getLookupNumberOfColumns(businessObjectClazz);
182
183 this.rows = FieldUtils.wrapFields(fields, numCols);
184 }
185
186
187
188
189 public PermissionService getPermissionService() {
190 return permissionService;
191 }
192
193
194
195
196
197 public void setPermissionService(PermissionService permissionService) {
198 this.permissionService = permissionService;
199 }
200
201 }