Coverage Report - edu.sampleu.travel.workflow.AccountAttribute
 
Classes in this File Line Coverage Branch Coverage Complexity
AccountAttribute
0%
0/32
0%
0/4
2.5
 
 1  
 /**
 2  
  * Copyright 2005-2011 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 edu.sampleu.travel.workflow;
 17  
 
 18  
 import edu.sampleu.travel.bo.TravelAccount;
 19  
 import org.kuali.rice.kew.api.identity.Id;
 20  
 import org.kuali.rice.kew.api.identity.PrincipalName;
 21  
 import org.kuali.rice.kew.api.rule.RoleName;
 22  
 import org.kuali.rice.kew.engine.RouteContext;
 23  
 import org.kuali.rice.kew.routeheader.DocumentContent;
 24  
 import org.kuali.rice.kew.rule.AbstractRoleAttribute;
 25  
 import org.kuali.rice.kew.rule.ResolvedQualifiedRole;
 26  
 import org.kuali.rice.krad.service.KRADServiceLocator;
 27  
 import org.kuali.rice.krad.workflow.WorkflowUtils;
 28  
 import org.w3c.dom.Node;
 29  
 import org.w3c.dom.NodeList;
 30  
 
 31  
 import javax.xml.namespace.QName;
 32  
 import javax.xml.xpath.XPath;
 33  
 import javax.xml.xpath.XPathConstants;
 34  
 import javax.xml.xpath.XPathExpressionException;
 35  
 import java.util.ArrayList;
 36  
 import java.util.Collections;
 37  
 import java.util.List;
 38  
 
 39  
 /**
 40  
  * Resolves FO's using the accounts associated with the document XPath xpath =
 41  
  * KualiWorkflowUtils.getXPath(documentContent.getDocument()); List<String> qualifiers = new ArrayList<String>(); NodeList
 42  
  * accountNums = (NodeList)xstreamSafeEval(xpath, "//edu.sampleu.travel.workflow.bo.TravelAccount/number",
 43  
  * documentContent.getDocument(), XPathConstants.NODESET); for (int i = 0; i < accountNums.getLength(); i++) { Node accountNum =
 44  
  * accountNums.item(i); String accuntNumVal = accountNum.getNodeValue(); }
 45  
  */
 46  0
 public class AccountAttribute extends AbstractRoleAttribute {
 47  0
     private static final RoleName FISCAL_OFFICER_ROLE = new RoleName(AccountAttribute.class.getName(), "FO", "Fiscal Officer");
 48  
     private static final List<RoleName> ROLES;
 49  
     static {
 50  0
         List<RoleName> tmp = new ArrayList<RoleName>(1);
 51  0
         tmp.add(FISCAL_OFFICER_ROLE);
 52  0
         ROLES = Collections.unmodifiableList(tmp);
 53  0
     }
 54  
 
 55  
 
 56  
     public List<String> getQualifiedRoleNames(String roleName, DocumentContent documentContent) {
 57  0
         List<String> qualifiedRoleNames = new ArrayList<String>();
 58  0
         XPath xpath = WorkflowUtils.getXPath(documentContent.getDocument());
 59  
         // This xpath stream needs updating when the TravelAccount is being updated
 60  0
         NodeList accountNums = (NodeList) xstreamSafeEval(xpath, "/documentContent/applicationContent/org.kuali.rice.krad.workflow.KualiDocumentXmlMaterializer/document/travelAccounts/vector/default/elementData/edu.sampleu.travel.bo.TravelAccount/number", documentContent.getDocument(), XPathConstants.NODESET);
 61  0
         for (int i = 0; i < accountNums.getLength(); i++) {
 62  0
             Node accountNum = accountNums.item(i);
 63  0
             String accuntNumVal = accountNum.getTextContent();
 64  0
             qualifiedRoleNames.add(accuntNumVal);
 65  
         }
 66  0
         return qualifiedRoleNames;
 67  
     }
 68  
 
 69  
 
 70  
     public List<RoleName> getRoleNames() {
 71  0
         return ROLES;
 72  
     }
 73  
 
 74  
 
 75  
     public ResolvedQualifiedRole resolveQualifiedRole(RouteContext routeContext, String roleName, String qualifiedRole) {
 76  0
         String accountNum = qualifiedRole;
 77  0
         TravelAccount account = new TravelAccount();
 78  0
         account.setNumber(accountNum);
 79  0
         account = (TravelAccount) KRADServiceLocator.getBusinessObjectService().retrieve(account);
 80  0
         if (account == null) {
 81  0
             throw new RuntimeException("Account " + accountNum + " does not exist!");
 82  
         }
 83  0
         ResolvedQualifiedRole qualRole = new ResolvedQualifiedRole();
 84  0
         qualRole.setAnnotation("Account " + accountNum + " FO");
 85  0
         qualRole.setQualifiedRoleLabel("Fiscal Officer Account " + accountNum);
 86  0
         List<Id> ids = new ArrayList<Id>();
 87  0
         ids.add(new PrincipalName(account.getFiscalOfficer().getUserName()));
 88  0
         qualRole.setRecipients(ids);
 89  0
         return qualRole;
 90  
     }
 91  
 
 92  
 
 93  
     /**
 94  
      * This method will do a simple XPath.evaluate, while wrapping your xpathExpression with the xstreamSafe function. It assumes a
 95  
      * String result, and will return such. If an XPathExpressionException is thrown, this will be re-thrown within a
 96  
      * RuntimeException.
 97  
      * 
 98  
      * @param xpath A correctly initialized XPath instance.
 99  
      * @param xpathExpression Your XPath Expression that needs to be wrapped in an xstreamSafe wrapper and run.
 100  
      * @param item The document contents you will be searching within.
 101  
      * @return The string value of the xpath.evaluate().
 102  
      */
 103  
     public static final Object xstreamSafeEval(XPath xpath, String xpathExpression, Object item, QName returnType) {
 104  0
         String xstreamSafeXPath = new StringBuilder(WorkflowUtils.XSTREAM_SAFE_PREFIX).append(xpathExpression).append(WorkflowUtils.XSTREAM_SAFE_SUFFIX).toString();
 105  
         try {
 106  0
             return xpath.evaluate(xstreamSafeXPath, item, returnType);
 107  
         }
 108  0
         catch (XPathExpressionException e) {
 109  0
             throw new RuntimeException("XPathExpressionException occurred on xpath: " + xstreamSafeXPath, e);
 110  
         }
 111  
     }
 112  
     }