001 /** 002 * Copyright 2005-2011 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.rice.kim.service.impl; 017 018 import org.apache.commons.collections.CollectionUtils; 019 import org.apache.commons.lang.StringUtils; 020 import org.apache.log4j.Logger; 021 import org.joda.time.DateTime; 022 import org.kuali.rice.core.api.config.property.ConfigContext; 023 import org.kuali.rice.core.api.criteria.Predicate; 024 import org.kuali.rice.core.api.criteria.QueryByCriteria; 025 import org.kuali.rice.core.api.membership.MemberType; 026 import org.kuali.rice.core.api.parameter.Parameter; 027 import org.kuali.rice.core.api.uif.RemotableCheckboxGroup; 028 import org.kuali.rice.core.framework.parameter.ParameterService; 029 import org.kuali.rice.core.framework.services.CoreFrameworkServiceLocator; 030 import org.kuali.rice.kim.api.KimConstants; 031 import org.kuali.rice.kim.api.KimConstants.KimGroupMemberTypes; 032 import org.kuali.rice.kim.api.group.Group; 033 import org.kuali.rice.kim.api.group.GroupMember; 034 import org.kuali.rice.kim.api.group.GroupService; 035 import org.kuali.rice.kim.api.identity.IdentityService; 036 import org.kuali.rice.kim.api.identity.Person; 037 import org.kuali.rice.kim.api.identity.address.EntityAddress; 038 import org.kuali.rice.kim.api.identity.address.EntityAddressContract; 039 import org.kuali.rice.kim.api.identity.affiliation.EntityAffiliation; 040 import org.kuali.rice.kim.api.identity.email.EntityEmail; 041 import org.kuali.rice.kim.api.identity.email.EntityEmailContract; 042 import org.kuali.rice.kim.api.identity.employment.EntityEmployment; 043 import org.kuali.rice.kim.api.identity.entity.Entity; 044 import org.kuali.rice.kim.api.identity.name.EntityName; 045 import org.kuali.rice.kim.api.identity.phone.EntityPhone; 046 import org.kuali.rice.kim.api.identity.phone.EntityPhoneContract; 047 import org.kuali.rice.kim.api.identity.principal.Principal; 048 import org.kuali.rice.kim.api.identity.privacy.EntityPrivacyPreferences; 049 import org.kuali.rice.kim.api.identity.type.EntityTypeContactInfo; 050 import org.kuali.rice.kim.api.permission.PermissionService; 051 import org.kuali.rice.kim.api.responsibility.ResponsibilityService; 052 import org.kuali.rice.kim.api.role.Role; 053 import org.kuali.rice.kim.api.role.RoleMember; 054 import org.kuali.rice.kim.api.role.RoleService; 055 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 056 import org.kuali.rice.kim.api.type.KimAttributeField; 057 import org.kuali.rice.kim.api.type.KimType; 058 import org.kuali.rice.kim.api.type.KimTypeAttribute; 059 import org.kuali.rice.kim.api.type.KimTypeInfoService; 060 import org.kuali.rice.kim.bo.ui.GroupDocumentMember; 061 import org.kuali.rice.kim.bo.ui.GroupDocumentQualifier; 062 import org.kuali.rice.kim.bo.ui.KimDocumentRoleMember; 063 import org.kuali.rice.kim.bo.ui.KimDocumentRolePermission; 064 import org.kuali.rice.kim.bo.ui.KimDocumentRoleQualifier; 065 import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibility; 066 import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibilityAction; 067 import org.kuali.rice.kim.bo.ui.PersonDocumentAddress; 068 import org.kuali.rice.kim.bo.ui.PersonDocumentAffiliation; 069 import org.kuali.rice.kim.bo.ui.PersonDocumentEmail; 070 import org.kuali.rice.kim.bo.ui.PersonDocumentEmploymentInfo; 071 import org.kuali.rice.kim.bo.ui.PersonDocumentGroup; 072 import org.kuali.rice.kim.bo.ui.PersonDocumentName; 073 import org.kuali.rice.kim.bo.ui.PersonDocumentPhone; 074 import org.kuali.rice.kim.bo.ui.PersonDocumentPrivacy; 075 import org.kuali.rice.kim.bo.ui.PersonDocumentRole; 076 import org.kuali.rice.kim.bo.ui.RoleDocumentDelegation; 077 import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMember; 078 import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMemberQualifier; 079 import org.kuali.rice.kim.document.IdentityManagementGroupDocument; 080 import org.kuali.rice.kim.document.IdentityManagementPersonDocument; 081 import org.kuali.rice.kim.document.IdentityManagementRoleDocument; 082 import org.kuali.rice.kim.framework.services.KimFrameworkServiceLocator; 083 import org.kuali.rice.kim.framework.type.KimTypeService; 084 import org.kuali.rice.kim.impl.KIMPropertyConstants; 085 import org.kuali.rice.kim.impl.common.attribute.KimAttributeDataBo; 086 import org.kuali.rice.kim.impl.common.delegate.DelegateTypeBo; 087 import org.kuali.rice.kim.impl.common.delegate.DelegateMemberAttributeDataBo; 088 import org.kuali.rice.kim.impl.common.delegate.DelegateMemberBo; 089 import org.kuali.rice.kim.impl.group.GroupAttributeBo; 090 import org.kuali.rice.kim.impl.group.GroupBo; 091 import org.kuali.rice.kim.impl.group.GroupMemberBo; 092 import org.kuali.rice.kim.impl.identity.address.EntityAddressBo; 093 import org.kuali.rice.kim.impl.identity.address.EntityAddressTypeBo; 094 import org.kuali.rice.kim.impl.identity.affiliation.EntityAffiliationBo; 095 import org.kuali.rice.kim.impl.identity.affiliation.EntityAffiliationTypeBo; 096 import org.kuali.rice.kim.impl.identity.email.EntityEmailBo; 097 import org.kuali.rice.kim.impl.identity.email.EntityEmailTypeBo; 098 import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentBo; 099 import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentStatusBo; 100 import org.kuali.rice.kim.impl.identity.employment.EntityEmploymentTypeBo; 101 import org.kuali.rice.kim.impl.identity.entity.EntityBo; 102 import org.kuali.rice.kim.impl.identity.name.EntityNameBo; 103 import org.kuali.rice.kim.impl.identity.name.EntityNameTypeBo; 104 import org.kuali.rice.kim.impl.identity.phone.EntityPhoneBo; 105 import org.kuali.rice.kim.impl.identity.phone.EntityPhoneTypeBo; 106 import org.kuali.rice.kim.impl.identity.principal.PrincipalBo; 107 import org.kuali.rice.kim.impl.identity.privacy.EntityPrivacyPreferencesBo; 108 import org.kuali.rice.kim.impl.identity.type.EntityTypeContactInfoBo; 109 import org.kuali.rice.kim.impl.permission.PermissionBo; 110 import org.kuali.rice.kim.impl.responsibility.ResponsibilityInternalService; 111 import org.kuali.rice.kim.impl.role.RoleBo; 112 import org.kuali.rice.kim.impl.role.RoleMemberAttributeDataBo; 113 import org.kuali.rice.kim.impl.role.RoleMemberBo; 114 import org.kuali.rice.kim.impl.role.RolePermissionBo; 115 import org.kuali.rice.kim.impl.role.RoleResponsibilityActionBo; 116 import org.kuali.rice.kim.impl.role.RoleResponsibilityBo; 117 import org.kuali.rice.kim.impl.services.KimImplServiceLocator; 118 import org.kuali.rice.kim.impl.type.KimTypeBo; 119 import org.kuali.rice.kim.service.UiDocumentService; 120 import org.kuali.rice.kim.util.KimCommonUtilsInternal; 121 import org.kuali.rice.kns.datadictionary.exporter.AttributesMapBuilder; 122 import org.kuali.rice.kns.kim.type.DataDictionaryTypeServiceHelper; 123 import org.kuali.rice.krad.bo.BusinessObject; 124 import org.kuali.rice.krad.bo.PersistableBusinessObject; 125 import org.kuali.rice.krad.datadictionary.AttributeDefinition; 126 import org.kuali.rice.krad.datadictionary.exporter.ExportMap; 127 import org.kuali.rice.krad.document.Document; 128 import org.kuali.rice.krad.service.BusinessObjectService; 129 import org.kuali.rice.krad.service.DocumentHelperService; 130 import org.kuali.rice.krad.service.KRADServiceLocator; 131 import org.kuali.rice.krad.service.KRADServiceLocatorWeb; 132 import org.kuali.rice.krad.util.KRADConstants; 133 import org.kuali.rice.krad.util.ObjectUtils; 134 135 import java.sql.Timestamp; 136 import java.util.ArrayList; 137 import java.util.Collection; 138 import java.util.Collections; 139 import java.util.Comparator; 140 import java.util.HashMap; 141 import java.util.HashSet; 142 import java.util.List; 143 import java.util.Map; 144 import java.util.Set; 145 146 import static org.kuali.rice.core.api.criteria.PredicateFactory.equal; 147 148 /** 149 * This is a description of what this class does - shyu don't forget to fill this in. 150 * 151 * @author Kuali Rice Team (rice.collab@kuali.org) 152 * 153 */ 154 public class UiDocumentServiceImpl implements UiDocumentService { 155 private static final Logger LOG = Logger.getLogger(UiDocumentServiceImpl.class); 156 private static final String SHOW_BLANK_QUALIFIERS = "kim.show.blank.qualifiers"; 157 158 private RoleService roleService; 159 private BusinessObjectService businessObjectService; 160 private IdentityService identityService; 161 private PermissionService permissionService; 162 private GroupService groupService; 163 private ResponsibilityService responsibilityService; 164 private ResponsibilityInternalService responsibilityInternalService; 165 private KimTypeInfoService kimTypeInfoService; 166 private DocumentHelperService documentHelperService; 167 private ParameterService parameterService; 168 169 170 /** 171 * @see org.kuali.rice.kim.service.UiDocumentService#saveEntityPerson(IdentityManagementPersonDocument) 172 */ 173 public void saveEntityPerson( 174 IdentityManagementPersonDocument identityManagementPersonDocument) { 175 EntityBo kimEntity = new EntityBo(); 176 EntityBo origEntity = getEntityBo(identityManagementPersonDocument.getEntityId()); 177 boolean creatingNew = true; 178 if (origEntity == null) { 179 origEntity = new EntityBo(); 180 kimEntity.setActive(true); 181 } else { 182 // TODO : in order to resolve optimistic locking issue. has to get identity and set the version number if identity records matched 183 // Need to look into this. 184 //kimEntity = origEntity; 185 kimEntity.setActive(origEntity.isActive()); 186 kimEntity.setVersionNumber(origEntity.getVersionNumber()); 187 creatingNew = false; 188 } 189 190 kimEntity.setId(identityManagementPersonDocument.getEntityId()); 191 String initiatorPrincipalId = getInitiatorPrincipalId(identityManagementPersonDocument); 192 boolean inactivatingPrincipal = false; 193 if(canModifyEntity(initiatorPrincipalId, identityManagementPersonDocument.getPrincipalId())){ 194 inactivatingPrincipal = setupPrincipal(identityManagementPersonDocument, kimEntity, origEntity.getPrincipals()); 195 setupAffiliation(identityManagementPersonDocument, kimEntity, origEntity.getAffiliations(), origEntity.getEmploymentInformation()); 196 setupName(identityManagementPersonDocument, kimEntity, origEntity.getNames()); 197 // entitytype 198 List<EntityTypeContactInfoBo> entityTypes = new ArrayList<EntityTypeContactInfoBo>(); 199 EntityTypeContactInfoBo entityType = new EntityTypeContactInfoBo(); 200 entityType.setEntityId(identityManagementPersonDocument.getEntityId()); 201 entityType.setEntityTypeCode(KimConstants.EntityTypes.PERSON); 202 entityType.setActive(true); 203 entityTypes.add(entityType); 204 EntityTypeContactInfoBo origEntityType = new EntityTypeContactInfoBo(); 205 for (EntityTypeContactInfoBo type : origEntity.getEntityTypeContactInfos()) { 206 // should check identity.entitytypeid, but it's not persist in persondoc yet 207 if (type.getEntityTypeCode()!=null && StringUtils.equals(type.getEntityTypeCode(), entityType.getEntityTypeCode())) { 208 origEntityType = type; 209 entityType.setVersionNumber(type.getVersionNumber()); 210 entityType.setActive(type.isActive()); 211 } 212 } 213 setupPhone(identityManagementPersonDocument, entityType, origEntityType.getPhoneNumbers()); 214 setupEmail(identityManagementPersonDocument, entityType, origEntityType.getEmailAddresses()); 215 setupAddress(identityManagementPersonDocument, entityType, origEntityType.getAddresses()); 216 kimEntity.setEntityTypeContactInfos(entityTypes); 217 } else{ 218 if(ObjectUtils.isNotNull(origEntity.getExternalIdentifiers())) { 219 kimEntity.setExternalIdentifiers(origEntity.getExternalIdentifiers()); 220 } 221 if(ObjectUtils.isNotNull(origEntity.getEmploymentInformation())) { 222 kimEntity.setEmploymentInformation(origEntity.getEmploymentInformation()); 223 } 224 if(ObjectUtils.isNotNull(origEntity.getAffiliations())) { 225 kimEntity.setAffiliations(origEntity.getAffiliations()); 226 } 227 if(ObjectUtils.isNotNull(origEntity.getNames())) { 228 kimEntity.setNames(origEntity.getNames()); 229 } 230 if(ObjectUtils.isNotNull(origEntity.getEntityTypeContactInfos())) { 231 kimEntity.setEntityTypeContactInfos(origEntity.getEntityTypeContactInfos()); 232 } 233 } 234 if(creatingNew || canOverrideEntityPrivacyPreferences(getInitiatorPrincipalId(identityManagementPersonDocument), identityManagementPersonDocument.getPrincipalId())) { 235 setupPrivacy(identityManagementPersonDocument, kimEntity, origEntity.getPrivacyPreferences()); 236 } else { 237 if(ObjectUtils.isNotNull(origEntity.getPrivacyPreferences())) { 238 kimEntity.setPrivacyPreferences(origEntity.getPrivacyPreferences()); 239 } 240 } 241 List <GroupMemberBo> groupPrincipals = populateGroupMembers(identityManagementPersonDocument); 242 List <RoleMemberBo> rolePrincipals = populateRoleMembers(identityManagementPersonDocument); 243 List <DelegateTypeBo> personDelegations = populateDelegations(identityManagementPersonDocument); 244 List <PersistableBusinessObject> bos = new ArrayList<PersistableBusinessObject>(); 245 List <RoleResponsibilityActionBo> roleRspActions = populateRoleRspActions(identityManagementPersonDocument); 246 List <RoleMemberAttributeDataBo> blankRoleMemberAttrs = getBlankRoleMemberAttrs(rolePrincipals); 247 bos.add(kimEntity); 248 //if(ObjectUtils.isNotNull(kimEntity.getPrivacyPreferences())) 249 // bos.add(kimEntity.getPrivacyPreferences()); 250 bos.addAll(groupPrincipals); 251 bos.addAll(rolePrincipals); 252 bos.addAll(roleRspActions); 253 bos.addAll(personDelegations); 254 // boservice.save(bos) does not handle deleteawarelist 255 getBusinessObjectService().save(bos); 256 257 if (!blankRoleMemberAttrs.isEmpty()) { 258 getBusinessObjectService().delete(blankRoleMemberAttrs); 259 } 260 if ( inactivatingPrincipal ) { 261 //when a person is inactivated, inactivate their group, role, and delegation memberships 262 KimImplServiceLocator.getRoleInternalService().principalInactivated( 263 identityManagementPersonDocument.getPrincipalId()); 264 } 265 } 266 267 private String getInitiatorPrincipalId(Document document){ 268 try{ 269 return document.getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId(); 270 } catch(Exception ex){ 271 return null; 272 } 273 } 274 275 public Map<String,Object> getAttributeEntries( List<KimAttributeField> definitions ) { 276 final Map<String,Object> attributeEntries = new HashMap<String,Object>(); 277 if (definitions != null) { 278 for (AttributeDefinition definition : DataDictionaryTypeServiceHelper.toKimAttributeDefinitions(definitions)) { 279 final AttributesMapBuilder builder = new AttributesMapBuilder(); 280 final ExportMap map = builder.buildAttributeMap(definition, ""); 281 attributeEntries.put(definition.getName(),map.getExportData()); 282 } 283 } 284 return attributeEntries; 285 } 286 287 288 /** 289 * 290 * @see org.kuali.rice.kim.service.UiDocumentService#loadEntityToPersonDoc(IdentityManagementPersonDocument, String) 291 */ 292 public void loadEntityToPersonDoc(IdentityManagementPersonDocument identityManagementPersonDocument, String principalId) { 293 Principal principal = this.getIdentityService().getPrincipal(principalId); 294 if(principal==null) { 295 throw new RuntimeException("Principal does not exist for principal id:"+principalId); 296 } 297 298 identityManagementPersonDocument.setPrincipalId(principal.getPrincipalId()); 299 identityManagementPersonDocument.setPrincipalName(principal.getPrincipalName()); 300 identityManagementPersonDocument.setPassword(principal.getPassword()); 301 identityManagementPersonDocument.setActive(principal.isActive()); 302 Entity kimEntity = this.getIdentityService().getEntity(principal.getEntityId()); 303 identityManagementPersonDocument.setEntityId(kimEntity.getId()); 304 if ( ObjectUtils.isNotNull( kimEntity.getPrivacyPreferences() ) ) { 305 identityManagementPersonDocument.setPrivacy(loadPrivacyReferences(kimEntity.getPrivacyPreferences())); 306 } 307 //identityManagementPersonDocument.setActive(kimEntity.isActive()); 308 identityManagementPersonDocument.setAffiliations(loadAffiliations(kimEntity.getAffiliations(),kimEntity.getEmploymentInformation())); 309 identityManagementPersonDocument.setNames(loadNames( identityManagementPersonDocument, principalId, kimEntity.getNames(), identityManagementPersonDocument.getPrivacy().isSuppressName() )); 310 EntityTypeContactInfo entityType = null; 311 for (EntityTypeContactInfo type : kimEntity.getEntityTypeContactInfos()) { 312 if (KimConstants.EntityTypes.PERSON.equals(type.getEntityTypeCode())) { 313 entityType = EntityTypeContactInfo.Builder.create(type).build(); 314 } 315 } 316 317 if(entityType!=null){ 318 identityManagementPersonDocument.setEmails(loadEmails(identityManagementPersonDocument, principalId, entityType.getEmailAddresses(), identityManagementPersonDocument.getPrivacy().isSuppressEmail())); 319 identityManagementPersonDocument.setPhones(loadPhones(identityManagementPersonDocument, principalId, entityType.getPhoneNumbers(), identityManagementPersonDocument.getPrivacy().isSuppressPhone())); 320 identityManagementPersonDocument.setAddrs(loadAddresses(identityManagementPersonDocument, principalId, entityType.getAddresses(), identityManagementPersonDocument.getPrivacy().isSuppressAddress())); 321 } 322 323 List<Group> groups = getGroupService().getGroups(getGroupService().getDirectGroupIdsByPrincipalId( 324 identityManagementPersonDocument.getPrincipalId())); 325 loadGroupToPersonDoc(identityManagementPersonDocument, groups); 326 loadRoleToPersonDoc(identityManagementPersonDocument); 327 loadDelegationsToPersonDoc(identityManagementPersonDocument); 328 } 329 330 @SuppressWarnings("unchecked") 331 public List<DelegateTypeBo> getPersonDelegations(String principalId){ 332 if(principalId==null) { 333 return new ArrayList<DelegateTypeBo>(); 334 } 335 Map<String,String> criteria = new HashMap<String,String>(1); 336 criteria.put(KimConstants.PrimaryKeyConstants.MEMBER_ID, principalId); 337 criteria.put( KIMPropertyConstants.DelegationMember.MEMBER_TYPE_CODE, MemberType.PRINCIPAL.getCode() ); 338 List<DelegateMemberBo> delegationMembers = (List<DelegateMemberBo>)getBusinessObjectService().findMatching(DelegateMemberBo.class, criteria); 339 List<DelegateTypeBo> delegations = new ArrayList<DelegateTypeBo>(); 340 List<String> delegationIds = new ArrayList<String>(); 341 if(ObjectUtils.isNotNull(delegationMembers)){ 342 for(DelegateMemberBo delegationMember: delegationMembers){ 343 if(!delegationIds.contains(delegationMember.getDelegationId())){ 344 delegationIds.add(delegationMember.getDelegationId()); 345 criteria = new HashMap<String,String>(1); 346 criteria.put(KimConstants.PrimaryKeyConstants.DELEGATION_ID, delegationMember.getDelegationId()); 347 delegations.add(getBusinessObjectService().findByPrimaryKey(DelegateTypeBo.class, criteria)); 348 } 349 } 350 } 351 return delegations; 352 } 353 354 355 protected void loadDelegationsToPersonDoc(IdentityManagementPersonDocument identityManagementPersonDocument){ 356 List<RoleDocumentDelegation> delList = new ArrayList<RoleDocumentDelegation>(); 357 RoleDocumentDelegation documentDelegation; 358 List<DelegateTypeBo> origDelegations = getPersonDelegations(identityManagementPersonDocument.getPrincipalId()); 359 if(ObjectUtils.isNotNull(origDelegations)){ 360 for(DelegateTypeBo del: origDelegations){ 361 if(del.isActive()){ 362 documentDelegation = new RoleDocumentDelegation(); 363 documentDelegation.setActive(del.isActive()); 364 documentDelegation.setDelegationId(del.getDelegationId()); 365 documentDelegation.setDelegationTypeCode(del.getDelegationTypeCode()); 366 documentDelegation.setKimTypeId(del.getKimTypeId()); 367 documentDelegation.setMembers( 368 loadDelegationMembers(identityManagementPersonDocument, 369 del.getMembers(), (RoleBo)getMember(MemberType.ROLE, del.getRoleId()))); 370 documentDelegation.setRoleId(del.getRoleId()); 371 documentDelegation.setEdit(true); 372 delList.add(documentDelegation); 373 } 374 } 375 } 376 identityManagementPersonDocument.setDelegations(delList); 377 setDelegationMembersInDocument(identityManagementPersonDocument); 378 } 379 380 public void setDelegationMembersInDocument(IdentityManagementPersonDocument identityManagementPersonDocument){ 381 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getDelegations())){ 382 for(RoleDocumentDelegation delegation: identityManagementPersonDocument.getDelegations()){ 383 if(CollectionUtils.isNotEmpty(delegation.getMembers())){ 384 for(RoleDocumentDelegationMember member: delegation.getMembers()){ 385 if (StringUtils.equals(member.getMemberId(), identityManagementPersonDocument.getPrincipalId())) 386 { 387 member.setDelegationTypeCode(delegation.getDelegationTypeCode()); 388 identityManagementPersonDocument.getDelegationMembers().add(member); 389 } 390 } 391 } 392 } 393 } 394 } 395 396 protected List<RoleDocumentDelegationMember> loadDelegationMembers( 397 IdentityManagementPersonDocument identityManagementPersonDocument, List<DelegateMemberBo> members, RoleBo roleImpl){ 398 List<RoleDocumentDelegationMember> pndMembers = new ArrayList<RoleDocumentDelegationMember>(); 399 RoleDocumentDelegationMember pndMember; 400 RoleMemberBo roleMember; 401 if(ObjectUtils.isNotNull(members)){ 402 for(DelegateMemberBo member: members){ 403 pndMember = new RoleDocumentDelegationMember(); 404 pndMember.setActiveFromDate(member.getActiveFromDateValue()); 405 pndMember.setActiveToDate(member.getActiveToDateValue()); 406 pndMember.setActive(member.isActive(new Timestamp(System.currentTimeMillis()))); 407 pndMember.setRoleBo(roleImpl); 408 if(pndMember.isActive()){ 409 KimCommonUtilsInternal.copyProperties(pndMember, member); 410 pndMember.setRoleMemberId(member.getRoleMemberId()); 411 roleMember = getRoleMemberForRoleMemberId(member.getRoleMemberId()); 412 if(roleMember!=null){ 413 pndMember.setRoleMemberName(getMemberName(roleMember.getType(), roleMember.getMemberId())); 414 pndMember.setRoleMemberNamespaceCode(getMemberNamespaceCode(roleMember.getType(), roleMember.getMemberId())); 415 } 416 pndMember.setMemberNamespaceCode(getMemberNamespaceCode(member.getType(), member.getMemberId())); 417 pndMember.setMemberName(getMemberName(member.getType(), member.getMemberId())); 418 pndMember.setEdit(true); 419 pndMember.setQualifiers(loadDelegationMemberQualifiers(identityManagementPersonDocument, pndMember.getAttributesHelper().getDefinitions(), member.getAttributeDetails())); 420 pndMembers.add(pndMember); 421 } 422 } 423 } 424 return pndMembers; 425 } 426 427 protected List<RoleDocumentDelegationMemberQualifier> loadDelegationMemberQualifiers(IdentityManagementPersonDocument identityManagementPersonDocument, 428 List<KimAttributeField> origAttributeDefinitions, List<DelegateMemberAttributeDataBo> attributeDataList){ 429 List<RoleDocumentDelegationMemberQualifier> pndMemberRoleQualifiers = new ArrayList<RoleDocumentDelegationMemberQualifier>(); 430 RoleDocumentDelegationMemberQualifier pndMemberRoleQualifier; 431 boolean attributePresent = false; 432 String origAttributeId; 433 if(origAttributeDefinitions!=null){ 434 for(KimAttributeField key: origAttributeDefinitions) { 435 origAttributeId = identityManagementPersonDocument.getKimAttributeDefnId(key); 436 if(ObjectUtils.isNotNull(attributeDataList)){ 437 for(DelegateMemberAttributeDataBo memberRoleQualifier: attributeDataList){ 438 if(StringUtils.equals(origAttributeId, memberRoleQualifier.getKimAttribute().getId())){ 439 pndMemberRoleQualifier = new RoleDocumentDelegationMemberQualifier(); 440 pndMemberRoleQualifier.setAttrDataId(memberRoleQualifier.getId()); 441 pndMemberRoleQualifier.setAttrVal(memberRoleQualifier.getAttributeValue()); 442 pndMemberRoleQualifier.setDelegationMemberId(memberRoleQualifier.getAssignedToId()); 443 pndMemberRoleQualifier.setKimTypId(memberRoleQualifier.getKimTypeId()); 444 pndMemberRoleQualifier.setKimAttrDefnId(memberRoleQualifier.getKimAttributeId()); 445 pndMemberRoleQualifier.setKimAttribute(memberRoleQualifier.getKimAttribute()); 446 pndMemberRoleQualifiers.add(pndMemberRoleQualifier); 447 attributePresent = true; 448 } 449 } 450 } 451 if(!attributePresent){ 452 pndMemberRoleQualifier = new RoleDocumentDelegationMemberQualifier(); 453 pndMemberRoleQualifier.setKimAttrDefnId(origAttributeId); 454 pndMemberRoleQualifiers.add(pndMemberRoleQualifier); 455 } 456 attributePresent = false; 457 } 458 } 459 return pndMemberRoleQualifiers; 460 } 461 462 /** 463 * 464 * This method load related group data to pending document when usert initiate the 'edit'. 465 * 466 * @param identityManagementPersonDocument 467 * @param groups 468 */ 469 protected void loadGroupToPersonDoc(IdentityManagementPersonDocument identityManagementPersonDocument, List<? extends Group> groups) { 470 List <PersonDocumentGroup> docGroups = new ArrayList <PersonDocumentGroup>(); 471 if(ObjectUtils.isNotNull(groups)){ 472 List<String> directMemberPrincipalIds; 473 Collection<GroupMember> groupMemberships; 474 for (Group group: groups) { 475 directMemberPrincipalIds = getGroupService().getDirectMemberPrincipalIds(group.getId()); 476 if(ObjectUtils.isNotNull(directMemberPrincipalIds)){ 477 directMemberPrincipalIds = new ArrayList<String>(new HashSet<String>(directMemberPrincipalIds)); 478 for (String memberId: directMemberPrincipalIds) { 479 // other more direct methods for this ? 480 // can't cast group to 'GroupImpl' because list is GroupInfo type 481 if (StringUtils.equals(memberId, identityManagementPersonDocument.getPrincipalId())) { 482 List<String> groupIds = new ArrayList<String>(); 483 groupIds.add(group.getId()); 484 groupMemberships = getGroupService().getMembers(groupIds); 485 if(ObjectUtils.isNotNull(groupMemberships)){ 486 for (GroupMember groupMember: groupMemberships) { 487 if (groupMember.isActive(new DateTime(System.currentTimeMillis())) && StringUtils.equals(groupMember.getMemberId(), identityManagementPersonDocument.getPrincipalId()) && 488 KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.equals(groupMember.getType())) { 489 // create one PersonDocumentGroup per GroupMembershipInfo ** 490 PersonDocumentGroup docGroup = new PersonDocumentGroup(); 491 docGroup.setGroupId(group.getId()); 492 docGroup.setGroupName(group.getName()); 493 docGroup.setNamespaceCode(group.getNamespaceCode()); 494 docGroup.setPrincipalId(memberId); 495 docGroup.setGroupMemberId(groupMember.getId()); 496 if (groupMember.getActiveFromDate() != null) { 497 docGroup.setActiveFromDate(groupMember.getActiveFromDate() == null ? null : new Timestamp(groupMember.getActiveFromDate().getMillis())); 498 } 499 if (groupMember.getActiveToDate() != null) { 500 docGroup.setActiveToDate(groupMember.getActiveToDate() == null ? null : new Timestamp(groupMember.getActiveToDate().getMillis())); 501 } 502 docGroup.setEdit(true); 503 docGroups.add(docGroup); 504 } 505 } 506 } 507 } 508 } 509 } 510 } 511 } 512 identityManagementPersonDocument.setGroups(docGroups); 513 } 514 515 protected void loadRoleToPersonDoc(IdentityManagementPersonDocument identityManagementPersonDocument) { 516 List <PersonDocumentRole> docRoles = new ArrayList <PersonDocumentRole>(); 517 List<RoleBo> roles = getRolesForPrincipal(identityManagementPersonDocument.getPrincipalId()); 518 List<String> roleIds = new ArrayList<String>(); 519 if(ObjectUtils.isNotNull(roles)){ 520 for (RoleBo role : roles) { 521 if (!roleIds.contains(role.getId())) { 522 PersonDocumentRole docRole = new PersonDocumentRole(); 523 docRole.setKimTypeId(role.getKimTypeId()); 524 docRole.setActive(role.isActive()); 525 docRole.setNamespaceCode(role.getNamespaceCode()); 526 docRole.setEdit(true); 527 docRole.setRoleId(role.getId()); 528 docRole.setRoleName(role.getName()); 529 docRole.setRolePrncpls(populateDocRolePrncpl(role.getNamespaceCode(), role.getMembers(), identityManagementPersonDocument.getPrincipalId(), getAttributeDefinitionsForRole(docRole))); 530 docRole.refreshReferenceObject("assignedResponsibilities"); 531 if(docRole.getRolePrncpls()!=null && !docRole.getRolePrncpls().isEmpty()){ 532 docRoles.add(docRole); 533 roleIds.add(role.getId()); 534 } 535 } 536 } 537 } 538 for (PersonDocumentRole role : docRoles) { 539 role.setDefinitions(getAttributeDefinitionsForRole(role)); 540 // when post again, it will need this during populate 541 role.setNewRolePrncpl(new KimDocumentRoleMember()); 542 if(role.getDefinitions()!=null){ 543 for (KimAttributeField key : role.getDefinitions()) { 544 KimDocumentRoleQualifier qualifier = new KimDocumentRoleQualifier(); 545 //qualifier.setQualifierKey(key); 546 setAttrDefnIdForQualifier(qualifier,key); 547 role.getNewRolePrncpl().getQualifiers().add(qualifier); 548 } 549 } 550 loadRoleRstAction(role); 551 role.setAttributeEntry( getAttributeEntries( role.getDefinitions() ) ); 552 } 553 // 554 555 identityManagementPersonDocument.setRoles(docRoles); 556 } 557 558 protected List<KimAttributeField> getAttributeDefinitionsForRole(PersonDocumentRole role) { 559 KimTypeService kimTypeService = KimFrameworkServiceLocator.getKimTypeService(KimTypeBo.to( 560 role.getKimRoleType())); 561 //it is possible that the the kimTypeService is coming from a remote application 562 // and therefore it can't be guarenteed that it is up and working, so using a try/catch to catch this possibility. 563 try { 564 if ( kimTypeService != null ) { 565 return kimTypeService.getAttributeDefinitions(role.getKimTypeId()); 566 } 567 } catch (Exception ex) { 568 LOG.warn("Not able to retrieve KimTypeService from remote system for KIM Role Type: " + role.getKimRoleType(), ex); 569 } 570 return Collections.emptyList(); 571 } 572 573 protected void loadRoleRstAction(PersonDocumentRole role) { 574 if(role!=null && CollectionUtils.isNotEmpty(role.getRolePrncpls())){ 575 for (KimDocumentRoleMember roleMbr : role.getRolePrncpls()) { 576 List<RoleResponsibilityActionBo> actions = getRoleRspActions( roleMbr.getRoleMemberId()); 577 if(ObjectUtils.isNotNull(actions)){ 578 for (RoleResponsibilityActionBo entRoleRspAction :actions) { 579 KimDocumentRoleResponsibilityAction roleRspAction = new KimDocumentRoleResponsibilityAction(); 580 roleRspAction.setRoleResponsibilityId(entRoleRspAction.getRoleResponsibilityId()); 581 roleRspAction.setActionTypeCode(entRoleRspAction.getActionTypeCode()); 582 roleRspAction.setActionPolicyCode(entRoleRspAction.getActionPolicyCode()); 583 roleRspAction.setPriorityNumber(entRoleRspAction.getPriorityNumber()); 584 roleRspAction.setRoleResponsibilityActionId(entRoleRspAction.getId()); 585 roleRspAction.refreshReferenceObject("roleResponsibility"); 586 roleMbr.getRoleRspActions().add(roleRspAction); 587 } 588 } 589 } 590 } 591 } 592 593 protected void setAttrDefnIdForQualifier(KimDocumentRoleQualifier qualifier, KimAttributeField definition) { 594 qualifier.setKimAttrDefnId(getAttributeDefnId(definition)); 595 qualifier.refreshReferenceObject("kimAttribute"); 596 } 597 598 protected String getAttributeDefnId(KimAttributeField definition) { 599 return definition.getId(); 600 } 601 602 private PrincipalBo getPrincipalImpl(String principalId) { 603 Map<String,String> criteria = new HashMap<String,String>(1); 604 criteria.put(KIMPropertyConstants.Principal.PRINCIPAL_ID, principalId); 605 return (PrincipalBo)getBusinessObjectService().findByPrimaryKey(PrincipalBo.class, criteria); 606 } 607 608 public List<EntityEmployment> getEntityEmploymentInformationInfo(String entityId) { 609 EntityBo entityImpl = getEntityBo(entityId); 610 List<EntityEmployment> empInfos = new ArrayList<EntityEmployment>(); 611 EntityEmployment empInfo; 612 if(ObjectUtils.isNotNull(entityImpl) && CollectionUtils.isNotEmpty(entityImpl.getEmploymentInformation())){ 613 for(EntityEmploymentBo empImpl: entityImpl.getEmploymentInformation()){ 614 empInfos.add(EntityEmploymentBo.to(empImpl)); 615 } 616 } 617 return empInfos; 618 } 619 620 private EntityBo getEntityBo(String entityId) { 621 EntityBo entityImpl = getBusinessObjectService().findBySinglePrimaryKey(EntityBo.class, entityId); 622 //TODO - remove this hack... This is here because currently jpa only seems to be going 2 levels deep on the eager fetching. 623 if(entityImpl!=null && entityImpl.getEntityTypeContactInfos() != null) { 624 for (EntityTypeContactInfoBo et : entityImpl.getEntityTypeContactInfos()) { 625 et.refresh(); 626 } 627 } 628 return entityImpl; 629 } 630 631 @SuppressWarnings("unchecked") 632 protected List<RoleBo> getRolesForPrincipal(String principalId) { 633 if ( principalId == null ) { 634 return new ArrayList<RoleBo>(); 635 } 636 Map<String,String> criteria = new HashMap<String,String>( 2 ); 637 criteria.put("members.memberId", principalId); 638 criteria.put("members.typeCode", MemberType.PRINCIPAL.getCode()); 639 return (List<RoleBo>)getBusinessObjectService().findMatching(RoleBo.class, criteria); 640 } 641 642 @SuppressWarnings("unchecked") 643 protected List<RoleMemberBo> getRoleMembersForPrincipal(String principalId) { 644 if ( principalId == null ) { 645 return new ArrayList<RoleMemberBo>(); 646 } 647 Map<String,String> criteria = new HashMap<String,String>( 2 ); 648 criteria.put("memberId", principalId); 649 criteria.put("typeCode", MemberType.PRINCIPAL.getCode()); 650 return (List<RoleMemberBo>)getBusinessObjectService().findMatching(RoleMemberBo.class, criteria); 651 } 652 653 public RoleMemberBo getRoleMember(String roleMemberId) { 654 if ( roleMemberId == null ) { 655 return null; 656 } 657 Map<String,String> criteria = new HashMap<String,String>( 2 ); 658 criteria.put("roleMemberId", roleMemberId); 659 return getBusinessObjectService().findByPrimaryKey(RoleMemberBo.class, criteria); 660 } 661 662 @SuppressWarnings("unchecked") 663 protected List<RoleResponsibilityActionBo> getRoleRspActions(String roleMemberId) { 664 Map<String,String> criteria = new HashMap<String,String>( 1 ); 665 criteria.put(KIMPropertyConstants.RoleMember.ROLE_MEMBER_ID, roleMemberId); 666 return (List<RoleResponsibilityActionBo>)getBusinessObjectService().findMatching(RoleResponsibilityActionBo.class, criteria); 667 } 668 669 protected List<KimDocumentRoleMember> populateDocRolePrncpl(String namespaceCode, List <RoleMemberBo> roleMembers, String principalId, List<KimAttributeField> definitions) { 670 List <KimDocumentRoleMember> docRoleMembers = new ArrayList <KimDocumentRoleMember>(); 671 if(ObjectUtils.isNotNull(roleMembers)){ 672 for (RoleMemberBo rolePrincipal : roleMembers) { 673 if (rolePrincipal.isActive(new Timestamp(System.currentTimeMillis())) && MemberType.PRINCIPAL.equals( 674 rolePrincipal.getType()) && 675 StringUtils.equals(rolePrincipal.getMemberId(), principalId)) { 676 KimDocumentRoleMember docRolePrncpl = new KimDocumentRoleMember(); 677 docRolePrncpl.setMemberId(rolePrincipal.getMemberId()); 678 docRolePrncpl.setRoleMemberId(rolePrincipal.getId()); 679 docRolePrncpl.setActive(rolePrincipal.isActive(new Timestamp(System.currentTimeMillis()))); 680 docRolePrncpl.setRoleId(rolePrincipal.getRoleId()); 681 docRolePrncpl.setActiveFromDate(rolePrincipal.getActiveFromDateValue()); 682 docRolePrncpl.setActiveToDate(rolePrincipal.getActiveToDateValue()); 683 docRolePrncpl.setQualifiers(populateDocRoleQualifier(namespaceCode, rolePrincipal.getAttributeDetails(), definitions)); 684 docRolePrncpl.setEdit(true); 685 docRoleMembers.add(docRolePrncpl); 686 } 687 } 688 } 689 return docRoleMembers; 690 } 691 692 // UI layout for rolequalifier is a little different from kimroleattribute set up. 693 // each principal may have member with same role multiple times with different qualifier, but the role 694 // only displayed once, and the qualifier displayed multiple times. 695 protected List<KimDocumentRoleQualifier> populateDocRoleQualifier(String namespaceCode, List <RoleMemberAttributeDataBo> qualifiers, List<KimAttributeField> definitions) { 696 697 List <KimDocumentRoleQualifier> docRoleQualifiers = new ArrayList <KimDocumentRoleQualifier>(); 698 if(definitions!=null){ 699 for (KimAttributeField definition : definitions) { 700 String attrDefId=definition.getId(); 701 boolean qualifierFound = false; 702 if(ObjectUtils.isNotNull(qualifiers)){ 703 for (RoleMemberAttributeDataBo qualifier : qualifiers) { 704 if (attrDefId!=null && StringUtils.equals(attrDefId, qualifier.getKimAttributeId())) { 705 KimDocumentRoleQualifier docRoleQualifier = new KimDocumentRoleQualifier(); 706 docRoleQualifier.setAttrDataId(qualifier.getId()); 707 docRoleQualifier.setAttrVal(qualifier.getAttributeValue()); 708 docRoleQualifier.setKimAttrDefnId(qualifier.getKimAttributeId()); 709 docRoleQualifier.setKimAttribute(qualifier.getKimAttribute()); 710 docRoleQualifier.setKimTypId(qualifier.getKimTypeId()); 711 docRoleQualifier.setRoleMemberId(qualifier.getAssignedToId()); 712 docRoleQualifier.setEdit(true); 713 formatAttrValIfNecessary(docRoleQualifier); 714 docRoleQualifiers.add(docRoleQualifier); 715 qualifierFound = true; 716 break; 717 } 718 } 719 } 720 if (!qualifierFound) { 721 KimDocumentRoleQualifier docRoleQualifier = new KimDocumentRoleQualifier(); 722 docRoleQualifier.setAttrVal(""); 723 docRoleQualifier.setKimAttrDefnId(attrDefId); 724 docRoleQualifier.refreshReferenceObject("kimAttribute"); 725 docRoleQualifiers.add(docRoleQualifier); 726 } 727 } 728 // If all of the qualifiers are empty, return an empty list 729 // This is to prevent dynamic qualifiers from appearing in the 730 // person maintenance roles tab. see KULRICE-3989 for more detail 731 // and KULRICE-5071 for detail on switching from config value to 732 // application-scoped parameter 733 if (!isBlankRoleQualifierVisible(namespaceCode)) { 734 int qualCount = 0; 735 for (KimDocumentRoleQualifier qual : docRoleQualifiers){ 736 if (StringUtils.isEmpty(qual.getAttrVal())){ 737 qualCount++; 738 } 739 } 740 if (qualCount == docRoleQualifiers.size()){ 741 return new ArrayList <KimDocumentRoleQualifier>(); 742 } 743 } 744 } 745 return docRoleQualifiers; 746 } 747 748 protected List<PersonDocumentName> loadNames( IdentityManagementPersonDocument personDoc, String principalId, List <EntityName> names, boolean suppressDisplay ) { 749 List<PersonDocumentName> docNames = new ArrayList<PersonDocumentName>(); 750 if(ObjectUtils.isNotNull(names)){ 751 for (EntityName name: names) { 752 if(name.isActive()){ 753 PersonDocumentName docName = new PersonDocumentName(); 754 if (name.getNameType() != null) { 755 docName.setNameCode(name.getNameType().getCode()); 756 } 757 758 //We do not need to check the privacy setting here - The UI should care of it 759 docName.setFirstName(name.getFirstNameUnmasked()); 760 docName.setLastName(name.getLastNameUnmasked()); 761 docName.setMiddleName(name.getMiddleNameUnmasked()); 762 docName.setNamePrefix(name.getNamePrefixUnmasked()); 763 docName.setNameSuffix(name.getNameSuffixUnmasked()); 764 765 docName.setActive(name.isActive()); 766 docName.setDflt(name.isDefaultValue()); 767 docName.setEdit(true); 768 docName.setEntityNameId(name.getId()); 769 docNames.add(docName); 770 } 771 } 772 } 773 return docNames; 774 } 775 776 public boolean canModifyEntity( String currentUserPrincipalId, String toModifyPrincipalId ){ 777 return (StringUtils.isNotBlank(currentUserPrincipalId) && StringUtils.isNotBlank(toModifyPrincipalId) && 778 currentUserPrincipalId.equals(toModifyPrincipalId)) || 779 getPermissionService().isAuthorized( 780 currentUserPrincipalId, 781 KimConstants.NAMESPACE_CODE, 782 KimConstants.PermissionNames.MODIFY_ENTITY, 783 Collections.<String, String>emptyMap(), 784 Collections.singletonMap(KimConstants.AttributeConstants.PRINCIPAL_ID, currentUserPrincipalId)); 785 } 786 787 public boolean canOverrideEntityPrivacyPreferences( String currentUserPrincipalId, String toModifyPrincipalId ){ 788 return (StringUtils.isNotBlank(currentUserPrincipalId) && StringUtils.isNotBlank(toModifyPrincipalId) && 789 currentUserPrincipalId.equals(toModifyPrincipalId)) || 790 getPermissionService().isAuthorized( 791 currentUserPrincipalId, 792 KimConstants.NAMESPACE_CODE, 793 KimConstants.PermissionNames.OVERRIDE_ENTITY_PRIVACY_PREFERENCES, 794 Collections.<String, String>emptyMap(), 795 Collections.singletonMap(KimConstants.AttributeConstants.PRINCIPAL_ID, currentUserPrincipalId) ); 796 } 797 798 protected boolean canAssignToRole(IdentityManagementRoleDocument document, String initiatorPrincipalId){ 799 boolean rulePassed = true; 800 Map<String,String> additionalPermissionDetails = new HashMap<String,String>(); 801 additionalPermissionDetails.put(KimConstants.AttributeConstants.NAMESPACE_CODE, document.getRoleNamespace()); 802 additionalPermissionDetails.put(KimConstants.AttributeConstants.ROLE_NAME, document.getRoleName()); 803 if(!getDocumentHelperService().getDocumentAuthorizer(document).isAuthorizedByTemplate( 804 document, KimConstants.NAMESPACE_CODE, KimConstants.PermissionTemplateNames.ASSIGN_ROLE, 805 initiatorPrincipalId, additionalPermissionDetails, null)){ 806 rulePassed = false; 807 } 808 return rulePassed; 809 } 810 811 protected List<PersonDocumentAffiliation> loadAffiliations(List <EntityAffiliation> affiliations, List<EntityEmployment> empInfos) { 812 List<PersonDocumentAffiliation> docAffiliations = new ArrayList<PersonDocumentAffiliation>(); 813 if(ObjectUtils.isNotNull(affiliations)){ 814 for (EntityAffiliation affiliation: affiliations) { 815 if(affiliation.isActive()){ 816 PersonDocumentAffiliation docAffiliation = new PersonDocumentAffiliation(); 817 docAffiliation.setAffiliationTypeCode(affiliation.getAffiliationType().getCode()); 818 docAffiliation.setCampusCode(affiliation.getCampusCode()); 819 docAffiliation.setActive(affiliation.isActive()); 820 docAffiliation.setDflt(affiliation.isDefaultValue()); 821 docAffiliation.setEntityAffiliationId(affiliation.getId()); 822 docAffiliation.refreshReferenceObject("affiliationType"); 823 // EntityAffiliationImpl does not define empinfos as collection 824 docAffiliations.add(docAffiliation); 825 docAffiliation.setEdit(true); 826 // employment informations 827 List<PersonDocumentEmploymentInfo> docEmploymentInformations = new ArrayList<PersonDocumentEmploymentInfo>(); 828 if(ObjectUtils.isNotNull(empInfos)){ 829 for (EntityEmployment empInfo: empInfos) { 830 if (empInfo.isActive() 831 && StringUtils.equals(docAffiliation.getEntityAffiliationId(), 832 (empInfo.getEntityAffiliation() != null ? empInfo.getEntityAffiliation().getId() : null))) { 833 PersonDocumentEmploymentInfo docEmpInfo = new PersonDocumentEmploymentInfo(); 834 docEmpInfo.setEntityEmploymentId(empInfo.getEmployeeId()); 835 docEmpInfo.setEmployeeId(empInfo.getEmployeeId()); 836 docEmpInfo.setEmploymentRecordId(empInfo.getEmploymentRecordId()); 837 docEmpInfo.setBaseSalaryAmount(empInfo.getBaseSalaryAmount()); 838 docEmpInfo.setPrimaryDepartmentCode(empInfo.getPrimaryDepartmentCode()); 839 docEmpInfo.setEmploymentStatusCode(empInfo.getEmployeeStatus() != null ? empInfo.getEmployeeStatus().getCode() : null); 840 docEmpInfo.setEmploymentTypeCode(empInfo.getEmployeeType() != null ? empInfo.getEmployeeType().getCode() : null); 841 docEmpInfo.setActive(empInfo.isActive()); 842 docEmpInfo.setPrimary(empInfo.isPrimary()); 843 docEmpInfo.setEntityAffiliationId(empInfo.getEntityAffiliation() != null ? empInfo.getEntityAffiliation().getId() : null); 844 // there is no version number on KimEntityEmploymentInformationInfo 845 //docEmpInfo.setVersionNumber(empInfo.getVersionNumber()); 846 docEmpInfo.setEdit(true); 847 docEmpInfo.refreshReferenceObject("employmentType"); 848 docEmploymentInformations.add(docEmpInfo); 849 } 850 } 851 } 852 docAffiliation.setEmpInfos(docEmploymentInformations); 853 } 854 } 855 } 856 return docAffiliations; 857 858 } 859 860 protected boolean setupPrincipal(IdentityManagementPersonDocument identityManagementPersonDocument, EntityBo kimEntity, List<PrincipalBo> origPrincipals) { 861 boolean inactivatingPrincipal = false; 862 List<PrincipalBo> principals = new ArrayList<PrincipalBo>(); 863 Principal.Builder principal = Principal.Builder.create(identityManagementPersonDocument.getPrincipalName()); 864 principal.setPrincipalId(identityManagementPersonDocument.getPrincipalId()); 865 principal.setPassword(identityManagementPersonDocument.getPassword()); 866 principal.setActive(identityManagementPersonDocument.isActive()); 867 principal.setEntityId(identityManagementPersonDocument.getEntityId()); 868 if(ObjectUtils.isNotNull(origPrincipals)){ 869 for (PrincipalBo prncpl : origPrincipals) { 870 if (prncpl.getPrincipalId()!=null && StringUtils.equals(prncpl.getPrincipalId(), principal.getPrincipalId())) { 871 principal.setVersionNumber(prncpl.getVersionNumber()); 872 principal.setObjectId(prncpl.getObjectId()); 873 // check if inactivating the principal 874 if ( prncpl.isActive() && !principal.isActive() ) { 875 inactivatingPrincipal = true; 876 } 877 } 878 } 879 } 880 principals.add(PrincipalBo.from(principal.build())); 881 882 kimEntity.setPrincipals(principals); 883 return inactivatingPrincipal; 884 } 885 886 protected void setupPrivacy(IdentityManagementPersonDocument identityManagementPersonDocument, EntityBo kimEntity, EntityPrivacyPreferencesBo origPrivacy) { 887 EntityPrivacyPreferencesBo privacyPreferences = new EntityPrivacyPreferencesBo(); 888 privacyPreferences.setEntityId(identityManagementPersonDocument.getEntityId()); 889 privacyPreferences.setSuppressAddress(identityManagementPersonDocument.getPrivacy().isSuppressAddress()); 890 privacyPreferences.setSuppressEmail(identityManagementPersonDocument.getPrivacy().isSuppressEmail()); 891 privacyPreferences.setSuppressName(identityManagementPersonDocument.getPrivacy().isSuppressName()); 892 privacyPreferences.setSuppressPhone(identityManagementPersonDocument.getPrivacy().isSuppressPhone()); 893 privacyPreferences.setSuppressPersonal(identityManagementPersonDocument.getPrivacy().isSuppressPersonal()); 894 if (ObjectUtils.isNotNull(origPrivacy)) { 895 privacyPreferences.setVersionNumber(origPrivacy.getVersionNumber()); 896 privacyPreferences.setObjectId(origPrivacy.getObjectId()); 897 } 898 kimEntity.setPrivacyPreferences(privacyPreferences); 899 } 900 protected PersonDocumentPrivacy loadPrivacyReferences(EntityPrivacyPreferences privacyPreferences) { 901 PersonDocumentPrivacy docPrivacy = new PersonDocumentPrivacy(); 902 docPrivacy.setSuppressAddress(privacyPreferences.isSuppressAddress()); 903 docPrivacy.setSuppressEmail(privacyPreferences.isSuppressEmail()); 904 docPrivacy.setSuppressName(privacyPreferences.isSuppressName()); 905 docPrivacy.setSuppressPhone(privacyPreferences.isSuppressPhone()); 906 docPrivacy.setSuppressPersonal(privacyPreferences.isSuppressPersonal()); 907 docPrivacy.setEdit(true); 908 return docPrivacy; 909 } 910 911 protected void setupName(IdentityManagementPersonDocument identityManagementPersonDocument, EntityBo kimEntity, List<EntityNameBo> origNames) { 912 if ( !identityManagementPersonDocument.getPrivacy().isSuppressName() || 913 canOverrideEntityPrivacyPreferences( getInitiatorPrincipalId(identityManagementPersonDocument), identityManagementPersonDocument.getPrincipalId() ) ) { 914 List<EntityNameBo> entityNames = new ArrayList<EntityNameBo>(); 915 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getNames())){ 916 for (PersonDocumentName name : identityManagementPersonDocument.getNames()) { 917 EntityNameBo entityName = new EntityNameBo(); 918 entityName.setNameCode(name.getNameCode()); 919 if (name.getEntityNameType() != null) { 920 entityName.setNameType(name.getEntityNameType()); 921 } else { 922 if (StringUtils.isNotEmpty(name.getNameCode())) { 923 entityName.setNameType( 924 EntityNameTypeBo.from(getIdentityService().getNameType(name.getNameCode()))); 925 } 926 } 927 entityName.setFirstName(name.getFirstName()); 928 entityName.setLastName(name.getLastName()); 929 entityName.setMiddleName(name.getMiddleName()); 930 entityName.setNamePrefix(name.getNamePrefix()); 931 entityName.setNameSuffix(name.getNameSuffix()); 932 entityName.setActive(name.isActive()); 933 entityName.setDefaultValue(name.isDflt()); 934 entityName.setId(name.getEntityNameId()); 935 entityName.setEntityId(identityManagementPersonDocument.getEntityId()); 936 if(ObjectUtils.isNotNull(origNames)){ 937 for (EntityNameBo origName : origNames) { 938 if (origName.getId()!=null && StringUtils.equals(origName.getId(), entityName.getId())) { 939 entityName.setVersionNumber(origName.getVersionNumber()); 940 } 941 942 } 943 } 944 entityNames.add(entityName); 945 } 946 } 947 kimEntity.setNames(entityNames); 948 } 949 } 950 951 protected void setupAffiliation(IdentityManagementPersonDocument identityManagementPersonDocument, EntityBo kimEntity,List<EntityAffiliationBo> origAffiliations, List<EntityEmploymentBo> origEmpInfos) { 952 List<EntityAffiliationBo> entityAffiliations = new ArrayList<EntityAffiliationBo>(); 953 // employment informations 954 List<EntityEmploymentBo> entityEmploymentInformations = new ArrayList<EntityEmploymentBo>(); 955 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getAffiliations())){ 956 for (PersonDocumentAffiliation affiliation : identityManagementPersonDocument.getAffiliations()) { 957 EntityAffiliationBo entityAffiliation = new EntityAffiliationBo(); 958 entityAffiliation.setAffiliationTypeCode(affiliation.getAffiliationTypeCode()); 959 if (affiliation.getAffiliationType() != null) { 960 entityAffiliation.setAffiliationType(affiliation.getAffiliationType()); 961 } else { 962 if (StringUtils.isNotEmpty(affiliation.getAffiliationTypeCode())) { 963 entityAffiliation.setAffiliationType(EntityAffiliationTypeBo.from(getIdentityService().getAffiliationType( 964 affiliation.getAffiliationTypeCode()))); 965 } 966 } 967 entityAffiliation.setCampusCode(affiliation.getCampusCode()); 968 entityAffiliation.setActive(affiliation.isActive()); 969 entityAffiliation.setDefaultValue(affiliation.isDflt()); 970 entityAffiliation.setEntityId(identityManagementPersonDocument.getEntityId()); 971 entityAffiliation.setId(affiliation.getEntityAffiliationId()); 972 if(ObjectUtils.isNotNull(origAffiliations)){ 973 // EntityAffiliationImpl does not define empinfos as collection 974 for (EntityAffiliationBo origAffiliation : origAffiliations) { 975 if(isSameAffiliation(origAffiliation, entityAffiliation)){ 976 entityAffiliation.setId(origAffiliation.getId()); 977 } 978 if (origAffiliation.getId()!=null && StringUtils.equals(origAffiliation.getId(), entityAffiliation.getId())) { 979 entityAffiliation.setVersionNumber(origAffiliation.getVersionNumber()); 980 } 981 } 982 } 983 entityAffiliations.add(entityAffiliation); 984 int employeeRecordCounter = origEmpInfos==null?0:origEmpInfos.size(); 985 if(CollectionUtils.isNotEmpty(affiliation.getEmpInfos())){ 986 for (PersonDocumentEmploymentInfo empInfo : affiliation.getEmpInfos()) { 987 EntityEmploymentBo entityEmpInfo = new EntityEmploymentBo(); 988 entityEmpInfo.setId(empInfo.getEntityEmploymentId()); 989 entityEmpInfo.setEmployeeId(empInfo.getEmployeeId()); 990 entityEmpInfo.setEmploymentRecordId(empInfo.getEmploymentRecordId()); 991 entityEmpInfo.setBaseSalaryAmount(empInfo.getBaseSalaryAmount()); 992 entityEmpInfo.setPrimaryDepartmentCode(empInfo.getPrimaryDepartmentCode()); 993 entityEmpInfo.setEmployeeStatusCode(empInfo.getEmploymentStatusCode()); 994 if (empInfo.getEmploymentStatus() != null) { 995 entityEmpInfo.setEmployeeStatus(empInfo.getEmploymentStatus()); 996 } else { 997 if (StringUtils.isNotEmpty(empInfo.getEmploymentStatusCode())) { 998 entityEmpInfo.setEmployeeStatus(EntityEmploymentStatusBo 999 .from(getIdentityService().getEmploymentStatus(empInfo.getEmploymentStatusCode()))); 1000 } 1001 } 1002 entityEmpInfo.setEmployeeTypeCode(empInfo.getEmploymentTypeCode()); 1003 if (empInfo.getEmploymentType() != null) { 1004 entityEmpInfo.setEmployeeType(empInfo.getEmploymentType()); 1005 } else { 1006 if (StringUtils.isNotEmpty(empInfo.getEmploymentTypeCode())) { 1007 entityEmpInfo.setEmployeeType(EntityEmploymentTypeBo 1008 .from(getIdentityService().getEmploymentType(empInfo.getEmploymentTypeCode()))); 1009 } 1010 } 1011 entityEmpInfo.setActive(empInfo.isActive()); 1012 entityEmpInfo.setPrimary(empInfo.isPrimary()); 1013 entityEmpInfo.setEntityId(identityManagementPersonDocument.getEntityId()); 1014 entityEmpInfo.setEntityAffiliationId(empInfo.getEntityAffiliationId()); 1015 if(ObjectUtils.isNotNull(origEmpInfos)){ 1016 for (EntityEmploymentBo origEmpInfo : origEmpInfos) { 1017 if(isSameEmpInfo(origEmpInfo, entityEmpInfo)){ 1018 entityEmpInfo.setId(entityEmpInfo.getEntityId()); 1019 } 1020 1021 if (origEmpInfo.getId()!=null && StringUtils.equals(origEmpInfo.getId(), entityEmpInfo.getId())) { 1022 entityEmpInfo.setVersionNumber(origEmpInfo.getVersionNumber()); 1023 entityEmpInfo.setEmploymentRecordId(empInfo.getEmploymentRecordId()); 1024 } 1025 } 1026 } 1027 if(StringUtils.isEmpty(entityEmpInfo.getEmploymentRecordId())){ 1028 employeeRecordCounter++; 1029 entityEmpInfo.setEmploymentRecordId(employeeRecordCounter+""); 1030 } 1031 entityEmploymentInformations.add(entityEmpInfo); 1032 } 1033 } 1034 } 1035 } 1036 kimEntity.setEmploymentInformation(entityEmploymentInformations); 1037 kimEntity.setAffiliations(entityAffiliations); 1038 } 1039 1040 /* 1041 * Added to address KULRICE-5071 : "Move the 'show blank qualifier' kim toggle from a Config param to a System param" 1042 * 1043 * This method first checks for a namespace specific parameter with a detailTypeCode of "All" and parameterName of "KIM_SHOW_BLANK_QUALIFIERS". 1044 * If no parameter is found, it checks for the config property "kim.show.blank.qualifiers", and defaults to true if no config property exists. 1045 * 1046 */ 1047 private boolean isBlankRoleQualifierVisible(String namespaceCode) { 1048 boolean showBlankQualifiers = true; 1049 1050 Parameter param = getParameterService().getParameter(namespaceCode, KRADConstants.DetailTypes.ALL_DETAIL_TYPE, KimConstants.ParameterKey.SHOW_BLANK_QUALIFIERS); 1051 if (param != null) { 1052 showBlankQualifiers = "Y".equals(param.getValue()); 1053 } else { 1054 String configProperty = ConfigContext.getCurrentContextConfig().getProperty(SHOW_BLANK_QUALIFIERS); 1055 if (configProperty != null) { 1056 showBlankQualifiers = Boolean.valueOf(configProperty); 1057 } 1058 } 1059 1060 return showBlankQualifiers; 1061 } 1062 1063 private boolean isSameAffiliation(EntityAffiliationBo origAffiliation, EntityAffiliationBo entityAffiliation){ 1064 //entityId 1065 //affiliationTypeCode 1066 //campusCode 1067 return (origAffiliation!=null && entityAffiliation!=null) && 1068 (StringUtils.isNotEmpty(origAffiliation.getCampusCode()) && StringUtils.equals(origAffiliation.getCampusCode(), entityAffiliation.getCampusCode())) 1069 && 1070 (StringUtils.isNotEmpty(origAffiliation.getAffiliationTypeCode()) && StringUtils.equals(origAffiliation.getAffiliationTypeCode(), entityAffiliation.getAffiliationTypeCode())) 1071 && 1072 (StringUtils.isNotEmpty(origAffiliation.getEntityId()) && StringUtils.equals(origAffiliation.getEntityId(), entityAffiliation.getEntityId())); 1073 } 1074 1075 private boolean isSameEmpInfo(EntityEmploymentBo origEmpInfo, EntityEmploymentBo entityEmpInfo){ 1076 //emp_info: 1077 //employmentRecordId 1078 //entityId 1079 //These should be unique - add a business rule 1080 return (origEmpInfo!=null && entityEmpInfo!=null) 1081 && (StringUtils.isNotEmpty(origEmpInfo.getEmploymentRecordId()) 1082 && StringUtils.equals(origEmpInfo.getEmploymentRecordId(), entityEmpInfo.getEmploymentRecordId() ) 1083 ) 1084 && StringUtils.equals( origEmpInfo.getEntityId(),entityEmpInfo.getEntityId()); 1085 } 1086 1087 protected void setupPhone(IdentityManagementPersonDocument identityManagementPersonDocument, EntityTypeContactInfoBo entityType, List<EntityPhoneBo> origPhones) { 1088 if ( !identityManagementPersonDocument.getPrivacy().isSuppressPhone() || canOverrideEntityPrivacyPreferences(getInitiatorPrincipalId(identityManagementPersonDocument), identityManagementPersonDocument.getPrincipalId()) ) { 1089 List<EntityPhoneBo> entityPhones = new ArrayList<EntityPhoneBo>(); 1090 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getPhones())){ 1091 for (PersonDocumentPhone phone : identityManagementPersonDocument.getPhones()) { 1092 EntityPhoneBo entityPhone = new EntityPhoneBo(); 1093 entityPhone.setPhoneTypeCode(phone.getPhoneTypeCode()); 1094 if (phone.getPhoneType() != null) { 1095 entityPhone.setPhoneType(phone.getPhoneType()); 1096 } else { 1097 if (StringUtils.isNotEmpty(phone.getPhoneTypeCode())) { 1098 entityPhone.setPhoneType(EntityPhoneTypeBo 1099 .from(getIdentityService().getAddressType(phone.getPhoneTypeCode()))); 1100 } 1101 } 1102 entityPhone.setEntityId(identityManagementPersonDocument.getEntityId()); 1103 entityPhone.setId(phone.getEntityPhoneId()); 1104 entityPhone.setEntityTypeCode(entityType.getEntityTypeCode()); 1105 entityPhone.setPhoneNumber(phone.getPhoneNumber()); 1106 entityPhone.setCountryCode(phone.getCountryCode()); 1107 entityPhone.setExtension(phone.getExtension()); 1108 entityPhone.setExtensionNumber(phone.getExtensionNumber()); 1109 entityPhone.setActive(phone.isActive()); 1110 entityPhone.setDefaultValue(phone.isDflt()); 1111 if(ObjectUtils.isNotNull(origPhones)){ 1112 for (EntityPhoneContract origPhone : origPhones) { 1113 if (origPhone.getId()!=null && StringUtils.equals(origPhone.getId(), entityPhone.getId())) { 1114 entityPhone.setVersionNumber(origPhone.getVersionNumber()); 1115 } 1116 } 1117 } 1118 entityPhone.setId(phone.getEntityPhoneId()); 1119 entityPhones.add(entityPhone); 1120 } 1121 } 1122 entityType.setPhoneNumbers(entityPhones); 1123 } 1124 } 1125 1126 protected List<PersonDocumentPhone> loadPhones(IdentityManagementPersonDocument identityManagementPersonDocument, String principalId, List<EntityPhone> entityPhones, boolean suppressDisplay ) { 1127 List<PersonDocumentPhone> docPhones = new ArrayList<PersonDocumentPhone>(); 1128 if(ObjectUtils.isNotNull(entityPhones)){ 1129 for (EntityPhone phone: entityPhones) { 1130 if(phone.isActive()){ 1131 PersonDocumentPhone docPhone = new PersonDocumentPhone(); 1132 if (phone.getPhoneType() != null) { 1133 docPhone.setPhoneTypeCode(phone.getPhoneType().getCode()); 1134 } 1135 //docPhone.setPhoneType(((KimEntityPhoneImpl)phone).getPhoneType()); 1136 docPhone.setEntityTypeCode(phone.getEntityTypeCode()); 1137 //We do not need to check the privacy setting here - The UI should care of it 1138 docPhone.setPhoneNumber(phone.getPhoneNumberUnmasked()); 1139 docPhone.setCountryCode(phone.getCountryCodeUnmasked()); 1140 docPhone.setExtensionNumber(phone.getExtensionNumberUnmasked()); 1141 1142 docPhone.setActive(phone.isActive()); 1143 docPhone.setDflt(phone.isDefaultValue()); 1144 docPhone.setEntityPhoneId(phone.getId()); 1145 docPhone.setEdit(true); 1146 docPhones.add(docPhone); 1147 } 1148 } 1149 } 1150 return docPhones; 1151 1152 } 1153 1154 protected void setupEmail( 1155 IdentityManagementPersonDocument identityManagementPersonDocument, 1156 EntityTypeContactInfoBo entityType, List<EntityEmailBo> origEmails) { 1157 if ( !identityManagementPersonDocument.getPrivacy().isSuppressEmail() || canOverrideEntityPrivacyPreferences(getInitiatorPrincipalId(identityManagementPersonDocument), identityManagementPersonDocument.getPrincipalId()) ) { 1158 List<EntityEmailBo> entityEmails = new ArrayList<EntityEmailBo>(); 1159 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getEmails())){ 1160 for (PersonDocumentEmail email : identityManagementPersonDocument.getEmails()) { 1161 EntityEmailBo entityEmail = new EntityEmailBo(); 1162 entityEmail.setEntityId(identityManagementPersonDocument.getEntityId()); 1163 entityEmail.setEntityTypeCode(entityType.getEntityTypeCode()); 1164 if (email.getEmailType() != null) { 1165 entityEmail.setEmailType(email.getEmailType()); 1166 } else { 1167 if (StringUtils.isNotEmpty(email.getEmailTypeCode())) { 1168 entityEmail.setEmailType( 1169 EntityEmailTypeBo.from(getIdentityService().getEmailType(email.getEmailTypeCode()))); 1170 } 1171 } 1172 entityEmail.setEmailTypeCode(email.getEmailTypeCode()); 1173 entityEmail.setEmailAddress(email.getEmailAddress()); 1174 entityEmail.setActive(email.isActive()); 1175 entityEmail.setDefaultValue(email.isDflt()); 1176 entityEmail.setId(email.getEntityEmailId()); 1177 if(ObjectUtils.isNotNull(origEmails)){ 1178 for (EntityEmailContract origEmail : origEmails) { 1179 if (origEmail.getId()!=null && StringUtils.equals(origEmail.getId(), entityEmail.getId())) { 1180 entityEmail.setVersionNumber(origEmail.getVersionNumber()); 1181 } 1182 } 1183 } 1184 entityEmails.add(entityEmail); 1185 } 1186 } 1187 entityType.setEmailAddresses(entityEmails); 1188 } 1189 } 1190 protected List<PersonDocumentEmail> loadEmails(IdentityManagementPersonDocument identityManagementPersonDocument, String principalId, List<EntityEmail> entityEmails, boolean suppressDisplay ) { 1191 List<PersonDocumentEmail> emails = new ArrayList<PersonDocumentEmail>(); 1192 if(ObjectUtils.isNotNull(entityEmails)){ 1193 for (EntityEmail email: entityEmails) { 1194 if(email.isActive()){ 1195 PersonDocumentEmail docEmail = new PersonDocumentEmail(); 1196 //docEmail.setEntityId(email.getEntityId()); 1197 docEmail.setEntityTypeCode(email.getEntityTypeCode()); 1198 if (email.getEmailType() != null) { 1199 docEmail.setEmailTypeCode(email.getEmailType().getCode()); 1200 } 1201 // EmailType not on info object. 1202 //docEmail.setEmailType(((KimEntityEmailImpl)email).getEmailType()); 1203 //We do not need to check the privacy setting here - The UI should care of it 1204 docEmail.setEmailAddress(email.getEmailAddressUnmasked()); 1205 1206 docEmail.setActive(email.isActive()); 1207 docEmail.setDflt(email.isDefaultValue()); 1208 docEmail.setEntityEmailId(email.getId()); 1209 docEmail.setEdit(true); 1210 emails.add(docEmail); 1211 } 1212 } 1213 } 1214 return emails; 1215 } 1216 1217 protected void setupAddress( 1218 IdentityManagementPersonDocument identityManagementPersonDocument, 1219 EntityTypeContactInfoBo entityType, List<EntityAddressBo> origAddresses) { 1220 if ( !identityManagementPersonDocument.getPrivacy().isSuppressAddress() || canOverrideEntityPrivacyPreferences(getInitiatorPrincipalId(identityManagementPersonDocument), identityManagementPersonDocument.getPrincipalId()) ) { 1221 List<EntityAddressBo> entityAddresses = new ArrayList<EntityAddressBo>(); 1222 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getAddrs())){ 1223 for (PersonDocumentAddress address : identityManagementPersonDocument.getAddrs()) { 1224 EntityAddressBo entityAddress = new EntityAddressBo(); 1225 entityAddress.setEntityId(identityManagementPersonDocument.getEntityId()); 1226 entityAddress.setEntityTypeCode(entityType.getEntityTypeCode()); 1227 entityAddress.setAddressTypeCode(address.getAddressTypeCode()); 1228 if (address.getAddressType() != null) { 1229 entityAddress.setAddressType(address.getAddressType()); 1230 } else { 1231 if (StringUtils.isNotEmpty(address.getAddressTypeCode())) { 1232 entityAddress.setAddressType(EntityAddressTypeBo.from( 1233 getIdentityService().getAddressType(address.getAddressTypeCode()))); 1234 } 1235 } 1236 entityAddress.setLine1(address.getLine1()); 1237 entityAddress.setLine2(address.getLine2()); 1238 entityAddress.setLine3(address.getLine3()); 1239 entityAddress.setStateProvinceCode(address.getStateProvinceCode()); 1240 entityAddress.setPostalCode(address.getPostalCode()); 1241 entityAddress.setCountryCode(address.getCountryCode()); 1242 entityAddress.setCity(address.getCity()); 1243 entityAddress.setActive(address.isActive()); 1244 entityAddress.setDefaultValue(address.isDflt()); 1245 entityAddress.setId(address.getEntityAddressId()); 1246 if(ObjectUtils.isNotNull(origAddresses)){ 1247 for (EntityAddressContract origAddress : origAddresses) { 1248 if (origAddress.getId()!=null && StringUtils.equals(origAddress.getId(), entityAddress.getId())) { 1249 entityAddress.setVersionNumber(origAddress.getVersionNumber()); 1250 } 1251 } 1252 } 1253 entityAddresses.add(entityAddress); 1254 } 1255 } 1256 entityType.setAddresses(entityAddresses); 1257 } 1258 } 1259 1260 protected List<PersonDocumentAddress> loadAddresses(IdentityManagementPersonDocument identityManagementPersonDocument, String principalId, List<EntityAddress> entityAddresses, boolean suppressDisplay ) { 1261 List<PersonDocumentAddress> docAddresses = new ArrayList<PersonDocumentAddress>(); 1262 if(ObjectUtils.isNotNull(entityAddresses)){ 1263 for (EntityAddress address: entityAddresses) { 1264 if(address.isActive()){ 1265 PersonDocumentAddress docAddress = new PersonDocumentAddress(); 1266 docAddress.setEntityTypeCode(address.getEntityTypeCode()); 1267 docAddress.setAddressTypeCode(address.getAddressType().getCode()); 1268 1269 //We do not need to check the privacy setting here - The UI should care of it 1270 docAddress.setLine1(address.getLine1Unmasked()); 1271 docAddress.setLine2(address.getLine2Unmasked()); 1272 docAddress.setLine3(address.getLine3Unmasked()); 1273 docAddress.setStateProvinceCode(address.getStateProvinceCodeUnmasked()); 1274 docAddress.setPostalCode(address.getPostalCodeUnmasked()); 1275 docAddress.setCountryCode(address.getCountryCodeUnmasked()); 1276 docAddress.setCity(address.getCityUnmasked()); 1277 1278 docAddress.setActive(address.isActive()); 1279 docAddress.setDflt(address.isDefaultValue()); 1280 docAddress.setEntityAddressId(address.getId()); 1281 docAddress.setEdit(true); 1282 docAddresses.add(docAddress); 1283 } 1284 } 1285 } 1286 return docAddresses; 1287 } 1288 1289 1290 protected List <GroupMemberBo> populateGroupMembers(IdentityManagementPersonDocument identityManagementPersonDocument) { 1291 List <GroupMemberBo> groupPrincipals = new ArrayList<GroupMemberBo>(); 1292 // List<? extends Group> origGroups = getGroupService().getGroupsByPrincipalId(identityManagementPersonDocument.getPrincipalId()); 1293 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getGroups())){ 1294 for (PersonDocumentGroup group : identityManagementPersonDocument.getGroups()) { 1295 GroupMember.Builder groupPrincipalImpl = GroupMember.Builder.create(group.getGroupId(), identityManagementPersonDocument.getPrincipalId(), KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE); 1296 if (group.getActiveFromDate() != null) { 1297 groupPrincipalImpl.setActiveFromDate(new DateTime(group.getActiveFromDate().getTime())); 1298 } 1299 if (group.getActiveToDate() != null) { 1300 groupPrincipalImpl.setActiveToDate(new DateTime(group.getActiveToDate().getTime())); 1301 } 1302 groupPrincipalImpl.setId(group.getGroupMemberId()); 1303 1304 1305 //groupPrincipalImpl.setVersionNumber(group.getVersionNumber()); 1306 // get the ORM-layer optimisic locking value 1307 // TODO: this should be replaced with the retrieval and storage of that value 1308 // in the document tables and not re-retrieved here 1309 Collection<GroupMember> currGroupMembers = getGroupService().getMembers(Collections.singletonList(group.getGroupId())); 1310 if(ObjectUtils.isNotNull(currGroupMembers)){ 1311 for (GroupMember origGroupMember: currGroupMembers) { 1312 if (origGroupMember.isActive(new DateTime(System.currentTimeMillis())) 1313 && KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.equals(origGroupMember.getType())) { 1314 if(origGroupMember.getId()!=null && StringUtils.equals(origGroupMember.getId(), group.getGroupMemberId())){ 1315 groupPrincipalImpl.setObjectId(origGroupMember.getObjectId()); 1316 groupPrincipalImpl.setVersionNumber(origGroupMember.getVersionNumber()); 1317 } 1318 } 1319 } 1320 } 1321 1322 groupPrincipals.add(GroupMemberBo.from(groupPrincipalImpl.build())); 1323 1324 } 1325 } 1326 return groupPrincipals; 1327 } 1328 1329 protected List<RoleMemberBo> populateRoleMembers(IdentityManagementPersonDocument identityManagementPersonDocument) { 1330 List<RoleBo> origRoles = getRolesForPrincipal(identityManagementPersonDocument.getPrincipalId()); 1331 1332 List <RoleMemberBo> roleMembers = new ArrayList<RoleMemberBo>(); 1333 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getRoles())){ 1334 for (PersonDocumentRole role : identityManagementPersonDocument.getRoles()) { 1335 //if(role.isEditable()){ 1336 List<RoleMemberBo> origRoleMembers = new ArrayList<RoleMemberBo>(); 1337 if(ObjectUtils.isNotNull(origRoles)){ 1338 for (RoleBo origRole : origRoles) { 1339 if (origRole.getId()!=null && StringUtils.equals(origRole.getId(), role.getRoleId())) { 1340 origRoleMembers = origRole.getMembers(); 1341 break; 1342 } 1343 } 1344 } 1345 if (role.getRolePrncpls().isEmpty()) { 1346 if (!role.getDefinitions().isEmpty()) { 1347 RoleMemberBo roleMemberImpl = new RoleMemberBo(); 1348 roleMemberImpl.setRoleId(role.getRoleId()); 1349 roleMemberImpl.setMemberId(identityManagementPersonDocument.getPrincipalId()); 1350 roleMemberImpl.setType(MemberType.PRINCIPAL); 1351 roleMembers.add(roleMemberImpl); 1352 } 1353 } else { 1354 for (KimDocumentRoleMember roleMember : role.getRolePrncpls()) { 1355 RoleMemberBo roleMemberImpl = new RoleMemberBo(); 1356 roleMemberImpl.setRoleId(role.getRoleId()); 1357 // TODO : principalId is not ready here yet ? 1358 roleMemberImpl.setMemberId(identityManagementPersonDocument.getPrincipalId()); 1359 roleMemberImpl.setType(MemberType.PRINCIPAL); 1360 roleMemberImpl.setId(roleMember.getRoleMemberId()); 1361 if (roleMember.getActiveFromDate() != null) { 1362 roleMemberImpl.setActiveFromDateValue( 1363 new java.sql.Timestamp(roleMember.getActiveFromDate().getTime())); 1364 } 1365 if (roleMember.getActiveToDate() != null) { 1366 roleMemberImpl.setActiveToDateValue( 1367 new java.sql.Timestamp(roleMember.getActiveToDate().getTime())); 1368 } 1369 List<RoleMemberAttributeDataBo> origAttributes = new ArrayList<RoleMemberAttributeDataBo>(); 1370 if(ObjectUtils.isNotNull(origRoleMembers)){ 1371 for (RoleMemberBo origMember : origRoleMembers) { 1372 if (origMember.getId()!=null && StringUtils.equals(origMember.getId(), roleMember.getRoleMemberId())) { 1373 origAttributes = origMember.getAttributeDetails(); 1374 roleMemberImpl.setVersionNumber(origMember.getVersionNumber()); 1375 } 1376 } 1377 } 1378 List<RoleMemberAttributeDataBo> attributes = new ArrayList<RoleMemberAttributeDataBo>(); 1379 if(CollectionUtils.isNotEmpty(roleMember.getQualifiers())){ 1380 for (KimDocumentRoleQualifier qualifier : roleMember.getQualifiers()) { 1381 //if (StringUtils.isNotBlank(qualifier.getAttrVal())) { 1382 RoleMemberAttributeDataBo attribute = new RoleMemberAttributeDataBo(); 1383 attribute.setId(qualifier.getAttrDataId()); 1384 attribute.setAttributeValue(qualifier.getAttrVal()); 1385 attribute.setKimAttributeId(qualifier.getKimAttrDefnId()); 1386 attribute.setAssignedToId(qualifier.getRoleMemberId()); 1387 attribute.setKimTypeId(qualifier.getKimTypId()); 1388 1389 updateAttrValIfNecessary(attribute); 1390 1391 if(ObjectUtils.isNotNull(origAttributes)){ 1392 for (RoleMemberAttributeDataBo origAttribute : origAttributes) { 1393 if (origAttribute.getId()!=null && StringUtils.equals(origAttribute.getId(), qualifier.getAttrDataId())) { 1394 attribute.setVersionNumber(origAttribute.getVersionNumber()); 1395 } 1396 } 1397 } 1398 if (attribute.getVersionNumber() != null || StringUtils.isNotBlank(qualifier.getAttrVal())) { 1399 attributes.add(attribute); 1400 } 1401 //} 1402 } 1403 } 1404 roleMemberImpl.setAttributeDetails(attributes); 1405 roleMembers.add(roleMemberImpl); 1406 } 1407 } 1408 //} 1409 } 1410 } 1411 return roleMembers; 1412 } 1413 1414 protected List<DelegateTypeBo> populateDelegations(IdentityManagementPersonDocument identityManagementPersonDocument){ 1415 List<DelegateTypeBo> origDelegations = getPersonDelegations(identityManagementPersonDocument.getPrincipalId()); 1416 List<DelegateTypeBo> kimDelegations = new ArrayList<DelegateTypeBo>(); 1417 DelegateTypeBo newKimDelegation; 1418 DelegateTypeBo origDelegationImplTemp = null; 1419 List<DelegateMemberBo> origMembers; 1420 boolean activatingInactive = false; 1421 String newDelegationIdAssigned = ""; 1422 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getDelegations())){ 1423 for(RoleDocumentDelegation roleDocumentDelegation: identityManagementPersonDocument.getDelegations()){ 1424 newKimDelegation = new DelegateTypeBo(); 1425 KimCommonUtilsInternal.copyProperties(newKimDelegation, roleDocumentDelegation); 1426 newKimDelegation.setRoleId(roleDocumentDelegation.getRoleId()); 1427 if(ObjectUtils.isNotNull(origDelegations)){ 1428 for(DelegateTypeBo origDelegationImpl: origDelegations){ 1429 if((origDelegationImpl.getRoleId()!=null && StringUtils.equals(origDelegationImpl.getRoleId(), newKimDelegation.getRoleId())) && 1430 (origDelegationImpl.getDelegationId()!=null && StringUtils.equals(origDelegationImpl.getDelegationId(), newKimDelegation.getDelegationId()))){ 1431 //TODO: verify if you want to add && newRoleMember.isActive() condition to if... 1432 newDelegationIdAssigned = newKimDelegation.getDelegationId(); 1433 newKimDelegation.setDelegationId(origDelegationImpl.getDelegationId()); 1434 activatingInactive = true; 1435 } 1436 if(origDelegationImpl.getDelegationId()!=null && StringUtils.equals(origDelegationImpl.getDelegationId(), newKimDelegation.getDelegationId())){ 1437 newKimDelegation.setVersionNumber(origDelegationImpl.getVersionNumber()); 1438 origDelegationImplTemp = origDelegationImpl; 1439 } 1440 } 1441 } 1442 origMembers = (origDelegationImplTemp==null || origDelegationImplTemp.getMembers()==null)? 1443 new ArrayList<DelegateMemberBo>():origDelegationImplTemp.getMembers(); 1444 newKimDelegation.setMembers(getDelegationMembers(roleDocumentDelegation.getMembers(), origMembers, activatingInactive, newDelegationIdAssigned)); 1445 kimDelegations.add(newKimDelegation); 1446 activatingInactive = false; 1447 } 1448 } 1449 return kimDelegations; 1450 } 1451 1452 protected List <RoleMemberAttributeDataBo> getBlankRoleMemberAttrs(List <RoleMemberBo> rolePrncpls) { 1453 1454 List <RoleMemberAttributeDataBo> blankRoleMemberAttrs = new ArrayList<RoleMemberAttributeDataBo>(); 1455 if(ObjectUtils.isNotNull(rolePrncpls)){ 1456 for (RoleMemberBo roleMbr : rolePrncpls) { 1457 List <RoleMemberAttributeDataBo> roleMemberAttrs = new ArrayList<RoleMemberAttributeDataBo>(); 1458 if (CollectionUtils.isNotEmpty(roleMbr.getAttributeDetails())) { 1459 for (RoleMemberAttributeDataBo attr : roleMbr.getAttributeDetails()) { 1460 if (StringUtils.isBlank(attr.getAttributeValue())) { 1461 roleMemberAttrs.add(attr); 1462 } 1463 } 1464 if (!roleMemberAttrs.isEmpty()) { 1465 roleMbr.getAttributeDetails().removeAll(roleMemberAttrs); 1466 blankRoleMemberAttrs.addAll(roleMemberAttrs); 1467 } 1468 1469 } 1470 } 1471 } 1472 1473 return blankRoleMemberAttrs; 1474 1475 } 1476 1477 protected List <RoleResponsibilityActionBo> populateRoleRspActions(IdentityManagementPersonDocument identityManagementPersonDocument) { 1478 // List<RoleImpl> origRoles = getRolesForPrincipal(identityManagementPersonDocument.getPrincipalId()); 1479 1480 List <RoleResponsibilityActionBo> roleRspActions = new ArrayList<RoleResponsibilityActionBo>(); 1481 if(CollectionUtils.isNotEmpty(identityManagementPersonDocument.getRoles())){ 1482 for (PersonDocumentRole role : identityManagementPersonDocument.getRoles()) { 1483 if(CollectionUtils.isNotEmpty(role.getRolePrncpls())){ 1484 for (KimDocumentRoleMember roleMbr : role.getRolePrncpls()) { 1485 if(CollectionUtils.isNotEmpty(roleMbr.getRoleRspActions())){ 1486 for (KimDocumentRoleResponsibilityAction roleRspAction : roleMbr.getRoleRspActions()) { 1487 RoleResponsibilityActionBo entRoleRspAction = new RoleResponsibilityActionBo(); 1488 entRoleRspAction.setId(roleRspAction.getRoleResponsibilityActionId()); 1489 entRoleRspAction.setActionPolicyCode(roleRspAction.getActionPolicyCode()); 1490 entRoleRspAction.setActionTypeCode(roleRspAction.getActionTypeCode()); 1491 entRoleRspAction.setPriorityNumber(roleRspAction.getPriorityNumber()); 1492 entRoleRspAction.setRoleMemberId(roleRspAction.getRoleMemberId()); 1493 entRoleRspAction.setRoleResponsibilityId(roleRspAction.getRoleResponsibilityId()); 1494 List<RoleResponsibilityActionBo> actions = getRoleRspActions( roleMbr.getRoleMemberId()); 1495 if(ObjectUtils.isNotNull(actions)){ 1496 for(RoleResponsibilityActionBo orgRspAction : actions) { 1497 if (orgRspAction.getId()!=null && StringUtils.equals(orgRspAction.getId(), roleRspAction.getRoleResponsibilityActionId())) { 1498 entRoleRspAction.setVersionNumber(orgRspAction.getVersionNumber()); 1499 } 1500 } 1501 } 1502 roleRspActions.add(entRoleRspAction); 1503 } 1504 } 1505 } 1506 } 1507 } 1508 } 1509 return roleRspActions; 1510 1511 } 1512 1513 protected BusinessObjectService getBusinessObjectService() { 1514 if ( businessObjectService == null ) { 1515 businessObjectService = KRADServiceLocator.getBusinessObjectService(); 1516 } 1517 return businessObjectService; 1518 } 1519 1520 protected IdentityService getIdentityService() { 1521 if ( identityService == null ) { 1522 identityService = KimApiServiceLocator.getIdentityService(); 1523 } 1524 return identityService; 1525 } 1526 1527 protected GroupService getGroupService() { 1528 if ( groupService == null ) { 1529 groupService = KimApiServiceLocator.getGroupService(); 1530 } 1531 return groupService; 1532 } 1533 1534 protected DocumentHelperService getDocumentHelperService() { 1535 if ( documentHelperService == null ) { 1536 documentHelperService = KRADServiceLocatorWeb.getDocumentHelperService(); 1537 } 1538 return this.documentHelperService; 1539 } 1540 1541 protected RoleService getRoleService() { 1542 if(roleService == null){ 1543 roleService = KimApiServiceLocator.getRoleService(); 1544 } 1545 return roleService; 1546 } 1547 1548 public void setRoleService(RoleService roleService) { 1549 this.roleService = roleService; 1550 } 1551 1552 protected ResponsibilityService getResponsibilityService() { 1553 if ( responsibilityService == null ) { 1554 responsibilityService = KimApiServiceLocator.getResponsibilityService(); 1555 } 1556 return responsibilityService; 1557 } 1558 1559 public void setResponsibilityService(ResponsibilityService responsibilityService) { 1560 this.responsibilityService = responsibilityService; 1561 } 1562 1563 1564 /* Role document methods */ 1565 @SuppressWarnings("unchecked") 1566 public void loadRoleDoc(IdentityManagementRoleDocument identityManagementRoleDocument, Role role){ 1567 Map<String, String> criteria = new HashMap<String, String>(); 1568 criteria.put(KimConstants.PrimaryKeyConstants.ROLE_ID, role.getId()); 1569 RoleBo roleBo = getBusinessObjectService().findByPrimaryKey(RoleBo.class, criteria); 1570 1571 Map<String, String> subClassCriteria = new HashMap<String, String>(); 1572 subClassCriteria.put(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID, role.getId()); 1573 1574 identityManagementRoleDocument.setRoleId(roleBo.getId()); 1575 identityManagementRoleDocument.setKimType(KimTypeBo.to(roleBo.getKimRoleType())); 1576 identityManagementRoleDocument.setRoleTypeName(roleBo.getKimRoleType().getName()); 1577 identityManagementRoleDocument.setRoleTypeId(roleBo.getKimTypeId()); 1578 identityManagementRoleDocument.setRoleName(roleBo.getName()); 1579 identityManagementRoleDocument.setRoleDescription(roleBo.getDescription()); 1580 identityManagementRoleDocument.setActive(roleBo.isActive()); 1581 identityManagementRoleDocument.setRoleNamespace(roleBo.getNamespaceCode()); 1582 identityManagementRoleDocument.setEditing(true); 1583 1584 identityManagementRoleDocument.setPermissions(loadPermissions((List<RolePermissionBo>)getBusinessObjectService().findMatching(RolePermissionBo.class, subClassCriteria))); 1585 identityManagementRoleDocument.setResponsibilities(loadResponsibilities((List<RoleResponsibilityBo>)getBusinessObjectService().findMatching(RoleResponsibilityBo.class, subClassCriteria))); 1586 loadResponsibilityRoleRspActions(identityManagementRoleDocument); 1587 identityManagementRoleDocument.setMembers(loadRoleMembers(identityManagementRoleDocument, roleBo.getMembers())); 1588 loadMemberRoleRspActions(identityManagementRoleDocument); 1589 identityManagementRoleDocument.setDelegations(loadRoleDocumentDelegations(identityManagementRoleDocument, getRoleDelegations(roleBo.getId()))); 1590 //Since delegation members are flattened out on the UI... 1591 setDelegationMembersInDocument(identityManagementRoleDocument); 1592 identityManagementRoleDocument.setKimType(KimTypeBo.to(roleBo.getKimRoleType())); 1593 } 1594 1595 public void setDelegationMembersInDocument(IdentityManagementRoleDocument identityManagementRoleDocument){ 1596 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getDelegations())){ 1597 for(RoleDocumentDelegation delegation: identityManagementRoleDocument.getDelegations()){ 1598 if(CollectionUtils.isNotEmpty(delegation.getMembers())){ 1599 for(RoleDocumentDelegationMember member: delegation.getMembers()){ 1600 member.setDelegationTypeCode(delegation.getDelegationTypeCode()); 1601 identityManagementRoleDocument.getDelegationMembers().add(member); 1602 } 1603 } 1604 } 1605 } 1606 } 1607 1608 protected List<KimDocumentRoleResponsibility> loadResponsibilities(List<RoleResponsibilityBo> roleResponsibilities){ 1609 List<KimDocumentRoleResponsibility> documentRoleResponsibilities = new ArrayList<KimDocumentRoleResponsibility>(); 1610 if(ObjectUtils.isNotNull(roleResponsibilities)){ 1611 for(RoleResponsibilityBo roleResponsibility: roleResponsibilities){ 1612 if(roleResponsibility.isActive()) { 1613 KimDocumentRoleResponsibility roleResponsibilityCopy = new KimDocumentRoleResponsibility(); 1614 KimCommonUtilsInternal.copyProperties(roleResponsibilityCopy, roleResponsibility); 1615 roleResponsibilityCopy.setEdit(true); 1616 documentRoleResponsibilities.add(roleResponsibilityCopy); 1617 } 1618 } 1619 } 1620 return documentRoleResponsibilities; 1621 } 1622 1623 protected List<KimDocumentRolePermission> loadPermissions(List<RolePermissionBo> rolePermissions){ 1624 List<KimDocumentRolePermission> documentRolePermissions = new ArrayList<KimDocumentRolePermission>(); 1625 KimDocumentRolePermission rolePermissionCopy; 1626 if(ObjectUtils.isNotNull(rolePermissions)){ 1627 for(RolePermissionBo rolePermission: rolePermissions){ 1628 if ( rolePermission.isActive() ) { 1629 rolePermissionCopy = new KimDocumentRolePermission(); 1630 rolePermissionCopy.setRolePermissionId(rolePermission.getId()); 1631 rolePermissionCopy.setRoleId(rolePermission.getRoleId()); 1632 rolePermissionCopy.setPermissionId(rolePermission.getPermissionId()); 1633 rolePermissionCopy.setPermission(PermissionBo.to(rolePermission.getPermission())); 1634 rolePermissionCopy.setEdit(true); 1635 documentRolePermissions.add(rolePermissionCopy); 1636 } 1637 } 1638 } 1639 return documentRolePermissions; 1640 } 1641 1642 protected List<KimDocumentRoleMember> loadRoleMembers( 1643 IdentityManagementRoleDocument identityManagementRoleDocument, List<RoleMemberBo> members){ 1644 List<KimDocumentRoleMember> pndMembers = new ArrayList<KimDocumentRoleMember>(); 1645 KimDocumentRoleMember pndMember; 1646 if(ObjectUtils.isNotNull(members)){ 1647 for(RoleMemberBo member: members){ 1648 pndMember = new KimDocumentRoleMember(); 1649 pndMember.setActiveFromDate(member.getActiveFromDateValue()); 1650 pndMember.setActiveToDate(member.getActiveToDateValue()); 1651 pndMember.setActive(member.isActive(new Timestamp(System.currentTimeMillis()))); 1652 if(pndMember.isActive()){ 1653 pndMember.setRoleMemberId(member.getId()); 1654 pndMember.setRoleId(member.getRoleId()); 1655 pndMember.setMemberId(member.getMemberId()); 1656 pndMember.setMemberNamespaceCode(getMemberNamespaceCode(member.getType(), member.getMemberId())); 1657 pndMember.setMemberName(getMemberName(member.getType(), member.getMemberId())); 1658 pndMember.setMemberFullName(getMemberFullName(member.getType(), member.getMemberId())); 1659 pndMember.setMemberTypeCode(member.getType().getCode()); 1660 pndMember.setQualifiers(loadRoleMemberQualifiers(identityManagementRoleDocument, member.getAttributeDetails())); 1661 pndMember.setEdit(true); 1662 pndMembers.add(pndMember); 1663 } 1664 } 1665 } 1666 Collections.sort(pndMembers, identityManagementRoleDocument.getMemberMetaDataType()); 1667 return pndMembers; 1668 } 1669 1670 protected void loadResponsibilityRoleRspActions(IdentityManagementRoleDocument identityManagementRoleDocument){ 1671 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getResponsibilities())){ 1672 for(KimDocumentRoleResponsibility responsibility: identityManagementRoleDocument.getResponsibilities()){ 1673 responsibility.getRoleRspActions().addAll(loadKimDocumentRoleRespActions( 1674 getRoleResponsibilityActionImpls(responsibility.getRoleResponsibilityId()))); 1675 } 1676 } 1677 } 1678 1679 @SuppressWarnings("unchecked") 1680 protected List<RoleResponsibilityActionBo> getRoleResponsibilityActionImpls(String roleResponsibilityId){ 1681 Map<String, String> criteria = new HashMap<String, String>(); 1682 criteria.put(KimConstants.PrimaryKeyConstants.ROLE_MEMBER_ID, "*"); 1683 criteria.put(KimConstants.PrimaryKeyConstants.ROLE_RESPONSIBILITY_ID, roleResponsibilityId); 1684 return (List<RoleResponsibilityActionBo>) 1685 getBusinessObjectService().findMatching(RoleResponsibilityActionBo.class, criteria); 1686 } 1687 1688 @SuppressWarnings("unchecked") 1689 public List<RoleResponsibilityActionBo> getRoleMemberResponsibilityActionImpls(String roleMemberId){ 1690 Map<String, String> criteria = new HashMap<String, String>(1); 1691 criteria.put(KimConstants.PrimaryKeyConstants.ROLE_MEMBER_ID, roleMemberId); 1692 return (List<RoleResponsibilityActionBo>) 1693 getBusinessObjectService().findMatching(RoleResponsibilityActionBo.class, criteria); 1694 } 1695 1696 protected void loadMemberRoleRspActions(IdentityManagementRoleDocument identityManagementRoleDocument){ 1697 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getMembers())){ 1698 for(KimDocumentRoleMember member: identityManagementRoleDocument.getMembers()){ 1699 member.getRoleRspActions().addAll(loadKimDocumentRoleRespActions( 1700 getRoleMemberResponsibilityActionImpls(member.getRoleMemberId()) ) ); 1701 } 1702 } 1703 } 1704 1705 protected List<KimDocumentRoleResponsibilityAction> loadKimDocumentRoleRespActions( 1706 List<RoleResponsibilityActionBo> roleRespActionImpls){ 1707 List<KimDocumentRoleResponsibilityAction> documentRoleRespActions = new ArrayList<KimDocumentRoleResponsibilityAction>(); 1708 KimDocumentRoleResponsibilityAction documentRoleRespAction; 1709 if(ObjectUtils.isNotNull(roleRespActionImpls)){ 1710 for(RoleResponsibilityActionBo roleRespActionImpl: roleRespActionImpls){ 1711 documentRoleRespAction = new KimDocumentRoleResponsibilityAction(); 1712 KimCommonUtilsInternal.copyProperties(documentRoleRespAction, roleRespActionImpl); 1713 // handle the roleResponsibility object being null since not all may be defined when ID value is "*" 1714 if ( ObjectUtils.isNotNull(roleRespActionImpl.getRoleResponsibility()) ) { 1715 documentRoleRespAction.setKimResponsibility(roleRespActionImpl.getRoleResponsibility().getKimResponsibility()); 1716 } 1717 documentRoleRespActions.add(documentRoleRespAction); 1718 } 1719 } 1720 return documentRoleRespActions; 1721 } 1722 1723 public BusinessObject getMember(MemberType memberType, String memberId){ 1724 Class<? extends BusinessObject> roleMemberTypeClass = null; 1725 String roleMemberIdName = ""; 1726 if(MemberType.PRINCIPAL.equals(memberType)) { 1727 roleMemberTypeClass = PrincipalBo.class; 1728 roleMemberIdName = KimConstants.PrimaryKeyConstants.PRINCIPAL_ID; 1729 Principal principalInfo = getIdentityService().getPrincipal(memberId); 1730 if (principalInfo != null) { 1731 1732 } 1733 } else if(MemberType.GROUP.equals(memberType)){ 1734 roleMemberTypeClass = GroupBo.class; 1735 roleMemberIdName = KimConstants.PrimaryKeyConstants.GROUP_ID; 1736 Group groupInfo = null; 1737 groupInfo = getGroupService().getGroup(memberId); 1738 if (groupInfo != null) { 1739 1740 } 1741 } else if(MemberType.ROLE.equals(memberType)){ 1742 roleMemberTypeClass = RoleBo.class; 1743 roleMemberIdName = KimConstants.PrimaryKeyConstants.ROLE_ID; 1744 Role role = getRoleService().getRole(memberId); 1745 if (role != null) { 1746 1747 } 1748 } 1749 Map<String, String> criteria = new HashMap<String, String>(); 1750 criteria.put(roleMemberIdName, memberId); 1751 return getBusinessObjectService().findByPrimaryKey(roleMemberTypeClass, criteria); 1752 } 1753 1754 public String getMemberName(MemberType memberType, String memberId){ 1755 if (memberType == null || StringUtils.isEmpty(memberId)) { return "";} 1756 BusinessObject member = getMember(memberType, memberId); 1757 if (member == null) { //not a REAL principal, try to fake the name 1758 String fakeName = ""; 1759 Principal kp = KimApiServiceLocator.getIdentityService().getPrincipal(memberId); 1760 if(kp != null && kp.getPrincipalName() != null && !"".equals(kp.getPrincipalName())){ 1761 fakeName = kp.getPrincipalName(); 1762 } 1763 1764 return fakeName; 1765 } 1766 return getMemberName(memberType, member); 1767 } 1768 1769 public String getMemberFullName(MemberType memberType, String memberId){ 1770 if(memberType == null || StringUtils.isEmpty(memberId)) {return "";} 1771 String memberFullName = ""; 1772 if(MemberType.PRINCIPAL.equals(memberType)){ 1773 Principal principalInfo = null; 1774 principalInfo = getIdentityService().getPrincipal(memberId); 1775 if (principalInfo != null) { 1776 String principalName = principalInfo.getPrincipalName(); 1777 Person psn = KimApiServiceLocator.getPersonService().getPersonByPrincipalName(principalName); 1778 memberFullName = psn.getFirstName() + " " + psn.getLastName(); 1779 } 1780 } else if(MemberType.GROUP.equals(memberType)){ 1781 Group group = null; 1782 group = getGroupService().getGroup(memberId); 1783 if (group != null) { 1784 memberFullName = group.getName(); 1785 } 1786 1787 } else if(MemberType.ROLE.equals(memberType)){ 1788 Role role = getRoleService().getRole(memberId); 1789 memberFullName = role.getName(); 1790 } 1791 return memberFullName; 1792 } 1793 1794 public String getMemberNamespaceCode(MemberType memberType, String memberId){ 1795 if(memberType == null || StringUtils.isEmpty(memberId)) {return "";} 1796 String roleMemberNamespaceCode = ""; 1797 if(MemberType.PRINCIPAL.equals(memberType)){ 1798 roleMemberNamespaceCode = ""; 1799 } else if(MemberType.GROUP.equals(memberType)){ 1800 Group groupInfo = getGroupService().getGroup(memberId); 1801 if (groupInfo!= null) { 1802 roleMemberNamespaceCode = groupInfo.getNamespaceCode(); 1803 } 1804 } else if(MemberType.ROLE.equals(memberType)){ 1805 Role role = getRoleService().getRole(memberId); 1806 if (role != null) { 1807 roleMemberNamespaceCode = role.getNamespaceCode(); 1808 } 1809 } 1810 return roleMemberNamespaceCode; 1811 } 1812 1813 public String getMemberIdByName(MemberType memberType, String memberNamespaceCode, String memberName){ 1814 String memberId = ""; 1815 if(MemberType.PRINCIPAL.equals(memberType)){ 1816 Principal principal = getIdentityService().getPrincipalByPrincipalName(memberName); 1817 if(principal!=null) { 1818 memberId = principal.getPrincipalId(); 1819 } 1820 1821 } else if(MemberType.GROUP.equals(memberType)){ 1822 Group groupInfo = getGroupService().getGroupByNameAndNamespaceCode(memberNamespaceCode, memberName); 1823 if (groupInfo!=null) { 1824 memberId = groupInfo.getId(); 1825 } 1826 1827 } else if(MemberType.ROLE.equals(memberType)){ 1828 memberId = getRoleService().getRoleIdByNameAndNamespaceCode(memberNamespaceCode, memberName); 1829 } 1830 return memberId; 1831 } 1832 1833 public String getMemberName(MemberType memberType, BusinessObject member){ 1834 String roleMemberName = ""; 1835 if(MemberType.PRINCIPAL.equals(memberType)){ 1836 roleMemberName = ((PrincipalBo)member).getPrincipalName(); 1837 } else if(MemberType.GROUP.equals(memberType)){ 1838 roleMemberName = ((GroupBo)member).getName(); 1839 } else if(MemberType.ROLE.equals(memberType)){ 1840 roleMemberName = ((RoleBo)member).getName(); 1841 } 1842 return roleMemberName; 1843 } 1844 1845 public String getMemberNamespaceCode(MemberType memberType, BusinessObject member){ 1846 String roleMemberNamespaceCode = ""; 1847 if(MemberType.PRINCIPAL.equals(memberType)){ 1848 roleMemberNamespaceCode = ""; 1849 } else if(MemberType.GROUP.equals(memberType)){ 1850 roleMemberNamespaceCode = ((GroupBo)member).getNamespaceCode(); 1851 } else if(MemberType.ROLE.equals(memberType)){ 1852 roleMemberNamespaceCode = ((RoleBo)member).getNamespaceCode(); 1853 } 1854 return roleMemberNamespaceCode; 1855 } 1856 1857 protected List<KimDocumentRoleQualifier> loadRoleMemberQualifiers(IdentityManagementRoleDocument identityManagementRoleDocument, 1858 List<RoleMemberAttributeDataBo> attributeDataList){ 1859 List<KimDocumentRoleQualifier> pndMemberRoleQualifiers = new ArrayList<KimDocumentRoleQualifier>(); 1860 KimDocumentRoleQualifier pndMemberRoleQualifier; 1861 1862 // add all attributes from attributeDataList 1863 if(attributeDataList!=null){ 1864 for(RoleMemberAttributeDataBo memberRoleQualifier: attributeDataList){ 1865 pndMemberRoleQualifier = new KimDocumentRoleQualifier(); 1866 pndMemberRoleQualifier.setAttrDataId(memberRoleQualifier.getId()); 1867 pndMemberRoleQualifier.setAttrVal(memberRoleQualifier.getAttributeValue()); 1868 pndMemberRoleQualifier.setRoleMemberId(memberRoleQualifier.getAssignedToId()); 1869 pndMemberRoleQualifier.setKimTypId(memberRoleQualifier.getKimTypeId()); 1870 pndMemberRoleQualifier.setKimAttrDefnId(memberRoleQualifier.getKimAttributeId()); 1871 pndMemberRoleQualifier.setKimAttribute(memberRoleQualifier.getKimAttribute()); 1872 formatAttrValIfNecessary(pndMemberRoleQualifier); 1873 pndMemberRoleQualifiers.add(pndMemberRoleQualifier); 1874 } 1875 } 1876 // also add any attributes already in the document that are not in the attributeDataList 1877 int countOfOriginalAttributesNotPresent = 0; 1878 List<KimDocumentRoleQualifier> fillerRoleQualifiers = new ArrayList<KimDocumentRoleQualifier>(); 1879 1880 List<KimAttributeField> origAttributes = identityManagementRoleDocument.getDefinitions(); 1881 if ( origAttributes != null ) { 1882 for(KimAttributeField key: origAttributes) { 1883 boolean attributePresent = false; 1884 String origAttributeId = identityManagementRoleDocument.getKimAttributeDefnId(key); 1885 if(attributeDataList!=null){ 1886 for(RoleMemberAttributeDataBo memberRoleQualifier: attributeDataList){ 1887 if(origAttributeId!=null && StringUtils.equals(origAttributeId, memberRoleQualifier.getKimAttribute().getId())){ 1888 attributePresent = true; 1889 break; 1890 } 1891 } 1892 } 1893 if(!attributePresent){ 1894 countOfOriginalAttributesNotPresent++; 1895 pndMemberRoleQualifier = new KimDocumentRoleQualifier(); 1896 pndMemberRoleQualifier.setKimAttrDefnId(origAttributeId); 1897 pndMemberRoleQualifier.refreshReferenceObject("kimAttribute"); 1898 fillerRoleQualifiers.add(pndMemberRoleQualifier); 1899 } 1900 } 1901 1902 if(countOfOriginalAttributesNotPresent != origAttributes.size()) { 1903 pndMemberRoleQualifiers.addAll(fillerRoleQualifiers); 1904 } 1905 } 1906 return pndMemberRoleQualifiers; 1907 } 1908 1909 @SuppressWarnings("unchecked") 1910 public List<DelegateTypeBo> getRoleDelegations(String roleId){ 1911 if(roleId==null) { 1912 return new ArrayList<DelegateTypeBo>(); 1913 } 1914 Map<String,String> criteria = new HashMap<String,String>(1); 1915 criteria.put("roleId", roleId); 1916 return (List<DelegateTypeBo>)getBusinessObjectService().findMatching(DelegateTypeBo.class, criteria); 1917 } 1918 1919 protected List<RoleDocumentDelegation> loadRoleDocumentDelegations(IdentityManagementRoleDocument identityManagementRoleDocument, List<DelegateTypeBo> delegations){ 1920 List<RoleDocumentDelegation> delList = new ArrayList<RoleDocumentDelegation>(); 1921 RoleDocumentDelegation documentDelegation; 1922 if(ObjectUtils.isNotNull(delegations)){ 1923 for(DelegateTypeBo del: delegations){ 1924 documentDelegation = new RoleDocumentDelegation(); 1925 documentDelegation.setActive(del.isActive()); 1926 if(documentDelegation.isActive()){ 1927 documentDelegation.setDelegationId(del.getDelegationId()); 1928 documentDelegation.setDelegationTypeCode(del.getDelegationTypeCode()); 1929 documentDelegation.setKimTypeId(del.getKimTypeId()); 1930 documentDelegation.setMembers(loadDelegationMembers(identityManagementRoleDocument, del.getMembers())); 1931 documentDelegation.setRoleId(del.getRoleId()); 1932 documentDelegation.setEdit(true); 1933 delList.add(documentDelegation); 1934 } 1935 } 1936 } 1937 return delList; 1938 } 1939 1940 protected List<RoleDocumentDelegationMember> loadDelegationMembers(IdentityManagementRoleDocument identityManagementRoleDocument, List<DelegateMemberBo> members){ 1941 List<RoleDocumentDelegationMember> pndMembers = new ArrayList<RoleDocumentDelegationMember>(); 1942 RoleDocumentDelegationMember pndMember; 1943 RoleMemberBo roleMember; 1944 if(ObjectUtils.isNotNull(members)){ 1945 for(DelegateMemberBo member: members){ 1946 pndMember = new RoleDocumentDelegationMember(); 1947 pndMember.setActiveFromDate(member.getActiveFromDateValue()); 1948 pndMember.setActiveToDate(member.getActiveToDateValue()); 1949 pndMember.setActive(member.isActive(new Timestamp(System.currentTimeMillis()))); 1950 if(pndMember.isActive()){ 1951 KimCommonUtilsInternal.copyProperties(pndMember, member); 1952 pndMember.setRoleMemberId(member.getRoleMemberId()); 1953 roleMember = getRoleMemberForRoleMemberId(member.getRoleMemberId()); 1954 if(roleMember!=null){ 1955 pndMember.setRoleMemberName(getMemberName(roleMember.getType(), roleMember.getMemberId())); 1956 pndMember.setRoleMemberNamespaceCode(getMemberNamespaceCode(roleMember.getType(), roleMember.getMemberId())); 1957 } 1958 pndMember.setMemberNamespaceCode(getMemberNamespaceCode(member.getType(), member.getMemberId())); 1959 pndMember.setMemberName(getMemberName(member.getType(), member.getMemberId())); 1960 pndMember.setEdit(true); 1961 pndMember.setQualifiers(loadDelegationMemberQualifiers(identityManagementRoleDocument, member.getAttributeDetails())); 1962 pndMembers.add(pndMember); 1963 } 1964 } 1965 } 1966 return pndMembers; 1967 } 1968 1969 protected RoleMemberBo getRoleMemberForRoleMemberId(String roleMemberId){ 1970 Map<String,String> criteria = new HashMap<String,String>( 2 ); 1971 criteria.put(KimConstants.PrimaryKeyConstants.ID, roleMemberId); 1972 return getBusinessObjectService().findByPrimaryKey(RoleMemberBo.class, criteria); 1973 } 1974 1975 protected List<RoleDocumentDelegationMemberQualifier> loadDelegationMemberQualifiers(IdentityManagementRoleDocument identityManagementRoleDocument, 1976 List<DelegateMemberAttributeDataBo> attributeDataList){ 1977 List<RoleDocumentDelegationMemberQualifier> pndMemberRoleQualifiers = new ArrayList<RoleDocumentDelegationMemberQualifier>(); 1978 RoleDocumentDelegationMemberQualifier pndMemberRoleQualifier; 1979 List<KimAttributeField> origAttributes = identityManagementRoleDocument.getDefinitions(); 1980 boolean attributePresent = false; 1981 String origAttributeId; 1982 if(origAttributes!=null){ 1983 for(KimAttributeField key: origAttributes) { 1984 origAttributeId = identityManagementRoleDocument.getKimAttributeDefnId(key); 1985 if(attributeDataList!=null){ 1986 for(DelegateMemberAttributeDataBo memberRoleQualifier: attributeDataList){ 1987 if(origAttributeId!=null && StringUtils.equals(origAttributeId, memberRoleQualifier.getKimAttribute().getId())){ 1988 pndMemberRoleQualifier = new RoleDocumentDelegationMemberQualifier(); 1989 pndMemberRoleQualifier.setAttrDataId(memberRoleQualifier.getId()); 1990 pndMemberRoleQualifier.setAttrVal(memberRoleQualifier.getAttributeValue()); 1991 pndMemberRoleQualifier.setDelegationMemberId(memberRoleQualifier.getAssignedToId()); 1992 pndMemberRoleQualifier.setKimTypId(memberRoleQualifier.getKimTypeId()); 1993 pndMemberRoleQualifier.setKimAttrDefnId(memberRoleQualifier.getKimAttributeId()); 1994 pndMemberRoleQualifier.setKimAttribute(memberRoleQualifier.getKimAttribute()); 1995 pndMemberRoleQualifiers.add(pndMemberRoleQualifier); 1996 attributePresent = true; 1997 } 1998 } 1999 } 2000 if(!attributePresent){ 2001 pndMemberRoleQualifier = new RoleDocumentDelegationMemberQualifier(); 2002 pndMemberRoleQualifier.setKimAttrDefnId(origAttributeId); 2003 pndMemberRoleQualifier.refreshReferenceObject("kimAttribute"); 2004 pndMemberRoleQualifiers.add(pndMemberRoleQualifier); 2005 } 2006 attributePresent = false; 2007 } 2008 } 2009 return pndMemberRoleQualifiers; 2010 } 2011 2012 /** 2013 * @see org.kuali.rice.kim.service.UiDocumentService#saveEntityPerson(IdentityManagementPersonDocument) 2014 */ 2015 @SuppressWarnings("unchecked") 2016 public void saveRole(IdentityManagementRoleDocument identityManagementRoleDocument) { 2017 RoleBo roleBo = new RoleBo(); 2018 Map<String, String> criteria = new HashMap<String, String>(); 2019 String roleId = identityManagementRoleDocument.getRoleId(); 2020 criteria.put(KimConstants.PrimaryKeyConstants.ID, roleId); 2021 RoleBo origRole = getBusinessObjectService().findByPrimaryKey(RoleBo.class, criteria); 2022 2023 List<RolePermissionBo> origRolePermissions = new ArrayList<RolePermissionBo>(); 2024 List<RoleResponsibilityBo> origRoleResponsibilities = new ArrayList<RoleResponsibilityBo>(); 2025 List<RoleMemberBo> origRoleMembers = new ArrayList<RoleMemberBo>(); 2026 List<DelegateTypeBo> origRoleDelegations = new ArrayList<DelegateTypeBo>(); 2027 2028 roleBo.setId(identityManagementRoleDocument.getRoleId()); 2029 roleBo.setKimTypeId(identityManagementRoleDocument.getRoleTypeId()); 2030 roleBo.setNamespaceCode(identityManagementRoleDocument.getRoleNamespace()); 2031 roleBo.setName(identityManagementRoleDocument.getRoleName()); 2032 roleBo.setDescription(identityManagementRoleDocument.getRoleDescription()); 2033 2034 if (origRole == null) { 2035 origRole = new RoleBo(); 2036 roleBo.setActive(true); 2037 } else { 2038 roleBo.setActive(identityManagementRoleDocument.isActive()); 2039 roleBo.setVersionNumber(origRole.getVersionNumber()); 2040 Map<String, String> altCriteria = new HashMap<String, String>(); 2041 altCriteria.put(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID, roleId); 2042 origRolePermissions = new ArrayList<RolePermissionBo>(getBusinessObjectService().findMatching(RolePermissionBo.class, altCriteria)); 2043 origRoleResponsibilities = (List<RoleResponsibilityBo>)getBusinessObjectService().findMatching(RoleResponsibilityBo.class, altCriteria); 2044 origRoleMembers = (List<RoleMemberBo>)getBusinessObjectService().findMatching(RoleMemberBo.class, altCriteria); 2045 origRoleDelegations = (List<DelegateTypeBo>)getBusinessObjectService().findMatching(DelegateTypeBo.class, altCriteria); 2046 } 2047 2048 if( getKimTypeInfoService().getKimType(identityManagementRoleDocument.getRoleTypeId()) == null ) { 2049 LOG.error( "Kim type not found for:"+identityManagementRoleDocument.getRoleTypeId(), new Throwable() ); 2050 } 2051 2052 List<PersistableBusinessObject> bos = new ArrayList<PersistableBusinessObject>(); 2053 2054 bos.add(roleBo); 2055 bos.addAll(getRolePermissions(identityManagementRoleDocument, origRolePermissions)); 2056 bos.addAll(getRoleResponsibilities(identityManagementRoleDocument, origRoleResponsibilities)); 2057 bos.addAll(getRoleResponsibilitiesActions(identityManagementRoleDocument)); 2058 String initiatorPrincipalId = getInitiatorPrincipalId(identityManagementRoleDocument); 2059 2060 if(canAssignToRole(identityManagementRoleDocument, initiatorPrincipalId)){ 2061 List<RoleMemberBo> newRoleMembersList = getRoleMembers(identityManagementRoleDocument, origRoleMembers); 2062 roleBo.setMembers(newRoleMembersList); 2063 2064 bos.addAll(getRoleMemberResponsibilityActions(newRoleMembersList)); 2065 //bos.addAll(getRoleMemberResponsibilityActions(identityManagementRoleDocument)); 2066 bos.addAll(getRoleDelegations(identityManagementRoleDocument, origRoleDelegations)); 2067 } 2068 // bos.add(roleBo); 2069 getBusinessObjectService().save(bos); 2070 KimImplServiceLocator.getResponsibilityInternalService().updateActionRequestsForResponsibilityChange(getChangedRoleResponsibilityIds(identityManagementRoleDocument, origRoleResponsibilities)); 2071 if(!roleBo.isActive()){ 2072 // when a role is inactivated, inactivate the memberships of principals, groups, and roles in 2073 // that role, delegations, and delegation members, and that roles memberships in other roles 2074 KimImplServiceLocator.getRoleInternalService().roleInactivated(identityManagementRoleDocument.getRoleId()); 2075 } 2076 } 2077 2078 protected List<RolePermissionBo> getRolePermissions( 2079 IdentityManagementRoleDocument identityManagementRoleDocument, List<RolePermissionBo> origRolePermissions){ 2080 List<RolePermissionBo> rolePermissions = new ArrayList<RolePermissionBo>(); 2081 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getPermissions())){ 2082 for(KimDocumentRolePermission documentRolePermission: identityManagementRoleDocument.getPermissions()){ 2083 RolePermissionBo newRolePermission = new RolePermissionBo(); 2084 newRolePermission.setId(documentRolePermission.getRolePermissionId()); 2085 newRolePermission.setRoleId(identityManagementRoleDocument.getRoleId()); 2086 newRolePermission.setPermissionId(documentRolePermission.getPermissionId()); 2087 newRolePermission.setActive( documentRolePermission.isActive() ); 2088 2089 newRolePermission.setActive(documentRolePermission.isActive()); 2090 if (ObjectUtils.isNotNull(origRolePermissions)) { 2091 for (RolePermissionBo origPermissionImpl : origRolePermissions) { 2092 if (!StringUtils.equals(origPermissionImpl.getRoleId(), newRolePermission.getRoleId()) 2093 && StringUtils.equals(origPermissionImpl.getPermissionId(), newRolePermission.getPermissionId()) 2094 && origPermissionImpl.isActive() 2095 && newRolePermission.isActive()) { 2096 newRolePermission.setId(origPermissionImpl.getId()); 2097 } 2098 if(origPermissionImpl.getId()!=null && StringUtils.equals(origPermissionImpl.getId(), newRolePermission.getId())){ 2099 newRolePermission.setVersionNumber(origPermissionImpl.getVersionNumber()); 2100 newRolePermission.setObjectId(origPermissionImpl.getObjectId()); 2101 } 2102 } 2103 } 2104 rolePermissions.add(newRolePermission); 2105 } 2106 } 2107 return rolePermissions; 2108 } 2109 2110 protected List<RoleResponsibilityBo> getRoleResponsibilities( 2111 IdentityManagementRoleDocument identityManagementRoleDocument, List<RoleResponsibilityBo> origRoleResponsibilities){ 2112 List<RoleResponsibilityBo> roleResponsibilities = new ArrayList<RoleResponsibilityBo>(); 2113 RoleResponsibilityBo newRoleResponsibility; 2114 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getResponsibilities())){ 2115 for(KimDocumentRoleResponsibility documentRoleResponsibility: identityManagementRoleDocument.getResponsibilities()){ 2116 newRoleResponsibility = new RoleResponsibilityBo(); 2117 KimCommonUtilsInternal.copyProperties(newRoleResponsibility, documentRoleResponsibility); 2118 newRoleResponsibility.setActive(documentRoleResponsibility.isActive()); 2119 newRoleResponsibility.setRoleId(identityManagementRoleDocument.getRoleId()); 2120 if(ObjectUtils.isNotNull(origRoleResponsibilities)){ 2121 for(RoleResponsibilityBo origResponsibilityImpl: origRoleResponsibilities){ 2122 if(!StringUtils.equals(origResponsibilityImpl.getRoleId(), newRoleResponsibility.getRoleId()) && 2123 StringUtils.equals(origResponsibilityImpl.getResponsibilityId(), newRoleResponsibility.getResponsibilityId()) && 2124 !origResponsibilityImpl.isActive() && newRoleResponsibility.isActive()){ 2125 newRoleResponsibility.setRoleResponsibilityId(origResponsibilityImpl.getRoleResponsibilityId()); 2126 } 2127 if(origResponsibilityImpl.getRoleResponsibilityId()!=null && StringUtils.equals(origResponsibilityImpl.getRoleResponsibilityId(), newRoleResponsibility.getRoleResponsibilityId())) { 2128 newRoleResponsibility.setVersionNumber(origResponsibilityImpl.getVersionNumber()); 2129 newRoleResponsibility.setObjectId(origResponsibilityImpl.getObjectId()); 2130 } 2131 } 2132 } 2133 roleResponsibilities.add(newRoleResponsibility); 2134 } 2135 } 2136 return roleResponsibilities; 2137 } 2138 2139 2140 protected List <RoleResponsibilityActionBo> getRoleResponsibilitiesActions( 2141 IdentityManagementRoleDocument identityManagementRoleDocument){ 2142 List <RoleResponsibilityActionBo> roleRspActions = new ArrayList<RoleResponsibilityActionBo>(); 2143 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getResponsibilities())){ 2144 // loop over the responsibilities assigned to the role 2145 for(KimDocumentRoleResponsibility roleResponsibility : identityManagementRoleDocument.getResponsibilities()){ 2146 // only process if the actions are not assigned at the role member level 2147 if(!getResponsibilityInternalService().areActionsAtAssignmentLevelById(roleResponsibility.getResponsibilityId())){ 2148 List<KimDocumentRoleResponsibilityAction> documentRoleResponsibilityActions = roleResponsibility.getRoleRspActions(); 2149 if( ObjectUtils.isNotNull(documentRoleResponsibilityActions) 2150 && !documentRoleResponsibilityActions.isEmpty() 2151 && StringUtils.isNotBlank(documentRoleResponsibilityActions.get(0).getRoleResponsibilityActionId() ) ) { 2152 RoleResponsibilityActionBo roleRspAction = new RoleResponsibilityActionBo(); 2153 roleRspAction.setId(documentRoleResponsibilityActions.get(0).getRoleResponsibilityActionId()); 2154 roleRspAction.setActionPolicyCode(documentRoleResponsibilityActions.get(0).getActionPolicyCode()); 2155 roleRspAction.setActionTypeCode(documentRoleResponsibilityActions.get(0).getActionTypeCode()); 2156 roleRspAction.setPriorityNumber(documentRoleResponsibilityActions.get(0).getPriorityNumber()); 2157 roleRspAction.setForceAction(documentRoleResponsibilityActions.get(0).isForceAction()); 2158 roleRspAction.setRoleMemberId("*"); 2159 roleRspAction.setRoleResponsibilityId(documentRoleResponsibilityActions.get(0).getRoleResponsibilityId()); 2160 updateResponsibilityActionVersionNumber(roleRspAction, getRoleResponsibilityActionImpls(roleResponsibility.getRoleResponsibilityId())); 2161 roleRspActions.add(roleRspAction); 2162 } 2163 } 2164 } 2165 } 2166 return roleRspActions; 2167 } 2168 2169 // FIXME: This should be pulling by the PK, not using another method which pulls multiple records and then finds 2170 // the right one here! 2171 protected void updateResponsibilityActionVersionNumber(RoleResponsibilityActionBo newRoleRspAction, 2172 List<RoleResponsibilityActionBo> origRoleRespActionImpls){ 2173 if(ObjectUtils.isNotNull(origRoleRespActionImpls)){ 2174 for(RoleResponsibilityActionBo origRoleResponsibilityActionImpl: origRoleRespActionImpls){ 2175 if(origRoleResponsibilityActionImpl.getId()!=null && StringUtils.equals(origRoleResponsibilityActionImpl.getId(), 2176 newRoleRspAction.getId())) { 2177 newRoleRspAction.setVersionNumber(origRoleResponsibilityActionImpl.getVersionNumber()); 2178 break; 2179 } 2180 } 2181 } 2182 } 2183 2184 protected List<RoleResponsibilityActionBo> getRoleMemberResponsibilityActions(List<RoleMemberBo> newRoleMembersList){ 2185 List<RoleResponsibilityActionBo> roleRspActions = new ArrayList<RoleResponsibilityActionBo>(); 2186 if(ObjectUtils.isNotNull(newRoleMembersList)){ 2187 for(RoleMemberBo roleMember: newRoleMembersList){ 2188 roleRspActions.addAll(roleMember.getRoleRspActions()); 2189 } 2190 } 2191 return roleRspActions; 2192 } 2193 2194 protected List<RoleResponsibilityActionBo> getRoleMemberResponsibilityActions(IdentityManagementRoleDocument identityManagementRoleDocument){ 2195 List<RoleResponsibilityActionBo> roleRspActions = new ArrayList<RoleResponsibilityActionBo>(); 2196 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getMembers())){ 2197 for(KimDocumentRoleMember roleMember: identityManagementRoleDocument.getMembers()){ 2198 for(KimDocumentRoleResponsibilityAction roleRspAction : roleMember.getRoleRspActions()){ 2199 RoleResponsibilityActionBo entRoleRspAction = new RoleResponsibilityActionBo(); 2200 entRoleRspAction.setId(roleRspAction.getRoleResponsibilityActionId()); 2201 entRoleRspAction.setActionPolicyCode(roleRspAction.getActionPolicyCode()); 2202 entRoleRspAction.setActionTypeCode(roleRspAction.getActionTypeCode()); 2203 entRoleRspAction.setPriorityNumber(roleRspAction.getPriorityNumber()); 2204 entRoleRspAction.setRoleMemberId(roleRspAction.getRoleMemberId()); 2205 entRoleRspAction.setForceAction(roleRspAction.isForceAction()); 2206 entRoleRspAction.setRoleResponsibilityId(roleRspAction.getRoleResponsibilityId()); 2207 List<RoleResponsibilityActionBo> actions = getRoleRspActions(roleMember.getRoleMemberId()); 2208 if(ObjectUtils.isNotNull(actions)){ 2209 for(RoleResponsibilityActionBo orgRspAction : actions) { 2210 if (orgRspAction.getId()!=null && StringUtils.equals(orgRspAction.getId(), roleRspAction.getRoleResponsibilityActionId())) { 2211 entRoleRspAction.setVersionNumber(orgRspAction.getVersionNumber()); 2212 } 2213 } 2214 } 2215 roleRspActions.add(entRoleRspAction); 2216 } 2217 } 2218 } 2219 return roleRspActions; 2220 } 2221 2222 protected List<RoleMemberBo> getRoleMembers(IdentityManagementRoleDocument identityManagementRoleDocument, List<RoleMemberBo> origRoleMembers){ 2223 List<RoleMemberBo> roleMembers = new ArrayList<RoleMemberBo>(); 2224 RoleMemberBo newRoleMember; 2225 RoleMemberBo origRoleMemberImplTemp; 2226 List<RoleMemberAttributeDataBo> origAttributes; 2227 boolean activatingInactive = false; 2228 String newRoleMemberIdAssigned = ""; 2229 2230 identityManagementRoleDocument.setKimType(KimApiServiceLocator.getKimTypeInfoService().getKimType(identityManagementRoleDocument.getRoleTypeId())); 2231 KimTypeService kimTypeService = KimFrameworkServiceLocator.getKimTypeService(identityManagementRoleDocument.getKimType()); 2232 2233 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getMembers())){ 2234 for(KimDocumentRoleMember documentRoleMember: identityManagementRoleDocument.getMembers()){ 2235 origRoleMemberImplTemp = null; 2236 2237 newRoleMember = new RoleMemberBo(); 2238 KimCommonUtilsInternal.copyProperties(newRoleMember, documentRoleMember); 2239 newRoleMember.setId(documentRoleMember.getRoleMemberId()); 2240 newRoleMember.setRoleId(identityManagementRoleDocument.getRoleId()); 2241 if(ObjectUtils.isNotNull(origRoleMembers)){ 2242 for(RoleMemberBo origRoleMemberImpl: origRoleMembers){ 2243 if((origRoleMemberImpl.getRoleId()!=null && StringUtils.equals(origRoleMemberImpl.getRoleId(), newRoleMember.getRoleId())) && 2244 (origRoleMemberImpl.getMemberId()!=null && StringUtils.equals(origRoleMemberImpl.getMemberId(), newRoleMember.getMemberId())) && 2245 (origRoleMemberImpl.getType()!=null && org.apache.commons.lang.ObjectUtils.equals(origRoleMemberImpl.getType(), newRoleMember.getType())) && 2246 !origRoleMemberImpl.isActive() && 2247 !kimTypeService.validateAttributesAgainstExisting(identityManagementRoleDocument.getKimType().getId(), 2248 documentRoleMember.getQualifierAsMap(), origRoleMemberImpl.getAttributes()).isEmpty()) { 2249 2250 //TODO: verify if you want to add && newRoleMember.isActive() condition to if... 2251 2252 newRoleMemberIdAssigned = newRoleMember.getId(); 2253 newRoleMember.setId(origRoleMemberImpl.getId()); 2254 activatingInactive = true; 2255 } 2256 if(origRoleMemberImpl.getId()!=null && StringUtils.equals(origRoleMemberImpl.getId(), newRoleMember.getId())){ 2257 newRoleMember.setVersionNumber(origRoleMemberImpl.getVersionNumber()); 2258 origRoleMemberImplTemp = origRoleMemberImpl; 2259 } 2260 } 2261 } 2262 origAttributes = (origRoleMemberImplTemp==null || origRoleMemberImplTemp.getAttributes()==null)? 2263 new ArrayList<RoleMemberAttributeDataBo>():origRoleMemberImplTemp.getAttributeDetails(); 2264 newRoleMember.setActiveFromDateValue(documentRoleMember.getActiveFromDate()); 2265 newRoleMember.setActiveToDateValue(documentRoleMember.getActiveToDate()); 2266 newRoleMember.setAttributeDetails(getRoleMemberAttributeData(documentRoleMember.getQualifiers(), origAttributes, activatingInactive, newRoleMemberIdAssigned)); 2267 newRoleMember.setRoleRspActions(getRoleMemberResponsibilityActions(documentRoleMember, origRoleMemberImplTemp, activatingInactive, newRoleMemberIdAssigned)); 2268 newRoleMember.setType(MemberType.fromCode(documentRoleMember.getMemberTypeCode())); 2269 roleMembers.add(newRoleMember); 2270 activatingInactive = false; 2271 } 2272 } 2273 return roleMembers; 2274 } 2275 2276 protected List<RoleResponsibilityActionBo> getRoleMemberResponsibilityActions( 2277 KimDocumentRoleMember documentRoleMember, RoleMemberBo origRoleMemberImplTemp, boolean activatingInactive, String newRoleMemberIdAssigned){ 2278 List<RoleResponsibilityActionBo> roleRspActions = new ArrayList<RoleResponsibilityActionBo>(); 2279 List<RoleResponsibilityActionBo> origActions = new ArrayList<RoleResponsibilityActionBo>(); 2280 if(origRoleMemberImplTemp!=null) { 2281 origActions = getRoleRspActions(origRoleMemberImplTemp.getId()); 2282 } 2283 if(CollectionUtils.isNotEmpty(documentRoleMember.getRoleRspActions())){ 2284 for(KimDocumentRoleResponsibilityAction roleRspAction : documentRoleMember.getRoleRspActions()){ 2285 RoleResponsibilityActionBo newRoleRspAction = new RoleResponsibilityActionBo(); 2286 newRoleRspAction.setId(roleRspAction.getRoleResponsibilityActionId()); 2287 newRoleRspAction.setActionPolicyCode(roleRspAction.getActionPolicyCode()); 2288 newRoleRspAction.setActionTypeCode(roleRspAction.getActionTypeCode()); 2289 newRoleRspAction.setPriorityNumber(roleRspAction.getPriorityNumber()); 2290 newRoleRspAction.setRoleMemberId(roleRspAction.getRoleMemberId()); 2291 newRoleRspAction.setForceAction(roleRspAction.isForceAction()); 2292 newRoleRspAction.setRoleResponsibilityId("*"); 2293 if(ObjectUtils.isNotNull(origActions)){ 2294 for(RoleResponsibilityActionBo origRspAction: origActions) { 2295 if(activatingInactive && StringUtils.equals(origRspAction.getRoleResponsibilityId(), newRoleRspAction.getRoleResponsibilityId()) && 2296 StringUtils.equals(newRoleRspAction.getRoleMemberId(), newRoleMemberIdAssigned)){ 2297 newRoleRspAction.setRoleMemberId(origRspAction.getRoleMemberId()); 2298 newRoleRspAction.setId(origRspAction.getId()); 2299 } 2300 if (origRspAction.getId()!=null && StringUtils.equals(origRspAction.getId(), newRoleRspAction.getId())) { 2301 newRoleRspAction.setVersionNumber(origRspAction.getVersionNumber()); 2302 } 2303 } 2304 } 2305 roleRspActions.add(newRoleRspAction); 2306 } 2307 } 2308 return roleRspActions; 2309 } 2310 2311 protected List<RoleMemberAttributeDataBo> getRoleMemberAttributeData(List<KimDocumentRoleQualifier> qualifiers, 2312 List<RoleMemberAttributeDataBo> origAttributes, boolean activatingInactive, String newRoleMemberIdAssigned){ 2313 List<RoleMemberAttributeDataBo> roleMemberAttributeDataList = new ArrayList<RoleMemberAttributeDataBo>(); 2314 RoleMemberAttributeDataBo newRoleMemberAttributeData; 2315 if(CollectionUtils.isNotEmpty(qualifiers)){ 2316 for(KimDocumentRoleQualifier memberRoleQualifier: qualifiers){ 2317 if(StringUtils.isNotBlank(memberRoleQualifier.getAttrVal())){ 2318 newRoleMemberAttributeData = new RoleMemberAttributeDataBo(); 2319 newRoleMemberAttributeData.setId(memberRoleQualifier.getAttrDataId()); 2320 newRoleMemberAttributeData.setAttributeValue(memberRoleQualifier.getAttrVal()); 2321 newRoleMemberAttributeData.setAssignedToId(memberRoleQualifier.getRoleMemberId()); 2322 newRoleMemberAttributeData.setKimTypeId(memberRoleQualifier.getKimTypId()); 2323 newRoleMemberAttributeData.setKimAttributeId(memberRoleQualifier.getKimAttrDefnId()); 2324 2325 updateAttrValIfNecessary(newRoleMemberAttributeData); 2326 2327 if(ObjectUtils.isNotNull(origAttributes)){ 2328 for(RoleMemberAttributeDataBo origAttribute: origAttributes){ 2329 if(activatingInactive && StringUtils.equals(origAttribute.getKimAttributeId(), newRoleMemberAttributeData.getKimAttributeId()) && 2330 StringUtils.equals(newRoleMemberAttributeData.getAssignedToId(), newRoleMemberIdAssigned)){ 2331 newRoleMemberAttributeData.setAssignedToId(origAttribute.getAssignedToId()); 2332 newRoleMemberAttributeData.setId(origAttribute.getId()); 2333 } 2334 if(origAttribute.getId()!=null && StringUtils.equals(origAttribute.getId(), newRoleMemberAttributeData.getId())){ 2335 newRoleMemberAttributeData.setVersionNumber(origAttribute.getVersionNumber()); 2336 } 2337 } 2338 } 2339 roleMemberAttributeDataList.add(newRoleMemberAttributeData); 2340 } 2341 } 2342 } 2343 return roleMemberAttributeDataList; 2344 } 2345 2346 /** 2347 * Determines if the attribute value on the attribute data should be updated; if so, it performs some attribute value formatting. 2348 * In the default implementation, this method formats checkbox controls 2349 * 2350 * @param roleMemberAttributeData a role member qualifier attribute to update 2351 */ 2352 protected void updateAttrValIfNecessary(RoleMemberAttributeDataBo roleMemberAttributeData) { 2353 if (doCheckboxLogic(roleMemberAttributeData.getKimTypeId(), roleMemberAttributeData.getKimAttributeId())) { 2354 convertCheckboxAttributeData(roleMemberAttributeData); 2355 } 2356 } 2357 2358 protected void formatAttrValIfNecessary(KimDocumentRoleQualifier roleQualifier) { 2359 if (doCheckboxLogic(roleQualifier.getKimTypId(), roleQualifier.getKimAttrDefnId())) { 2360 formatCheckboxAttributeData(roleQualifier); 2361 } 2362 } 2363 2364 private boolean doCheckboxLogic(String kimTypeId, String attrId) { 2365 final KimAttributeField attributeDefinition = getAttributeDefinition(kimTypeId, attrId); 2366 return attributeDefinition != null && attributeDefinition.getAttributeField().getControl() != null && attributeDefinition.getAttributeField().getControl() instanceof RemotableCheckboxGroup; 2367 } 2368 2369 protected void formatCheckboxAttributeData(KimDocumentRoleQualifier roleQualifier) { 2370 if (roleQualifier.getAttrVal().equals(KimConstants.KIM_ATTRIBUTE_BOOLEAN_TRUE_STR_VALUE)) { 2371 roleQualifier.setAttrVal(KimConstants.KIM_ATTRIBUTE_BOOLEAN_TRUE_STR_VALUE_DISPLAY); 2372 } else if (roleQualifier.getAttrVal().equals(KimConstants.KIM_ATTRIBUTE_BOOLEAN_FALSE_STR_VALUE)) { 2373 roleQualifier.setAttrVal(KimConstants.KIM_ATTRIBUTE_BOOLEAN_FALSE_STR_VALUE_DISPLAY); 2374 } 2375 } 2376 2377 /** 2378 * Finds the KNS attribute used to render the given KimAttributeData 2379 * 2380 * @return the KNS attribute used to render that qualifier, or null if the AttributeDefinition cannot be determined 2381 */ 2382 protected KimAttributeField getAttributeDefinition(String kimTypId, String attrDefnId) { 2383 final KimType type = getKimTypeInfoService().getKimType(kimTypId); 2384 if (type != null) { 2385 final KimTypeService typeService = (KimTypeService) KimImplServiceLocator.getBean(type.getServiceName()); 2386 if (typeService != null) { 2387 final KimTypeAttribute attributeInfo = type.getAttributeDefinitionById(attrDefnId); 2388 if (attributeInfo != null) { 2389 final List<KimAttributeField> attributeMap = typeService.getAttributeDefinitions(type.getId()); 2390 if (attributeMap != null) { 2391 return DataDictionaryTypeServiceHelper.findAttributeField( 2392 attributeInfo.getKimAttribute().getAttributeName(), attributeMap); 2393 } 2394 } 2395 } 2396 } 2397 return null; 2398 } 2399 2400 /** 2401 * Formats the attribute value on this checkbox attribute, changing "on" to "Y" and "off" to "N" 2402 * 2403 * @param roleMemberAttributeData the attribute data to format the attribute value of 2404 */ 2405 protected void convertCheckboxAttributeData(RoleMemberAttributeDataBo roleMemberAttributeData) { 2406 if (roleMemberAttributeData.getAttributeValue().equalsIgnoreCase(KimConstants.KIM_ATTRIBUTE_BOOLEAN_TRUE_STR_VALUE_DISPLAY)) { 2407 roleMemberAttributeData.setAttributeValue(KimConstants.KIM_ATTRIBUTE_BOOLEAN_TRUE_STR_VALUE); 2408 } else if (roleMemberAttributeData.getAttributeValue().equalsIgnoreCase(KimConstants.KIM_ATTRIBUTE_BOOLEAN_FALSE_STR_VALUE_DISPLAY)) { 2409 roleMemberAttributeData.setAttributeValue(KimConstants.KIM_ATTRIBUTE_BOOLEAN_FALSE_STR_VALUE); 2410 } 2411 } 2412 2413 protected List<DelegateTypeBo> getRoleDelegations(IdentityManagementRoleDocument identityManagementRoleDocument, List<DelegateTypeBo> origDelegations){ 2414 List<DelegateTypeBo> kimDelegations = new ArrayList<DelegateTypeBo>(); 2415 DelegateTypeBo newKimDelegation; 2416 DelegateTypeBo origDelegationImplTemp = null; 2417 List<DelegateMemberBo> origMembers; 2418 boolean activatingInactive = false; 2419 String newDelegationIdAssigned = ""; 2420 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getDelegations())){ 2421 for(RoleDocumentDelegation roleDocumentDelegation: identityManagementRoleDocument.getDelegations()){ 2422 newKimDelegation = new DelegateTypeBo(); 2423 KimCommonUtilsInternal.copyProperties(newKimDelegation, roleDocumentDelegation); 2424 newKimDelegation.setRoleId(identityManagementRoleDocument.getRoleId()); 2425 if(ObjectUtils.isNotNull(origDelegations)){ 2426 for(DelegateTypeBo origDelegationImpl: origDelegations){ 2427 if(StringUtils.equals(origDelegationImpl.getRoleId(), newKimDelegation.getRoleId()) && 2428 StringUtils.equals(origDelegationImpl.getDelegationId(), newKimDelegation.getDelegationId())){ 2429 //TODO: verify if you want to add && newRoleMember.isActive() condition to if... 2430 newDelegationIdAssigned = newKimDelegation.getDelegationId(); 2431 newKimDelegation.setDelegationId(origDelegationImpl.getDelegationId()); 2432 activatingInactive = true; 2433 } 2434 if(origDelegationImpl.getDelegationId()!=null && StringUtils.equals(origDelegationImpl.getDelegationId(), newKimDelegation.getDelegationId())){ 2435 newKimDelegation.setVersionNumber(origDelegationImpl.getVersionNumber()); 2436 origDelegationImplTemp = origDelegationImpl; 2437 } 2438 } 2439 } 2440 origMembers = (origDelegationImplTemp == null || origDelegationImplTemp.getMembers()==null)? 2441 new ArrayList<DelegateMemberBo>():origDelegationImplTemp.getMembers(); 2442 newKimDelegation.setMembers(getDelegationMembers(roleDocumentDelegation.getMembers(), origMembers, activatingInactive, newDelegationIdAssigned)); 2443 kimDelegations.add(newKimDelegation); 2444 activatingInactive = false; 2445 } 2446 } 2447 return kimDelegations; 2448 } 2449 2450 protected List<DelegateMemberBo> getDelegationMembers(List<RoleDocumentDelegationMember> delegationMembers, 2451 List<DelegateMemberBo> origDelegationMembers, boolean activatingInactive, String newDelegationIdAssigned){ 2452 List<DelegateMemberBo> delegationsMembersList = new ArrayList<DelegateMemberBo>(); 2453 DelegateMemberBo newDelegationMemberImpl; 2454 DelegateMemberBo origDelegationMemberImplTemp = null; 2455 List<DelegateMemberAttributeDataBo> origAttributes; 2456 String delegationMemberId = ""; 2457 if(CollectionUtils.isNotEmpty(delegationMembers)){ 2458 for(RoleDocumentDelegationMember delegationMember: delegationMembers){ 2459 newDelegationMemberImpl = new DelegateMemberBo(); 2460 KimCommonUtilsInternal.copyProperties(newDelegationMemberImpl, delegationMember); 2461 newDelegationMemberImpl.setType(MemberType.fromCode(delegationMember.getMemberTypeCode())); 2462 if(ObjectUtils.isNotNull(origDelegationMembers)){ 2463 for(DelegateMemberBo origDelegationMember: origDelegationMembers){ 2464 if(activatingInactive && StringUtils.equals(origDelegationMember.getMemberId(), newDelegationMemberImpl.getMemberId()) && 2465 StringUtils.equals(newDelegationMemberImpl.getDelegationId(), newDelegationIdAssigned) && 2466 !origDelegationMember.isActive(new Timestamp(System.currentTimeMillis()))){ 2467 newDelegationMemberImpl.setDelegationId(origDelegationMember.getDelegationId()); 2468 delegationMemberId = newDelegationMemberImpl.getDelegationMemberId(); 2469 newDelegationMemberImpl.setDelegationMemberId(origDelegationMember.getDelegationMemberId()); 2470 } 2471 if(origDelegationMember.getDelegationMemberId()!=null && StringUtils.equals(origDelegationMember.getDelegationMemberId(), newDelegationMemberImpl.getDelegationMemberId())){ 2472 newDelegationMemberImpl.setVersionNumber(origDelegationMember.getVersionNumber()); 2473 origDelegationMemberImplTemp = origDelegationMember; 2474 } 2475 } 2476 } 2477 origAttributes = (origDelegationMemberImplTemp==null || origDelegationMemberImplTemp.getAttributeDetails()==null)? 2478 new ArrayList<DelegateMemberAttributeDataBo>():origDelegationMemberImplTemp.getAttributeDetails(); 2479 newDelegationMemberImpl.setAttributeDetails(getDelegationMemberAttributeData(delegationMember.getQualifiers(), origAttributes, activatingInactive, delegationMemberId)); 2480 newDelegationMemberImpl.setActiveFromDateValue(delegationMember.getActiveFromDate()); 2481 newDelegationMemberImpl.setActiveToDateValue(delegationMember.getActiveToDate()); 2482 delegationsMembersList.add(newDelegationMemberImpl); 2483 } 2484 } 2485 return delegationsMembersList; 2486 } 2487 2488 //TODO: implement logic same as role members - do not insert qualifiers with blank values 2489 protected List<DelegateMemberAttributeDataBo> getDelegationMemberAttributeData( 2490 List<RoleDocumentDelegationMemberQualifier> qualifiers, List<DelegateMemberAttributeDataBo> origAttributes, 2491 boolean activatingInactive, String delegationMemberId){ 2492 List<DelegateMemberAttributeDataBo> delegationMemberAttributeDataList = new ArrayList<DelegateMemberAttributeDataBo>(); 2493 DelegateMemberAttributeDataBo newDelegationMemberAttributeData; 2494 if(CollectionUtils.isNotEmpty(qualifiers)){ 2495 for(RoleDocumentDelegationMemberQualifier memberRoleQualifier: qualifiers){ 2496 if(StringUtils.isNotBlank(memberRoleQualifier.getAttrVal())){ 2497 newDelegationMemberAttributeData = new DelegateMemberAttributeDataBo(); 2498 newDelegationMemberAttributeData.setId(memberRoleQualifier.getAttrDataId()); 2499 newDelegationMemberAttributeData.setAttributeValue(memberRoleQualifier.getAttrVal()); 2500 newDelegationMemberAttributeData.setAssignedToId(memberRoleQualifier.getDelegationMemberId()); 2501 newDelegationMemberAttributeData.setKimTypeId(memberRoleQualifier.getKimTypId()); 2502 newDelegationMemberAttributeData.setKimAttributeId(memberRoleQualifier.getKimAttrDefnId()); 2503 if(ObjectUtils.isNotNull(origAttributes)){ 2504 for(DelegateMemberAttributeDataBo origAttribute: origAttributes){ 2505 if(activatingInactive && StringUtils.equals(origAttribute.getKimAttributeId(), newDelegationMemberAttributeData.getKimAttributeId()) && 2506 StringUtils.equals(newDelegationMemberAttributeData.getAssignedToId(), delegationMemberId)){ 2507 newDelegationMemberAttributeData.setAssignedToId(origAttribute.getAssignedToId()); 2508 newDelegationMemberAttributeData.setId(origAttribute.getId()); 2509 } 2510 if(StringUtils.equals(origAttribute.getId(), newDelegationMemberAttributeData.getId())){ 2511 newDelegationMemberAttributeData.setVersionNumber(origAttribute.getVersionNumber()); 2512 } 2513 } 2514 } 2515 delegationMemberAttributeDataList.add(newDelegationMemberAttributeData); 2516 } 2517 } 2518 } 2519 return delegationMemberAttributeDataList; 2520 } 2521 2522 /* Group document methods */ 2523 public void loadGroupDoc(IdentityManagementGroupDocument identityManagementGroupDocument, Group groupInfo){ 2524 //Map<String, String> criteria = new HashMap<String, String>(); 2525 //criteria.put(KimApiConstants.PrimaryKeyConstants.GROUP_ID, groupInfo.getId()); 2526 //GroupImpl kimGroupImpl = (GroupImpl) 2527 // getBusinessObjectService().findByPrimaryKey(GroupImpl.class, criteria); 2528 2529 identityManagementGroupDocument.setGroupId(groupInfo.getId()); 2530 KimType kimType = KimApiServiceLocator.getKimTypeInfoService().getKimType(groupInfo.getKimTypeId()); 2531 identityManagementGroupDocument.setKimType(kimType); 2532 identityManagementGroupDocument.setGroupTypeName(kimType.getName()); 2533 identityManagementGroupDocument.setGroupTypeId(kimType.getId()); 2534 identityManagementGroupDocument.setGroupName(groupInfo.getName()); 2535 identityManagementGroupDocument.setGroupDescription(groupInfo.getDescription()); 2536 identityManagementGroupDocument.setActive(groupInfo.isActive()); 2537 identityManagementGroupDocument.setGroupNamespace(groupInfo.getNamespaceCode()); 2538 2539 List<GroupMember> members = new ArrayList(KimApiServiceLocator.getGroupService().getMembersOfGroup(groupInfo.getId())); 2540 identityManagementGroupDocument.setMembers(loadGroupMembers(identityManagementGroupDocument, members)); 2541 2542 2543 2544 identityManagementGroupDocument.setQualifiers(loadGroupQualifiers(identityManagementGroupDocument, groupInfo.getAttributes())); 2545 identityManagementGroupDocument.setEditing(true); 2546 } 2547 2548 protected static class GroupMemberNameComparator implements Comparator<GroupDocumentMember> { 2549 /** 2550 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) 2551 */ 2552 public int compare(GroupDocumentMember m1, GroupDocumentMember m2) { 2553 return m1.getMemberName().compareToIgnoreCase(m2.getMemberName()); 2554 } 2555 } 2556 2557 protected GroupMemberNameComparator groupMemberNameComparator = new GroupMemberNameComparator(); 2558 2559 protected List<GroupDocumentMember> loadGroupMembers( 2560 IdentityManagementGroupDocument identityManagementGroupDocument, List<GroupMember> members){ 2561 List<GroupDocumentMember> pndMembers = new ArrayList<GroupDocumentMember>(); 2562 GroupDocumentMember pndMember = new GroupDocumentMember(); 2563 if(ObjectUtils.isNotNull(members)){ 2564 for(GroupMember member: members){ 2565 pndMember = new GroupDocumentMember(); 2566 2567 pndMember.setActiveFromDate(member.getActiveFromDate() == null ? null : new Timestamp(member.getActiveFromDate().getMillis())); 2568 pndMember.setActiveToDate(member.getActiveToDate() == null ? null : new Timestamp(member.getActiveToDate().getMillis())); 2569 //pndMember.setActive(member.isActive()); 2570 if(pndMember.isActive()){ 2571 pndMember.setGroupMemberId(member.getMemberId()); 2572 pndMember.setGroupId(member.getGroupId()); 2573 pndMember.setMemberId(member.getMemberId()); 2574 pndMember.setMemberName(getMemberName(member.getType(), member.getMemberId())); 2575 pndMember.setMemberFullName(getMemberFullName(member.getType(), member.getMemberId())); 2576 pndMember.setMemberTypeCode(member.getType().getCode()); 2577 pndMember.setEdit(true); 2578 pndMembers.add(pndMember); 2579 } 2580 } 2581 } 2582 Collections.sort(pndMembers, groupMemberNameComparator); 2583 return pndMembers; 2584 } 2585 2586 protected List<GroupDocumentQualifier> loadGroupQualifiers(IdentityManagementGroupDocument IdentityManagementGroupDocument, 2587 Map<String, String> attributes){ 2588 List<GroupDocumentQualifier> pndGroupQualifiers = new ArrayList<GroupDocumentQualifier>(); 2589 GroupDocumentQualifier pndGroupQualifier = new GroupDocumentQualifier(); 2590 List<KimAttributeField> origAttributes = IdentityManagementGroupDocument.getDefinitions(); 2591 boolean attributePresent = false; 2592 String origAttributeId; 2593 if(origAttributes!=null){ 2594 2595 for(KimAttributeField key: origAttributes) { 2596 origAttributeId = IdentityManagementGroupDocument.getKimAttributeDefnId(key); 2597 if(!attributes.isEmpty()){ 2598 2599 for(GroupAttributeBo groupQualifier: KimAttributeDataBo.createFrom(GroupAttributeBo.class, attributes, IdentityManagementGroupDocument.getGroupTypeId())){ 2600 if(origAttributeId!=null && ObjectUtils.isNotNull(groupQualifier.getKimAttribute()) && 2601 StringUtils.equals(origAttributeId, groupQualifier.getKimAttribute().getId())){ 2602 pndGroupQualifier = new GroupDocumentQualifier(); 2603 KimCommonUtilsInternal.copyProperties(pndGroupQualifier, groupQualifier); 2604 pndGroupQualifier.setAttrDataId(groupQualifier.getId()); 2605 pndGroupQualifier.setAttrVal(groupQualifier.getAttributeValue()); 2606 pndGroupQualifier.setKimAttrDefnId(groupQualifier.getKimAttribute().getId()); 2607 pndGroupQualifier.setKimTypId(groupQualifier.getKimType().getId()); 2608 pndGroupQualifier.setGroupId(groupQualifier.getAssignedToId()); 2609 pndGroupQualifiers.add(pndGroupQualifier); 2610 attributePresent = true; 2611 } 2612 } 2613 } 2614 if(!attributePresent){ 2615 pndGroupQualifier = new GroupDocumentQualifier(); 2616 pndGroupQualifier.setKimAttrDefnId(origAttributeId); 2617 pndGroupQualifiers.add(pndGroupQualifier); 2618 } 2619 attributePresent = false; 2620 } 2621 } 2622 return pndGroupQualifiers; 2623 } 2624 2625 /** 2626 * @see org.kuali.rice.kim.service.UiDocumentService#saveEntityPerson(IdentityManagementPersonDocument) 2627 */ 2628 @SuppressWarnings("unchecked") 2629 public void saveGroup(IdentityManagementGroupDocument identityManagementGroupDocument) { 2630 GroupBo kimGroup = new GroupBo(); 2631 Map<String, String> criteria = new HashMap<String, String>(); 2632 String groupId = identityManagementGroupDocument.getGroupId(); 2633 criteria.put("groupId", groupId); 2634 GroupBo origGroup = (GroupBo)getBusinessObjectService().findBySinglePrimaryKey(GroupBo.class, groupId); 2635 List<GroupMemberBo> origGroupMembers = new ArrayList<GroupMemberBo>(); 2636 if (ObjectUtils.isNull(origGroup)) { 2637 origGroup = new GroupBo(); 2638 kimGroup.setActive(true); 2639 } else { 2640 kimGroup.setVersionNumber(origGroup.getVersionNumber()); 2641 //TODO: when a group is inactivated, inactivate the memberships of principals in that group 2642 //and the memberships of that group in roles 2643 kimGroup.setActive(identityManagementGroupDocument.isActive()); 2644 origGroupMembers = (List<GroupMemberBo>)getBusinessObjectService().findMatching(GroupMemberBo.class, criteria); 2645 } 2646 2647 kimGroup.setId(identityManagementGroupDocument.getGroupId()); 2648 KimType kimType = getKimTypeInfoService().getKimType(identityManagementGroupDocument.getGroupTypeId()); 2649 if( kimType == null ) { 2650 throw new RuntimeException("Kim type not found for:"+identityManagementGroupDocument.getGroupTypeId()); 2651 } 2652 2653 kimGroup.setKimTypeId(kimType.getId()); 2654 kimGroup.setNamespaceCode(identityManagementGroupDocument.getGroupNamespace()); 2655 kimGroup.setName(identityManagementGroupDocument.getGroupName()); 2656 kimGroup.setDescription(identityManagementGroupDocument.getGroupDescription()); 2657 kimGroup.setAttributeDetails(getGroupAttributeData(identityManagementGroupDocument, origGroup.getAttributeDetails())); 2658 2659 List<String> oldIds; 2660 List<String> newIds; 2661 oldIds = getGroupService().getMemberPrincipalIds(kimGroup.getId()); // for the actionList update 2662 2663 2664 List<GroupMemberBo> newGroupMembersList = getGroupMembers(identityManagementGroupDocument, origGroupMembers); 2665 kimGroup.setMembers(newGroupMembersList); // add the new, complete list to the group 2666 2667 kimGroup = (GroupBo)getBusinessObjectService().save(kimGroup); 2668 2669 newIds = kimGroup.getMemberPrincipalIds(); 2670 //newIds = getGroupService().getMemberPrincipalIds(kimGroup.getGroupId()); // for the action list update 2671 2672 // Do an async update of the action list for the updated groups 2673 org.kuali.rice.kim.service.KIMServiceLocatorInternal.getGroupInternalService().updateForWorkgroupChange(kimGroup.getId(), oldIds, newIds); 2674 if(!kimGroup.isActive()){ 2675 // when a group is inactivated, inactivate the memberships of principals in that group 2676 // and the memberships of that group in roles 2677 KimImplServiceLocator.getRoleInternalService().groupInactivated(identityManagementGroupDocument.getGroupId()); 2678 } 2679 2680 } 2681 2682 protected List<GroupMemberBo> getGroupMembers(IdentityManagementGroupDocument identityManagementGroupDocument, List<GroupMemberBo> origGroupMembers){ 2683 List<GroupMemberBo> groupMembers = new ArrayList<GroupMemberBo>(); 2684 GroupMemberBo newGroupMember; 2685 if(CollectionUtils.isNotEmpty(identityManagementGroupDocument.getMembers())){ 2686 for(GroupDocumentMember documentGroupMember: identityManagementGroupDocument.getMembers()){ 2687 newGroupMember = new GroupMemberBo(); 2688 //KimCommonUtilsInternalInternal.copyProperties(newGroupMember, documentGroupMember); 2689 //copy properties manually for now until new BO created for DocumentGroupMember 2690 2691 newGroupMember.setGroupId(identityManagementGroupDocument.getGroupId()); 2692 newGroupMember.setActiveFromDateValue(documentGroupMember.getActiveFromDate()); 2693 newGroupMember.setActiveToDateValue(documentGroupMember.getActiveToDate()); 2694 newGroupMember.setMemberId(documentGroupMember.getMemberId()); 2695 newGroupMember.setTypeCode(documentGroupMember.getMemberTypeCode()); 2696 if(ObjectUtils.isNotNull(origGroupMembers)){ 2697 for(GroupMemberBo origGroupMemberImpl: origGroupMembers){ 2698 if(StringUtils.equals(origGroupMemberImpl.getGroupId(), newGroupMember.getGroupId()) && 2699 StringUtils.equals(origGroupMemberImpl.getMemberId(), newGroupMember.getMemberId()) && 2700 !origGroupMemberImpl.isActive(new Timestamp(System.currentTimeMillis()))){ 2701 //TODO: verify if you want to add && newGroupMember.isActive() condition to if... 2702 newGroupMember.setMemberId(origGroupMemberImpl.getMemberId()); 2703 } 2704 if(StringUtils.equals(origGroupMemberImpl.getGroupId(), newGroupMember.getGroupId()) && 2705 StringUtils.equals(origGroupMemberImpl.getMemberId(), newGroupMember.getMemberId()) && 2706 origGroupMemberImpl.isActive(new Timestamp(System.currentTimeMillis()))){ 2707 newGroupMember.setId(origGroupMemberImpl.getId()); 2708 newGroupMember.setVersionNumber(origGroupMemberImpl.getVersionNumber()); 2709 } 2710 } 2711 } 2712 groupMembers.add(newGroupMember); 2713 } 2714 } 2715 return groupMembers; 2716 } 2717 2718 protected List<GroupAttributeBo> getGroupAttributeData(IdentityManagementGroupDocument identityManagementGroupDocument, 2719 List<GroupAttributeBo> origAttributes){ 2720 List<GroupAttributeBo> groupAttributeDataList = new ArrayList<GroupAttributeBo>(); 2721 GroupAttributeBo newGroupAttributeData; 2722 if(CollectionUtils.isNotEmpty(identityManagementGroupDocument.getQualifiers())){ 2723 for(GroupDocumentQualifier groupQualifier: identityManagementGroupDocument.getQualifiers()){ 2724 if(StringUtils.isNotBlank(groupQualifier.getAttrVal())){ 2725 newGroupAttributeData = new GroupAttributeBo(); 2726 newGroupAttributeData.setId(groupQualifier.getAttrDataId()); 2727 newGroupAttributeData.setAttributeValue(groupQualifier.getAttrVal()); 2728 newGroupAttributeData.setAssignedToId(groupQualifier.getGroupId()); 2729 newGroupAttributeData.setKimTypeId(groupQualifier.getKimTypId()); 2730 newGroupAttributeData.setKimAttributeId(groupQualifier.getKimAttrDefnId()); 2731 if(ObjectUtils.isNotNull(origAttributes)){ 2732 for(GroupAttributeBo origAttribute: origAttributes){ 2733 if(StringUtils.equals(origAttribute.getKimAttributeId(), newGroupAttributeData.getKimAttributeId()) && 2734 StringUtils.equals(newGroupAttributeData.getAssignedToId(), origAttribute.getAssignedToId())){ 2735 newGroupAttributeData.setId(origAttribute.getId()); 2736 } 2737 if(origAttribute.getId()!=null && StringUtils.equals(origAttribute.getId(), newGroupAttributeData.getId())){ 2738 newGroupAttributeData.setVersionNumber(origAttribute.getVersionNumber()); 2739 } 2740 } 2741 } 2742 groupAttributeDataList.add(newGroupAttributeData); 2743 } 2744 } 2745 } 2746 return groupAttributeDataList; 2747 } 2748 2749 @SuppressWarnings("unchecked") 2750 public KimDocumentRoleMember getKimDocumentRoleMember(MemberType memberType, String memberId, String roleId){ 2751 if(memberType == null || StringUtils.isEmpty(memberId) || StringUtils.isEmpty(roleId)) { 2752 return null; 2753 } 2754 KimDocumentRoleMember documentRoleMember = new KimDocumentRoleMember(); 2755 documentRoleMember.setRoleId(roleId); 2756 Map<String, String> criteria = new HashMap<String, String>(); 2757 criteria.put("roleId", roleId); 2758 criteria.put("mbr_id", memberId); 2759 2760 List<RoleMemberBo> matchingRoleMembers = (List<RoleMemberBo>)getBusinessObjectService().findMatching(RoleMemberBo.class, criteria); 2761 if (matchingRoleMembers==null || matchingRoleMembers.size()<1) { return null; } 2762 2763 RoleMemberBo roleMemberImpl = matchingRoleMembers.get(0); 2764 documentRoleMember.setRoleMemberId(roleMemberImpl.getId()); 2765 if(MemberType.PRINCIPAL.equals(memberType)){ 2766 Principal principal = getIdentityService().getPrincipal(memberId); 2767 if (principal != null) { 2768 documentRoleMember.setMemberId(principal.getPrincipalId()); 2769 documentRoleMember.setMemberName(principal.getPrincipalName()); 2770 documentRoleMember.setMemberTypeCode(MemberType.PRINCIPAL.getCode()); 2771 } 2772 } else if(MemberType.GROUP.equals(memberType)){ 2773 Group group = getGroupService().getGroup(memberId); 2774 if (group != null) { 2775 documentRoleMember.setMemberNamespaceCode(group.getNamespaceCode()); 2776 documentRoleMember.setMemberId(group.getId()); 2777 documentRoleMember.setMemberName(group.getName()); 2778 documentRoleMember.setMemberTypeCode(MemberType.GROUP.getCode()); 2779 } 2780 2781 } else if(MemberType.ROLE.equals(memberType)){ 2782 Role role = getRoleService().getRole(memberId); 2783 if (role != null) { 2784 documentRoleMember.setMemberNamespaceCode(role.getNamespaceCode()); 2785 documentRoleMember.setMemberId(role.getId()); 2786 documentRoleMember.setMemberName(role.getName()); 2787 documentRoleMember.setMemberTypeCode(MemberType.ROLE.getCode()); 2788 } 2789 } 2790 return documentRoleMember; 2791 } 2792 2793 protected Set<String> getChangedRoleResponsibilityIds( 2794 IdentityManagementRoleDocument identityManagementRoleDocument, List<RoleResponsibilityBo> origRoleResponsibilities){ 2795 Set<String> lRet = new HashSet<String>(); 2796 List<String> newResp = new ArrayList<String>(); 2797 List<String> oldResp = new ArrayList<String>(); 2798 if(CollectionUtils.isNotEmpty(identityManagementRoleDocument.getResponsibilities())){ 2799 for(KimDocumentRoleResponsibility documentRoleResponsibility: identityManagementRoleDocument.getResponsibilities()){ 2800 newResp.add(documentRoleResponsibility.getResponsibilityId()); 2801 } 2802 } 2803 if(ObjectUtils.isNotNull(origRoleResponsibilities)){ 2804 for(RoleResponsibilityBo roleRespBo: origRoleResponsibilities){ 2805 oldResp.add(roleRespBo.getResponsibilityId()); 2806 } 2807 } 2808 lRet.addAll(newResp); 2809 lRet.addAll(oldResp); 2810 2811 return lRet; 2812 } 2813 2814 public KimTypeInfoService getKimTypeInfoService() { 2815 if ( kimTypeInfoService == null ) { 2816 kimTypeInfoService = KimApiServiceLocator.getKimTypeInfoService(); 2817 } 2818 return kimTypeInfoService; 2819 } 2820 2821 public List<KimDocumentRoleMember> getRoleMembers(Map<String,String> fieldValues) { 2822 fieldValues.remove(KRADConstants.BACK_LOCATION); 2823 fieldValues.remove(KRADConstants.DOC_FORM_KEY); 2824 fieldValues.remove(KRADConstants.DOC_NUM); 2825 List<KimDocumentRoleMember> matchingRoleMembers = new ArrayList<KimDocumentRoleMember>(); 2826 //Remove since they are KNS fieldValues and not BO 2827 fieldValues.remove(KRADConstants.BACK_LOCATION); 2828 fieldValues.remove(KRADConstants.DOC_FORM_KEY); 2829 fieldValues.remove(KRADConstants.DOC_NUM); 2830 2831 List<RoleMember> matchingRoleMembersTemp = getRoleService().findRoleMembers(toQuery(fieldValues)).getResults(); 2832 KimDocumentRoleMember matchingRoleMember; 2833 BusinessObject roleMemberObject; 2834 RoleMemberBo roleMemberBo; 2835 if(CollectionUtils.isNotEmpty(matchingRoleMembersTemp)){ 2836 for(RoleMember roleMember: matchingRoleMembersTemp){ 2837 roleMemberBo = getRoleMember(roleMember.getId()); 2838 roleMemberObject = getMember(roleMemberBo.getType(), roleMemberBo.getMemberId()); 2839 matchingRoleMember = new KimDocumentRoleMember(); 2840 KimCommonUtilsInternal.copyProperties(matchingRoleMember, roleMemberBo); 2841 matchingRoleMember.setMemberName(getMemberName(roleMemberBo.getType(), roleMemberObject)); 2842 matchingRoleMember.setMemberNamespaceCode(getMemberNamespaceCode(roleMemberBo.getType(), roleMemberObject)); 2843 matchingRoleMember.setQualifiers(getQualifiers(roleMemberBo.getAttributeDetails())); 2844 matchingRoleMembers.add(matchingRoleMember); 2845 } 2846 } 2847 return matchingRoleMembers; 2848 } 2849 2850 private QueryByCriteria toQuery(Map<String,?> fieldValues) { 2851 Set<Predicate> preds = new HashSet<Predicate>(); 2852 for (String key : fieldValues.keySet()) { 2853 preds.add(equal(key, fieldValues.get(key))); 2854 } 2855 Predicate[] predicates = new Predicate[0]; 2856 predicates = preds.toArray(predicates); 2857 return QueryByCriteria.Builder.fromPredicates(predicates); 2858 } 2859 2860 private List<KimDocumentRoleQualifier> getQualifiers(List<RoleMemberAttributeDataBo> attributes){ 2861 if (attributes==null) {return null;} 2862 List<KimDocumentRoleQualifier> qualifiers = new ArrayList<KimDocumentRoleQualifier>(); 2863 KimDocumentRoleQualifier qualifier; 2864 if(ObjectUtils.isNotNull(attributes)){ 2865 for(RoleMemberAttributeDataBo attribute: attributes){ 2866 qualifier = new KimDocumentRoleQualifier(); 2867 qualifier.setAttrDataId(attribute.getId()); 2868 qualifier.setAttrVal(attribute.getAttributeValue()); 2869 qualifier.setRoleMemberId(attribute.getAssignedToId()); 2870 qualifier.setKimTypId(attribute.getKimTypeId()); 2871 qualifier.setKimAttrDefnId(attribute.getKimAttributeId()); 2872 qualifier.setKimAttribute(attribute.getKimAttribute()); 2873 qualifiers.add(qualifier); 2874 } 2875 } 2876 return qualifiers; 2877 } 2878 2879 public ResponsibilityInternalService getResponsibilityInternalService() { 2880 if ( responsibilityInternalService == null ) { 2881 responsibilityInternalService = KimImplServiceLocator.getResponsibilityInternalService(); 2882 } 2883 return responsibilityInternalService; 2884 } 2885 2886 public PermissionService getPermissionService() { 2887 if ( permissionService == null ) { 2888 permissionService = KimApiServiceLocator.getPermissionService(); 2889 } 2890 return permissionService; 2891 } 2892 2893 public ParameterService getParameterService() { 2894 if ( parameterService == null ) { 2895 parameterService = CoreFrameworkServiceLocator.getParameterService(); 2896 } 2897 return parameterService; 2898 } 2899 2900 public void setParameterService(ParameterService parameterService) { 2901 this.parameterService = parameterService; 2902 } 2903 }