tim@52: /** tim@52: * tim@52: */ tim@52: package de.intevation.gnv.transition; tim@52: tim@52: import java.util.ArrayList; tim@52: import java.util.Collection; tim@61: import java.util.Date; tim@61: import java.util.GregorianCalendar; tim@57: import java.util.HashMap; tim@79: import java.util.HashSet; tim@57: import java.util.Iterator; tim@81: import java.util.List; tim@57: import java.util.Map; tim@79: import java.util.Set; tim@52: tim@52: import org.apache.log4j.Logger; tim@52: import org.w3c.dom.Document; tim@59: import org.w3c.dom.Element; tim@52: import org.w3c.dom.Node; tim@52: import org.w3c.dom.NodeList; tim@52: tim@52: import de.intevation.artifactdatabase.Config; tim@117: import de.intevation.artifacts.CallMeta; tim@52: import de.intevation.gnv.artifacts.GNVArtifactBase; tim@117: import de.intevation.gnv.artifacts.ressource.RessourceFactory; tim@58: import de.intevation.gnv.geobackend.base.Result; tim@58: import de.intevation.gnv.geobackend.base.query.QueryExecutor; tim@58: import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; tim@58: import de.intevation.gnv.geobackend.base.query.exception.QueryException; tim@61: import de.intevation.gnv.geobackend.util.DateUtils; tim@68: import de.intevation.gnv.transition.describedata.DefaultKeyValueDescribeData; tim@68: import de.intevation.gnv.transition.describedata.KeyValueDescibeData; tim@61: import de.intevation.gnv.transition.describedata.MinMaxDescribeData; tim@79: import de.intevation.gnv.transition.describedata.NamedArrayList; tim@79: import de.intevation.gnv.transition.describedata.NamedCollection; tim@81: import de.intevation.gnv.transition.describedata.SingleValueDescribeData; tim@57: import de.intevation.gnv.transition.exception.TransitionException; tim@76: import de.intevation.gnv.utils.ArtifactXMLUtilities; tim@101: import de.intevation.gnv.utils.InputValidator; tim@52: tim@52: /** tim@52: * @author Tim Englich tim@171: * tim@52: */ tim@52: public abstract class TransitionBase implements Transition { tim@171: tim@77: /** tim@77: * The UID of this Class tim@77: */ tim@77: private static final long serialVersionUID = 2411169179001645426L; tim@77: tim@52: /** tim@52: * the logger, used to log exceptions and additonaly information tim@52: */ tim@52: private static Logger log = Logger.getLogger(GNVArtifactBase.class); tim@171: tim@52: private String id = null; tim@171: tim@53: private String description = null; tim@171: tim@81: protected String dataName = null; tim@171: tim@116: protected boolean dataMultiSelect = false; tim@53: tim@52: protected String queryID = null; tim@171: tim@52: private Collection reachableTransitions = null; tim@171: tim@79: protected Collection inputValueNames = null; tim@171: tim@171: private Map inputValues = null; tim@171: tim@52: private Transition parent = null; tim@171: tim@171: protected Map inputData = null; tim@171: tim@61: protected Collection descibeData = null; tim@171: tim@52: /** tim@52: * Constructor tim@52: */ tim@52: public TransitionBase() { tim@52: super(); tim@52: } tim@52: tim@52: /** tim@52: * @see de.intevation.gnv.transition.Transition#getID() tim@52: */ tim@52: public String getID() { tim@52: return this.id; tim@52: } tim@171: tim@53: /** tim@53: * @see de.intevation.gnv.transition.Transition#getDescription() tim@53: */ tim@53: public String getDescription() { tim@53: return this.description; tim@53: } tim@171: tim@52: /** tim@52: * @see de.intevation.gnv.transition.Transition#reachableTransitions() tim@52: */ tim@52: public Collection reachableTransitions() { tim@52: return this.reachableTransitions; tim@52: } tim@52: tim@52: /** tim@55: * @see de.intevation.gnv.transition.Transition#getRequiredInputValues() tim@55: */ tim@55: public Collection getRequiredInputValues() { tim@57: return this.inputValues.values(); tim@55: } tim@55: tim@55: /** tim@52: * @see de.intevation.gnv.transition.Transition#setup(org.w3c.dom.Node) tim@52: */ tim@52: public void setup(Node configuration) { tim@118: log.debug("TransitionBase.setup"); tim@204: this.id = ((Element)configuration).getAttribute("id"); tim@204: this.description = ((Element)configuration).getAttribute("description"); tim@171: tim@171: log.info("Transition-ID = " + this.id); tim@171: NodeList nodes = Config.getNodeSetXPath(configuration, tim@171: "reachableTransitions/transition"); tim@52: this.reachableTransitions = new ArrayList(nodes.getLength()); tim@171: for (int i = 0; i < nodes.getLength(); i++) { tim@52: String reachableTransition = nodes.item(i).getTextContent(); tim@171: log.info("ReachableTransition ==> " + reachableTransition); tim@52: this.reachableTransitions.add(reachableTransition); tim@171: tim@52: } tim@171: tim@171: NodeList inputValuesNodes = Config.getNodeSetXPath(configuration, tim@171: "inputvalues/inputvalue"); tim@171: this.inputValues = new HashMap(inputValuesNodes tim@171: .getLength()); tim@171: this.inputValueNames = new ArrayList(inputValuesNodes tim@171: .getLength()); tim@171: for (int i = 0; i < inputValuesNodes.getLength(); i++) { tim@204: Element inputValueNode = (Element)inputValuesNodes.item(i); tim@204: String usedinQueryValue = inputValueNode.getAttribute("usedinquery"); tim@81: int usedinQuery = 1; tim@171: if (usedinQueryValue != null) { tim@81: try { tim@81: usedinQuery = Integer.parseInt(usedinQueryValue); tim@81: } catch (NumberFormatException e) { tim@171: log tim@171: .warn("Used in Query Value cannot be transformed into a Number"); tim@81: } tim@81: } tim@204: InputValue inputValue = new DefaultInputValue(inputValueNode.getAttribute("name"), tim@204: inputValueNode.getAttribute("type"), tim@204: Boolean.parseBoolean(inputValueNode. tim@204: getAttribute("multiselect")), usedinQuery); tim@56: log.debug(inputValue.toString()); tim@171: this.inputValues.put(inputValue.getName(), inputValue); tim@57: this.inputValueNames.add(inputValue.getName()); tim@55: } tim@171: tim@171: this.queryID = Config.getStringXPath(configuration, "queryID"); tim@171: log.info("QueryID ==> " + this.queryID); tim@171: tim@171: this.dataName = Config.getStringXPath(configuration, "dataname"); tim@171: tim@171: String dataMultiSelectValue = Config.getStringXPath(configuration, tim@171: "data-multiselect"); tim@171: if (dataMultiSelectValue != null) { tim@171: this.dataMultiSelect = Boolean.parseBoolean(dataMultiSelectValue); tim@79: } tim@171: tim@52: } tim@52: tim@52: /** tim@52: * @see de.intevation.gnv.transition.Transition#getParent() tim@52: */ tim@52: public Transition getParent() { tim@52: return this.parent; tim@52: } tim@52: tim@52: /** tim@52: * @see de.intevation.gnv.transition.Transition#setParent(de.intevation.gnv.transition.Transition) tim@52: */ tim@52: public void setParent(Transition transition) { tim@52: this.parent = transition; tim@52: } tim@57: tim@57: /** tim@57: * @see de.intevation.gnv.transition.Transition#putInputData(java.util.Collection) tim@57: */ tim@171: public void putInputData(Collection inputData, String uuid) tim@171: throws TransitionException { tim@57: log.debug("TransitionBase.putInputData"); tim@171: if (inputData != null) { tim@57: Iterator it = inputData.iterator(); tim@101: InputValidator iv = new InputValidator(); tim@171: while (it.hasNext()) { tim@57: InputData tmpItem = it.next(); tim@57: InputValue inputValue = this.inputValues.get(tmpItem.getName()); tim@171: if (inputValue != null) { tim@171: if (this.inputData == null) { tim@171: this.inputData = new HashMap( tim@171: inputData.size()); tim@57: } tim@171: boolean valid = iv.isInputValid(tmpItem.getValue(), tim@171: inputValue.getType()); tim@171: if (valid) { tim@101: this.setSelection(tmpItem); tim@171: this.inputData.put(tmpItem.getName(), tmpItem); tim@171: } else { tim@171: String errMsg = "Wrong input for " + tmpItem.getValue() tim@192: + " is not an " + inputValue.getType() tim@171: + " Value."; tim@101: log.warn(errMsg); tim@101: throw new TransitionException(errMsg); tim@101: } tim@171: tim@171: } else { tim@171: String errMsg = "No Inputvalue given for Inputdata " tim@171: + tmpItem.getName(); tim@171: log.warn(errMsg + "Value will be ignored"); tim@171: tim@57: } tim@57: } tim@171: } else { tim@57: log.warn("No Inputdata given"); tim@57: } tim@79: } tim@171: tim@171: private void setSelection(InputData inputData) { tim@79: log.debug("TransitionBase.setSelection"); tim@171: tim@79: Object o = this.getDescribeData(inputData.getName()); tim@171: if (o != null) { tim@171: if (o instanceof Collection) { tim@171: Collection values = (Collection) o; tim@171: tim@79: String value = inputData.getValue(); tim@79: String[] selectedValues = value.split(","); tim@171: Set selectedItems = new HashSet( tim@171: selectedValues.length); tim@171: for (int i = 0; i < selectedValues.length; i++) { tim@79: selectedItems.add(selectedValues[i].trim()); tim@79: } tim@79: // Selektion umsetzen tim@79: Iterator it = values.iterator(); tim@171: while (it.hasNext()) { tim@79: KeyValueDescibeData data = it.next(); tim@171: String key = "" + data.getKey(); tim@79: boolean selected = selectedItems.contains(key); tim@79: data.setSelected(selected); tim@79: } tim@171: } else if (o instanceof MinMaxDescribeData) { tim@171: MinMaxDescribeData data = (MinMaxDescribeData) o; tim@171: if (inputData.getName().equals(data.getMinName())) { tim@79: // TODO: müssen die werte geparst werden? tim@79: data.setMinValue(inputData.getValue()); tim@79: } tim@171: if (inputData.getName().equals(data.getMaxName())) { tim@79: // TODO: müssen die werte geparst werden? tim@79: data.setMaxValue(inputData.getValue()); tim@79: } tim@79: } tim@79: } tim@79: } tim@171: tim@171: private Object getDescribeData(String name) { tim@118: log.debug("TransitionBase.getDescribeData"); tim@171: if (this.descibeData != null) { tim@79: Iterator it = this.descibeData.iterator(); tim@171: while (it.hasNext()) { tim@79: Object o = it.next(); tim@171: if (o instanceof NamedCollection) { tim@171: if (name.equals(((NamedCollection) o).getName())) { tim@79: return o; tim@79: } tim@171: } else if (o instanceof MinMaxDescribeData) { tim@171: if (name.equals(((MinMaxDescribeData) o).getMinName())) { tim@79: return o; tim@79: } tim@171: if (name.equals(((MinMaxDescribeData) o).getMaxName())) { tim@79: return o; tim@79: } tim@79: } tim@79: } tim@79: } tim@79: return null; tim@171: tim@57: } tim@58: tim@58: /** tim@58: * @see de.intevation.gnv.transition.Transition#isTransitionReachable(java.lang.String) tim@58: */ tim@58: public boolean isTransitionReachable(String transitionID) { tim@58: log.debug("TransitionBase.isTransitionReachable"); tim@58: boolean returnValue = false; tim@58: Iterator transitions = reachableTransitions.iterator(); tim@171: while (transitions.hasNext()) { tim@171: if (transitions.next().equals(transitionID)) { tim@171: log.debug("Transition " + transitionID + " wird unterstützt."); tim@58: returnValue = true; tim@58: break; tim@58: } tim@58: } tim@58: return returnValue; tim@58: } tim@58: tim@58: /** tim@171: * @see de.intevation.gnv.transition.Transition#advance(java.lang.String, tim@171: * de.intevation.artifacts.CallMeta) tim@58: */ tim@171: public void advance(String uuid, CallMeta callMeta) tim@171: throws TransitionException { tim@58: log.debug("TransitionBase.advance"); tim@58: try { tim@81: List list = new ArrayList(); tim@171: tim@58: Iterator it = this.inputValueNames.iterator(); tim@58: int i = 0; tim@171: while (it.hasNext()) { tim@59: String value = it.next(); tim@59: InputData data = this.inputData.get(value); tim@171: if (data != null tim@171: && this.inputValues.containsKey(data.getName())) { tim@171: int size = this.inputValues.get(data.getName()) tim@171: .usedInQueries(); tim@171: String type = this.inputValues.get(data.getName()) tim@171: .getType(); tim@83: String requestValue = data.getValue(); tim@171: if (type.equalsIgnoreCase("string")) { tim@171: requestValue = this tim@171: .prepareInputData4DBQuery(requestValue); tim@171: } else if (type.equalsIgnoreCase("date")) { tim@171: requestValue = this tim@171: .prepareInputData4DateDBQuery(requestValue); tim@173: } else if (type.equalsIgnoreCase("coordinate")){ tim@173: requestValue = this tim@173: .prepareInputData4RegionDBQuery(requestValue); tim@83: } tim@171: for (int j = 0; j < size; j++) { tim@83: list.add(requestValue); tim@83: } tim@81: } tim@58: } tim@81: String[] filterValues = list.toArray(new String[0]); tim@171: Collection result = null; tim@81: try { tim@171: if (this.queryID != null) { tim@171: QueryExecutor queryExecutor = QueryExecutorFactory tim@171: .getInstance().getQueryExecutor(); tim@171: result = queryExecutor.executeQuery(this.queryID, tim@171: filterValues); tim@81: } tim@99: this.purifyResult(result, uuid); tim@81: } catch (RuntimeException e) { tim@171: log.error(e, e); tim@81: } tim@58: } catch (QueryException e) { tim@171: log.error(e, e); tim@58: throw new TransitionException(e); tim@58: } tim@58: } tim@173: tim@173: protected String prepareInputData4RegionDBQuery(String value){ tim@173: return value; tim@173: } tim@171: tim@171: private String prepareInputData4DateDBQuery(String value) { tim@118: log.debug("TransitionBase.prepareInputData4DateDBQuery"); tim@171: if (value != null) { tim@83: String[] values = value.split(","); tim@83: String newValue = ""; tim@171: for (int i = 0; i < values.length; i++) { tim@171: if (newValue.length() > 0) { tim@171: newValue = newValue + " , "; tim@83: } tim@171: // TODO JUST HACK FIND A BETTER RESOLUTION tim@171: newValue = newValue + "to_date('" + values[i].trim() tim@171: + "', 'YYYY.MM.DD HH24:MI:SS')"; tim@83: } tim@83: return newValue; tim@83: } tim@171: tim@171: return value; tim@83: } tim@171: tim@171: private String prepareInputData4DBQuery(String value) { tim@118: log.debug("TransitionBase.prepareInputData4DBQuery"); tim@171: if (value != null) { tim@83: String[] values = value.split(","); tim@83: String newValue = ""; tim@171: for (int i = 0; i < values.length; i++) { tim@171: if (newValue.length() > 0) { tim@171: newValue = newValue + " , "; tim@83: } tim@171: newValue = newValue + "'" + values[i].trim() + "'"; tim@83: } tim@83: return newValue; tim@83: } tim@171: tim@171: return value; tim@171: tim@83: } tim@61: tim@61: /** tim@61: * @param result tim@61: */ tim@99: protected void purifyResult(Collection result, String uuid) { tim@118: log.debug("TransitionBase.purifyResult"); tim@171: if (this.descibeData == null) { tim@61: this.descibeData = new ArrayList(); tim@61: } tim@173: NamedCollection keyValueDescibeData = extractKVP(result, "KEY", "VALUE"); tim@173: this.descibeData.add(keyValueDescibeData); tim@173: } tim@173: tim@173: /** tim@173: * @param result tim@173: * @return tim@173: */ tim@173: protected NamedCollection extractKVP( tim@173: Collection result, tim@173: String keyid, tim@173: String valueid) { tim@171: Iterator rit = result.iterator(); tim@171: NamedCollection keyValueDescibeData = new NamedArrayList( tim@171: this.dataName, result.size()); tim@79: keyValueDescibeData.setMultiSelect(this.dataMultiSelect); tim@171: while (rit.hasNext()) { tim@79: Result resultValue = rit.next(); tim@171: keyValueDescibeData.add(new DefaultKeyValueDescribeData(resultValue tim@173: .getString(keyid), resultValue.getString(valueid))); tim@68: } tim@173: return keyValueDescibeData; tim@61: } tim@171: tim@59: /** tim@171: * @see de.intevation.gnv.transition.Transition#describe(org.w3c.dom.Document, tim@171: * org.w3c.dom.Node, de.intevation.artifacts.CallMeta) tim@59: */ tim@117: public void describe(Document document, Node rootNode, CallMeta callMeta) { tim@118: log.debug("TransitionBase.describe"); tim@171: if (this.descibeData != null) { tim@76: ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities(); tim@59: Iterator it = this.descibeData.iterator(); tim@171: Node staticNode = xmlutilities.createArtifactElement(document, tim@171: "static"); tim@171: Node dynamic = xmlutilities.createArtifactElement(document, tim@171: "dynamic"); tim@79: rootNode.appendChild(staticNode); tim@79: rootNode.appendChild(dynamic); tim@171: while (it.hasNext()) { tim@171: tim@59: Object o = it.next(); tim@171: if (o instanceof Collection) { tim@171: String name = null; tim@171: boolean multiselect = false; tim@171: if (o instanceof NamedCollection) { tim@171: NamedCollection nc = ((NamedCollection) o); tim@171: name = nc.getName(); tim@171: multiselect = nc.isMultiSelect(); tim@171: } else { tim@171: Object[] names = this.inputValueNames.toArray(); tim@171: name = names[names.length - 1].toString(); tim@171: } tim@171: tim@171: Element selectNode = xmlutilities.createXFormElement( tim@171: document, multiselect ? "select" : "select1"); tim@171: selectNode.setAttribute("ref", name); tim@171: tim@171: Element lableNode = xmlutilities.createXFormElement( tim@171: document, "label"); tim@171: lableNode.setTextContent(RessourceFactory.getInstance() tim@171: .getRessource(callMeta.getLanguages(), name, name)); tim@171: Element choiceNode = xmlutilities.createXFormElement( tim@171: document, "choices"); tim@171: tim@171: Collection values = (Collection) o; tim@171: Iterator resultIt = values.iterator(); tim@171: while (resultIt.hasNext()) { tim@171: KeyValueDescibeData result = resultIt.next(); tim@171: Element itemNode = xmlutilities.createXFormElement( tim@171: document, "item"); tim@171: tim@171: if (result.isSelected()) { tim@171: itemNode.setAttribute("selected", "true"); tim@79: } tim@171: tim@171: Element choiceLableNode = xmlutilities tim@171: .createXFormElement(document, "label"); tim@171: choiceLableNode.setTextContent(result.getValue()); tim@171: itemNode.appendChild(choiceLableNode); tim@171: tim@171: Element choicValueNode = xmlutilities tim@171: .createXFormElement(document, "value"); tim@171: choicValueNode.setTextContent("" + result.getKey()); tim@171: itemNode.appendChild(choicValueNode); tim@171: choiceNode.appendChild(itemNode); tim@59: } tim@171: selectNode.appendChild(lableNode); tim@171: selectNode.appendChild(choiceNode); tim@171: tim@171: if (!it.hasNext()) { tim@171: dynamic.appendChild(selectNode); tim@171: } else { tim@171: staticNode.appendChild(selectNode); tim@171: } tim@171: tim@171: } else if (o instanceof MinMaxDescribeData) { tim@171: MinMaxDescribeData descibeData = (MinMaxDescribeData) o; tim@171: Object min = descibeData.getMinValue(); tim@171: Object max = descibeData.getMaxValue(); tim@171: if (min instanceof GregorianCalendar) { tim@171: Date d = ((GregorianCalendar) min).getTime(); tim@171: min = DateUtils.getPatternedDateAmer(d); tim@171: } tim@171: tim@171: if (max instanceof GregorianCalendar) { tim@171: Date d = ((GregorianCalendar) max).getTime(); tim@171: max = DateUtils.getPatternedDateAmer(d); tim@171: } tim@190: tim@190: Element groupNode = xmlutilities.createXFormElement( tim@190: document, "group"); tim@190: groupNode.setAttribute("ref", descibeData.getMinName()); tim@190: Element groupNodeLableNode = xmlutilities tim@190: .createXFormElement(document, "label"); tim@190: groupNodeLableNode.setTextContent(RessourceFactory tim@190: .getInstance().getRessource( tim@190: callMeta.getLanguages(), tim@190: descibeData.getMinName(), tim@190: descibeData.getMinName())); tim@190: groupNode.appendChild(groupNodeLableNode); tim@171: tim@171: Element inputMinNode = xmlutilities.createXFormElement( tim@171: document, "input"); tim@171: inputMinNode.setAttribute("ref", "minvalue"); tim@171: Element inputMinLableNode = xmlutilities tim@171: .createXFormElement(document, "label"); tim@171: inputMinLableNode.setTextContent(RessourceFactory tim@171: .getInstance().getRessource( tim@171: callMeta.getLanguages(), "minvalue", tim@171: "minvalue")); tim@171: inputMinNode.appendChild(inputMinLableNode); tim@171: tim@171: Element inputMinValueNode = xmlutilities tim@171: .createXFormElement(document, "value"); tim@171: inputMinValueNode.setTextContent(min.toString()); tim@171: inputMinNode.appendChild(inputMinValueNode); tim@171: tim@171: Element inputMaxNode = xmlutilities.createXFormElement( tim@171: document, "input"); tim@171: inputMaxNode.setAttribute("ref", "maxvalue"); tim@171: Element inputMaxLableNode = xmlutilities tim@171: .createXFormElement(document, "label"); tim@171: inputMaxLableNode.setTextContent(RessourceFactory tim@171: .getInstance().getRessource( tim@171: callMeta.getLanguages(), "maxvalue", tim@171: "maxvalue")); tim@171: inputMaxNode.appendChild(inputMaxLableNode); tim@171: tim@171: Element inputMaxValueNode = xmlutilities tim@171: .createXFormElement(document, "value"); tim@171: inputMaxValueNode.setTextContent(max.toString()); tim@171: inputMaxNode.appendChild(inputMaxValueNode); tim@171: tim@190: groupNode.appendChild(inputMinNode); tim@190: groupNode.appendChild(inputMaxNode); tim@190: tim@171: if (!it.hasNext()) { tim@190: dynamic.appendChild(groupNode); tim@171: } else { tim@190: staticNode.appendChild(groupNode); tim@171: } tim@171: } else if (o instanceof SingleValueDescribeData) { tim@171: tim@171: SingleValueDescribeData svdb = (SingleValueDescribeData) o; tim@195: tim@195: Element groupNode = xmlutilities.createXFormElement( tim@195: document, "group"); tim@195: groupNode.setAttribute("ref", svdb.getName()); tim@195: Element groupNodeLableNode = xmlutilities tim@195: .createXFormElement(document, "label"); tim@195: groupNodeLableNode.setTextContent(RessourceFactory tim@195: .getInstance().getRessource( tim@195: callMeta.getLanguages(), tim@195: svdb.getName(), tim@195: svdb.getName())); tim@195: groupNode.appendChild(groupNodeLableNode); tim@171: tim@171: Element inputNode = xmlutilities.createXFormElement( tim@171: document, "input"); tim@171: inputNode.setAttribute("ref", svdb.getName()); tim@171: tim@171: Element inputLableNode = xmlutilities.createXFormElement( tim@171: document, "label"); tim@195: inputLableNode.setTextContent(""); tim@171: inputNode.appendChild(inputLableNode); tim@171: tim@171: Element inputValueNode = xmlutilities.createXFormElement( tim@171: document, "value"); tim@171: inputValueNode.setTextContent(svdb.getValue()); tim@171: inputNode.appendChild(inputValueNode); tim@171: tim@195: groupNode.appendChild(inputNode); tim@171: if (!it.hasNext()) { tim@195: dynamic.appendChild(groupNode); tim@171: } else { tim@195: staticNode.appendChild(groupNode); tim@171: } tim@59: } tim@171: tim@59: } tim@59: } tim@171: } tim@59: tim@58: /** tim@58: * @see de.intevation.gnv.transition.Transition#getDescibeData() tim@58: */ tim@58: public Collection getDescibeData() { tim@58: return this.descibeData; tim@58: } tim@58: tim@58: /** tim@58: * @see de.intevation.gnv.transition.Transition#setDescibeData(java.util.Collection) tim@58: */ tim@58: public void setDescibeData(Collection descibeData) { tim@58: this.descibeData = descibeData; tim@171: tim@58: } tim@59: tim@59: /** tim@59: * @see de.intevation.gnv.transition.Transition#getInputData() tim@59: */ tim@59: public Collection getInputData() throws TransitionException { tim@171: return this.inputData != null ? this.inputData.values() : null; tim@59: } tim@52: }