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@207: import de.intevation.gnv.artifacts.cache.CacheFactory; 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@207: tim@222: private final static String MINVALUEFIELDNAME = "minvalue"; tim@222: private final static String MAXVALUEFIELDNAME = "maxvalue"; tim@222: tim@222: private final static String NODATASELECTIONKEY = "n/n"; tim@220: tim@207: private final static String DESCRIBEDATAKEY = "_DESCRIBEDATA"; 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@222: tim@222: protected boolean dataNoSelect = false; tim@53: tim@52: protected String queryID = null; tim@171: tim@52: private Collection reachableTransitions = null; tim@222: tim@222: private Transition alternativeTransition = 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@207: 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@222: tim@222: if (this.couldAlternativeTransitionUsed()){ tim@222: return this.alternativeTransition.reachableTransitions(); tim@222: }else{ tim@222: return this.reachableTransitions; tim@222: } tim@222: tim@222: } tim@222: tim@222: /** tim@222: * @return tim@222: */ tim@222: private boolean couldAlternativeTransitionUsed() { tim@222: // TODO das muss hier noch etwas freier gestaltet werden. tim@222: Object[] inputValues = this.inputValueNames.toArray(); tim@222: String key = (String)inputValues[inputValues.length-1]; tim@222: boolean returnValue= this.alternativeTransition != null && tim@222: this.inputData != null && tim@222: this.inputData.containsKey(key) && tim@222: this.inputData.get(key).getValue(). tim@222: equals(NODATASELECTIONKEY); tim@222: return returnValue; 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@222: tim@222: Node alternativeTransitionNode = Config.getNodeXPath(configuration, tim@222: "alternativeTransition/transition"); tim@222: if (alternativeTransitionNode != null){ tim@222: this.alternativeTransition = TransitionFactory.getInstance() tim@222: .createTransition(alternativeTransitionNode); tim@222: } 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@222: "data-multiselect"); tim@171: if (dataMultiSelectValue != null) { tim@171: this.dataMultiSelect = Boolean.parseBoolean(dataMultiSelectValue); tim@79: } tim@222: tim@222: String dataNoSelectValue =Config.getStringXPath(configuration, tim@222: "data-noselect"); tim@222: if (dataNoSelectValue != null) { tim@222: this. dataNoSelect = Boolean.parseBoolean(dataNoSelectValue); tim@222: } tim@222: 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@207: this.setSelection(tmpItem, uuid); 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@207: private void setSelection(InputData inputData, String uuid) { tim@79: log.debug("TransitionBase.setSelection"); tim@171: tim@207: Object o = this.getDescribeData(inputData.getName(),uuid); 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@220: if (inputData.getName().equals(MINVALUEFIELDNAME)) { tim@79: data.setMinValue(inputData.getValue()); tim@79: } tim@220: if (inputData.getName().equals(MAXVALUEFIELDNAME)) { tim@79: data.setMaxValue(inputData.getValue()); tim@79: } tim@79: } tim@79: } tim@79: } tim@171: tim@207: private Object getDescribeData(String name, String uuid) { tim@118: log.debug("TransitionBase.getDescribeData"); tim@207: Collection descibeData = this.getDescibeData(uuid); tim@207: if (descibeData != null) { tim@207: Iterator it = 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@222: if (this.couldAlternativeTransitionUsed()){ tim@222: return alternativeTransition.isTransitionReachable(transitionID); tim@222: }else{ tim@222: Iterator transitions = reachableTransitions.iterator(); tim@222: while (transitions.hasNext()) { tim@222: if (transitions.next().equals(transitionID)) { tim@222: log.debug("Transition " + transitionID + " wird unterstützt."); tim@222: returnValue = true; tim@222: break; tim@222: } 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@222: tim@222: if (this.couldAlternativeTransitionUsed()){ tim@222: this.alternativeTransition.setParent(this.getParent()); tim@222: this.alternativeTransition.putInputData(this.inputData != null ? tim@222: this.inputData.values() : tim@222: null,uuid); tim@222: this.alternativeTransition.advance(uuid, callMeta); tim@222: }else{ tim@222: try { tim@232: String[] filterValues = this.generateFilterValuesFromInputData(); tim@222: Collection result = null; tim@222: try { tim@222: if (this.queryID != null) { tim@222: QueryExecutor queryExecutor = QueryExecutorFactory tim@222: .getInstance().getQueryExecutor(); tim@222: result = queryExecutor.executeQuery(this.queryID, tim@222: filterValues); tim@222: } tim@222: this.purifyResult(result, uuid); tim@222: } catch (RuntimeException e) { tim@222: log.error(e, e); tim@222: } tim@222: } catch (QueryException e) { tim@222: log.error(e, e); tim@222: throw new TransitionException(e); tim@58: } tim@58: } tim@58: } tim@232: tim@232: /** tim@232: * @return tim@232: */ tim@232: protected String[] generateFilterValuesFromInputData() { tim@232: List list = new ArrayList(); tim@232: Iterator it = this.inputValueNames.iterator(); tim@232: while (it.hasNext()) { tim@232: String value = it.next(); tim@232: InputData data = this.inputData.get(value); tim@232: if (data != null tim@232: && this.inputValues.containsKey(data.getName())) { tim@232: int size = this.inputValues.get(data.getName()) tim@232: .usedInQueries(); tim@232: String type = this.inputValues.get(data.getName()) tim@232: .getType(); tim@232: String requestValue = data.getValue(); tim@232: if (type.equalsIgnoreCase("string")) { tim@232: requestValue = this tim@232: .prepareInputData4DBQuery(requestValue); tim@232: } else if (type.equalsIgnoreCase("date")) { tim@232: requestValue = this tim@232: .prepareInputData4DateDBQuery(requestValue); tim@232: } else if (type.equalsIgnoreCase("coordinate")){ tim@232: requestValue = this tim@232: .prepareInputData4RegionDBQuery(requestValue); tim@232: } tim@232: for (int j = 0; j < size; j++) { tim@232: list.add(requestValue); tim@232: } tim@232: } tim@232: } tim@232: String[] filterValues = list.toArray(new String[0]); tim@232: return filterValues; tim@232: } 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@207: Collection describeData = this.getDescibeData(uuid); tim@207: if (describeData == null) { tim@207: describeData = new ArrayList(); tim@61: } tim@173: NamedCollection keyValueDescibeData = extractKVP(result, "KEY", "VALUE"); tim@207: describeData.add(keyValueDescibeData); tim@207: this.setDescibeData(uuid, describeData); tim@173: } tim@173: tim@173: /** tim@173: * @param result tim@173: * @return tim@173: */ tim@222: protected NamedCollection extractKVP(Collection result, tim@173: String keyid, tim@173: String valueid) { tim@171: Iterator rit = result.iterator(); tim@222: int dataSize = (this.dataNoSelect ? result.size()+1 : result.size()); tim@222: tim@171: NamedCollection keyValueDescibeData = new NamedArrayList( tim@222: this.dataName, dataSize); tim@79: keyValueDescibeData.setMultiSelect(this.dataMultiSelect); tim@222: tim@222: if (this.dataNoSelect){ tim@222: keyValueDescibeData.add(new DefaultKeyValueDescribeData(NODATASELECTIONKEY, tim@222: "Keine Auswahl")); tim@222: } tim@222: String previousKey = null; tim@171: while (rit.hasNext()) { tim@79: Result resultValue = rit.next(); tim@222: String tmpKey = resultValue.getString(keyid); tim@222: // TODO: HACK da die ARCSDE kein DISTINCT auf räumlichen Anfragen unterstützt. tim@222: if (previousKey == null || !tmpKey.equals(previousKey)){ tim@222: previousKey = tmpKey; tim@222: keyValueDescibeData.add(new DefaultKeyValueDescribeData(tmpKey, resultValue.getString(valueid))); tim@222: } 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@207: * org.w3c.dom.Node, de.intevation.artifacts.CallMeta, tim@207: * java.lang.String) tim@59: */ tim@207: public void describe(Document document, Node rootNode, CallMeta callMeta,String uuid) { tim@118: log.debug("TransitionBase.describe"); tim@207: Collection descibeData = this.getDescibeData(uuid); tim@207: if (descibeData != null) { tim@76: ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities(); tim@207: Iterator it = 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@207: MinMaxDescribeData minMaxDescibeData = (MinMaxDescribeData) o; tim@207: Object min = minMaxDescibeData.getMinValue(); tim@207: Object max = minMaxDescibeData.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@207: groupNode.setAttribute("ref", minMaxDescibeData.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@207: minMaxDescibeData.getMinName(), tim@207: minMaxDescibeData.getMinName())); tim@190: groupNode.appendChild(groupNodeLableNode); tim@171: tim@171: Element inputMinNode = xmlutilities.createXFormElement( tim@171: document, "input"); tim@220: inputMinNode.setAttribute("ref", MINVALUEFIELDNAME); tim@171: Element inputMinLableNode = xmlutilities tim@171: .createXFormElement(document, "label"); tim@171: inputMinLableNode.setTextContent(RessourceFactory tim@171: .getInstance().getRessource( tim@220: callMeta.getLanguages(), MINVALUEFIELDNAME, tim@220: MINVALUEFIELDNAME)); 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@220: inputMaxNode.setAttribute("ref", MAXVALUEFIELDNAME); tim@171: Element inputMaxLableNode = xmlutilities tim@171: .createXFormElement(document, "label"); tim@171: inputMaxLableNode.setTextContent(RessourceFactory tim@171: .getInstance().getRessource( tim@220: callMeta.getLanguages(), MAXVALUEFIELDNAME, tim@220: MAXVALUEFIELDNAME)); 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@207: protected Collection getDescibeData(String uuid) { tim@207: if (CacheFactory.getInstance().isInitialized()) { tim@207: String key = uuid + DESCRIBEDATAKEY; tim@207: log.debug("Hash for Queryelements: " + key); tim@207: net.sf.ehcache.Element value = CacheFactory.getInstance().getCache().get(key); tim@207: if (value != null) { tim@207: return (Collection) (value.getObjectValue()); tim@207: } tim@207: } tim@207: return null; tim@58: } tim@207: tim@58: /** tim@207: * @see de.intevation.gnv.transition.Transition#getDescibeData() tim@58: */ tim@207: protected void setDescibeData(String uuid, Collection describeData) { tim@207: tim@207: if (CacheFactory.getInstance().isInitialized()) { tim@207: String key = uuid + DESCRIBEDATAKEY; tim@207: log.debug("Hash for Queryelements: " + key); tim@207: CacheFactory.getInstance().getCache().put(new net.sf.ehcache.Element(key, describeData)); tim@207: } 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@222: if (this.couldAlternativeTransitionUsed()){ tim@222: return this.alternativeTransition.getInputData(); tim@222: }else{ tim@222: return this.inputData != null ? this.inputData.values() : null; tim@222: } tim@59: } tim@52: }