001 /*
002 * Copyright 2007-2008 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package edu.sampleu.travel.workflow;
017
018 import java.util.ArrayList;
019 import java.util.HashMap;
020 import java.util.List;
021 import java.util.Map;
022
023 import org.kuali.rice.kew.rule.GenericWorkflowAttribute;
024 import org.kuali.rice.kew.rule.WorkflowAttributeValidationError;
025 import org.kuali.rice.kns.web.ui.Field;
026 import org.kuali.rice.kns.web.ui.Row;
027
028 public class DestinationRuleAttribute extends GenericWorkflowAttribute {
029
030 private static final String DEST_LABEL = "Destination";
031 private static final String DEST_FIELD_KEY = "destination";
032
033 private final List<Row> rows = new ArrayList<Row>();
034
035 private String destination;
036
037 public DestinationRuleAttribute() {
038 super("destination");
039 }
040
041 public DestinationRuleAttribute(String destination) {
042 super("destination");
043 this.destination = destination;
044 }
045
046 /*
047 public boolean isMatch(DocumentContent docContent, List<RuleExtension> ruleExtensions) {
048 try {
049 boolean foundDestRule = false;
050 for (Iterator extensionsIterator = ruleExtensions.iterator(); extensionsIterator.hasNext();) {
051 RuleExtension extension = (RuleExtension) extensionsIterator.next();
052 if (extension.getRuleTemplateAttribute().getRuleAttribute().getClassName().equals(getClass().getName())) {
053 for (Iterator valuesIterator = extension.getExtensionValues().iterator(); valuesIterator.hasNext();) {
054 RuleExtensionValue extensionValue = (RuleExtensionValue) valuesIterator.next();
055 String key = extensionValue.getKey();
056 String value = extensionValue.getValue();
057 if (key.equals(DEST_FIELD_KEY)) {
058 destination = value;
059 foundDestRule = true;
060 }
061 }
062 }
063 }
064 if (! foundDestRule) {
065 return false;
066 }
067
068 Element element = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
069 new InputSource(new BufferedReader(new StringReader(docContent.getDocContent())))).getDocumentElement();
070 XPath xpath = XPathFactory.newInstance().newXPath();
071 String docContentDest = xpath.evaluate("//destination", element);
072 return destination.equals(docContentDest);
073 } catch (Exception e) {
074 throw new RuntimeException(e);
075 }
076 }*/
077
078 public List<Row> getRuleRows() {
079 return getRows();
080 }
081
082 public List<Row> getRoutingDataRows() {
083 return getRows();
084 }
085
086 private List<Row> getRows() {
087 log.info("Returning rows: " + rows);
088 List<Field> fields = new ArrayList<Field>();
089 fields.add(new Field(DEST_LABEL, "", Field.TEXT, false, DEST_FIELD_KEY, "", false, false, null, null));
090 List<Row> rows = new ArrayList<Row>();
091 rows.add(new Row(fields));
092 return rows;
093 }
094
095 /* setter for edoclite field */
096 public void setDestination(String destination) {
097 this.destination = destination;
098 }
099
100 public Map<String, String> getProperties() {
101 Map<String, String> props = new HashMap<String, String>();
102 props.put("destination", destination);
103 return props;
104 }
105
106 public List validateRoutingData(Map paramMap) {
107 return validateInputMap(paramMap);
108 }
109
110 public List validateRuleData(Map paramMap) {
111 return validateInputMap(paramMap);
112 }
113
114 private List validateInputMap(Map paramMap) {
115 List errors = new ArrayList();
116 this.destination = (String) paramMap.get(DEST_FIELD_KEY);
117 if (this.destination == null && required) {
118 errors.add(new WorkflowAttributeValidationError(DEST_FIELD_KEY, "Destination is required."));
119 }
120 return errors;
121 }
122 }