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}