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 java.util.ArrayList; 019import java.util.HashMap; 020import java.util.List; 021import java.util.Map; 022 023import javax.persistence.CascadeType; 024import javax.persistence.Column; 025import javax.persistence.Entity; 026import javax.persistence.Id; 027import javax.persistence.JoinColumn; 028import javax.persistence.JoinColumns; 029import javax.persistence.OneToMany; 030import javax.persistence.Table; 031import javax.persistence.Transient; 032 033import org.apache.commons.lang.StringUtils; 034import org.eclipse.persistence.annotations.JoinFetch; 035import org.eclipse.persistence.annotations.JoinFetchType; 036import org.kuali.rice.core.api.membership.MemberType; 037import org.kuali.rice.kim.api.KimConstants; 038import org.kuali.rice.kim.api.group.Group; 039import org.kuali.rice.kim.api.identity.principal.Principal; 040import org.kuali.rice.kim.api.role.Role; 041import org.kuali.rice.kim.api.services.KimApiServiceLocator; 042import org.kuali.rice.kim.impl.role.RoleMemberBo; 043import org.kuali.rice.krad.data.KradDataServiceLocator; 044import org.springframework.util.AutoPopulatingList; 045 046/** 047 * This is a description of what this class does - shyu don't forget to fill this in. 048 * 049 * @author Kuali Rice Team (rice.collab@kuali.org) 050 * 051 */ 052@Entity 053@Table(name = "KRIM_PND_ROLE_MBR_MT") 054public class KimDocumentRoleMember extends KimDocumentBoActivatableToFromEditableBase { 055 056 private static final long serialVersionUID = -2463865643038170979L; 057 058 @Id 059 @Column(name = "ROLE_MBR_ID") 060 protected String roleMemberId; 061 062 @Column(name = "ROLE_ID") 063 protected String roleId; 064 065 @Column(name = "MBR_ID") 066 protected String memberId; 067 068 //TODO: remove the default 069 @Column(name = "MBR_TYP_CD") 070 protected String memberTypeCode = KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.getCode(); 071 072 @Transient 073 protected String memberName; 074 075 @Transient 076 protected String memberNamespaceCode; 077 078 @Transient 079 protected String memberFullName; 080 081 @JoinFetch(value= JoinFetchType.OUTER) 082 @OneToMany(targetEntity = KimDocumentRoleQualifier.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST }) 083 @JoinColumns({ 084 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR", insertable = false, updatable = false), 085 @JoinColumn(name = "ROLE_MBR_ID", referencedColumnName = "ROLE_MBR_ID", insertable = false, updatable = false) }) 086 protected List<KimDocumentRoleQualifier> qualifiers = new AutoPopulatingList<KimDocumentRoleQualifier>(KimDocumentRoleQualifier.class); 087 088 @Transient 089 protected String qualifiersToDisplay; 090 091 @JoinFetch(value= JoinFetchType.OUTER) 092 @OneToMany(targetEntity = KimDocumentRoleResponsibilityAction.class, orphanRemoval = true, cascade = { CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST }) 093 @JoinColumns({ 094 @JoinColumn(name = "FDOC_NBR", referencedColumnName = "FDOC_NBR", insertable = false, updatable = false), 095 @JoinColumn(name = "ROLE_MBR_ID", referencedColumnName = "ROLE_MBR_ID", insertable = false, updatable = false) }) 096 private List<KimDocumentRoleResponsibilityAction> roleRspActions; 097 098 public KimDocumentRoleMember() { 099 qualifiers = new ArrayList<KimDocumentRoleQualifier>(); 100 roleRspActions = new ArrayList<KimDocumentRoleResponsibilityAction>(); 101 } 102 103 public int getNumberOfQualifiers() { 104 return qualifiers == null ? 0 : qualifiers.size(); 105 } 106 107 /** 108 * @return the memberId 109 */ 110 public String getMemberId() { 111 return this.memberId; 112 } 113 114 /** 115 * @param memberId the memberId to set 116 */ 117 public void setMemberId(String memberId) { 118 this.memberId = memberId; 119 } 120 121 public String getRoleMemberId() { 122 return this.roleMemberId; 123 } 124 125 public void setRoleMemberId(String roleMemberId) { 126 this.roleMemberId = roleMemberId; 127 } 128 129 public String getRoleId() { 130 return this.roleId; 131 } 132 133 public void setRoleId(String roleId) { 134 this.roleId = roleId; 135 } 136 137 public KimDocumentRoleQualifier getQualifier(String kimAttributeDefnId) { 138 for (KimDocumentRoleQualifier qualifier : qualifiers) { 139 if (qualifier.getKimAttrDefnId().equals(kimAttributeDefnId)) { 140 return qualifier; 141 } 142 } 143 return null; 144 } 145 146 public List<KimDocumentRoleQualifier> getQualifiers() { 147 return this.qualifiers; 148 } 149 150 public void setQualifiers(List<KimDocumentRoleQualifier> qualifiers) { 151 this.qualifiers = qualifiers; 152 } 153 154 /** 155 * @return the memberTypeCode 156 */ 157 public String getMemberTypeCode() { 158 return this.memberTypeCode; 159 } 160 161 /** 162 * @param memberTypeCode the memberTypeCode to set 163 */ 164 public void setMemberTypeCode(String memberTypeCode) { 165 this.memberTypeCode = memberTypeCode; 166 } 167 168 /** 169 * @return the memberName 170 */ 171 public String getMemberName() { 172 if (memberName == null) { 173 populateDerivedValues(); 174 } 175 return memberName; 176 } 177 178 /** 179 * @param memberName the memberName to set 180 */ 181 public void setMemberName(String memberName) { 182 this.memberName = memberName; 183 } 184 185 public List<KimDocumentRoleResponsibilityAction> getRoleRspActions() { 186 return this.roleRspActions; 187 } 188 189 public void setRoleRspActions(List<KimDocumentRoleResponsibilityAction> roleRspActions) { 190 this.roleRspActions = roleRspActions; 191 } 192 193 /** 194 * @return the memberNamespaceCode 195 */ 196 public String getMemberNamespaceCode() { 197 if (memberNamespaceCode == null) { 198 populateDerivedValues(); 199 } 200 return memberNamespaceCode; 201 } 202 203 /** 204 * @param memberNamespaceCode the memberNamespaceCode to set 205 */ 206 public void setMemberNamespaceCode(String memberNamespaceCode) { 207 this.memberNamespaceCode = memberNamespaceCode; 208 } 209 210 protected void populateDerivedValues() { 211 if (!StringUtils.isEmpty(getMemberId())) { 212 if (MemberType.PRINCIPAL.getCode().equals(getMemberTypeCode())) { 213 Principal principalInfo = KimApiServiceLocator.getIdentityService().getPrincipal(getMemberId()); 214 if (principalInfo != null) { 215 setMemberName(principalInfo.getPrincipalName()); 216 } 217 } else if (MemberType.GROUP.getCode().equals(getMemberTypeCode())) { 218 Group groupInfo = KimApiServiceLocator.getGroupService().getGroup(getMemberId()); 219 if (groupInfo != null) { 220 setMemberName(groupInfo.getName()); 221 setMemberNamespaceCode(groupInfo.getNamespaceCode()); 222 } 223 } else if (MemberType.ROLE.getCode().equals(getMemberTypeCode())) { 224 Role roleInfo = KimApiServiceLocator.getRoleService().getRole(getMemberId()); 225 if (roleInfo != null) { 226 setMemberName(roleInfo.getName()); 227 setMemberNamespaceCode(roleInfo.getNamespaceCode()); 228 } 229 } 230 } 231 } 232 233 public boolean isRole() { 234 return getMemberTypeCode() != null && getMemberTypeCode().equals(MemberType.ROLE.getCode()); 235 } 236 237 public boolean isGroup() { 238 return getMemberTypeCode() != null && getMemberTypeCode().equals(MemberType.GROUP.getCode()); 239 } 240 241 public boolean isPrincipal() { 242 return getMemberTypeCode() != null && getMemberTypeCode().equals(MemberType.PRINCIPAL.getCode()); 243 } 244 245 public Map<String, String> getQualifierAsMap() { 246 Map<String, String> m = new HashMap<String, String>(); 247 for (KimDocumentRoleQualifier data : getQualifiers()) { 248 if (data.getKimAttribute() == null) { 249 KradDataServiceLocator.getDataObjectService().wrap(this).fetchRelationship("kimAttribute"); 250 } 251 if (data.getKimAttribute() != null) { 252 m.put(data.getKimAttribute().getAttributeName(), data.getAttrVal()); 253 } 254 } 255 return m; 256 } 257 258 public String getQualifiersToDisplay() { 259 return this.qualifiersToDisplay; 260 } 261 262 public void setQualifiersToDisplay(String qualifiersToDisplay) { 263 this.qualifiersToDisplay = qualifiersToDisplay; 264 } 265 266 public String getMemberFullName() { 267 return this.memberFullName; 268 } 269 270 public void setMemberFullName(String memberFullName) { 271 this.memberFullName = memberFullName; 272 } 273 274 public boolean isMemberNameNull() { 275 if (memberName==null) { 276 return true; 277 } 278 return false; 279 } 280 281 public boolean isMemberNameSpaceCodeNull() { 282 if (memberNamespaceCode==null) { 283 return true; 284 } 285 return false; 286 } 287 288 public static void copyProperties(KimDocumentRoleMember copyToKimDocRoleMember, RoleMemberBo copyFromRoleMbrBo){ 289 if(copyToKimDocRoleMember!=null && copyFromRoleMbrBo!=null) { 290 copyToKimDocRoleMember.setRoleId(copyFromRoleMbrBo.getRoleId()); 291 copyToKimDocRoleMember.setMemberId(copyFromRoleMbrBo.getMemberId()); 292 copyToKimDocRoleMember.setMemberName(copyFromRoleMbrBo.getMemberName()); 293 copyToKimDocRoleMember.setMemberNamespaceCode(copyFromRoleMbrBo.getMemberNamespaceCode()); 294 copyToKimDocRoleMember.setActive(copyFromRoleMbrBo.isActive()); 295 copyToKimDocRoleMember.setActiveFromDate(copyFromRoleMbrBo.getActiveFromDateValue()); 296 copyToKimDocRoleMember.setActiveToDate(copyFromRoleMbrBo.getActiveToDateValue()); 297 copyToKimDocRoleMember.setVersionNumber(copyFromRoleMbrBo.getVersionNumber()); 298 copyToKimDocRoleMember.setObjectId(copyFromRoleMbrBo.getObjectId()); 299 } 300 } 301}