001/**
002 * Copyright 2005-2017 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.web.struts.form;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.core.api.membership.MemberType;
020import org.kuali.rice.core.web.format.DateDisplayTimestampObjectFormatter;
021import org.kuali.rice.kim.api.services.KimApiServiceLocator;
022import org.kuali.rice.kim.api.type.KimType;
023import org.kuali.rice.kim.bo.ui.KimDocumentRoleMember;
024import org.kuali.rice.kim.bo.ui.KimDocumentRolePermission;
025import org.kuali.rice.kim.bo.ui.KimDocumentRoleQualifier;
026import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibility;
027import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMember;
028import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMemberQualifier;
029import org.kuali.rice.kim.document.IdentityManagementRoleDocument;
030import org.kuali.rice.kim.impl.group.GroupBo;
031import org.kuali.rice.kim.impl.identity.PersonImpl;
032import org.kuali.rice.kim.impl.role.RoleBo;
033import org.kuali.rice.kns.util.TableRenderUtil;
034import org.kuali.rice.krad.document.Document;
035
036import java.util.List;
037
038/**
039 * This is a description of what this class does - shyu don't forget to fill this in. 
040 * 
041 * @author Kuali Rice Team (rice.collab@kuali.org)
042 *
043 */
044public class IdentityManagementRoleDocumentForm extends IdentityManagementDocumentFormBase {
045        protected static final long serialVersionUID = 7099079353241080483L;
046        {
047                requiredNonEditableProperties.add("methodToCall");
048                requiredNonEditableProperties.add("roleCommand");
049        }
050        
051        protected String delegationMemberRoleMemberId;
052        protected String dmrmi;
053        protected boolean canAssignRole = true;
054        protected boolean canModifyAssignees = true;
055        protected KimType kimType;
056    protected String memberSearchValue;
057
058    //kim type id
059    protected String id;
060
061        protected KimDocumentRoleMember member;
062        {
063                member = new KimDocumentRoleMember();
064                member.getQualifiers().add(new KimDocumentRoleQualifier());
065
066        }
067        protected KimDocumentRolePermission permission = new KimDocumentRolePermission();
068    protected KimDocumentRoleResponsibility responsibility = new KimDocumentRoleResponsibility();
069    protected RoleDocumentDelegationMember delegationMember;
070        {
071                delegationMember = new RoleDocumentDelegationMember();
072                delegationMember.getQualifiers().add(new RoleDocumentDelegationMemberQualifier());
073        }
074        protected String roleId;
075
076
077        public IdentityManagementRoleDocumentForm() {
078        super();
079
080        setFormatterType("document.members.activeFromDate", DateDisplayTimestampObjectFormatter.class);
081        setFormatterType("document.delegationMembers.activeFromDate", DateDisplayTimestampObjectFormatter.class);
082        setFormatterType("document.members.activeToDate", DateDisplayTimestampObjectFormatter.class);
083        setFormatterType("document.delegationMembers.activeToDate", DateDisplayTimestampObjectFormatter.class);
084    }
085
086        
087    /**
088         * @return the delegationMember
089         */
090        public RoleDocumentDelegationMember getDelegationMember() {
091                return this.delegationMember;
092        }
093
094        /**
095         * @param delegationMember the delegationMember to set
096         */
097        public void setDelegationMember(RoleDocumentDelegationMember delegationMember) {
098                this.delegationMember = delegationMember;
099        }
100
101        @Override
102        public String getDefaultDocumentTypeName(){
103                return "IdentityManagementRoleDocument";
104        }
105
106    @Override
107    public void setDocument(Document document) {
108        if (document != null) {
109            // Restore transient KimType on the document as it gets nuked during save, submit (etc?)
110            IdentityManagementRoleDocument roleDocument = (IdentityManagementRoleDocument) document;
111            roleDocument.setKimType(getKimType());
112        }
113
114        super.setDocument(document);
115    }
116
117    public IdentityManagementRoleDocument getRoleDocument() {
118        return (IdentityManagementRoleDocument) this.getDocument();
119    }
120
121        /**
122         * @return the member
123         */
124        public KimDocumentRoleMember getMember() {
125                return this.member;
126        }
127
128        /**
129         * @param member the member to set
130         */
131        public void setMember(KimDocumentRoleMember member) {
132                this.member = member;
133        }
134
135    public String getId() {
136        return id;
137    }
138
139    public void setId(String id) {
140        this.id = id;
141        setKimType(KimApiServiceLocator.getKimTypeInfoService().getKimType(this.id));
142    }
143
144        /**
145         * @return the permission
146         */
147        public KimDocumentRolePermission getPermission() {
148                return this.permission;
149        }
150
151        /**
152         * @param permission the permission to set
153         */
154        public void setPermission(KimDocumentRolePermission permission) {
155                this.permission = permission;
156        }
157
158        /**
159         * @return the responsibility
160         */
161        public KimDocumentRoleResponsibility getResponsibility() {
162                return this.responsibility;
163        }
164
165        /**
166         * @param responsibility the responsibility to set
167         */
168        public void setResponsibility(KimDocumentRoleResponsibility responsibility) {
169                this.responsibility = responsibility;
170        }
171
172        public String getMemberFieldConversions(){
173                if(member==null) {
174                        return "";
175        }
176                return getMemberFieldConversions(member.getMemberTypeCode());
177        }
178
179        public String getMemberBusinessObjectName(){
180                if(member==null) {
181                        return "";
182        }
183                return getMemberBusinessObjectName(member.getMemberTypeCode());
184        }
185
186        public String getDelegationMemberFieldConversions(){
187                if(getDelegationMember()==null) {
188                        return "";
189        }
190                String memberTypeCode = getDelegationMember().getMemberTypeCode();
191                if(MemberType.PRINCIPAL.getCode().equals(memberTypeCode)) {
192                        return "principalId:delegationMember.memberId,principalName:delegationMember.memberName";
193        }
194                else if(MemberType.ROLE.getCode().equals(memberTypeCode)) {
195                        return "id:delegationMember.memberId,name:delegationMember.memberName,namespaceCode:delegationMember.memberNamespaceCode";
196        }
197                else if(MemberType.GROUP.getCode().equals(memberTypeCode)) {
198                        return "id:delegationMember.memberId,name:delegationMember.memberName,namespaceCode:delegationMember.memberNamespaceCode";
199        }
200                return "";
201        }
202
203        public String getDelegationMemberBusinessObjectName(){
204                if(getDelegationMember()==null) {
205                        return "";
206        }
207                return getMemberBusinessObjectName(getDelegationMember().getMemberTypeCode());
208        }
209
210        protected String getMemberFieldConversions(String memberTypeCode){
211                if(MemberType.PRINCIPAL.getCode().equals(memberTypeCode)) {
212                        return "principalId:member.memberId,principalName:member.memberName";
213        }
214                else if(MemberType.ROLE.getCode().equals(memberTypeCode)) {
215                        return "id:member.memberId,name:member.memberName,namespaceCode:member.memberNamespaceCode";
216        }
217                else if(MemberType.GROUP.getCode().equals(memberTypeCode)) {
218                        return "id:member.memberId,name:member.memberName,namespaceCode:member.memberNamespaceCode";
219        }
220                return "";
221        }
222
223        protected String getMemberBusinessObjectName(String memberTypeCode){
224                if(MemberType.PRINCIPAL.getCode().equals(memberTypeCode)) {
225                        return PersonImpl.class.getName();
226        }
227                else if(MemberType.ROLE.getCode().equals(memberTypeCode)) {
228                        return RoleBo.class.getName();
229        }
230                else if(MemberType.GROUP.getCode().equals(memberTypeCode)) {
231                        return GroupBo.class.getName();
232        }
233                return "";
234        }
235
236        /**
237         * @return the kimType
238         */
239        public KimType getKimType() {
240                return this.kimType;
241        }
242
243        /**
244         * @param kimType the kimType to set
245         */
246        public void setKimType(KimType kimType) {
247                this.kimType = kimType;
248                if ( kimType != null && getRoleDocument() != null ) {
249                        getRoleDocument().setKimType(kimType);
250                }
251        }
252
253        /**
254         * @return the canAssignRole
255         */
256        public boolean isCanAssignRole() {
257                return this.canAssignRole;
258        }
259
260        /**
261         * @param canAssignRole the canAssignRole to set
262         */
263        public void setCanAssignRole(boolean canAssignRole) {
264                this.canAssignRole = canAssignRole;
265        }
266
267        /**
268         * @return the canModifyAssignees
269         */
270        public boolean isCanModifyAssignees() {
271                return this.canModifyAssignees;
272        }
273
274        /**
275         * @param canModifyAssignees the canModifyAssignees to set
276         */
277        public void setCanModifyAssignees(boolean canModifyAssignees) {
278                this.canModifyAssignees = canModifyAssignees;
279        }
280        
281        public List<KimDocumentRoleMember> getMemberRows() {
282                return getRoleDocument().getMembers();
283        }
284
285        public int getIndexOfRoleMemberFromMemberRows(String roleMemberId){
286                int index = 0;
287                for(KimDocumentRoleMember roleMember: getMemberRows()){
288                        if(StringUtils.equals(roleMember.getRoleMemberId(), roleMemberId)){
289                                break;
290                        }
291                        index++;
292                }
293                return index;
294        }
295
296        public int getPageNumberOfRoleMemberId(String roleMemberId){
297                if(StringUtils.isEmpty(roleMemberId)) {return 1;}
298                int index = getIndexOfRoleMemberFromMemberRows(roleMemberId);
299                return TableRenderUtil.computeTotalNumberOfPages(index + 1, getRecordsPerPage())-1;
300        }
301        
302        /**
303         * @return the roleId
304         */
305        public String getRoleId() {
306                return this.roleId;
307        }
308
309        /**
310         * @param roleId the roleId to set
311         */
312        public void setRoleId(String roleId) {
313                this.roleId = roleId;
314        }
315
316        /**
317         * @return the delegationMemberRoleMemberId
318         */
319        public String getDelegationMemberRoleMemberId() {
320                return this.delegationMemberRoleMemberId;
321        }
322
323        /**
324         * @param delegationMemberRoleMemberId the delegationMemberRoleMemberId to set
325         */
326        public void setDelegationMemberRoleMemberId(String delegationMemberRoleMemberId) {
327                this.delegationMemberRoleMemberId = delegationMemberRoleMemberId;
328                getDelegationMember().setRoleMemberId(delegationMemberRoleMemberId);
329                KimDocumentRoleMember roleMember = getRoleDocument().getMember(delegationMemberRoleMemberId);
330                if(roleMember!=null){
331                        delegationMember.setRoleMemberId(roleMember.getRoleMemberId());
332                        delegationMember.setRoleMemberName(roleMember.getMemberName());
333                        delegationMember.setRoleMemberNamespaceCode(roleMember.getMemberNamespaceCode());
334                        RoleDocumentDelegationMemberQualifier delegationMemberQualifier;
335                        for(KimDocumentRoleQualifier roleQualifier: roleMember.getQualifiers()){
336                                delegationMemberQualifier = getDelegationMember().getQualifier(roleQualifier.getKimAttrDefnId());
337                                delegationMemberQualifier.setAttrVal(roleQualifier.getAttrVal());
338                        }
339                }
340        }
341
342        /**
343         * @return the dmrmi
344         */
345        public String getDmrmi() {
346                return this.dmrmi;
347        }
348
349        /**
350         * @param dmrmi the dmrmi to set
351         */
352        public void setDmrmi(String dmrmi) {
353                this.dmrmi = dmrmi;
354        }
355
356    /**
357     * @return the memberSearchValue
358     */
359    public String getMemberSearchValue() {
360        return this.memberSearchValue;
361    }
362
363    /**
364     * @param memberSearchValue the memberSearchValue to set
365     */
366    public void setMemberSearchValue(String memberSearchValue) {
367        this.memberSearchValue = memberSearchValue;
368    }
369
370}