001/** 002 * Copyright 2005-2017 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 */ 016package org.kuali.rice.kim.document; 017 018import java.util.ArrayList; 019import java.util.Comparator; 020import java.util.List; 021 022import javax.persistence.CascadeType; 023import javax.persistence.Column; 024import javax.persistence.Convert; 025import javax.persistence.Entity; 026import javax.persistence.JoinColumn; 027import javax.persistence.OneToMany; 028import javax.persistence.Table; 029import javax.persistence.Transient; 030 031import org.apache.commons.lang.StringUtils; 032import org.eclipse.persistence.annotations.JoinFetch; 033import org.eclipse.persistence.annotations.JoinFetchType; 034import org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange; 035import org.kuali.rice.kim.api.KimConstants; 036import org.kuali.rice.kim.api.responsibility.ResponsibilityService; 037import org.kuali.rice.kim.api.services.KimApiServiceLocator; 038import org.kuali.rice.kim.api.type.KimAttributeField; 039import org.kuali.rice.kim.api.type.KimType; 040import org.kuali.rice.kim.bo.ui.KimDocumentRoleMember; 041import org.kuali.rice.kim.bo.ui.KimDocumentRolePermission; 042import org.kuali.rice.kim.bo.ui.KimDocumentRoleQualifier; 043import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibility; 044import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibilityAction; 045import org.kuali.rice.kim.bo.ui.RoleDocumentDelegation; 046import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMember; 047import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMemberQualifier; 048import org.kuali.rice.kim.impl.responsibility.ResponsibilityInternalService; 049import org.kuali.rice.kim.impl.services.KimImplServiceLocator; 050import org.kuali.rice.kim.impl.type.IdentityManagementTypeAttributeTransactionalDocument; 051import org.kuali.rice.kim.service.KIMServiceLocatorInternal; 052import org.kuali.rice.kim.web.struts.form.IdentityManagementRoleDocumentForm; 053import org.kuali.rice.krad.data.jpa.converters.BooleanYNConverter; 054import org.kuali.rice.krad.data.platform.MaxValueIncrementerFactory; 055import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer; 056import org.springframework.util.AutoPopulatingList; 057 058/** 059 * This is a description of what this class does - bhargavp don't forget to fill this in. 060 * 061 * @author Kuali Rice Team (rice.collab@kuali.org) 062 * 063 */ 064@Entity 065@Table(name = "KRIM_ROLE_DOCUMENT_T") 066public class IdentityManagementRoleDocument extends IdentityManagementTypeAttributeTransactionalDocument { 067 068 private static final long serialVersionUID = 1L; 069 070 // principal data 071 @Column(name = "ROLE_ID") 072 protected String roleId; 073 074 @Column(name = "ROLE_TYP_ID") 075 protected String roleTypeId; 076 077 @Transient 078 protected String roleTypeName; 079 080 @Column(name = "ROLE_NMSPC") 081 protected String roleNamespace = ""; 082 083 @Column(name = "ROLE_NM") 084 protected String roleName = ""; 085 086 @Column(name = "DESC_TXT") 087 protected String roleDescription = ""; 088 089 @Column(name = "ACTV_IND") 090 @Convert(converter = BooleanYNConverter.class) 091 protected boolean active = true; 092 093 @Transient 094 protected boolean editing; 095 096 @JoinFetch(value= JoinFetchType.OUTER) 097 @OneToMany(targetEntity = KimDocumentRolePermission.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST }) 098 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR", insertable = false, updatable = false) 099 protected List<KimDocumentRolePermission> permissions = new AutoPopulatingList<KimDocumentRolePermission>(KimDocumentRolePermission.class); 100 101 @JoinFetch(value= JoinFetchType.OUTER) 102 @OneToMany(targetEntity = KimDocumentRoleResponsibility.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST }) 103 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR", insertable = false, updatable = false) 104 protected List<KimDocumentRoleResponsibility> responsibilities = new AutoPopulatingList<KimDocumentRoleResponsibility>(KimDocumentRoleResponsibility.class); 105 106 @JoinFetch(value= JoinFetchType.OUTER) 107 @OneToMany(targetEntity = KimDocumentRoleMember.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST }) 108 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR", insertable = false, updatable = false) 109 protected List<KimDocumentRoleMember> modifiedMembers = new AutoPopulatingList<KimDocumentRoleMember>(KimDocumentRoleMember.class); 110 111 @Transient 112 private List<RoleDocumentDelegationMember> delegationMembers = new AutoPopulatingList<RoleDocumentDelegationMember>(RoleDocumentDelegationMember.class); 113 114 @JoinFetch(value= JoinFetchType.OUTER) 115 @OneToMany(targetEntity = RoleDocumentDelegation.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST }) 116 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR", insertable = false, updatable = false) 117 private List<RoleDocumentDelegation> delegations = new AutoPopulatingList<RoleDocumentDelegation>(RoleDocumentDelegation.class); 118 119 @Transient 120 protected List<KimDocumentRoleMember> searchResultMembers = new ArrayList<KimDocumentRoleMember>(); 121 122 @Transient 123 protected List<KimDocumentRoleMember> members = new ArrayList<KimDocumentRoleMember>(); 124 125 @Transient 126 private transient ResponsibilityService responsibilityService; 127 128 @Transient 129 private transient ResponsibilityInternalService responsibilityInternalService; 130 131 public IdentityManagementRoleDocument() { 132 } 133 134 /** 135 * @return the active 136 */ 137 public boolean isActive() { 138 return this.active; 139 } 140 141 /** 142 * @param active the active to set 143 */ 144 public void setActive(boolean active) { 145 this.active = active; 146 } 147 148 /** 149 * @param roleId the roleId to set 150 */ 151 public void setRoleId(String roleId) { 152 this.roleId = roleId; 153 } 154 155 /** 156 * @return the roleName 157 */ 158 public String getRoleName() { 159 return this.roleName; 160 } 161 162 /** 163 * @param roleName the roleName to set 164 */ 165 public void setRoleName(String roleName) { 166 this.roleName = roleName; 167 } 168 169 /** 170 * @return the roleDescription 171 */ 172 public String getRoleDescription() { 173 return this.roleDescription; 174 } 175 176 /** 177 * @param roleDescription the roleDescription to set 178 */ 179 public void setRoleDescription(String roleDescription) { 180 this.roleDescription = roleDescription; 181 } 182 183 /** 184 * @return the roleNamespace 185 */ 186 public String getRoleNamespace() { 187 return this.roleNamespace; 188 } 189 190 /** 191 * @param roleNamespace the roleNamespace to set 192 */ 193 public void setRoleNamespace(String roleNamespace) { 194 this.roleNamespace = roleNamespace; 195 } 196 197 /** 198 * @return the roleTypeId 199 */ 200 public String getRoleTypeId() { 201 return this.roleTypeId; 202 } 203 204 /** 205 * @param roleTypeId the roleTypeId to set 206 */ 207 public void setRoleTypeId(String roleTypeId) { 208 this.roleTypeId = roleTypeId; 209 } 210 211 /** 212 * @return the roleTypeName 213 */ 214 public String getRoleTypeName() { 215 if (roleTypeName == null) { 216 if (kimType != null) { 217 roleTypeName = kimType.getName(); 218 } else if (roleTypeId != null) { 219 setKimType(KimApiServiceLocator.getKimTypeInfoService().getKimType(roleTypeId)); 220 if (kimType != null) { 221 roleTypeName = kimType.getName(); 222 } 223 } 224 } 225 return this.roleTypeName; 226 } 227 228 /** 229 * @param roleTypeName the roleTypeName to set 230 */ 231 public void setRoleTypeName(String roleTypeName) { 232 this.roleTypeName = roleTypeName; 233 } 234 235 /** 236 * @return the delegationMembers 237 */ 238 @Override 239 public List<RoleDocumentDelegationMember> getDelegationMembers() { 240 return this.delegationMembers; 241 } 242 243 /** 244 * @param delegationMembers the delegationMembers to set 245 */ 246 @Override 247 public void setDelegationMembers(List<RoleDocumentDelegationMember> delegationMembers) { 248 this.delegationMembers = delegationMembers; 249 } 250 251 /** 252 * @return the permissions 253 */ 254 public List<KimDocumentRolePermission> getPermissions() { 255 return this.permissions; 256 } 257 258 /** 259 * @param permissions the permissions to set 260 */ 261 public void setPermissions(List<KimDocumentRolePermission> permissions) { 262 this.permissions = permissions; 263 } 264 265 /** 266 * @return the responsibilities 267 */ 268 public List<KimDocumentRoleResponsibility> getResponsibilities() { 269 return this.responsibilities; 270 } 271 272 /** 273 * @param responsibilities the responsibilities to set 274 */ 275 public void setResponsibilities(List<KimDocumentRoleResponsibility> responsibilities) { 276 this.responsibilities = responsibilities; 277 } 278 279 /** 280 * @return the members 281 */ 282 public List<KimDocumentRoleMember> getMembers() { 283 return this.members; 284 } 285 286 public enum RoleMemberMetaDataType implements Comparator<KimDocumentRoleMember> { 287 288 MEMBER_ID("memberId"), MEMBER_NAME("memberName"), FULL_MEMBER_NAME("memberFullName"); 289 290 private final String attributeName; 291 292 RoleMemberMetaDataType(String anAttributeName) { 293 this.attributeName = anAttributeName; 294 } 295 296 public String getAttributeName() { 297 return attributeName; 298 } 299 300 @Override 301 public int compare(KimDocumentRoleMember m1, KimDocumentRoleMember m2) { 302 if (m1 == null && m2 == null) { 303 return 0; 304 } else if (m1 == null) { 305 return -1; 306 } else if (m2 == null) { 307 return 1; 308 } 309 if (this.getAttributeName().equals(MEMBER_ID.getAttributeName())) { 310 return m1.getMemberId().compareToIgnoreCase(m2.getMemberId()); 311 } else if (this.getAttributeName().equals(FULL_MEMBER_NAME.getAttributeName())) { 312 return m1.getMemberFullName().compareToIgnoreCase(m2.getMemberFullName()); 313 } 314 return m1.getMemberName().compareToIgnoreCase(m2.getMemberName()); 315 } 316 } 317 318 public void setMemberMetaDataTypeToSort(Integer columnNumber) { 319 switch(columnNumber) { 320 case 1: 321 this.memberMetaDataType = RoleMemberMetaDataType.MEMBER_ID; 322 break; 323 case 2: 324 this.memberMetaDataType = RoleMemberMetaDataType.MEMBER_NAME; 325 break; 326 case 3: 327 this.memberMetaDataType = RoleMemberMetaDataType.FULL_MEMBER_NAME; 328 break; 329 default: 330 this.memberMetaDataType = RoleMemberMetaDataType.MEMBER_NAME; 331 break; 332 } 333 } 334 335 @Transient 336 protected RoleMemberMetaDataType memberMetaDataType = RoleMemberMetaDataType.MEMBER_NAME; 337 338 public RoleMemberMetaDataType getMemberMetaDataType() { 339 return memberMetaDataType; 340 } 341 342 public void setMemberMetaDataType(RoleMemberMetaDataType memberMetaDataType) { 343 this.memberMetaDataType = memberMetaDataType; 344 } 345 346 /** 347 * @return the members 348 */ 349 public KimDocumentRoleMember getMember(String roleMemberId) { 350 if (StringUtils.isEmpty(roleMemberId)) { 351 return null; 352 } 353 for (KimDocumentRoleMember roleMember : getMembers()) { 354 if (roleMemberId.equals(roleMember.getRoleMemberId())) { 355 return roleMember; 356 } 357 } 358 return null; 359 } 360 361 /** 362 * @param members the members to set 363 */ 364 public void setMembers(List<KimDocumentRoleMember> members) { 365 this.members = members; 366 } 367 368 /** 369 * @return the modifiedMembers 370 */ 371 public List<KimDocumentRoleMember> getModifiedMembers() { 372 return this.modifiedMembers; 373 } 374 375 /** 376 * @param modifiedMembers the modifiedMembers to set 377 */ 378 public void setModifiedMembers(List<KimDocumentRoleMember> modifiedMembers) { 379 this.modifiedMembers = modifiedMembers; 380 } 381 382 /** 383 * @return the searchResultMembers 384 */ 385 public List<KimDocumentRoleMember> getSearchResultMembers() { 386 return this.searchResultMembers; 387 } 388 389 /** 390 * @param searchResultMembers the searchResultMembers to set 391 */ 392 public void setSearchResultMembers(List<KimDocumentRoleMember> searchResultMembers) { 393 this.searchResultMembers = searchResultMembers; 394 } 395 396 public void addResponsibility(KimDocumentRoleResponsibility roleResponsibility) { 397 if (!getResponsibilityInternalService().areActionsAtAssignmentLevelById(roleResponsibility.getResponsibilityId())) { 398 roleResponsibility.getRoleRspActions().add(getNewRespAction(roleResponsibility)); 399 } 400 getResponsibilities().add(roleResponsibility); 401 } 402 403 protected KimDocumentRoleResponsibilityAction getNewRespAction(KimDocumentRoleResponsibility roleResponsibility) { 404 KimDocumentRoleResponsibilityAction roleRspAction = new KimDocumentRoleResponsibilityAction(); 405 roleRspAction.setKimResponsibility(roleResponsibility.getKimResponsibility()); 406 roleRspAction.setRoleResponsibilityId(roleResponsibility.getRoleResponsibilityId()); 407 return roleRspAction; 408 } 409 410 public void addDelegationMember(RoleDocumentDelegationMember newDelegationMember) { 411 getDelegationMembers().add(newDelegationMember); 412 } 413 414 public void addMember(KimDocumentRoleMember member) { 415 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_MBR_ID_S); 416 member.setRoleMemberId(incrementer.nextStringValue()); 417 setupMemberRspActions(member); 418 getModifiedMembers().add(member); 419 } 420 421 public KimDocumentRoleMember getBlankMember() { 422 KimDocumentRoleMember member = new KimDocumentRoleMember(); 423 KimDocumentRoleQualifier qualifier; 424 if (getDefinitions() != null) { 425 for (KimAttributeField key : getDefinitions()) { 426 qualifier = new KimDocumentRoleQualifier(); 427 qualifier.setKimAttrDefnId(getKimAttributeDefnId(key)); 428 member.getQualifiers().add(qualifier); 429 } 430 } 431 setupMemberRspActions(member); 432 return member; 433 } 434 435 public RoleDocumentDelegationMember getBlankDelegationMember() { 436 RoleDocumentDelegationMember member = new RoleDocumentDelegationMember(); 437 RoleDocumentDelegationMemberQualifier qualifier; 438 if (getDefinitions() != null) { 439 for (KimAttributeField key : getDefinitions()) { 440 qualifier = new RoleDocumentDelegationMemberQualifier(); 441 setAttrDefnIdForDelMemberQualifier(qualifier, key); 442 member.getQualifiers().add(qualifier); 443 } 444 } 445 return member; 446 } 447 448 public void setupMemberRspActions(KimDocumentRoleMember member) { 449 member.getRoleRspActions().clear(); 450 for (KimDocumentRoleResponsibility roleResp : getResponsibilities()) { 451 if (getResponsibilityInternalService().areActionsAtAssignmentLevelById(roleResp.getResponsibilityId())) { 452 KimDocumentRoleResponsibilityAction action = new KimDocumentRoleResponsibilityAction(); 453 action.setRoleResponsibilityId("*"); 454 action.setRoleMemberId(member.getRoleMemberId()); 455 member.getRoleRspActions().add(action); 456 break; 457 } 458 } 459 } 460 461 public void updateMembers(IdentityManagementRoleDocumentForm roleDocumentForm) { 462 for (KimDocumentRoleMember member : roleDocumentForm.getRoleDocument().getMembers()) { 463 roleDocumentForm.getRoleDocument().setupMemberRspActions(member); 464 } 465 } 466 467 public void updateMembers(KimDocumentRoleResponsibility newResponsibility) { 468 for (KimDocumentRoleMember member : getMembers()) { 469 setupMemberRspActions(newResponsibility, member); 470 } 471 } 472 473 public void setupMemberRspActions(KimDocumentRoleResponsibility roleResp, KimDocumentRoleMember member) { 474 if ((member.getRoleRspActions() == null || member.getRoleRspActions().size() < 1) && getResponsibilityInternalService().areActionsAtAssignmentLevelById(roleResp.getResponsibilityId())) { 475 KimDocumentRoleResponsibilityAction action = new KimDocumentRoleResponsibilityAction(); 476 action.setRoleResponsibilityId("*"); 477 action.setRoleMemberId(member.getRoleMemberId()); 478 if (member.getRoleRspActions() == null) { 479 member.setRoleRspActions(new ArrayList<KimDocumentRoleResponsibilityAction>()); 480 } 481 member.getRoleRspActions().add(action); 482 } 483 } 484 485 protected void setAttrDefnIdForDelMemberQualifier(RoleDocumentDelegationMemberQualifier qualifier, KimAttributeField definition) { 486 qualifier.setKimAttrDefnId(definition.getId()); 487 } 488 489 /** 490 * @see org.kuali.rice.krad.document.DocumentBase#doRouteStatusChange(org.kuali.rice.kew.framework.postprocessor.DocumentRouteStatusChange) 491 */ 492 @Override 493 public void doRouteStatusChange(DocumentRouteStatusChange statusChangeEvent) { 494 super.doRouteStatusChange(statusChangeEvent); 495 if (getDocumentHeader().getWorkflowDocument().isProcessed()) { 496 KIMServiceLocatorInternal.getUiDocumentService().saveRole(this); 497 } 498 } 499 500 public void initializeDocumentForNewRole() { 501 if (StringUtils.isBlank(this.roleId)) { 502 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_ID_S); 503 this.roleId = incrementer.nextStringValue(); 504 } 505 if (StringUtils.isBlank(this.roleTypeId)) { 506 this.roleTypeId = "1"; 507 } 508 } 509 510 public String getRoleId() { 511 if (StringUtils.isBlank(this.roleId)) { 512 initializeDocumentForNewRole(); 513 } 514 return roleId; 515 } 516 517 @Override 518 public void prepareForSave() { 519 String roleId; 520 if (StringUtils.isBlank(getRoleId())) { 521 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_ID_S); 522 roleId = incrementer.nextStringValue(); 523 setRoleId(roleId); 524 } else { 525 roleId = getRoleId(); 526 } 527 if (getPermissions() != null) { 528 for (KimDocumentRolePermission permission : getPermissions()) { 529 permission.setRoleId(roleId); 530 permission.setDocumentNumber(getDocumentNumber()); 531 if (StringUtils.isBlank(permission.getRolePermissionId())) { 532 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_PERM_ID_S); 533 permission.setRolePermissionId(incrementer.nextStringValue()); 534 } 535 } 536 } 537 if (getResponsibilities() != null) { 538 for (KimDocumentRoleResponsibility responsibility : getResponsibilities()) { 539 String nextRoleResponsibilityId = null; 540 541 if (StringUtils.isBlank(responsibility.getRoleResponsibilityId())) { 542 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_RSP_ID_S); 543 nextRoleResponsibilityId = incrementer.nextStringValue(); 544 responsibility.setRoleResponsibilityId(nextRoleResponsibilityId); 545 } else{ 546 responsibility.setDocumentNumber(getDocumentNumber()); 547 responsibility.setVersionNumber(null); 548 } 549 550 responsibility.setRoleId(roleId); 551 if (!getResponsibilityInternalService().areActionsAtAssignmentLevelById(responsibility.getResponsibilityId())) { 552 if (StringUtils.isBlank(responsibility.getRoleRspActions().get(0).getRoleResponsibilityActionId())) { 553 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_RSP_ACTN_ID_S); 554 responsibility.getRoleRspActions().get(0).setRoleResponsibilityActionId(incrementer.nextStringValue()); 555 } 556 557 if (StringUtils.isBlank(responsibility.getRoleRspActions().get(0).getRoleResponsibilityId())) { 558 if (StringUtils.isBlank(nextRoleResponsibilityId)) { 559 responsibility.getRoleRspActions().get(0).setRoleResponsibilityId(responsibility.getRoleResponsibilityId()); 560 } else { 561 responsibility.getRoleRspActions().get(0).setRoleResponsibilityId(nextRoleResponsibilityId); 562 } 563 } 564 565 responsibility.getRoleRspActions().get(0).setRoleMemberId("*"); 566 responsibility.getRoleRspActions().get(0).setDocumentNumber(getDocumentNumber()); 567 } 568 } 569 } 570 if (getModifiedMembers() != null) { 571 for (KimDocumentRoleMember member : getModifiedMembers()) { 572 member.setDocumentNumber(getDocumentNumber()); 573 member.setRoleId(roleId); 574 if (StringUtils.isBlank(member.getRoleMemberId())) { 575 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_MBR_ID_S); 576 member.setRoleMemberId(incrementer.nextStringValue()); 577 } 578 for (KimDocumentRoleQualifier qualifier : member.getQualifiers()) { 579 qualifier.setDocumentNumber(getDocumentNumber()); 580 qualifier.setRoleMemberId(member.getRoleMemberId()); 581 qualifier.setKimTypId(getKimType().getId()); 582 } 583 for (KimDocumentRoleResponsibilityAction roleRespAction : member.getRoleRspActions()) { 584 if (StringUtils.isBlank(roleRespAction.getRoleResponsibilityActionId())) { 585 DataFieldMaxValueIncrementer incrementer = MaxValueIncrementerFactory.getIncrementer(KimImplServiceLocator.getDataSource(), KimConstants.SequenceNames.KRIM_ROLE_RSP_ACTN_ID_S); 586 roleRespAction.setRoleResponsibilityActionId(incrementer.nextStringValue()); 587 roleRespAction.setDocumentNumber(getDocumentNumber()); 588 } 589 roleRespAction.setRoleMemberId(member.getRoleMemberId()); 590 roleRespAction.setDocumentNumber(getDocumentNumber()); 591 if (!StringUtils.equals(roleRespAction.getRoleResponsibilityId(), "*")) { 592 for (KimDocumentRoleResponsibility responsibility : getResponsibilities()) { 593 if (StringUtils.equals(roleRespAction.getKimResponsibility().getId(), responsibility.getResponsibilityId())) { 594 roleRespAction.setRoleResponsibilityId(responsibility.getRoleResponsibilityId()); 595 } 596 } 597 } 598 // This will cause a problem with JPA 599// if (roleRespAction.getVersionNumber() == null) { 600// roleRespAction.setVersionNumber(new Long(1)); 601// } 602 } 603 } 604 } 605 if (getDelegationMembers() != null) { 606 for (RoleDocumentDelegationMember delegationMember : getDelegationMembers()) { 607 delegationMember.setDocumentNumber(getDocumentNumber()); 608 addDelegationMemberToDelegation(delegationMember); 609 } 610 for (RoleDocumentDelegation delegation : getDelegations()) { 611 delegation.setDocumentNumber(getDocumentNumber()); 612 delegation.setKimTypeId(getKimType().getId()); 613 List<RoleDocumentDelegationMember> membersToRemove = new AutoPopulatingList<RoleDocumentDelegationMember>(RoleDocumentDelegationMember.class); 614 for (RoleDocumentDelegationMember member : delegation.getMembers()) { 615 if (delegation.getDelegationId().equals(member.getDelegationId()) && delegation.getDelegationTypeCode().equals(member.getDelegationTypeCode())) { 616 for (RoleDocumentDelegationMemberQualifier qualifier : member.getQualifiers()) { 617 qualifier.setKimTypId(getKimType().getId()); 618 qualifier.setDocumentNumber(getDocumentNumber()); 619 } 620 } else { 621 membersToRemove.add(member); 622 } 623 } 624 if (!membersToRemove.isEmpty()) { 625 for (RoleDocumentDelegationMember member : membersToRemove) { 626 delegation.getMembers().remove(member); 627 } 628 } 629 delegation.setRoleId(roleId); 630 } 631 } 632 } 633 634 public ResponsibilityService getResponsibilityService() { 635 if (responsibilityService == null) { 636 responsibilityService = KimApiServiceLocator.getResponsibilityService(); 637 } 638 return responsibilityService; 639 } 640 641 public ResponsibilityInternalService getResponsibilityInternalService() { 642 if (responsibilityInternalService == null) { 643 responsibilityInternalService = KimImplServiceLocator.getResponsibilityInternalService(); 644 } 645 return responsibilityInternalService; 646 } 647 648 /** 649 * @return the editing 650 */ 651 public boolean isEditing() { 652 return this.editing; 653 } 654 655 /** 656 * @param editing the editing to set 657 */ 658 public void setEditing(boolean editing) { 659 this.editing = editing; 660 } 661 662 /** 663 * @return the delegations 664 */ 665 @Override 666 public List<RoleDocumentDelegation> getDelegations() { 667 return this.delegations; 668 } 669 670 /** 671 * @param delegations the delegations to set 672 */ 673 @Override 674 public void setDelegations(List<RoleDocumentDelegation> delegations) { 675 this.delegations = delegations; 676 } 677 678 @Override 679 public void setKimType(KimType kimType) { 680 super.setKimType(kimType); 681 if (kimType != null) { 682 setRoleTypeId(kimType.getId()); 683 setRoleTypeName(kimType.getName()); 684 } 685 } 686}