001 /**
002 * Copyright 2004-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.hr.time.roles.service;
017
018 import java.util.ArrayList;
019 import java.util.HashMap;
020 import java.util.List;
021 import java.util.Map;
022 import java.util.Properties;
023
024 import org.apache.commons.lang.StringUtils;
025 import org.kuali.hr.time.HrEffectiveDateActiveLookupableHelper;
026 import org.kuali.hr.time.roles.TkRoleGroup;
027 import org.kuali.hr.time.service.base.TkServiceLocator;
028 import org.kuali.hr.time.util.TKContext;
029 import org.kuali.hr.time.util.TKUser;
030 import org.kuali.hr.time.util.TKUtils;
031 import org.kuali.rice.kns.lookup.HtmlData;
032 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData;
033 import org.kuali.rice.krad.bo.BusinessObject;
034 import org.kuali.rice.krad.util.KRADConstants;
035 import org.kuali.rice.krad.util.UrlFactory;
036
037 public class TkRoleLookupableHelper extends HrEffectiveDateActiveLookupableHelper {
038
039 @Override
040 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) {
041 List<HtmlData> customActionUrls = new ArrayList<HtmlData>();
042
043 List<HtmlData> defaultCustomActionUrls = super.getCustomActionUrls(businessObject, pkNames);
044
045 TkRoleGroup tkRoleGroup = (TkRoleGroup) businessObject;
046 String principalId = tkRoleGroup.getPrincipalId();
047 String location = null;
048 if (StringUtils.isNotBlank(tkRoleGroup.getDepartment())) {
049 location = TkServiceLocator.getDepartmentService().getDepartment(tkRoleGroup.getDepartment(), TKUtils.getCurrentDate()).getLocation();
050 }
051 String department = tkRoleGroup.getDepartment();
052
053 boolean systemAdmin = TKUser.isSystemAdmin();
054 boolean locationAdmin = TKUser.getLocationAdminAreas().contains(location);
055 boolean departmentAdmin = TKUser.getDepartmentAdminAreas().contains(department);
056
057 for (HtmlData defaultCustomActionUrl : defaultCustomActionUrls){
058 if (StringUtils.equals(defaultCustomActionUrl.getMethodToCall(), "edit")) {
059 if (systemAdmin || locationAdmin || departmentAdmin) {
060 customActionUrls.add(defaultCustomActionUrl);
061 }
062 } else {
063 customActionUrls.add(defaultCustomActionUrl);
064 }
065 }
066
067 Properties params = new Properties();
068 params.put(KRADConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, getBusinessObjectClass().getName());
069 params.put(KRADConstants.DISPATCH_REQUEST_PARAMETER, KRADConstants.MAINTENANCE_NEW_METHOD_TO_CALL);
070 params.put("principalId", principalId);
071 AnchorHtmlData viewUrl = new AnchorHtmlData(UrlFactory.parameterizeUrl(KRADConstants.INQUIRY_ACTION, params), "view");
072 viewUrl.setDisplayText("view");
073 viewUrl.setTarget(AnchorHtmlData.TARGET_BLANK);
074 customActionUrls.add(viewUrl);
075
076 return customActionUrls;
077 }
078
079 @Override
080 public List<? extends BusinessObject> getSearchResults(
081 Map<String, String> fieldValues) {
082
083 String principalId = fieldValues.get("principalId");
084 String principalName = fieldValues.get("principalName");
085 String workArea = fieldValues.get("workArea");
086 String department = fieldValues.get("department");
087 String roleName = fieldValues.get("roleName");
088
089 List<TkRoleGroup> roleGroupList = TkServiceLocator.getTkRoleGroupService().getRoleGroups(principalId, principalName, workArea, department, roleName);
090
091 //BELOW is done to allow grouping of roles by principal id
092 //TODO find a better way todo this
093 for(TkRoleGroup roleGroup : roleGroupList){
094 TkRoleGroup tkRoleGroup = TkServiceLocator.getTkRoleGroupService().getRoleGroup(roleGroup.getPrincipalId());
095 if(tkRoleGroup == null){
096 tkRoleGroup = new TkRoleGroup();
097 tkRoleGroup.setPrincipalId(roleGroup.getPrincipalId());
098 TkServiceLocator.getTkRoleGroupService().saveOrUpdate(roleGroup);
099 }
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 }