View Javadoc

1   /**
2    * Copyright 2004-2013 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.hr.time.roles.service;
17  
18  import java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  import java.util.Properties;
23  
24  import org.apache.commons.lang.StringUtils;
25  import org.kuali.hr.time.HrEffectiveDateActiveLookupableHelper;
26  import org.kuali.hr.time.roles.TkRoleGroup;
27  import org.kuali.hr.time.service.base.TkServiceLocator;
28  import org.kuali.hr.time.util.TKContext;
29  import org.kuali.hr.time.util.TKUser;
30  import org.kuali.hr.time.util.TKUtils;
31  import org.kuali.rice.kns.lookup.HtmlData;
32  import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData;
33  import org.kuali.rice.krad.bo.BusinessObject;
34  import org.kuali.rice.krad.util.KRADConstants;
35  import org.kuali.rice.krad.util.UrlFactory;
36  
37  public class TkRoleLookupableHelper extends HrEffectiveDateActiveLookupableHelper {
38  
39      @Override
40      public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) {
41      	List<HtmlData> customActionUrls = new ArrayList<HtmlData>();
42  		
43  		List<HtmlData> defaultCustomActionUrls = super.getCustomActionUrls(businessObject, pkNames);
44          
45  		TkRoleGroup tkRoleGroup = (TkRoleGroup) businessObject;
46          String principalId = tkRoleGroup.getPrincipalId();
47          String location = null;
48          if (StringUtils.isNotBlank(tkRoleGroup.getDepartment())) {
49              location = TkServiceLocator.getDepartmentService().getDepartment(tkRoleGroup.getDepartment(), TKUtils.getCurrentDate()).getLocation();
50          }
51          String department = tkRoleGroup.getDepartment();
52          
53          boolean systemAdmin = TKUser.isSystemAdmin();
54  		boolean locationAdmin = TKUser.getLocationAdminAreas().contains(location);
55  		boolean departmentAdmin = TKUser.getDepartmentAdminAreas().contains(department);
56  		
57  		for (HtmlData defaultCustomActionUrl : defaultCustomActionUrls){
58  			if (StringUtils.equals(defaultCustomActionUrl.getMethodToCall(), "edit")) {
59  				if (systemAdmin || locationAdmin || departmentAdmin) {
60  					customActionUrls.add(defaultCustomActionUrl);
61  				}
62  			} else {
63  				customActionUrls.add(defaultCustomActionUrl);
64  			}
65  		}
66  		
67  		Properties params = new Properties();
68  		params.put(KRADConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, getBusinessObjectClass().getName());
69  		params.put(KRADConstants.DISPATCH_REQUEST_PARAMETER, KRADConstants.MAINTENANCE_NEW_METHOD_TO_CALL);
70  		params.put("principalId", principalId);
71  		AnchorHtmlData viewUrl = new AnchorHtmlData(UrlFactory.parameterizeUrl(KRADConstants.INQUIRY_ACTION, params), "view");
72  		viewUrl.setDisplayText("view");
73  		viewUrl.setTarget(AnchorHtmlData.TARGET_BLANK);
74  		customActionUrls.add(viewUrl);
75  		
76  		return customActionUrls;
77      }
78  
79      @Override
80      public List<? extends BusinessObject> getSearchResults(
81              Map<String, String> fieldValues) {
82  
83          String principalId = fieldValues.get("principalId");
84          String principalName = fieldValues.get("principalName");
85          String workArea = fieldValues.get("workArea");
86          String department = fieldValues.get("department");
87          String roleName = fieldValues.get("roleName");
88  
89          List<TkRoleGroup> roleGroupList = TkServiceLocator.getTkRoleGroupService().getRoleGroups(principalId, principalName, workArea, department, roleName);
90  
91          //BELOW is done to allow grouping of roles by principal id
92          //TODO find a better way todo this
93          for(TkRoleGroup roleGroup : roleGroupList){
94          	TkRoleGroup tkRoleGroup = TkServiceLocator.getTkRoleGroupService().getRoleGroup(roleGroup.getPrincipalId());
95          	if(tkRoleGroup == null){
96          		tkRoleGroup = new TkRoleGroup();
97  				tkRoleGroup.setPrincipalId(roleGroup.getPrincipalId());
98  				TkServiceLocator.getTkRoleGroupService().saveOrUpdate(roleGroup);
99          	}
100         }
101         
102         /* We have the full set of roles, but since we are displaying only Principal IDs in the result list, we should return a distinct list */
103         Map<String,TkRoleGroup> mapDistinctPrincipalIdsToRoleGroups = new HashMap<String, TkRoleGroup>();
104         for(TkRoleGroup roleGroup : roleGroupList){
105             mapDistinctPrincipalIdsToRoleGroups.put(roleGroup.getPrincipalId(), roleGroup);
106         }
107         List<TkRoleGroup> distinctRoleGroupPrincipalIds = new ArrayList<TkRoleGroup>();
108         for(TkRoleGroup roleGroup : mapDistinctPrincipalIdsToRoleGroups.values()){
109         	distinctRoleGroupPrincipalIds.add(roleGroup);
110         }
111         
112 //		if(principalId!=""){
113 //			Person person = KIMServiceLocator.getPersonService().getPerson(principalId);
114 //			if (isAuthorizedToEditUserRole(person)
115 //					&& (StringUtils.isEmpty(principalName) || StringUtils.equals(
116 //							person.getPrincipalName(), principalName))) {
117 //				TkRoleGroup tkRoleGroup = getRoleGroupFromPerson(person);
118 //				if(tkRoleGroup != null ){
119 //					roleGroupList.add(getRoleGroupFromPerson(person));
120 //				}
121 //			}
122 //		} else if(principalName!=""){
123 //			Person person = KIMServiceLocator.getPersonService().getPersonByPrincipalName(principalName);
124 //			if(isAuthorizedToEditUserRole(person)){
125 //				TkRoleGroup tkRoleGroup = getRoleGroupFromPerson(person);
126 //				if(tkRoleGroup != null ){
127 //					roleGroupList.add(getRoleGroupFromPerson(person));
128 //				}
129 //			}
130 //		}else{
131 //			List<Person> personList = KIMServiceLocator.getPersonService().findPeople(null);
132 //			for(Person person : personList){
133 //				if(isAuthorizedToEditUserRole(person)){
134 //					roleGroupList.add(getRoleGroupFromPerson(person));
135 //				}
136 //			}
137 //		}
138 //		Iterator<BusinessObject> itr = roleGroupList.iterator();
139 //		while(itr.hasNext()){
140 //			TkRoleGroup roleGroup = (TkRoleGroup)itr.next();
141 //			TkRoleGroup tkRoleGroup = TkServiceLocator.getTkRoleGroupService().getRoleGroup(roleGroup.getPrincipalId());
142 //			if(tkRoleGroup == null){
143 //				tkRoleGroup = new TkRoleGroup();
144 //				tkRoleGroup.setPrincipalId(roleGroup.getPrincipalId());
145 //				TkServiceLocator.getTkRoleGroupService().saveOrUpdate(roleGroup);
146 //			}
147 //			String workArea = fieldValues.get("workArea");
148 //			String department = fieldValues.get("department");
149 //			String roleName = fieldValues.get("roleName");
150 //			boolean isAllowed = false;
151 //			if (tkRoleGroup.getRoles()!= null && tkRoleGroup.getRoles().size() > 0) {
152 //				for(TkRole tkRole : tkRoleGroup.getRoles()){
153 //					if ((StringUtils.isEmpty(workArea) || (tkRole.getWorkArea() != null && StringUtils
154 //							.equals(workArea, tkRole.getWorkArea().toString())))
155 //							&& (StringUtils.isEmpty(department) || StringUtils
156 //									.equals(department, tkRole.getDepartment()))
157 //							&& (StringUtils.isEmpty(roleName) || StringUtils
158 //									.equals(roleName, tkRole.getRoleName()))) {
159 //						isAllowed = true;
160 //						break;
161 //					}
162 //				}
163 //			} else if (StringUtils.isEmpty(workArea)
164 //					&& StringUtils.isEmpty(department)
165 //					&& StringUtils.isEmpty(roleName)) {
166 //				isAllowed = true;
167 //			}
168 //			if(!isAllowed){
169 //				itr.remove();
170 //			}
171 //		}
172         return distinctRoleGroupPrincipalIds;
173     }
174 }