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