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