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.kuali.rice.core.api.membership.MemberType;
022import org.kuali.rice.kim.api.KimConstants;
023import org.kuali.rice.kim.api.group.Group;
024import org.kuali.rice.kim.api.identity.principal.Principal;
025import org.kuali.rice.kim.api.role.Role;
026import org.kuali.rice.kim.api.services.KimApiServiceLocator;
027import org.springframework.util.AutoPopulatingList;
028
029import javax.persistence.CascadeType;
030import javax.persistence.Column;
031import javax.persistence.Entity;
032import javax.persistence.FetchType;
033import javax.persistence.GeneratedValue;
034import javax.persistence.Id;
035import javax.persistence.IdClass;
036import javax.persistence.JoinColumn;
037import javax.persistence.JoinColumns;
038import javax.persistence.OneToMany;
039import javax.persistence.Table;
040import javax.persistence.Transient;
041import java.util.ArrayList;
042import java.util.HashMap;
043import java.util.List;
044import java.util.Map;
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@IdClass(KimDocumentRoleMemberId.class)
053@Entity
054@Table(name="KRIM_PND_ROLE_MBR_MT")
055public class KimDocumentRoleMember  extends KimDocumentBoActivatableToFromEditableBase {
056        private static final long serialVersionUID = -2463865643038170979L;
057
058        @Id
059        @GeneratedValue(generator="KRIM_ROLE_MBR_ID_S")
060        @GenericGenerator(name="KRIM_ROLE_MBR_ID_S",strategy="org.kuali.rice.core.jpa.spring.RiceNumericStringSequenceStyleGenerator",parameters={
061                        @Parameter(name="sequence_name",value="KRIM_ROLE_MBR_ID_S"),
062                        @Parameter(name="value_column",value="id")
063                })
064        @Column(name="ROLE_MBR_ID")
065        protected String roleMemberId;
066        
067        @Column(name="ROLE_ID")
068        protected String roleId;
069        @Column(name="MBR_ID")
070        protected String memberId;
071        
072        //TODO: remove the default
073        @Column(name="MBR_TYP_CD")
074        protected String memberTypeCode = KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.getCode();
075        @Transient
076        protected String memberName;
077        @Transient
078        protected String memberNamespaceCode;
079        
080        protected String memberFullName;
081
082        @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
083        @JoinColumns({
084            @JoinColumn(name="ROLE_MBR_ID", insertable = false, updatable = false), 
085            @JoinColumn(name="FDOC_NBR", insertable = false, updatable = false)
086        })
087        protected List <KimDocumentRoleQualifier> qualifiers = new AutoPopulatingList(KimDocumentRoleQualifier.class);
088        @Transient
089        protected String qualifiersToDisplay;
090        
091        @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
092        @JoinColumns({
093            @JoinColumn(name="ROLE_MBR_ID", insertable = false, updatable = false), 
094            @JoinColumn(name="FDOC_NBR", insertable = false, updatable = false)
095        })
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(
190                        List<KimDocumentRoleResponsibilityAction> roleRspActions) {
191                this.roleRspActions = roleRspActions;
192        }
193
194        /**
195         * @return the memberNamespaceCode
196         */
197        public String getMemberNamespaceCode() {
198                if ( memberNamespaceCode == null ) {
199                        populateDerivedValues();
200                }
201                return memberNamespaceCode;
202        }
203
204        /**
205         * @param memberNamespaceCode the memberNamespaceCode to set
206         */
207        public void setMemberNamespaceCode(String memberNamespaceCode) {
208                this.memberNamespaceCode = memberNamespaceCode;
209        }
210
211        protected void populateDerivedValues() {
212        if(MemberType.PRINCIPAL.getCode().equals(getMemberTypeCode())){
213            if(!StringUtils.isEmpty(getMemberId())){
214                Principal principalInfo = KimApiServiceLocator.getIdentityService().getPrincipal(getMemberId());
215                if (principalInfo != null) {
216                    setMemberName(principalInfo.getPrincipalName());
217                    }
218            }
219        } else if(MemberType.GROUP.getCode().equals(getMemberTypeCode())){
220                Group groupInfo = KimApiServiceLocator.getGroupService().getGroup(getMemberId());
221                if (groupInfo != null) {
222                        setMemberName(groupInfo.getName());
223                        setMemberNamespaceCode(groupInfo.getNamespaceCode());
224                }
225                
226        } else if(MemberType.ROLE.getCode().equals(getMemberTypeCode())){
227                Role role = KimApiServiceLocator.getRoleService().getRole(getMemberId());
228                setMemberName(role.getName());
229                setMemberNamespaceCode(role.getNamespaceCode());
230        }
231
232        }
233        
234        public boolean isRole(){
235                return getMemberTypeCode()!=null && getMemberTypeCode().equals(MemberType.ROLE.getCode());
236        }
237        
238        public boolean isGroup(){
239                return getMemberTypeCode()!=null && getMemberTypeCode().equals(MemberType.GROUP.getCode());
240        }
241
242        public boolean isPrincipal(){
243                return getMemberTypeCode()!=null && getMemberTypeCode().equals(MemberType.PRINCIPAL.getCode());
244        }
245
246        public Map<String, String> getQualifierAsMap() {
247                Map<String, String> m = new HashMap<String, String>();
248                for ( KimDocumentRoleQualifier data : getQualifiers() ) {
249                        if (data.getKimAttribute() == null){
250                                data.refreshReferenceObject("kimAttribute");
251                        }
252                        if (data.getKimAttribute() != null){
253                                m.put( data.getKimAttribute().getAttributeName(), data.getAttrVal() );
254                        }
255                }
256                return m;
257        }
258
259        /**
260         * @return the qualifiersToDisplay
261         */
262        public String getQualifiersToDisplay() {
263                return this.qualifiersToDisplay;
264        }
265
266        /**
267         * @param qualifiersToDisplay the qualifiersToDisplay to set
268         */
269        public void setQualifiersToDisplay(String qualifiersToDisplay) {
270                this.qualifiersToDisplay = qualifiersToDisplay;
271        }
272        
273        /**
274         * @return the memberFullName
275         */
276        public String getMemberFullName() {
277                return this.memberFullName;
278        }
279
280        /**
281         * @param memberFullName the memberFullName to set
282         */
283        public void setMemberFullName(String memberFullName) {
284                this.memberFullName = memberFullName;
285        }
286
287    public boolean isMemberNameNull() {
288        if (memberName==null) {
289            return true;
290        }
291        return false;
292    }
293
294    public boolean isMemberNameSpaceCodeNull() {
295        if (memberNamespaceCode==null) {
296            return true;
297        }
298        return false;
299    }
300
301}