View Javadoc

1   /*
2    * Copyright 2007-2008 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 java.util.ArrayList;
19  import java.util.HashMap;
20  import java.util.List;
21  import java.util.Map;
22  
23  import org.kuali.rice.kns.web.ui.Field;
24  import org.kuali.rice.kns.web.ui.Row;
25  import org.kuali.rice.kew.rule.GenericWorkflowAttribute;
26  import org.kuali.rice.kew.rule.WorkflowAttributeValidationError;
27  
28  
29  public class DestinationRuleAttribute extends GenericWorkflowAttribute {
30  
31  	private static final String DEST_LABEL = "Destination";
32  	private static final String DEST_FIELD_KEY = "destination";
33  
34      private final List<Row> rows = new ArrayList<Row>();
35  
36  	private String destination;
37  
38      public DestinationRuleAttribute() {
39          super("destination");
40      }
41  
42      public DestinationRuleAttribute(String destination) {
43          super("destination");
44          this.destination = destination;
45      }
46  
47      /*
48  	public boolean isMatch(DocumentContent docContent, List<RuleExtension> ruleExtensions) {
49  		try {
50  			boolean foundDestRule = false;
51  			for (Iterator extensionsIterator = ruleExtensions.iterator(); extensionsIterator.hasNext();) {
52  	            RuleExtension extension = (RuleExtension) extensionsIterator.next();
53  	            if (extension.getRuleTemplateAttribute().getRuleAttribute().getClassName().equals(getClass().getName())) {
54  	                for (Iterator valuesIterator = extension.getExtensionValues().iterator(); valuesIterator.hasNext();) {
55  	                    RuleExtensionValue extensionValue = (RuleExtensionValue) valuesIterator.next();
56  	                    String key = extensionValue.getKey();
57  	                    String value = extensionValue.getValue();
58  	                    if (key.equals(DEST_FIELD_KEY)) {
59  	                    	destination = value;
60  	                    	foundDestRule = true;
61  	                    }
62  	                }
63  	            }
64  	        }
65  			if (! foundDestRule) {
66  				return false;
67  			}
68  
69  			Element element = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
70  					new InputSource(new BufferedReader(new StringReader(docContent.getDocContent())))).getDocumentElement();
71  			XPath xpath = XPathFactory.newInstance().newXPath();
72  			String docContentDest = xpath.evaluate("//destination", element);
73  			return destination.equals(docContentDest);
74  		} catch (Exception e) {
75  			throw new RuntimeException(e);
76  		}
77  	}*/
78  
79  	public List<Row> getRuleRows() {
80  		return getRows();
81  	}
82  
83  	public List<Row> getRoutingDataRows() {
84  		return getRows();
85  	}
86  
87      private List<Row> getRows() {
88          log.info("Returning rows: " + rows);
89          List<Field> fields = new ArrayList<Field>();
90          fields.add(new Field(DEST_LABEL, "", Field.TEXT, false, DEST_FIELD_KEY, "", false, false, null, null));
91          List<Row> rows = new ArrayList<Row>();
92          rows.add(new Row(fields));
93          return rows;
94      }
95  
96      /* setter for edoclite field */
97      public void setDestination(String destination) {
98          this.destination = destination;
99      }
100 
101     public Map<String, String> getProperties() {
102         Map<String, String> props = new HashMap<String, String>();
103         props.put("destination", destination);
104         return props;
105     }
106 
107 	public List validateRoutingData(Map paramMap) {
108 		return validateInputMap(paramMap);
109 	}
110 
111 	public List validateRuleData(Map paramMap) {
112 		return validateInputMap(paramMap);
113 	}
114 
115     private List validateInputMap(Map paramMap) {
116     	List errors = new ArrayList();
117     	this.destination = (String) paramMap.get(DEST_FIELD_KEY);
118     	if (this.destination == null  && required) {
119     		errors.add(new WorkflowAttributeValidationError(DEST_FIELD_KEY, "Destination is required."));
120     	}
121     	return errors;
122     }
123 }