public ActionForward addResponsibility(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
    KimDocumentRoleResponsibility newResponsibility = roleDocumentForm.getResponsibility();
    if (newResponsibility != null
        && StringUtils.isNotBlank(newResponsibility.getResponsibilityId())) {
      ResponsibilityBo responsibilityImpl =
          KradDataServiceLocator.getDataObjectService()
              .find(ResponsibilityBo.class, newResponsibility.getResponsibilityId());
      newResponsibility.setKimResponsibility(responsibilityImpl);
    }

    if (KRADServiceLocatorWeb.getKualiRuleService()
        .applyRules(
            new AddResponsibilityEvent(
                "", roleDocumentForm.getRoleDocument(), newResponsibility))) {
      if (newResponsibility != null) {
        newResponsibility.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
      }
      roleDocumentForm.getRoleDocument().addResponsibility(newResponsibility);
      roleDocumentForm.setResponsibility(new KimDocumentRoleResponsibility());
      roleDocumentForm.getRoleDocument().updateMembers(newResponsibility);
    }
    return mapping.findForward(RiceConstants.MAPPING_BASIC);
  }
  public ActionForward deleteMember(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
    KimDocumentRoleMember inactivatedRoleMember =
        roleDocumentForm.getRoleDocument().getModifiedMembers().get(getLineToDelete(request));

    // KULRICE-4762: active delegates of "inactivated" role members cause validation problems
    ActionForward forward =
        promptForAffectedDelegates(
            mapping,
            form,
            request,
            response,
            roleDocumentForm, /* we haven't actually inactivated them yet, so specify them here */
            inactivatedRoleMember);
    // if we need to prompt the user due to affected delegates, do so:
    if (forward != null) {
      return forward;
    }

    Calendar cal = Calendar.getInstance();
    inactivatedRoleMember.setActiveToDate(new Timestamp(cal.getTimeInMillis()));

    roleDocumentForm
        .getRoleDocument()
        .getModifiedMembers()
        .set(getLineToDelete(request), inactivatedRoleMember);
    return mapping.findForward(RiceConstants.MAPPING_BASIC);
  }
 protected void loadRoleIntoDocument(
     String roleId, IdentityManagementRoleDocumentForm roleDocumentForm) {
   Role role = KimApiServiceLocator.getRoleService().getRole(roleId);
   roleDocumentForm
       .getRoleDocument()
       .setMemberMetaDataTypeToSort(
           roleDocumentForm.getMemberTableMetadata().getColumnToSortIndex());
   getUiDocumentService().loadRoleDoc(roleDocumentForm.getRoleDocument(), role);
 }
  public ActionForward addDelegationMember(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
    RoleDocumentDelegationMember newDelegationMember = roleDocumentForm.getDelegationMember();

    // See if possible to add with just Group Details filled in (not returned from lookup)
    if (StringUtils.isEmpty(newDelegationMember.getMemberId())
        && StringUtils.isNotEmpty(newDelegationMember.getMemberName())
        && StringUtils.isNotEmpty(newDelegationMember.getMemberNamespaceCode())
        && StringUtils.equals(
            newDelegationMember.getMemberTypeCode(),
            KimConstants.KimGroupMemberTypes.GROUP_MEMBER_TYPE.getCode())) {
      Group tempGroup =
          KimApiServiceLocator.getGroupService()
              .getGroupByNamespaceCodeAndName(
                  newDelegationMember.getMemberNamespaceCode(),
                  newDelegationMember.getMemberName());
      if (tempGroup != null) {
        newDelegationMember.setMemberId(tempGroup.getId());
      }
    }

    // See if possible to grab details for Principal
    if (StringUtils.isEmpty(newDelegationMember.getMemberId())
        && StringUtils.isNotEmpty(newDelegationMember.getMemberName())
        && StringUtils.equals(
            newDelegationMember.getMemberTypeCode(),
            KimConstants.KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE.getCode())) {
      Principal principal =
          KimApiServiceLocator.getIdentityService()
              .getPrincipalByPrincipalName(newDelegationMember.getMemberName());
      if (principal != null) {
        newDelegationMember.setMemberId(principal.getPrincipalId());
      }
    }

    if (checkDelegationMember(newDelegationMember)
        && KRADServiceLocatorWeb.getKualiRuleService()
            .applyRules(
                new AddDelegationMemberEvent(
                    "", roleDocumentForm.getRoleDocument(), newDelegationMember))) {
      newDelegationMember.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
      if (StringUtils.isEmpty(newDelegationMember.getDelegationTypeCode())) {
        newDelegationMember.setDelegationTypeCode(DelegationType.SECONDARY.getCode());
      }
      roleDocumentForm.getRoleDocument().addDelegationMember(newDelegationMember);
      roleDocumentForm.setDelegationMember(
          roleDocumentForm.getRoleDocument().getBlankDelegationMember());
    }
    return mapping.findForward(RiceConstants.MAPPING_BASIC);
  }
 public ActionForward deleteDelegationMember(
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
     throws Exception {
   IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
   // Removing, not inactivating -- is this what we really want?
   roleDocumentForm.getRoleDocument().getDelegationMembers().remove(getLineToDelete(request));
   roleDocumentForm.setDelegationMember(
       roleDocumentForm.getRoleDocument().getBlankDelegationMember());
   return mapping.findForward(RiceConstants.MAPPING_BASIC);
 }
 public ActionForward editMember(
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
     throws Exception {
   IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
   KimDocumentRoleMember roleMemberToEdit =
       roleDocumentForm.getRoleDocument().getMembers().get(getLineToEdit(request));
   KimDocumentRoleMember copiedMember =
       (KimDocumentRoleMember) SerializationUtils.deepCopy(roleMemberToEdit);
   roleDocumentForm.getRoleDocument().getModifiedMembers().add(copiedMember);
   roleDocumentForm.getRoleDocument().getMembers().remove(roleMemberToEdit);
   return mapping.findForward(RiceConstants.MAPPING_BASIC);
 }
  @Override
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
    if (roleDocumentForm.getRoleId() == null) {
      String roleId = request.getParameter(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID);
      roleDocumentForm.setRoleId(roleId);
    }

    KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
    if (roleDocumentForm.getRoleDocument() != null && roleDocumentForm.getMemberRows() != null) {
      memberTableMetadata.jumpToPage(
          memberTableMetadata.getViewedPageNumber(),
          roleDocumentForm.getMemberRows().size(),
          roleDocumentForm.getRecordsPerPage());
      // KULRICE-3972: need to be able to sort by column header like on lookups when editing large
      // roles and groups
      memberTableMetadata.sort(
          roleDocumentForm.getMemberRows(), roleDocumentForm.getRecordsPerPage());
    }

    // KULRICE-4762: active delegates of "inactivated" role members cause validation problems
    ActionForward forward =
        promptForAffectedDelegates(mapping, form, request, response, roleDocumentForm);
    // if we need to prompt the user due to affected delegates, do so:
    if (forward != null) {
      return forward;
    }

    forward = super.execute(mapping, roleDocumentForm, request, response);

    roleDocumentForm.setCanAssignRole(validAssignRole(roleDocumentForm.getRoleDocument()));
    if (KimTypeLookupableHelperServiceImpl.hasDerivedRoleTypeService(
        roleDocumentForm.getRoleDocument().getKimType())) {
      roleDocumentForm.setCanModifyAssignees(false);
    }
    GlobalVariables.getUserSession()
        .addObject(
            KimConstants.KimUIConstants.KIM_ROLE_DOCUMENT_SHORT_KEY,
            roleDocumentForm.getRoleDocument());
    return forward;
  }
 public ActionForward addPermission(
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
     throws Exception {
   IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
   KimDocumentRolePermission newPermission = roleDocumentForm.getPermission();
   if (KRADServiceLocatorWeb.getKualiRuleService()
       .applyRules(
           new AddPermissionEvent("", roleDocumentForm.getRoleDocument(), newPermission))) {
     newPermission.setDocumentNumber(roleDocumentForm.getDocument().getDocumentNumber());
     newPermission.setRoleId(roleDocumentForm.getRoleDocument().getRoleId());
     roleDocumentForm.getRoleDocument().getPermissions().add(newPermission);
     roleDocumentForm.setPermission(new KimDocumentRolePermission());
   }
   return mapping.findForward(RiceConstants.MAPPING_BASIC);
 }
 public ActionForward deletePermission(
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
     throws Exception {
   IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
   roleDocumentForm.getRoleDocument().getPermissions().remove(getLineToDelete(request));
   return mapping.findForward(RiceConstants.MAPPING_BASIC);
 }
  /**
   * This overridden method ...
   *
   * @see
   *     org.kuali.rice.krad.web.struts.action.KualiDocumentActionBase#loadDocument(org.kuali.rice.krad.web.struts.form.KualiDocumentFormBase)
   */
  @Override
  protected void loadDocument(KualiDocumentFormBase form) throws WorkflowException {
    super.loadDocument(form);

    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
    setKimType(roleDocumentForm.getRoleDocument().getRoleTypeId(), roleDocumentForm);

    getUiDocumentService().setDelegationMembersInDocument(roleDocumentForm.getRoleDocument());
    getUiDocumentService().setMembersInDocument(roleDocumentForm.getRoleDocument());

    roleDocumentForm.setMember(roleDocumentForm.getRoleDocument().getBlankMember());
    roleDocumentForm.setDelegationMember(
        roleDocumentForm.getRoleDocument().getBlankDelegationMember());

    KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
    if (roleDocumentForm.getMemberRows() != null) {
      memberTableMetadata.jumpToFirstPage(
          roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
    }
  }
  /**
   * This overridden method ...
   *
   * @see
   *     org.kuali.rice.krad.web.struts.action.KualiDocumentActionBase#createDocument(org.kuali.rice.krad.web.struts.form.KualiDocumentFormBase)
   */
  @Override
  protected void createDocument(KualiDocumentFormBase form) throws WorkflowException {
    super.createDocument(form);
    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;

    if (roleDocumentForm.getRoleId() == null) {
      roleDocumentForm.getRoleDocument().setKimType(roleDocumentForm.getKimType());
      roleDocumentForm.getRoleDocument().initializeDocumentForNewRole();
      roleDocumentForm.setRoleId(roleDocumentForm.getRoleDocument().getRoleId());
      // roleDocumentForm.setKimType(KimApiServiceLocator.getKimTypeInfoService().getKimType(roleDocumentForm.getRoleDocument().getRoleTypeId()));
    } else {
      loadRoleIntoDocument(roleDocumentForm.getRoleId(), roleDocumentForm);
    }

    roleDocumentForm.setMember(roleDocumentForm.getRoleDocument().getBlankMember());
    roleDocumentForm.setDelegationMember(
        roleDocumentForm.getRoleDocument().getBlankDelegationMember());

    KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
    if (roleDocumentForm.getMemberRows() != null) {
      memberTableMetadata.jumpToFirstPage(
          roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
    }
  }
 public ActionForward search(
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
     throws Exception {
   IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
   String memberSearchValue = roleDocumentForm.getMemberSearchValue();
   if (memberSearchValue != null && !memberSearchValue.isEmpty()) {
     memberSearchValue = memberSearchValue.replaceAll("[%*]", "");
     getUiDocumentService()
         .loadRoleMembersBasedOnSearch(roleDocumentForm.getRoleDocument(), memberSearchValue);
   } else {
     clear(mapping, form, request, response);
   }
   return mapping.findForward(RiceConstants.MAPPING_BASIC);
 }
  public ActionForward clear(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
    roleDocumentForm.setMemberSearchValue("");
    getUiDocumentService()
        .clearRestrictedRoleMembersSearchResults(roleDocumentForm.getRoleDocument());

    KualiTableRenderFormMetadata memberTableMetadata = roleDocumentForm.getMemberTableMetadata();
    if (roleDocumentForm.getMemberRows() != null) {
      memberTableMetadata.jumpToFirstPage(
          roleDocumentForm.getMemberRows().size(), roleDocumentForm.getRecordsPerPage());
    }
    return mapping.findForward(RiceConstants.MAPPING_BASIC);
  }
 protected void setKimType(String kimTypeId, IdentityManagementRoleDocumentForm roleDocumentForm) {
   if (StringUtils.isNotBlank(kimTypeId)) {
     roleDocumentForm.setKimType(
         KimApiServiceLocator.getKimTypeInfoService().getKimType(kimTypeId));
     if (roleDocumentForm.getRoleDocument() != null) {
       roleDocumentForm.getRoleDocument().setKimType(roleDocumentForm.getKimType());
     }
   } else if (roleDocumentForm.getRoleDocument() != null
       && StringUtils.isNotBlank(roleDocumentForm.getRoleDocument().getRoleTypeId())) {
     roleDocumentForm.setKimType(
         KimApiServiceLocator.getKimTypeInfoService()
             .getKimType(roleDocumentForm.getRoleDocument().getRoleTypeId()));
     roleDocumentForm.getRoleDocument().setKimType(roleDocumentForm.getKimType());
   }
 }
 public ActionForward changeDelegationMemberTypeCode(
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
     throws Exception {
   IdentityManagementRoleDocumentForm roleDocumentForm = (IdentityManagementRoleDocumentForm) form;
   KimDocumentRoleMember roleMember =
       roleDocumentForm
           .getRoleDocument()
           .getMember(roleDocumentForm.getDelegationMember().getRoleMemberId());
   if (roleMember != null) {
     RoleDocumentDelegationMemberQualifier delegationMemberQualifier;
     for (KimDocumentRoleQualifier roleQualifier : roleMember.getQualifiers()) {
       delegationMemberQualifier =
           roleDocumentForm.getDelegationMember().getQualifier(roleQualifier.getKimAttrDefnId());
       delegationMemberQualifier.setAttrVal(roleQualifier.getAttrVal());
     }
   }
   return refresh(mapping, roleDocumentForm, request, response);
 }
  /**
   * This method returns a list of all active delegates for role members that are inactive
   *
   * @param roleDocumentForm form bean
   * @param roleMembersToConsiderInactive additional role members to consider inactive for the
   *     purposes of this computation
   * @return the active delegates of inactive role members
   */
  private List<RoleDocumentDelegationMember> getActiveDelegatesOfInactiveRoleMembers(
      IdentityManagementRoleDocumentForm roleDocumentForm,
      KimDocumentRoleMember... roleMembersToConsiderInactive) {
    List<KimDocumentRoleMember> roleMembers = roleDocumentForm.getMemberRows();
    List<KimDocumentRoleMember> inactiveRoleMembers = new ArrayList<KimDocumentRoleMember>();
    List<RoleDocumentDelegationMember> activeDelegatesOfInactivatedRoleMembers =
        new ArrayList<RoleDocumentDelegationMember>();

    inactiveRoleMembers.addAll(Arrays.asList(roleMembersToConsiderInactive));

    if (roleMembers != null) {
      for (KimDocumentRoleMember roleMember : roleMembers) {
        if (roleMember != null) {
          if (!roleMember.isActive()) {
            inactiveRoleMembers.add(roleMember);
          }
        }
      }
    }

    for (KimDocumentRoleMember inactiveRoleMember : inactiveRoleMembers) {
      // check if there are delegates for the member being removed
      List<RoleDocumentDelegationMember> delegationMembers =
          roleDocumentForm.getRoleDocument().getDelegationMembers();
      if (delegationMembers != null) {
        for (RoleDocumentDelegationMember delegationMember : delegationMembers) {
          if (delegationMember != null && delegationMember.isActive()) {
            // if the roleMember for this delegation is the same as the inactivatedRoleMember
            if (delegationMember.getRoleMemberId().equals(inactiveRoleMember.getRoleMemberId())) {
              activeDelegatesOfInactivatedRoleMembers.add(delegationMember);
            }
          }
        }
      }
    }
    return activeDelegatesOfInactivatedRoleMembers;
  }