001 /** 002 * Copyright 2004-2012 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.TKUtils; 030 import org.kuali.rice.kns.lookup.HtmlData; 031 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData; 032 import org.kuali.rice.krad.bo.BusinessObject; 033 import org.kuali.rice.krad.util.KRADConstants; 034 import org.kuali.rice.krad.util.UrlFactory; 035 036 public class TkRoleLookupableHelper extends HrEffectiveDateActiveLookupableHelper { 037 038 @Override 039 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) { 040 List<HtmlData> customActionUrls = new ArrayList<HtmlData>(); 041 042 List<HtmlData> defaultCustomActionUrls = super.getCustomActionUrls(businessObject, pkNames); 043 044 TkRoleGroup tkRoleGroup = (TkRoleGroup) businessObject; 045 String principalId = tkRoleGroup.getPrincipalId(); 046 String location = null; 047 if (StringUtils.isNotBlank(tkRoleGroup.getDepartment())) { 048 location = TkServiceLocator.getDepartmentService().getDepartment(tkRoleGroup.getDepartment(), TKUtils.getCurrentDate()).getLocation(); 049 } 050 String department = tkRoleGroup.getDepartment(); 051 052 boolean systemAdmin = TKContext.getUser().isSystemAdmin(); 053 boolean locationAdmin = TKContext.getUser().getLocationAdminAreas().contains(location); 054 boolean departmentAdmin = TKContext.getUser().getDepartmentAdminAreas().contains(department); 055 056 for (HtmlData defaultCustomActionUrl : defaultCustomActionUrls){ 057 if (StringUtils.equals(defaultCustomActionUrl.getMethodToCall(), "edit")) { 058 if (systemAdmin || locationAdmin || departmentAdmin) { 059 customActionUrls.add(defaultCustomActionUrl); 060 } 061 } else { 062 customActionUrls.add(defaultCustomActionUrl); 063 } 064 } 065 066 Properties params = new Properties(); 067 params.put(KRADConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, getBusinessObjectClass().getName()); 068 params.put(KRADConstants.DISPATCH_REQUEST_PARAMETER, KRADConstants.MAINTENANCE_NEW_METHOD_TO_CALL); 069 params.put("principalId", principalId); 070 AnchorHtmlData viewUrl = new AnchorHtmlData(UrlFactory.parameterizeUrl(KRADConstants.INQUIRY_ACTION, params), "view"); 071 viewUrl.setDisplayText("view"); 072 viewUrl.setTarget(AnchorHtmlData.TARGET_BLANK); 073 customActionUrls.add(viewUrl); 074 075 return customActionUrls; 076 } 077 078 @Override 079 public List<? extends BusinessObject> getSearchResults( 080 Map<String, String> fieldValues) { 081 082 String principalId = fieldValues.get("principalId"); 083 String principalName = fieldValues.get("principalName"); 084 String workArea = fieldValues.get("workArea"); 085 String department = fieldValues.get("department"); 086 String roleName = fieldValues.get("roleName"); 087 088 List<TkRoleGroup> roleGroupList = TkServiceLocator.getTkRoleGroupService().getRoleGroups(principalId, principalName, workArea, department, roleName); 089 090 //BELOW is done to allow grouping of roles by principal id 091 //TODO find a better way todo this 092 for(TkRoleGroup roleGroup : roleGroupList){ 093 TkRoleGroup tkRoleGroup = TkServiceLocator.getTkRoleGroupService().getRoleGroup(roleGroup.getPrincipalId()); 094 if(tkRoleGroup == null){ 095 tkRoleGroup = new TkRoleGroup(); 096 tkRoleGroup.setPrincipalId(roleGroup.getPrincipalId()); 097 TkServiceLocator.getTkRoleGroupService().saveOrUpdate(roleGroup); 098 } 099 } 100 101 /* 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 */ 102 Map<String,TkRoleGroup> mapDistinctPrincipalIdsToRoleGroups = new HashMap<String, TkRoleGroup>(); 103 for(TkRoleGroup roleGroup : roleGroupList){ 104 mapDistinctPrincipalIdsToRoleGroups.put(roleGroup.getPrincipalId(), roleGroup); 105 } 106 List<TkRoleGroup> distinctRoleGroupPrincipalIds = new ArrayList<TkRoleGroup>(); 107 for(String distinctPrincipalId : mapDistinctPrincipalIdsToRoleGroups.keySet()){ 108 distinctRoleGroupPrincipalIds.add(mapDistinctPrincipalIdsToRoleGroups.get(distinctPrincipalId)); 109 } 110 111 // if(principalId!=""){ 112 // Person person = KIMServiceLocator.getPersonService().getPerson(principalId); 113 // if (isAuthorizedToEditUserRole(person) 114 // && (StringUtils.isEmpty(principalName) || StringUtils.equals( 115 // person.getPrincipalName(), principalName))) { 116 // TkRoleGroup tkRoleGroup = getRoleGroupFromPerson(person); 117 // if(tkRoleGroup != null ){ 118 // roleGroupList.add(getRoleGroupFromPerson(person)); 119 // } 120 // } 121 // } else if(principalName!=""){ 122 // Person person = KIMServiceLocator.getPersonService().getPersonByPrincipalName(principalName); 123 // if(isAuthorizedToEditUserRole(person)){ 124 // TkRoleGroup tkRoleGroup = getRoleGroupFromPerson(person); 125 // if(tkRoleGroup != null ){ 126 // roleGroupList.add(getRoleGroupFromPerson(person)); 127 // } 128 // } 129 // }else{ 130 // List<Person> personList = KIMServiceLocator.getPersonService().findPeople(null); 131 // for(Person person : personList){ 132 // if(isAuthorizedToEditUserRole(person)){ 133 // roleGroupList.add(getRoleGroupFromPerson(person)); 134 // } 135 // } 136 // } 137 // Iterator<BusinessObject> itr = roleGroupList.iterator(); 138 // while(itr.hasNext()){ 139 // TkRoleGroup roleGroup = (TkRoleGroup)itr.next(); 140 // TkRoleGroup tkRoleGroup = TkServiceLocator.getTkRoleGroupService().getRoleGroup(roleGroup.getPrincipalId()); 141 // if(tkRoleGroup == null){ 142 // tkRoleGroup = new TkRoleGroup(); 143 // tkRoleGroup.setPrincipalId(roleGroup.getPrincipalId()); 144 // TkServiceLocator.getTkRoleGroupService().saveOrUpdate(roleGroup); 145 // } 146 // String workArea = fieldValues.get("workArea"); 147 // String department = fieldValues.get("department"); 148 // String roleName = fieldValues.get("roleName"); 149 // boolean isAllowed = false; 150 // if (tkRoleGroup.getRoles()!= null && tkRoleGroup.getRoles().size() > 0) { 151 // for(TkRole tkRole : tkRoleGroup.getRoles()){ 152 // if ((StringUtils.isEmpty(workArea) || (tkRole.getWorkArea() != null && StringUtils 153 // .equals(workArea, tkRole.getWorkArea().toString()))) 154 // && (StringUtils.isEmpty(department) || StringUtils 155 // .equals(department, tkRole.getDepartment())) 156 // && (StringUtils.isEmpty(roleName) || StringUtils 157 // .equals(roleName, tkRole.getRoleName()))) { 158 // isAllowed = true; 159 // break; 160 // } 161 // } 162 // } else if (StringUtils.isEmpty(workArea) 163 // && StringUtils.isEmpty(department) 164 // && StringUtils.isEmpty(roleName)) { 165 // isAllowed = true; 166 // } 167 // if(!isAllowed){ 168 // itr.remove(); 169 // } 170 // } 171 return distinctRoleGroupPrincipalIds; 172 } 173 }