Coverage Report - org.kuali.rice.kew.removereplace.web.RemoveReplaceAction
 
Classes in this File Line Coverage Branch Coverage Complexity
RemoveReplaceAction
0%
0/260
0%
0/116
3.5
RemoveReplaceAction$1
N/A
N/A
3.5
RemoveReplaceAction$ResponsibilityEvaluation
0%
0/5
N/A
3.5
 
 1  
 /*
 2  
  * Copyright 2007 The Kuali Foundation
 3  
  *
 4  
  * Licensed under the Educational Community License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  * http://www.opensource.org/licenses/ecl2.php
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package org.kuali.rice.kew.removereplace.web;
 17  
 
 18  
 import java.util.ArrayList;
 19  
 import java.util.HashSet;
 20  
 import java.util.List;
 21  
 import java.util.Set;
 22  
 
 23  
 import javax.servlet.http.HttpServletRequest;
 24  
 import javax.servlet.http.HttpServletResponse;
 25  
 
 26  
 import org.apache.commons.lang.StringUtils;
 27  
 import org.apache.struts.action.ActionForm;
 28  
 import org.apache.struts.action.ActionForward;
 29  
 import org.apache.struts.action.ActionMapping;
 30  
 import org.apache.struts.action.ActionMessage;
 31  
 import org.apache.struts.action.ActionMessages;
 32  
 import org.kuali.rice.kew.dto.WorkflowIdDTO;
 33  
 import org.kuali.rice.kew.exception.WorkflowException;
 34  
 import org.kuali.rice.kew.exception.WorkflowRuntimeException;
 35  
 import org.kuali.rice.kew.removereplace.RemoveReplaceDocument;
 36  
 import org.kuali.rice.kew.removereplace.RuleTarget;
 37  
 import org.kuali.rice.kew.removereplace.WorkgroupTarget;
 38  
 import org.kuali.rice.kew.rule.RuleBaseValues;
 39  
 import org.kuali.rice.kew.rule.RuleResponsibility;
 40  
 import org.kuali.rice.kew.service.KEWServiceLocator;
 41  
 import org.kuali.rice.kew.service.WorkflowDocument;
 42  
 import org.kuali.rice.kew.util.CodeTranslator;
 43  
 import org.kuali.rice.kew.util.KEWConstants;
 44  
 import org.kuali.rice.kew.util.Utilities;
 45  
 import org.kuali.rice.kew.web.KewKualiAction;
 46  
 import org.kuali.rice.kew.web.session.UserSession;
 47  
 import org.kuali.rice.kim.bo.Group;
 48  
 import org.kuali.rice.kim.bo.Person;
 49  
 import org.kuali.rice.kim.service.KIMServiceLocator;
 50  
 
 51  
 
 52  
 /**
 53  
  * Struts Action for the Remove/Replace User Document.
 54  
  *
 55  
  * @author Kuali Rice Team (rice.collab@kuali.org)
 56  
  *
 57  
  */
 58  0
 public class RemoveReplaceAction extends KewKualiAction {
 59  
 
 60  0
     private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(RemoveReplaceAction.class);
 61  
 
 62  
     private static final String INVALID_USER_ID_MSG = "removereplace.invalidUserId";
 63  
     private static final String USER_ID_NOT_FOUND_MSG = "removereplace.userIdNotFound";
 64  
     private static final String INVALID_REPLACEMENT_USER_ID_MSG = "removereplace.invalidReplacementUserId";
 65  
     private static final String REPLACEMENT_USER_ID_NOT_FOUND_MSG = "removereplace.replacementUserIdNotFound";
 66  
     private static final String REPLACEMENT_USER_ID_REQUIRED_MSG = "removereplace.replacementUserIdRequired";
 67  
     private static final String INVALID_OPERATION_MSG = "removereplace.invalidOperation";
 68  
     private static final String FAILED_DOCUMENT_LOAD_MSG = "removereplace.failedDocumentLoad";
 69  
 
 70  
     @Override
 71  
     public ActionForward execute(ActionMapping mapping, ActionForm form,
 72  
             HttpServletRequest request, HttpServletResponse response)
 73  
             throws Exception {
 74  
         // TODO jjhanso - THIS METHOD NEEDS JAVADOCS
 75  0
         initForm(request, form);
 76  0
         return super.execute(mapping, form, request, response);
 77  
     }
 78  
 
 79  
     @Override
 80  
     public ActionForward start(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
 81  
         HttpServletResponse response) throws Exception {
 82  0
         RemoveReplaceForm form = (RemoveReplaceForm) actionForm;
 83  0
         form.getShowHide().getChild(0).setShow(true);
 84  0
         form.getShowHide().getChild(1).setShow(true);
 85  0
         return super.start(mapping, actionForm, request, response);
 86  
     }
 87  
 
 88  
     public ActionMessages initForm(HttpServletRequest request, ActionForm actionForm) throws Exception {
 89  0
         ActionMessages messages = new ActionMessages();
 90  0
         RemoveReplaceForm form = (RemoveReplaceForm)actionForm;
 91  0
         form.setActionRequestCodes(CodeTranslator.arLabels);
 92  0
         boolean isCreating = false;
 93  0
         if (form.getDocId() != null) {
 94  0
             form.setWorkflowDocument(new WorkflowDocument(getUserSession(request).getPrincipalId(), form.getDocId()));
 95  
         } else {
 96  
             // we're creating a new one if this action is being invoked without a method to call or with "start"
 97  0
             isCreating = StringUtils.isEmpty(form.getMethodToCall()) || form.getMethodToCall().equals("start");
 98  0
             if (isCreating) {
 99  0
                 form.setWorkflowDocument(createDocument());
 100  0
                 form.setDocId(form.getWorkflowDocument().getRouteHeaderId());
 101  0
                 form.establishVisibleActionRequestCds();
 102  
             }
 103  
         }
 104  0
         form.establishVisibleActionRequestCds();
 105  0
         if (!StringUtils.isEmpty(form.getUserId())) {
 106  0
             Person user = null;
 107  
             try {
 108  0
             user = KIMServiceLocator.getPersonService().getPersonByPrincipalName(form.getUserId());
 109  0
             } catch (Exception e) {
 110  0
                 LOG.warn("User not found.", e);
 111  0
             }
 112  0
             form.setUser(user);
 113  0
             if (user == null) {
 114  0
                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(USER_ID_NOT_FOUND_MSG, form.getUserId()));
 115  
             }
 116  
         }
 117  0
         if (!StringUtils.isEmpty(form.getReplacementUserId())) {
 118  0
             Person replacementUser = null;
 119  
             try {
 120  0
                 replacementUser = KIMServiceLocator.getPersonService().getPersonByPrincipalName(form.getReplacementUserId());
 121  0
             } catch (Exception e) {
 122  0
                 LOG.warn("Replacement user not found.", e);
 123  0
             }
 124  0
             form.setReplacementUser(replacementUser);
 125  0
             if (replacementUser == null) {
 126  0
                 messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(REPLACEMENT_USER_ID_NOT_FOUND_MSG, form.getReplacementUserId()));
 127  
             }
 128  
         }
 129  
 
 130  0
         return messages;
 131  
     }
 132  
 
 133  
     private WorkflowDocument createDocument() throws WorkflowException {
 134  0
         return new WorkflowDocument(new WorkflowIdDTO(UserSession.getAuthenticatedUser().getPrincipalId()), KEWConstants.REMOVE_REPLACE_DOCUMENT_TYPE);
 135  
     }
 136  
 
 137  
     public ActionForward selectOperation(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
 138  0
         ActionMessages messages = new ActionMessages();
 139  0
         RemoveReplaceForm form = (RemoveReplaceForm) actionForm;
 140  
         // validate that an operation was entered
 141  0
         if (!form.isRemove() && !form.isReplace()) {
 142  0
             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(INVALID_OPERATION_MSG));
 143  
         }
 144  
         // validity of IDs are validated in establishRequiredState, we just need to validate existence here
 145  0
         if (StringUtils.isBlank(form.getUserId())) {
 146  0
             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(INVALID_USER_ID_MSG));
 147  
         }
 148  0
         if (form.isReplace() && StringUtils.isBlank(form.getReplacementUserId())) {
 149  0
             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(REPLACEMENT_USER_ID_REQUIRED_MSG));
 150  
         }
 151  0
         if (!messages.isEmpty()) {
 152  0
             saveMessages(request, messages);
 153  0
             return mapping.findForward("basic");
 154  
         }
 155  0
         form.setOperationSelected(true);
 156  
         // clear out any workgroups or rules, because they might have just changed the user
 157  0
         form.getRules().clear();
 158  0
         form.getWorkgroups().clear();
 159  0
         form.getShowHide().getChild(0).setShow(true);
 160  0
         form.getShowHide().getChild(1).setShow(true);
 161  0
         return mapping.findForward("basic");
 162  
     }
 163  
 
 164  
     public ActionForward changeOperation(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
 165  0
         RemoveReplaceForm form = (RemoveReplaceForm) actionForm;
 166  0
         form.setOperationSelected(false);
 167  0
         return mapping.findForward("basic");
 168  
     }
 169  
 
 170  
     public ActionForward docHandler(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
 171  0
         RemoveReplaceForm form = (RemoveReplaceForm) actionForm;
 172  0
         if (KEWConstants.INITIATE_COMMAND.equalsIgnoreCase(form.getCommand())) {
 173  0
             return start(mapping, form, request, response);
 174  
         }
 175  0
         Long documentId = form.getDocId();
 176  0
         RemoveReplaceDocument removeReplaceDocument = KEWServiceLocator.getRemoveReplaceDocumentService().findById(documentId);
 177  0
         if (removeReplaceDocument == null) {
 178  0
             ActionMessages messages = new ActionMessages();
 179  0
             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(FAILED_DOCUMENT_LOAD_MSG, documentId));
 180  0
             saveMessages(request, messages);
 181  0
             return mapping.findForward("docHandler");
 182  
         }
 183  0
         loadFormForReport(form, removeReplaceDocument);
 184  0
         return mapping.findForward("docHandler");
 185  
     }
 186  
 
 187  
     protected void loadFormForReport(RemoveReplaceForm form, RemoveReplaceDocument document) {
 188  0
         form.setDocument(document);
 189  0
         form.setOperation(document.getOperation());
 190  0
         Person user = KIMServiceLocator.getPersonService().getPerson(document.getUserWorkflowId());
 191  0
         form.setUserId(user.getPrincipalName());
 192  0
         form.setUser(user);
 193  0
         if (!StringUtils.isBlank(document.getReplacementUserWorkflowId())) {
 194  0
             Person replacementUser = KIMServiceLocator.getPersonService().getPerson(document.getReplacementUserWorkflowId());
 195  0
             form.setReplacementUserId(replacementUser.getPrincipalId());
 196  0
             form.setReplacementUser(replacementUser);
 197  
         }
 198  0
         form.setRules(loadRemoveReplaceRules(form, loadRules(document)));
 199  0
         form.setWorkgroups(loadRemoveReplaceWorkgroups(form, loadWorkgroups(document)));
 200  0
         form.setReport(true);
 201  0
         form.getShowHide().getChild(0).setShow(!form.getRules().isEmpty());
 202  0
         form.getShowHide().getChild(1).setShow(!form.getWorkgroups().isEmpty());
 203  0
     }
 204  
 
 205  
     protected List<? extends Group> loadWorkgroups(RemoveReplaceDocument document) {
 206  0
         List<Group> workgroups = new ArrayList<Group>();
 207  0
         for (WorkgroupTarget workgroupTarget : document.getWorkgroupTargets()) {
 208  0
                 Group group = KIMServiceLocator.getIdentityManagementService().getGroup(workgroupTarget.getWorkgroupId());
 209  0
             if (group == null) {
 210  0
                     throw new WorkflowRuntimeException("Failed to locate group with id " + workgroupTarget.getWorkgroupId());
 211  
             }
 212  0
             workgroups.add(group);
 213  0
         }
 214  0
         return workgroups;
 215  
     }
 216  
 
 217  
     protected List<RuleBaseValues> loadRules(RemoveReplaceDocument document) {
 218  0
         List<RuleBaseValues> rules = new ArrayList<RuleBaseValues>();
 219  0
         for (RuleTarget ruleTarget : document.getRuleTargets()) {
 220  0
             RuleBaseValues rule = KEWServiceLocator.getRuleService().findRuleBaseValuesById(ruleTarget.getRuleId());
 221  0
             if (rule == null) {
 222  0
                 throw new WorkflowRuntimeException("Failed to locate rule with id " + ruleTarget.getRuleId());
 223  
             }
 224  0
             rules.add(rule);
 225  0
         }
 226  0
         return rules;
 227  
     }
 228  
 
 229  
 
 230  
     public ActionForward chooseRules(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
 231  
             HttpServletResponse response) throws Exception {
 232  0
         RemoveReplaceForm form = (RemoveReplaceForm)actionForm;
 233  
         // this condition should already be satisfied but throw an error if it's not
 234  0
         if (form.getUser() == null) {
 235  0
             throw new RuntimeException("Please enter a valid user id before choosing rules.");
 236  
         }
 237  0
         List<RuleBaseValues> rules = KEWServiceLocator.getRuleService().findRuleBaseValuesByResponsibilityReviewerTemplateDoc(form.getRuleRuleTemplate(), form.getRuleDocumentTypeName(), form.getUser().getPrincipalId(), KEWConstants.RULE_RESPONSIBILITY_WORKFLOW_ID);
 238  0
         form.getRules().clear();
 239  0
         form.getRules().addAll(loadRemoveReplaceRules(form, rules));
 240  0
         return mapping.findForward("basic");
 241  
     }
 242  
 
 243  
     /**
 244  
      * Constructs a list of RemoveReplaceRule objects from the given list of RuleBaseValues.
 245  
      */
 246  
     protected List<RemoveReplaceRule> loadRemoveReplaceRules(RemoveReplaceForm form, List<RuleBaseValues> rules) {
 247  0
         List<RemoveReplaceRule> removeReplaceRules = new ArrayList<RemoveReplaceRule>();
 248  0
         Set<Long> selectedRuleIds = getSelectedRuleIds(form);
 249  0
         for (RuleBaseValues rule : rules) {
 250  0
             RemoveReplaceRule removeReplaceRule = new RemoveReplaceRule();
 251  0
             removeReplaceRule.setRule(rule);
 252  0
             removeReplaceRule.setRuleTemplateName(rule.getRuleTemplateName());
 253  
             // if rule was selected previously, keep it selected
 254  0
             removeReplaceRule.setSelected(selectedRuleIds.contains(rule.getRuleBaseValuesId()));
 255  0
             Long documentId = KEWServiceLocator.getRuleService().isLockedForRouting(rule.getRuleBaseValuesId());
 256  0
             if (documentId != null) {
 257  0
                 removeReplaceRule.setWarning(removeReplaceRule.getWarning().concat("Rule is locked by document " + documentId + " and cannot be modified."));
 258  0
                 removeReplaceRule.setDisabled(true);
 259  0
                 removeReplaceRule.setSelected(false);
 260  
             }
 261  0
             ResponsibilityEvaluation eval = evaluateResponsibility(form, rule);
 262  0
             if (!eval.foundResponsibility) {
 263  0
                 LOG.warn("Failed to find a valid responsbility on rule " + rule.getRuleBaseValuesId() + " for user " + form.getUserId() + ".  This rule will not be added to the list for selection.");
 264  
             }
 265  0
             for (String warning : eval.warnings) {
 266  0
                 if (!StringUtils.isEmpty(removeReplaceRule.getWarning())) {
 267  0
                     removeReplaceRule.setWarning(removeReplaceRule.getWarning().concat("<br>"));
 268  
                 }
 269  0
                 removeReplaceRule.setWarning(removeReplaceRule.getWarning().concat(warning));
 270  
             }
 271  0
             removeReplaceRules.add(removeReplaceRule);
 272  0
         }
 273  0
         return removeReplaceRules;
 274  
     }
 275  
 
 276  
     private Set<Long> getSelectedRuleIds(RemoveReplaceForm form) {
 277  0
         Set<Long> selectedRuleIds = new HashSet<Long>();
 278  0
         for (RemoveReplaceRule rule : form.getRules()) {
 279  0
             if (rule.isSelected()) {
 280  0
                 selectedRuleIds.add(rule.getRule().getRuleBaseValuesId());
 281  
             }
 282  
         }
 283  0
         return selectedRuleIds;
 284  
     }
 285  
 
 286  
     private ResponsibilityEvaluation evaluateResponsibility(RemoveReplaceForm form, RuleBaseValues rule) {
 287  0
         ResponsibilityEvaluation eval = new ResponsibilityEvaluation();
 288  0
         List<RuleResponsibility> responsibilities = rule.getResponsibilities();
 289  0
         for (RuleResponsibility responsibility : responsibilities) {
 290  0
             if (KEWConstants.RULE_RESPONSIBILITY_WORKFLOW_ID.equals(responsibility.getRuleResponsibilityType()) &&
 291  
                     responsibility.getRuleResponsibilityName().equals(form.getUser().getPrincipalId())) {
 292  0
                 eval.foundResponsibility = true;
 293  0
                 eval.hasDelegations = responsibility.getDelegationRules().size() > 0;
 294  
             } else {
 295  0
                 eval.hasOtherResponsibility = true;
 296  
             }
 297  
         }
 298  0
         if (RemoveReplaceDocument.REMOVE_OPERATION.equals(form.getOperation()) && !eval.hasOtherResponsibility) {
 299  0
             eval.warnings.add("Only one user on the rule, removing them will inactivate the rule.");
 300  
         }
 301  0
         if (eval.hasDelegations) {
 302  0
             eval.warnings.add("This rule has delegations which will be inactivated.");
 303  
         }
 304  0
         return eval;
 305  
     }
 306  
 
 307  
     public ActionForward chooseWorkgroups(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
 308  
             HttpServletResponse response) throws Exception {
 309  0
         RemoveReplaceForm form = (RemoveReplaceForm)actionForm;
 310  0
         if (form.getUser() == null) {
 311  
             // this condition should already be satisfied but throw an error if it's not
 312  0
             throw new RuntimeException("Please enter a valid user id before choosing workgroups.");
 313  
         }
 314  0
         List<? extends Group> groups = KIMServiceLocator.getIdentityManagementService().getGroupsForPrincipal(form.getUser().getPrincipalId());
 315  0
         form.getWorkgroups().clear();
 316  0
         form.getWorkgroups().addAll(loadRemoveReplaceWorkgroups(form, groups));
 317  0
         return mapping.findForward("basic");
 318  
     }
 319  
 
 320  
     /**
 321  
      * Constructs a list of RemoveReplaceWorkgroup objects from the given list of Workgroups.
 322  
      */
 323  
     protected List<RemoveReplaceWorkgroup> loadRemoveReplaceWorkgroups(RemoveReplaceForm form, List<? extends Group> groups) {
 324  0
         List<RemoveReplaceWorkgroup> removeReplaceWorkgroups = new ArrayList<RemoveReplaceWorkgroup>();
 325  0
         Set<String> selectedWorkgroupIds = getSelectedWorkgroupIds(form);
 326  0
         for (Group group : groups) {
 327  0
             RemoveReplaceWorkgroup removeReplaceWorkgroup = new RemoveReplaceWorkgroup();
 328  0
             removeReplaceWorkgroup.setId(group.getGroupId());
 329  0
             removeReplaceWorkgroup.setName(group.getGroupName());
 330  0
             removeReplaceWorkgroup.setType(group.getKimTypeId());
 331  0
             removeReplaceWorkgroup.setWarning("");
 332  
             // if workgroup was selected previously, keep it selected
 333  0
             removeReplaceWorkgroup.setSelected(selectedWorkgroupIds.contains(group.getGroupId()));
 334  0
             boolean isOnlyMember = true;
 335  0
             boolean foundMember = false;
 336  0
             List<String> directMembers = KIMServiceLocator.getIdentityManagementService().getDirectGroupMemberPrincipalIds(group.getGroupId());
 337  0
             for (String principalId : directMembers) {
 338  0
                     if (principalId.equals(form.getUser().getPrincipalId())) {
 339  0
                             foundMember = true;
 340  
                     } else {
 341  0
                             isOnlyMember = false;
 342  
                     }
 343  
             }
 344  0
             List<String> warnings = new ArrayList<String>();
 345  
             // TODO: to be replaced during conversion to KNS
 346  
             //try {
 347  
                 //Long documentId = KEWServiceLocator.getWorkgroupRoutingService().getLockingDocumentId(group.getWorkflowGroupId());
 348  
                 //if (documentId != null) {
 349  
                 //    warnings.add("Workgroup is locked by document " + documentId + " and cannot be modified.");
 350  
                 //    removeReplaceWorkgroup.setDisabled(true);
 351  
                 //    removeReplaceWorkgroup.setSelected(false);
 352  
                 //}
 353  
             //} catch (WorkflowException e) {
 354  
                 //throw new WorkflowRuntimeException(e);
 355  
             //}
 356  0
             if (RemoveReplaceDocument.REMOVE_OPERATION.equals(form.getOperation()) && isOnlyMember) {
 357  0
                 warnings.add("Only one member on the workgroup, removing them will inactivate the workgroup.");
 358  
             }
 359  0
             for (String warning : warnings) {
 360  0
                 if (!StringUtils.isEmpty(removeReplaceWorkgroup.getWarning())) {
 361  0
                     removeReplaceWorkgroup.setWarning(removeReplaceWorkgroup.getWarning().concat("<br>"));
 362  
                 }
 363  0
                 removeReplaceWorkgroup.setWarning(removeReplaceWorkgroup.getWarning().concat(warning));
 364  
             }
 365  0
             if (!foundMember) {
 366  0
                 LOG.warn("Failed to find a valid member on workgroup " + group.getGroupName() + " for user " + form.getUserId() + ".  This workgroup will not be added to the list for selection.");
 367  
             } else {
 368  0
                 removeReplaceWorkgroups.add(removeReplaceWorkgroup);
 369  
             }
 370  0
         }
 371  0
         return removeReplaceWorkgroups;
 372  
     }
 373  
 
 374  
     private Set<String> getSelectedWorkgroupIds(RemoveReplaceForm form) {
 375  0
         Set<String> selectedWorkgroupIds = new HashSet<String>();
 376  0
         for (RemoveReplaceWorkgroup workgroup : form.getWorkgroups()) {
 377  0
             if (workgroup.isSelected()) {
 378  0
                 selectedWorkgroupIds.add(workgroup.getId());
 379  
             }
 380  
         }
 381  0
         return selectedWorkgroupIds;
 382  
     }
 383  
 
 384  0
     private class ResponsibilityEvaluation {
 385  0
         public boolean foundResponsibility = false;
 386  0
         public boolean hasOtherResponsibility = false;
 387  0
         public boolean hasDelegations = false;
 388  0
         public List<String> warnings = new ArrayList<String>();
 389  
     }
 390  
 
 391  
     public ActionForward blanketApprove(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
 392  
             HttpServletResponse response) throws Exception {
 393  0
         RemoveReplaceForm form = (RemoveReplaceForm)actionForm;
 394  0
         validateSubmission(form);
 395  0
         RemoveReplaceDocument document = createRemoveReplaceDocument(form);
 396  0
         KEWServiceLocator.getRemoveReplaceDocumentService().blanketApprove(document, UserSession.getAuthenticatedUser(), form.getAnnotation());
 397  0
         loadFormForReport(form, document);
 398  0
         ActionMessages messages = new ActionMessages();
 399  0
         messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("general.routing.blanketApproved", "Remove/Replace User Document"));
 400  0
         saveMessages(request, messages);
 401  0
         return mapping.findForward("summary");
 402  
     }
 403  
 
 404  
     public ActionForward route(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request,
 405  
             HttpServletResponse response) throws Exception {
 406  0
         RemoveReplaceForm form = (RemoveReplaceForm)actionForm;
 407  0
         validateSubmission(form);
 408  0
         RemoveReplaceDocument document = createRemoveReplaceDocument(form);
 409  0
         KEWServiceLocator.getRemoveReplaceDocumentService().route(document, UserSession.getAuthenticatedUser(), form.getAnnotation());
 410  0
         loadFormForReport(form, document);
 411  0
         ActionMessages messages = new ActionMessages();
 412  0
         messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("general.routing.routed", "Remove/Replace User Document"));
 413  0
         saveMessages(request, messages);
 414  0
         return mapping.findForward("summary");
 415  
     }
 416  
 
 417  
     private void validateSubmission(RemoveReplaceForm form) {
 418  0
         if (form.getUser() == null) {
 419  0
             throw new RuntimeException("Please select a user.");
 420  
         }
 421  0
         if (form.getOperation().equals(RemoveReplaceDocument.REPLACE_OPERATION) && form.getReplacementUser() == null) {
 422  0
             throw new RuntimeException("Please select a replacement user.");
 423  
         }
 424  0
     }
 425  
 
 426  
     private RemoveReplaceDocument createRemoveReplaceDocument(RemoveReplaceForm form) {
 427  0
         RemoveReplaceDocument document = new RemoveReplaceDocument();
 428  0
         document.setDocumentId(form.getDocId());
 429  0
         document.setOperation(form.getOperation());
 430  0
         document.setUserWorkflowId(form.getUser().getPrincipalId());
 431  0
         if (form.getReplacementUser() != null) {
 432  0
             document.setReplacementUserWorkflowId(form.getReplacementUser().getPrincipalId());
 433  
         }
 434  0
         List<RuleTarget> ruleTargets = new ArrayList<RuleTarget>();
 435  0
         for (RemoveReplaceRule rule : form.getRules()) {
 436  0
             if (rule.isSelected()) {
 437  0
                 RuleTarget target = new RuleTarget();
 438  0
                 target.setRuleId(rule.getRule().getRuleBaseValuesId());
 439  0
                 ruleTargets.add(target);
 440  0
             }
 441  
         }
 442  0
         List<WorkgroupTarget> workgroupTargets = new ArrayList<WorkgroupTarget>();
 443  0
         for (RemoveReplaceWorkgroup workgroup : form.getWorkgroups()) {
 444  0
             if (workgroup.isSelected()) {
 445  0
                 WorkgroupTarget target = new WorkgroupTarget();
 446  0
                 target.setWorkgroupId(workgroup.getId());
 447  0
                 workgroupTargets.add(target);
 448  0
             }
 449  
         }
 450  0
         document.setRuleTargets(ruleTargets);
 451  0
         document.setWorkgroupTargets(workgroupTargets);
 452  0
         return document;
 453  
     }
 454  
 
 455  
     public ActionForward performLookup(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
 456  0
         String lookupService = request.getParameter("lookupableImplServiceName");
 457  0
         String conversionFields = request.getParameter("conversionFields");
 458  0
         String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + mapping.getModuleConfig().getPrefix();
 459  0
         StringBuffer lookupUrl = new StringBuffer(basePath);
 460  0
         lookupUrl.append("/Lookup.do?methodToCall=start&docFormKey=").append(getUserSession(request).addObject(actionForm)).append("&lookupableImplServiceName=");
 461  0
         lookupUrl.append(lookupService);
 462  0
         lookupUrl.append("&conversionFields=").append(conversionFields);
 463  0
         lookupUrl.append("&returnLocation=").append(basePath).append(mapping.getPath()).append(".do");
 464  0
         return new ActionForward(lookupUrl.toString(), true);
 465  
     }
 466  
 
 467  
     public ActionForward cancel(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
 468  0
         LOG.info("entering cancel() method ...");
 469  0
         RemoveReplaceForm form = (RemoveReplaceForm)actionForm;
 470  0
         form.getWorkflowDocument().cancel("");
 471  0
         saveDocumentActionMessage("general.routing.canceled", request);
 472  0
         LOG.info("forwarding to actionTaken from cancel()");
 473  0
         return mapping.findForward("actionTaken");
 474  
     }
 475  
 
 476  
     public void saveDocumentActionMessage(String messageKey, HttpServletRequest request) {
 477  0
         saveDocumentActionMessage(messageKey, request, null);
 478  0
     }
 479  
 
 480  
     public void saveDocumentActionMessage(String messageKey, HttpServletRequest request, String secondMessageParameter) {
 481  0
         ActionMessages messages = new ActionMessages();
 482  0
         if (Utilities.isEmpty(secondMessageParameter)) {
 483  0
             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(messageKey, "document"));
 484  
         } else {
 485  0
             messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(messageKey, "document", secondMessageParameter));
 486  
         }
 487  0
         saveMessages(request, messages);
 488  0
     }
 489  
 
 490  
     private static UserSession getUserSession(HttpServletRequest request) {
 491  0
         return UserSession.getAuthenticatedUser();
 492  
     }
 493  
 
 494  
 
 495  
 
 496  
 }