001/** 002 * Copyright 2005-2016 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.bo.ui; 017 018import org.apache.commons.lang.StringUtils; 019import org.eclipse.persistence.annotations.JoinFetch; 020import org.eclipse.persistence.annotations.JoinFetchType; 021import org.kuali.rice.core.api.delegation.DelegationType; 022import org.kuali.rice.core.api.membership.MemberType; 023import org.kuali.rice.kim.api.KimConstants; 024import org.kuali.rice.kim.api.group.Group; 025import org.kuali.rice.kim.api.role.Role; 026import org.kuali.rice.kim.api.services.KimApiServiceLocator; 027import org.kuali.rice.kim.impl.role.RoleBo; 028import org.kuali.rice.kim.impl.role.RoleMemberBo; 029import org.kuali.rice.kim.impl.type.KimTypeAttributesHelper; 030import org.kuali.rice.kim.impl.type.KimTypeBo; 031import org.kuali.rice.kim.service.KIMServiceLocatorInternal; 032import org.kuali.rice.kim.service.UiDocumentService; 033import org.kuali.rice.krad.data.jpa.PortableSequenceGenerator; 034import org.springframework.util.AutoPopulatingList; 035 036import javax.persistence.CascadeType; 037import javax.persistence.Column; 038import javax.persistence.Entity; 039import javax.persistence.GeneratedValue; 040import javax.persistence.Id; 041import javax.persistence.JoinColumn; 042import javax.persistence.JoinColumns; 043import javax.persistence.OneToMany; 044import javax.persistence.Table; 045import javax.persistence.Transient; 046import java.util.List; 047 048/** 049 * 050 * @author Kuali Rice Team (kuali-rice@googleroles.com) 051 * 052 */ 053@Entity 054@Table(name = "KRIM_PND_DLGN_MBR_T") 055public class RoleDocumentDelegationMember extends KimDocumentBoActivatableToFromBase { 056 057 private static final long serialVersionUID = 1L; 058 059 @PortableSequenceGenerator(name = "KRIM_DLGN_MBR_ID_S") 060 @GeneratedValue(generator = "KRIM_DLGN_MBR_ID_S") 061 @Id 062 @Column(name = "DLGN_MBR_ID") 063 protected String delegationMemberId; 064 065 @Column(name = "ROLE_MBR_ID") 066 protected String roleMemberId; 067 068 @Transient 069 protected String roleMemberMemberId; 070 071 @Transient 072 protected String roleMemberMemberTypeCode; 073 074 @Transient 075 protected String roleMemberName; 076 077 @Transient 078 protected String roleMemberNamespaceCode; 079 080 @Transient 081 private KimTypeAttributesHelper attributesHelper; 082 083 //For Person Document UI - flattening the delegation - delegation member hierarchy 084 @Transient 085 protected RoleBo roleBo = new RoleBo(); 086 087 @Column(name = "DLGN_ID") 088 protected String delegationId; 089 090 @Column(name = "MBR_ID") 091 protected String memberId; 092 093 @Column(name = "MBR_TYP_CD") 094 protected String memberTypeCode = KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.getCode(); 095 096 @Transient 097 protected String memberNamespaceCode; 098 099 @Column(name = "MBR_NM") 100 protected String memberName; 101 102 @JoinFetch(value= JoinFetchType.OUTER) 103 @OneToMany(targetEntity = RoleDocumentDelegationMemberQualifier.class, orphanRemoval = true, cascade = CascadeType.ALL) 104 @JoinColumns({ 105 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR"), 106 @JoinColumn(name = "DLGN_MBR_ID", referencedColumnName = "DLGN_MBR_ID") }) 107 protected List<RoleDocumentDelegationMemberQualifier> qualifiers = new AutoPopulatingList<RoleDocumentDelegationMemberQualifier>(RoleDocumentDelegationMemberQualifier.class); 108 109 @Transient 110 protected String delegationTypeCode; 111 112 public void loadTransientRoleFields() { 113 if ((getRoleBo() == null || getRoleBo().getId() == null) && getRoleMemberId() != null) { 114 UiDocumentService uiDocumentService = KIMServiceLocatorInternal.getUiDocumentService(); 115 RoleMemberBo roleMember = uiDocumentService.getRoleMember(getRoleMemberId()); 116 setRoleMemberMemberId(roleMember.getMemberId()); 117 setRoleMemberMemberTypeCode(roleMember.getType().getCode()); 118 setRoleMemberName(uiDocumentService.getMemberName(MemberType.fromCode(getRoleMemberMemberTypeCode()), getRoleMemberMemberId())); 119 setRoleMemberNamespaceCode(uiDocumentService.getMemberNamespaceCode(MemberType.fromCode(getRoleMemberMemberTypeCode()), getRoleMemberMemberId())); 120 Role role = KimApiServiceLocator.getRoleService().getRole(roleMember.getRoleId()); 121 setRoleBo(RoleBo.from(role)); 122 } 123 } 124 125 public String getDelegationTypeCode() { 126 return this.delegationTypeCode; 127 } 128 129 public void setDelegationTypeCode(String delegationTypeCode) { 130 this.delegationTypeCode = delegationTypeCode; 131 } 132 133 public String getDelegationId() { 134 return this.delegationId; 135 } 136 137 public void setDelegationId(String delegationId) { 138 this.delegationId = delegationId; 139 } 140 141 /** 142 * @return the qualifiers 143 */ 144 public List<RoleDocumentDelegationMemberQualifier> getQualifiers() { 145 return this.qualifiers; 146 } 147 148 public RoleDocumentDelegationMemberQualifier getQualifier(String kimAttributeDefnId) { 149 for (RoleDocumentDelegationMemberQualifier qualifier : qualifiers) { 150 if (qualifier.getKimAttrDefnId().equals(kimAttributeDefnId)) { 151 return qualifier; 152 } 153 } 154 return null; 155 } 156 157 /** 158 * @param qualifiers the qualifiers to set 159 */ 160 public void setQualifiers(List<RoleDocumentDelegationMemberQualifier> qualifiers) { 161 this.qualifiers = qualifiers; 162 } 163 164 public int getNumberOfQualifiers() { 165 return qualifiers == null ? 0 : qualifiers.size(); 166 } 167 168 /** 169 * @return the memberId 170 */ 171 public String getMemberId() { 172 return this.memberId; 173 } 174 175 /** 176 * @param memberId the memberId to set 177 */ 178 public void setMemberId(String memberId) { 179 this.memberId = memberId; 180 } 181 182 /** 183 * @return the memberName 184 */ 185 public String getMemberName() { 186 return this.memberName; 187 } 188 189 /** 190 * @param memberName the memberName to set 191 */ 192 public void setMemberName(String memberName) { 193 this.memberName = memberName; 194 } 195 196 /** 197 * @return the assignedToId 198 */ 199 public String getDelegationMemberId() { 200 return this.delegationMemberId; 201 } 202 203 /** 204 * @param delegationMemberId the assignedToId to set 205 */ 206 public void setDelegationMemberId(String delegationMemberId) { 207 this.delegationMemberId = delegationMemberId; 208 } 209 210 /** 211 * @return the memberTypeCode 212 */ 213 public String getMemberTypeCode() { 214 return this.memberTypeCode; 215 } 216 217 /** 218 * @param memberTypeCode the memberTypeCode to set 219 */ 220 public void setMemberTypeCode(String memberTypeCode) { 221 this.memberTypeCode = memberTypeCode; 222 } 223 224 public boolean isDelegationPrimary() { 225 return DelegationType.PRIMARY.getCode().equals(getDelegationTypeCode()); 226 } 227 228 public boolean isDelegationSecondary() { 229 return DelegationType.SECONDARY.getCode().equals(getDelegationTypeCode()); 230 } 231 232 /** 233 * @return the memberNamespaceCode 234 */ 235 public String getMemberNamespaceCode() { 236 if (memberNamespaceCode == null) { 237 populateDerivedValues(); 238 } 239 return this.memberNamespaceCode; 240 } 241 242 /** 243 * @param memberNamespaceCode the memberNamespaceCode to set 244 */ 245 public void setMemberNamespaceCode(String memberNamespaceCode) { 246 this.memberNamespaceCode = memberNamespaceCode; 247 } 248 249 protected void populateDerivedValues() { 250 if (!StringUtils.isEmpty(getMemberId())) { 251 if (MemberType.GROUP.getCode().equals(getMemberTypeCode())) { 252 Group groupInfo = KimApiServiceLocator.getGroupService().getGroup(getMemberId()); 253 if (groupInfo != null) { 254 setMemberNamespaceCode(groupInfo.getNamespaceCode()); 255 } 256 } else if (MemberType.ROLE.getCode().equals(getMemberTypeCode())) { 257 Role roleInfo = KimApiServiceLocator.getRoleService().getRole(getMemberId()); 258 if (roleInfo != null) { 259 setMemberNamespaceCode(roleInfo.getNamespaceCode()); 260 } 261 } 262 } 263 } 264 265 /** 266 * @return the roleMemberId 267 */ 268 public String getRoleMemberId() { 269 return this.roleMemberId; 270 } 271 272 /** 273 * @param roleMemberId the roleMemberId to set 274 */ 275 public void setRoleMemberId(String roleMemberId) { 276 this.roleMemberId = roleMemberId; 277 } 278 279 public boolean isRole() { 280 return getMemberTypeCode() != null && getMemberTypeCode().equals(MemberType.ROLE.getCode()); 281 } 282 283 public boolean isGroup() { 284 return getMemberTypeCode() != null && getMemberTypeCode().equals(MemberType.GROUP.getCode()); 285 } 286 287 public boolean isPrincipal() { 288 return getMemberTypeCode() != null && getMemberTypeCode().equals(MemberType.PRINCIPAL.getCode()); 289 } 290 291 /** 292 * @return the roleMemberName 293 */ 294 public String getRoleMemberName() { 295 return this.roleMemberName; 296 } 297 298 /** 299 * @param roleMemberName the roleMemberName to set 300 */ 301 public void setRoleMemberName(String roleMemberName) { 302 this.roleMemberName = roleMemberName; 303 } 304 305 /** 306 * @return the roleMemberNamespaceCode 307 */ 308 public String getRoleMemberNamespaceCode() { 309 return this.roleMemberNamespaceCode; 310 } 311 312 /** 313 * @param roleMemberNamespaceCode the roleMemberNamespaceCode to set 314 */ 315 public void setRoleMemberNamespaceCode(String roleMemberNamespaceCode) { 316 this.roleMemberNamespaceCode = roleMemberNamespaceCode; 317 } 318 319 /** 320 * @return the roleBo 321 */ 322 public RoleBo getRoleBo() { 323 return this.roleBo; 324 } 325 326 /** 327 * @param roleBo the roleBo to set 328 */ 329 public void setRoleBo(RoleBo roleBo) { 330 this.roleBo = roleBo; 331 setAttributesHelper(new KimTypeAttributesHelper(KimTypeBo.to(roleBo.getKimRoleType()))); 332 } 333 334 /** 335 * @return the attributesHelper 336 */ 337 public KimTypeAttributesHelper getAttributesHelper() { 338 return this.attributesHelper; 339 } 340 341 /** 342 * @param attributesHelper the attributesHelper to set 343 */ 344 public void setAttributesHelper(KimTypeAttributesHelper attributesHelper) { 345 this.attributesHelper = attributesHelper; 346 } 347 348 /** 349 * @return the roleMemberMemberId 350 */ 351 public String getRoleMemberMemberId() { 352 return this.roleMemberMemberId; 353 } 354 355 /** 356 * @param roleMemberMemberId the roleMemberMemberId to set 357 */ 358 public void setRoleMemberMemberId(String roleMemberMemberId) { 359 this.roleMemberMemberId = roleMemberMemberId; 360 } 361 362 /** 363 * @return the roleMemberMemberTypeCode 364 */ 365 public String getRoleMemberMemberTypeCode() { 366 return this.roleMemberMemberTypeCode; 367 } 368 369 /** 370 * @param roleMemberMemberTypeCode the roleMemberMemberTypeCode to set 371 */ 372 public void setRoleMemberMemberTypeCode(String roleMemberMemberTypeCode) { 373 this.roleMemberMemberTypeCode = roleMemberMemberTypeCode; 374 } 375}