1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.web.struts.action;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.struts.action.ActionForm;
20 import org.apache.struts.action.ActionForward;
21 import org.apache.struts.action.ActionMapping;
22 import org.kuali.rice.core.api.membership.MemberType;
23 import org.kuali.rice.core.api.util.RiceConstants;
24 import org.kuali.rice.core.api.util.RiceKeyConstants;
25 import org.kuali.rice.kew.api.exception.WorkflowException;
26 import org.kuali.rice.kim.api.KimConstants;
27 import org.kuali.rice.kim.api.group.Group;
28 import org.kuali.rice.kim.api.identity.principal.Principal;
29 import org.kuali.rice.kim.api.role.Role;
30 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
31 import org.kuali.rice.kim.bo.ui.KimDocumentRoleMember;
32 import org.kuali.rice.kim.bo.ui.KimDocumentRolePermission;
33 import org.kuali.rice.kim.bo.ui.KimDocumentRoleQualifier;
34 import org.kuali.rice.kim.bo.ui.KimDocumentRoleResponsibility;
35 import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMember;
36 import org.kuali.rice.kim.bo.ui.RoleDocumentDelegationMemberQualifier;
37 import org.kuali.rice.kim.document.IdentityManagementRoleDocument;
38 import org.kuali.rice.kim.impl.responsibility.AddResponsibilityEvent;
39 import org.kuali.rice.kim.impl.responsibility.ResponsibilityBo;
40 import org.kuali.rice.kim.impl.type.KimTypeLookupableHelperServiceImpl;
41 import org.kuali.rice.kim.rule.event.ui.AddDelegationMemberEvent;
42 import org.kuali.rice.kim.rule.event.ui.AddMemberEvent;
43 import org.kuali.rice.kim.rule.event.ui.AddPermissionEvent;
44 import org.kuali.rice.kim.web.struts.form.IdentityManagementRoleDocumentForm;
45 import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
46 import org.kuali.rice.kns.web.struts.form.KualiTableRenderFormMetadata;
47 import org.kuali.rice.kns.question.ConfirmationQuestion;
48 import org.kuali.rice.krad.service.KRADServiceLocator;
49 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
50 import org.kuali.rice.krad.util.GlobalVariables;
51 import org.kuali.rice.krad.util.KRADConstants;
52
53 import javax.servlet.http.HttpServletRequest;
54 import javax.servlet.http.HttpServletResponse;
55 import java.sql.Timestamp;
56 import java.util.ArrayList;
57 import java.util.Arrays;
58 import java.util.Calendar;
59 import java.util.HashMap;
60 import java.util.List;
61 import java.util.Map;
62
63
64
65
66 public class IdentityManagementRoleDocumentAction extends IdentityManagementDocumentActionBase {
67
68 public static final String CHANGE_DEL_ROLE_MEMBER_METHOD_TO_CALL = "changeDelegationRoleMember";
69 public static final String SWITCH_TO_ROLE_MEMBER_METHOD_TO_CALL = "jumpToRoleMember";
70 public static final String REMOVE_AFFECTED_DELEGATES_QUESTION_ID = "RemoveAffectedDelegates";
71
72 protected List<String> methodToCallToUncheckedList = new ArrayList<String>();
73
74
75
76
77
78
79
80
81
82
83
84
85
86 {
87 methodToCallToUncheckedList.add(CHANGE_DEL_ROLE_MEMBER_METHOD_TO_CALL);
88 methodToCallToUncheckedList.add(CHANGE_MEMBER_TYPE_CODE_METHOD_TO_CALL);
89 methodToCallToUncheckedList.add(CHANGE_NAMESPACE_METHOD_TO_CALL);
90 methodToCallToUncheckedList.add(SWITCH_TO_ROLE_MEMBER_METHOD_TO_CALL);
91 }
92
93
94
95
96 public IdentityManagementRoleDocumentAction() {
97 super();
98 for (String methodToCallToUncheck : methodToCallToUncheckedList) {
99 addMethodToCallToUncheckedList(methodToCallToUncheck);
100 }
101 }
102
103 public ActionForward sort(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
104
105 return mapping.findForward(RiceConstants.MAPPING_BASIC);
106 }
107
108 @Override
109 public ActionForward execute(ActionMapping mapping, ActionForm form,
110 HttpServletRequest request, HttpServletResponse response) throws Exception {
111 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
112 if (roleDocumentForm.getRoleId() == null) {
113 String roleId = request.getParameter(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID);
114 roleDocumentForm.setRoleId(roleId);
115 }
116
117 KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
118 if (roleDocumentForm.getRoleDocument()!=null && roleDocumentForm.getMemberRows() != null) {
119 memberTableMetadata.jumpToPage(memberTableMetadata.getViewedPageNumber(), roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
120
121 memberTableMetadata.sort(roleDocumentForm.getMemberRows(), roleDocumentForm.getRecordsPerPage());
122 }
123
124
125 ActionForward forward = promptForAffectedDelegates(mapping, form, request, response,
126 roleDocumentForm);
127
128 if (forward != null) { return forward; }
129
130 forward = super.execute(mapping, roleDocumentForm, request, response);
131
132 roleDocumentForm.setCanAssignRole(validAssignRole(roleDocumentForm.getRoleDocument()));
133 if (KimTypeLookupableHelperServiceImpl.hasDerivedRoleTypeService(roleDocumentForm.getRoleDocument().getKimType())) {
134 roleDocumentForm.setCanModifyAssignees(false);
135 }
136 GlobalVariables.getUserSession().addObject(KimConstants.KimUIConstants.KIM_ROLE_DOCUMENT_SHORT_KEY, roleDocumentForm.getRoleDocument());
137 return forward;
138 }
139
140
141
142
143
144
145 @Override
146 protected void loadDocument(KualiDocumentFormBase form)
147 throws WorkflowException {
148 super.loadDocument(form);
149
150 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
151 setKimType(roleDocumentForm.getRoleDocument().getRoleTypeId(), roleDocumentForm);
152 getUiDocumentService().setDelegationMembersInDocument(roleDocumentForm.getRoleDocument());
153
154 roleDocumentForm.setMember(roleDocumentForm.getRoleDocument().getBlankMember());
155 roleDocumentForm.setDelegationMember(roleDocumentForm.getRoleDocument().getBlankDelegationMember());
156
157 KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
158 if (roleDocumentForm.getMemberRows() != null) {
159 memberTableMetadata.jumpToFirstPage(roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
160 }
161 }
162
163
164
165
166
167
168 @Override
169 protected void createDocument(KualiDocumentFormBase form)
170 throws WorkflowException {
171 super.createDocument(form);
172 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
173
174 if (roleDocumentForm.getRoleId() == null) {
175 roleDocumentForm.getRoleDocument().setKimType(roleDocumentForm.getKimType());
176 roleDocumentForm.getRoleDocument().initializeDocumentForNewRole();
177 roleDocumentForm.setRoleId(roleDocumentForm.getRoleDocument().getRoleId());
178
179 } else {
180 loadRoleIntoDocument(roleDocumentForm.getRoleId(), roleDocumentForm);
181 }
182
183 roleDocumentForm.setMember(roleDocumentForm.getRoleDocument().getBlankMember());
184 roleDocumentForm.setDelegationMember(roleDocumentForm.getRoleDocument().getBlankDelegationMember());
185
186 KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
187 if (roleDocumentForm.getMemberRows() != null) {
188 memberTableMetadata.jumpToFirstPage(roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
189 }
190 }
191
192 protected void setKimType(String kimTypeId, IdentityManagementRoleDocumentForm roleDocumentForm) {
193 if (StringUtils.isNotBlank(kimTypeId)) {
194 roleDocumentForm.setKimType(KimApiServiceLocator.getKimTypeInfoService().getKimType(kimTypeId));
195 if (roleDocumentForm.getRoleDocument() != null) {
196 roleDocumentForm.getRoleDocument().setKimType(roleDocumentForm.getKimType());
197 }
198 } else if (roleDocumentForm.getRoleDocument() != null && StringUtils.isNotBlank(roleDocumentForm.getRoleDocument().getRoleTypeId())) {
199 roleDocumentForm.setKimType(KimApiServiceLocator.getKimTypeInfoService().getKimType(
200 roleDocumentForm.getRoleDocument().getRoleTypeId()));
201 roleDocumentForm.getRoleDocument().setKimType(roleDocumentForm.getKimType());
202 }
203 }
204
205 protected void loadRoleIntoDocument(String roleId, IdentityManagementRoleDocumentForm roleDocumentForm) {
206 Role role = KimApiServiceLocator.getRoleService().getRole(roleId);
207 roleDocumentForm.getRoleDocument().setMemberMetaDataTypeToSort(roleDocumentForm.getMemberTableMetadata().getColumnToSortIndex());
208 getUiDocumentService().loadRoleDoc(roleDocumentForm.getRoleDocument(), role);
209 }
210
211
212
213
214 public String getActionName() {
215 return KimConstants.KimUIConstants.KIM_ROLE_DOCUMENT_ACTION;
216 }
217
218 protected boolean validAssignRole(IdentityManagementRoleDocument document) {
219 boolean rulePassed = true;
220 if (StringUtils.isNotEmpty(document.getRoleNamespace())) {
221 Map<String, String> additionalPermissionDetails = new HashMap<String, String>();
222 additionalPermissionDetails.put(KimConstants.AttributeConstants.NAMESPACE_CODE, document.getRoleNamespace());
223 additionalPermissionDetails.put(KimConstants.AttributeConstants.ROLE_NAME, document.getRoleName());
224 if (!getDocumentHelperService().getDocumentAuthorizer(document).isAuthorizedByTemplate(
225 document,
226 KimConstants.NAMESPACE_CODE,
227 KimConstants.PermissionTemplateNames.ASSIGN_ROLE,
228 GlobalVariables.getUserSession().getPrincipalId(),
229 additionalPermissionDetails, null)) {
230 rulePassed = false;
231 }
232 }
233 return rulePassed;
234 }
235
236 public ActionForward changeMemberTypeCode(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
237 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
238 roleDocumentForm.getMember().setMemberId("");
239 return refresh(mapping, roleDocumentForm, request, response);
240 }
241
242 public ActionForward changeDelegationMemberTypeCode(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
243 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
244 KimDocumentRoleMember roleMember = roleDocumentForm.getRoleDocument().getMember(roleDocumentForm.getDelegationMember().getRoleMemberId());
245 if (roleMember != null) {
246 RoleDocumentDelegationMemberQualifier delegationMemberQualifier;
247 for (KimDocumentRoleQualifier roleQualifier : roleMember.getQualifiers()) {
248 delegationMemberQualifier = roleDocumentForm.getDelegationMember().getQualifier(roleQualifier.getKimAttrDefnId());
249 delegationMemberQualifier.setAttrVal(roleQualifier.getAttrVal());
250 }
251 }
252 return refresh(mapping, roleDocumentForm, request, response);
253 }
254
255 public ActionForward addResponsibility(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
256 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
257 KimDocumentRoleResponsibility newResponsibility = roleDocumentForm.getResponsibility();
258 if (newResponsibility != null && StringUtils.isNotBlank(newResponsibility.getResponsibilityId())) {
259 Map<String, String> criteria = new HashMap<String, String>();
260 criteria.put(KimConstants.PrimaryKeyConstants.RESPONSIBILITY_ID, newResponsibility.getResponsibilityId());
261 ResponsibilityBo responsibilityImpl = KRADServiceLocator.getBusinessObjectService().findByPrimaryKey(ResponsibilityBo.class, criteria);
262 newResponsibility.setKimResponsibility(responsibilityImpl);
263 }
264
265 if (KRADServiceLocatorWeb.getKualiRuleService().applyRules(new AddResponsibilityEvent("", roleDocumentForm.getRoleDocument(), newResponsibility))) {
266 if (newResponsibility != null) {
267 newResponsibility.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
268 }
269 roleDocumentForm.getRoleDocument().addResponsibility(newResponsibility);
270 roleDocumentForm.setResponsibility(new KimDocumentRoleResponsibility());
271 roleDocumentForm.getRoleDocument().updateMembers(newResponsibility);
272 }
273 return mapping.findForward(RiceConstants.MAPPING_BASIC);
274 }
275
276 public ActionForward deleteResponsibility(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
277 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
278 roleDocumentForm.getRoleDocument().getResponsibilities().remove(getLineToDelete(request));
279 roleDocumentForm.getRoleDocument().updateMembers(roleDocumentForm);
280 return mapping.findForward(RiceConstants.MAPPING_BASIC);
281 }
282
283 public ActionForward addPermission(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
284 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
285 KimDocumentRolePermission newPermission = roleDocumentForm.getPermission();
286 if (KRADServiceLocatorWeb.getKualiRuleService().applyRules(new AddPermissionEvent("", roleDocumentForm.getRoleDocument(), newPermission))) {
287 newPermission.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
288 newPermission.setRoleId(roleDocumentForm.getRoleDocument().getRoleId());
289 roleDocumentForm.getRoleDocument().getPermissions().add(newPermission);
290 roleDocumentForm.setPermission(new KimDocumentRolePermission());
291 }
292 return mapping.findForward(RiceConstants.MAPPING_BASIC);
293 }
294
295 public ActionForward addMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
296 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
297 KimDocumentRoleMember newMember = roleDocumentForm.getMember();
298
299
300 if (StringUtils.isEmpty(newMember.getMemberId())
301 && StringUtils.isNotEmpty(newMember.getMemberName())
302 && StringUtils.isNotEmpty(newMember.getMemberNamespaceCode())
303 && StringUtils.equals(newMember.getMemberTypeCode(), KimConstants.KimGroupMemberTypes.GROUP_MEMBER_TYPE.getCode())) {
304 Group tempGroup = KimApiServiceLocator.getGroupService().getGroupByNamespaceCodeAndName(
305 newMember.getMemberNamespaceCode(), newMember.getMemberName());
306 if (tempGroup != null) {
307 newMember.setMemberId(tempGroup.getId());
308 }
309 }
310
311
312 if (StringUtils.isEmpty(newMember.getMemberId())
313 && StringUtils.isNotEmpty(newMember.getMemberName())
314 && StringUtils.equals(newMember.getMemberTypeCode(), KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.getCode())) {
315 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(newMember.getMemberName());
316 if (principal != null) {
317 newMember.setMemberId(principal.getPrincipalId());
318 }
319 }
320 if (checkKimDocumentRoleMember(newMember) &&
321 KRADServiceLocatorWeb.getKualiRuleService().applyRules(new AddMemberEvent("", roleDocumentForm.getRoleDocument(), newMember))) {
322 newMember.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
323 roleDocumentForm.getRoleDocument().addMember(newMember);
324 roleDocumentForm.setMember(roleDocumentForm.getRoleDocument().getBlankMember());
325 roleDocumentForm.getMemberTableMetadata().jumpToLastPage(roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
326 }
327 return mapping.findForward(RiceConstants.MAPPING_BASIC);
328 }
329
330 protected boolean checkKimDocumentRoleMember(KimDocumentRoleMember newMember) {
331 boolean memberExists = false;
332 String memberName = null;
333 String memberNamespace = null;
334
335 if (StringUtils.isBlank(newMember.getMemberTypeCode()) || StringUtils.isBlank(newMember.getMemberId())) {
336 GlobalVariables.getMessageMap().putError("document.member.memberId", RiceKeyConstants.ERROR_EMPTY_ENTRY,
337 new String[]{"Member Type Code and Member ID"});
338 return false;
339 }
340
341 if (MemberType.PRINCIPAL.getCode().equals(newMember.getMemberTypeCode())) {
342 Principal pi = this.getIdentityService().getPrincipal(newMember.getMemberId());
343 if (pi != null) {
344 memberExists = true;
345 memberName = pi.getPrincipalName();
346 memberNamespace = "";
347 }
348 } else if (MemberType.GROUP.getCode().equals(newMember.getMemberTypeCode())) {
349 Group gi = KimApiServiceLocator.getGroupService().getGroup(newMember.getMemberId());
350 if (gi != null) {
351 memberExists = true;
352 memberName = gi.getName();
353 memberNamespace = gi.getNamespaceCode();
354 }
355 } else if (MemberType.ROLE.getCode().equals(newMember.getMemberTypeCode())) {
356 Role ri = KimApiServiceLocator.getRoleService().getRole(newMember.getMemberId());
357 if (!validateRole(newMember.getMemberId(), ri, "document.member.memberId", "Role")) {
358 return false;
359 } else {
360 memberExists = true;
361 memberName = ri.getName();
362 memberNamespace = ri.getNamespaceCode();
363 }
364 }
365
366 if (!memberExists) {
367 GlobalVariables.getMessageMap().putError("document.member.memberId", RiceKeyConstants.ERROR_MEMBERID_MEMBERTYPE_MISMATCH,
368 new String[]{newMember.getMemberId()});
369 return false;
370 }
371 newMember.setMemberName(memberName);
372 newMember.setMemberNamespaceCode(memberNamespace);
373 return true;
374 }
375
376 public ActionForward deleteMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
377 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
378 KimDocumentRoleMember inactivatedRoleMember = roleDocumentForm.getRoleDocument().getMembers().get(getLineToDelete(request));
379
380
381 ActionForward forward = promptForAffectedDelegates(mapping, form, request, response,
382 roleDocumentForm,
383
384 if (forward != null) {
385 return forward;
386 }
387
388 Calendar cal = Calendar.getInstance();
389 inactivatedRoleMember.setActiveToDate(new Timestamp(cal.getTimeInMillis()));
390
391 roleDocumentForm.getRoleDocument().getMembers().set(getLineToDelete(request), inactivatedRoleMember);
392 return mapping.findForward(RiceConstants.MAPPING_BASIC);
393 }
394
395 public ActionForward deletePermission(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
396 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
397 roleDocumentForm.getRoleDocument().getPermissions().remove(getLineToDelete(request));
398 return mapping.findForward(RiceConstants.MAPPING_BASIC);
399 }
400
401 protected boolean checkDelegationMember(RoleDocumentDelegationMember newMember) {
402 if (StringUtils.isBlank(newMember.getMemberTypeCode()) || StringUtils.isBlank(newMember.getMemberId())) {
403 GlobalVariables.getMessageMap().putError("document.delegationMember.memberId", RiceKeyConstants.ERROR_EMPTY_ENTRY,
404 new String[]{"Member Type Code and Member ID"});
405 return false;
406 }
407 if (MemberType.PRINCIPAL.getCode().equals(newMember.getMemberTypeCode())) {
408 Principal principalInfo = getIdentityService().getPrincipal(newMember.getMemberId());
409 if (principalInfo == null) {
410 GlobalVariables.getMessageMap().putError("document.delegationMember.memberId", RiceKeyConstants.ERROR_MEMBERID_MEMBERTYPE_MISMATCH,
411 new String[]{newMember.getMemberId()});
412 return false;
413 } else {
414 newMember.setMemberName(principalInfo.getPrincipalName());
415 }
416 } else if (MemberType.GROUP.getCode().equals(newMember.getMemberTypeCode())) {
417 Group groupInfo = null;
418 groupInfo = getGroupService().getGroup(newMember.getMemberId());
419 if (groupInfo == null) {
420 GlobalVariables.getMessageMap().putError("document.delegationMember.memberId", RiceKeyConstants.ERROR_MEMBERID_MEMBERTYPE_MISMATCH,
421 new String[]{newMember.getMemberId()});
422 return false;
423 } else {
424 newMember.setMemberName(groupInfo.getName());
425 newMember.setMemberNamespaceCode(groupInfo.getNamespaceCode());
426 }
427 } else if (MemberType.ROLE.getCode().equals(newMember.getMemberTypeCode())) {
428 Role roleInfo = KimApiServiceLocator.getRoleService().getRole(newMember.getMemberId());
429 if (roleInfo == null) {
430 GlobalVariables.getMessageMap().putError("document.delegationMember.memberId", RiceKeyConstants.ERROR_MEMBERID_MEMBERTYPE_MISMATCH,
431 new String[]{newMember.getMemberId()});
432 return false;
433 } else {
434 newMember.setMemberName(roleInfo.getName());
435 newMember.setMemberNamespaceCode(roleInfo.getNamespaceCode());
436 }
437 }
438 return true;
439 }
440
441 public ActionForward addDelegationMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
442 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
443 RoleDocumentDelegationMember newDelegationMember = roleDocumentForm.getDelegationMember();
444
445
446 if (StringUtils.isEmpty(newDelegationMember.getMemberId())
447 && StringUtils.isNotEmpty(newDelegationMember.getMemberName())
448 && StringUtils.isNotEmpty(newDelegationMember.getMemberNamespaceCode())
449 && StringUtils.equals(newDelegationMember.getMemberTypeCode(), KimConstants.KimGroupMemberTypes.GROUP_MEMBER_TYPE.getCode())) {
450 Group tempGroup = KimApiServiceLocator.getGroupService().getGroupByNamespaceCodeAndName(
451 newDelegationMember.getMemberNamespaceCode(), newDelegationMember.getMemberName());
452 if (tempGroup != null) {
453 newDelegationMember.setMemberId(tempGroup.getId());
454 }
455 }
456
457
458 if (StringUtils.isEmpty(newDelegationMember.getMemberId())
459 && StringUtils.isNotEmpty(newDelegationMember.getMemberName())
460 && StringUtils.equals(newDelegationMember.getMemberTypeCode(), KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.getCode())) {
461 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(newDelegationMember.getMemberName());
462 if (principal != null) {
463 newDelegationMember.setMemberId(principal.getPrincipalId());
464 }
465 }
466
467 if (checkDelegationMember(newDelegationMember) && KRADServiceLocatorWeb.getKualiRuleService().applyRules(
468 new AddDelegationMemberEvent("", roleDocumentForm.getRoleDocument(), newDelegationMember))) {
469 newDelegationMember.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
470 roleDocumentForm.getRoleDocument().addDelegationMember(newDelegationMember);
471 roleDocumentForm.setDelegationMember(roleDocumentForm.getRoleDocument().getBlankDelegationMember());
472 }
473 return mapping.findForward(RiceConstants.MAPPING_BASIC);
474 }
475
476 public ActionForward deleteDelegationMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
477 IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
478
479 roleDocumentForm.getRoleDocument().getDelegationMembers().remove(getLineToDelete(request));
480 roleDocumentForm.setDelegationMember(roleDocumentForm.getRoleDocument().getBlankDelegationMember());
481 return mapping.findForward(RiceConstants.MAPPING_BASIC);
482 }
483
484
485
486
487
488 public ActionForward jumpToRoleMember(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
489 IdentityManagementRoleDocumentForm idmForm = (IdentityManagementRoleDocumentForm) form;
490 String delegationRoleMemberId = getDelegationRoleMemberToJumpTo(request);
491 KualiTableRenderFormMetadata memberTableMetadata = idmForm.getMemberTableMetadata();
492 memberTableMetadata.jumpToPage(idmForm.getPageNumberOfRoleMemberId(delegationRoleMemberId),
493 idmForm.getMemberRows().size(), idmForm.getRecordsPerPage());
494 memberTableMetadata.setColumnToSortIndex(memberTableMetadata.getPreviouslySortedColumnIndex());
495 idmForm.setAnchor(delegationRoleMemberId);
496 return mapping.findForward(RiceConstants.MAPPING_BASIC);
497 }
498
499 protected String getDelegationRoleMemberToJumpTo(HttpServletRequest request) {
500 String delegationRoleMemberIdToJumpTo = "";
501 String parameterName = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE);
502 if (StringUtils.isNotBlank(parameterName)) {
503 delegationRoleMemberIdToJumpTo = StringUtils.substringBetween(parameterName, ".dmrmi", ".");
504 }
505 return delegationRoleMemberIdToJumpTo;
506 }
507
508
509
510
511
512
513
514
515
516 private ActionForward promptForAffectedDelegates(ActionMapping mapping,
517 ActionForm form, HttpServletRequest request,
518 HttpServletResponse response,
519 IdentityManagementRoleDocumentForm roleDocumentForm, KimDocumentRoleMember... roleMembersToConsiderInactive)
520 throws Exception {
521
522
523
524 List<RoleDocumentDelegationMember> activeDelegatesOfInactiveRoleMembers =
525 getActiveDelegatesOfInactiveRoleMembers(roleDocumentForm, roleMembersToConsiderInactive);
526 ActionForward forward = getAffectedDelegatesQuestionActionForward(activeDelegatesOfInactiveRoleMembers, mapping, form, request,
527 response, roleDocumentForm);
528
529 if (forward != null) {
530 return forward;
531 }
532
533 if (activeDelegatesOfInactiveRoleMembers.size() > 0) {
534 Calendar cal = Calendar.getInstance();
535
536 for (RoleDocumentDelegationMember delegateToDeactivate : activeDelegatesOfInactiveRoleMembers) {
537 delegateToDeactivate.setActiveToDate(new Timestamp(cal.getTimeInMillis()));
538 }
539 }
540 return null;
541 }
542
543
544
545
546
547
548
549
550 private ActionForward getAffectedDelegatesQuestionActionForward(List<RoleDocumentDelegationMember> activeDelegatesOfInactiveRoleMembers,
551 ActionMapping mapping, ActionForm form, HttpServletRequest request,
552 HttpServletResponse response,
553 IdentityManagementRoleDocumentForm roleDocumentForm)
554 throws Exception {
555
556 if (activeDelegatesOfInactiveRoleMembers.size() > 0) {
557 Object question = getQuestion(request);
558
559 if (question == null || !REMOVE_AFFECTED_DELEGATES_QUESTION_ID.equals(question)) {
560 return performQuestionWithoutInput(mapping, form, request, response, REMOVE_AFFECTED_DELEGATES_QUESTION_ID,
561 getKualiConfigurationService().getPropertyValueAsString(
562 RiceKeyConstants.QUESTION_ACTIVE_DELEGATES_FOR_INACTIVE_MEMBERS),
563 KRADConstants.CONFIRMATION_QUESTION, roleDocumentForm.getMethodToCall(), StringUtils.EMPTY);
564 }
565 Object buttonClicked = request.getParameter(KRADConstants.QUESTION_CLICKED_BUTTON);
566 if ((REMOVE_AFFECTED_DELEGATES_QUESTION_ID.equals(question)) && ConfirmationQuestion.YES.equals(buttonClicked)) {
567
568
569 } else {
570
571 return mapping.findForward(RiceConstants.MAPPING_BASIC);
572 }
573 }
574
575 return null;
576 }
577
578
579
580
581
582
583
584
585 private List<RoleDocumentDelegationMember> getActiveDelegatesOfInactiveRoleMembers(
586 IdentityManagementRoleDocumentForm roleDocumentForm, KimDocumentRoleMember... roleMembersToConsiderInactive) {
587 List<KimDocumentRoleMember> roleMembers = roleDocumentForm.getMemberRows();
588 List<KimDocumentRoleMember> inactiveRoleMembers = new ArrayList<KimDocumentRoleMember>();
589 List<RoleDocumentDelegationMember> activeDelegatesOfInactivatedRoleMembers = new ArrayList<RoleDocumentDelegationMember>();
590
591 inactiveRoleMembers.addAll(Arrays.asList(roleMembersToConsiderInactive));
592
593 if (roleMembers != null) {
594 for (KimDocumentRoleMember roleMember : roleMembers) {
595 if (roleMember != null) {
596 if (!roleMember.isActive()) {
597 inactiveRoleMembers.add(roleMember);
598 }
599 }
600 }
601 }
602
603 for (KimDocumentRoleMember inactiveRoleMember : inactiveRoleMembers) {
604
605 List<RoleDocumentDelegationMember> delegationMembers = roleDocumentForm.getRoleDocument().getDelegationMembers();
606 if (delegationMembers != null) {
607 for (RoleDocumentDelegationMember delegationMember : delegationMembers) {
608 if (delegationMember != null && delegationMember.isActive()) {
609
610 if (delegationMember.getRoleMemberId().equals(inactiveRoleMember.getRoleMemberId())) {
611 activeDelegatesOfInactivatedRoleMembers.add(delegationMember);
612 }
613 }
614 }
615 }
616 }
617 return activeDelegatesOfInactivatedRoleMembers;
618 }
619
620
621
622
623
624
625
626 @Override
627 protected boolean validateRole(String roleId, Role role, String propertyName, String message) {
628 if (role == null) {
629 GlobalVariables.getMessageMap().putError(propertyName, RiceKeyConstants.ERROR_INVALID_ROLE, roleId);
630 return false;
631 }
632 return true;
633 }
634
635
636 }