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