tim@335: /** tim@335: * tim@335: */ tim@335: package de.intevation.gnv.state; tim@335: tim@335: import java.util.ArrayList; tim@335: import java.util.Collection; tim@335: import java.util.Date; tim@335: import java.util.GregorianCalendar; tim@335: import java.util.HashMap; tim@335: import java.util.HashSet; tim@335: import java.util.Iterator; tim@335: import java.util.List; tim@335: import java.util.Map; tim@335: import java.util.Set; tim@335: tim@335: import org.apache.log4j.Logger; tim@335: import org.w3c.dom.Document; tim@335: import org.w3c.dom.Element; tim@335: import org.w3c.dom.Node; tim@335: import org.w3c.dom.NodeList; tim@335: tim@335: import de.intevation.artifactdatabase.Config; tim@335: import de.intevation.artifacts.CallMeta; tim@335: import de.intevation.gnv.artifacts.GNVArtifactBase; tim@335: import de.intevation.gnv.artifacts.cache.CacheFactory; tim@335: import de.intevation.gnv.artifacts.ressource.RessourceFactory; tim@335: import de.intevation.gnv.geobackend.base.Result; tim@335: import de.intevation.gnv.geobackend.base.query.QueryExecutor; tim@335: import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; tim@335: import de.intevation.gnv.geobackend.base.query.exception.QueryException; tim@335: import de.intevation.gnv.geobackend.util.DateUtils; tim@335: import de.intevation.gnv.state.describedata.DefaultKeyValueDescribeData; tim@335: import de.intevation.gnv.state.describedata.KeyValueDescibeData; tim@335: import de.intevation.gnv.state.describedata.MinMaxDescribeData; tim@335: import de.intevation.gnv.state.describedata.NamedArrayList; tim@335: import de.intevation.gnv.state.describedata.NamedCollection; tim@335: import de.intevation.gnv.state.describedata.SingleValueDescribeData; tim@335: import de.intevation.gnv.state.exception.StateException; tim@335: import de.intevation.gnv.utils.ArtifactXMLUtilities; tim@335: import de.intevation.gnv.utils.InputValidator; tim@335: tim@335: /** tim@335: * @author Tim Englich tim@335: * tim@335: */ tim@335: public abstract class StateBase implements State { tim@335: tim@335: /** tim@335: * The UID of this Class tim@335: */ tim@335: private static final long serialVersionUID = 2411169179001645426L; tim@335: tim@335: /** tim@335: * the logger, used to log exceptions and additonaly information tim@335: */ tim@335: private static Logger log = Logger.getLogger(GNVArtifactBase.class); tim@335: tim@335: private final static String MINVALUEFIELDNAME = "minvalue"; tim@335: private final static String MAXVALUEFIELDNAME = "maxvalue"; tim@335: tim@335: private final static String NODATASELECTIONKEY = "n/n"; tim@335: tim@335: private final static String DESCRIBEDATAKEY = "_DESCRIBEDATA"; tim@335: tim@335: private String id = null; tim@335: tim@335: private String description = null; tim@335: tim@335: protected String dataName = null; tim@335: tim@335: protected boolean dataMultiSelect = false; tim@335: tim@335: protected boolean dataNoSelect = false; tim@335: tim@335: protected String queryID = null; tim@335: tim@335: protected Collection inputValueNames = null; tim@335: tim@335: private Map inputValues = null; tim@335: tim@335: private State parent = null; tim@335: tim@335: protected Map inputData = null; tim@335: tim@335: tim@335: /** tim@335: * Constructor tim@335: */ tim@335: public StateBase() { tim@335: super(); tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getID() tim@335: */ tim@335: public String getID() { tim@335: return this.id; tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getDescription() tim@335: */ tim@335: public String getDescription() { tim@335: return this.description; tim@335: } tim@335: tim@335: tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getRequiredInputValues() tim@335: */ tim@335: public Collection getRequiredInputValues() { tim@335: return this.inputValues.values(); tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#setup(org.w3c.dom.Node) tim@335: */ tim@335: public void setup(Node configuration) { tim@335: log.debug("StateBase.setup"); tim@335: this.id = ((Element)configuration).getAttribute("id"); tim@335: this.description = ((Element)configuration).getAttribute("description"); tim@335: tim@335: log.info("State-ID = " + this.id); tim@335: tim@335: NodeList inputValuesNodes = Config.getNodeSetXPath(configuration, tim@335: "inputvalues/inputvalue"); tim@335: this.inputValues = new HashMap(inputValuesNodes tim@335: .getLength()); tim@335: this.inputValueNames = new ArrayList(inputValuesNodes tim@335: .getLength()); tim@335: for (int i = 0; i < inputValuesNodes.getLength(); i++) { tim@335: Element inputValueNode = (Element)inputValuesNodes.item(i); tim@335: String usedinQueryValue = inputValueNode.getAttribute("usedinquery"); tim@335: int usedinQuery = 1; tim@335: if (usedinQueryValue != null) { tim@335: try { tim@335: usedinQuery = Integer.parseInt(usedinQueryValue); tim@335: } catch (NumberFormatException e) { tim@335: log tim@335: .warn("Used in Query Value cannot be transformed into a Number"); tim@335: } tim@335: } tim@335: InputValue inputValue = new DefaultInputValue(inputValueNode.getAttribute("name"), tim@335: inputValueNode.getAttribute("type"), tim@335: Boolean.parseBoolean(inputValueNode. tim@335: getAttribute("multiselect")), usedinQuery); tim@335: log.debug(inputValue.toString()); tim@335: this.inputValues.put(inputValue.getName(), inputValue); tim@335: this.inputValueNames.add(inputValue.getName()); tim@335: } tim@335: tim@335: this.queryID = Config.getStringXPath(configuration, "queryID"); tim@335: log.info("QueryID ==> " + this.queryID); tim@335: tim@335: this.dataName = Config.getStringXPath(configuration, "dataname"); tim@335: tim@335: String dataMultiSelectValue = Config.getStringXPath(configuration, tim@335: "data-multiselect"); tim@335: if (dataMultiSelectValue != null) { tim@335: this.dataMultiSelect = Boolean.parseBoolean(dataMultiSelectValue); tim@335: } tim@335: tim@335: String dataNoSelectValue =Config.getStringXPath(configuration, tim@335: "data-noselect"); tim@335: if (dataNoSelectValue != null) { tim@335: this. dataNoSelect = Boolean.parseBoolean(dataNoSelectValue); tim@335: } tim@335: tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getParent() tim@335: */ tim@335: public State getParent() { tim@335: return this.parent; tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#setParent(de.intevation.gnv.state.State) tim@335: */ tim@335: public void setParent(State state) { tim@335: this.parent = state; tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#putInputData(java.util.Collection) tim@335: */ tim@335: public void putInputData(Collection inputData, String uuid) tim@335: throws StateException { tim@335: log.debug("StateBase.putInputData"); tim@335: if (inputData != null) { tim@335: Iterator it = inputData.iterator(); tim@335: InputValidator iv = new InputValidator(); tim@335: while (it.hasNext()) { tim@335: InputData tmpItem = it.next(); tim@335: InputValue inputValue = this.inputValues.get(tmpItem.getName()); tim@335: if (inputValue != null) { tim@335: if (this.inputData == null) { tim@335: this.inputData = new HashMap( tim@335: inputData.size()); tim@335: } tim@335: tim@335: boolean valid = iv.isInputValid(tmpItem.getValue(), tim@335: inputValue.getType()); tim@335: if (valid) { tim@335: if (tmpItem.getName().equals(MINVALUEFIELDNAME)){ tim@335: String minValue = tmpItem.getValue(); tim@335: String maxValue = this.getInputValue4ID(inputData, MAXVALUEFIELDNAME); tim@335: valid = iv.isInputValid(maxValue,inputValue.getType()); tim@335: if (!valid){ tim@335: String errMsg = "Wrong input for " + tmpItem.getValue() tim@335: + " is not an " + inputValue.getType() tim@335: + " Value."; tim@335: log.warn(errMsg); tim@335: throw new StateException(errMsg); tim@335: } tim@335: tim@335: valid = iv.isInputValid(minValue, tim@335: maxValue, tim@335: inputValue.getType()); tim@335: if (!valid){ tim@335: String errMsg = "MaxValue-Input is less than MinValue-Input "; tim@335: log.warn(errMsg); tim@335: throw new StateException(errMsg); tim@335: } tim@335: }else if (tmpItem.getName().equals(MAXVALUEFIELDNAME)){ tim@335: String minValue = this.getInputValue4ID(inputData, MINVALUEFIELDNAME); tim@335: String maxValue = tmpItem.getValue(); tim@335: valid = iv.isInputValid(minValue,inputValue.getType()); tim@335: if (!valid){ tim@335: String errMsg = "Wrong input for " + tmpItem.getValue() tim@335: + " is not an " + inputValue.getType() tim@335: + " Value."; tim@335: log.warn(errMsg); tim@335: throw new StateException(errMsg); tim@335: } tim@335: tim@335: valid = iv.isInputValid(minValue, tim@335: maxValue, tim@335: inputValue.getType()); tim@335: if (!valid){ tim@335: String errMsg = "MaxValue-Input is less than MinValue-Input "; tim@335: log.warn(errMsg); tim@335: throw new StateException(errMsg); tim@335: } tim@335: } tim@335: this.setSelection(tmpItem, uuid); tim@335: this.inputData.put(tmpItem.getName(), tmpItem); tim@335: } else { tim@335: String errMsg = "Wrong input for " + tmpItem.getValue() tim@335: + " is not an " + inputValue.getType() tim@335: + " Value."; tim@335: log.warn(errMsg); tim@335: throw new StateException(errMsg); tim@335: } tim@335: tim@335: } else { tim@335: String errMsg = "No Inputvalue given for Inputdata " tim@335: + tmpItem.getName(); tim@335: log.warn(errMsg + "Value will be ignored"); tim@335: tim@335: } tim@335: } tim@335: } else { tim@335: log.warn("No Inputdata given"); tim@335: } tim@335: } tim@335: tim@335: private String getInputValue4ID(Collection inputData, String inputName){ tim@335: Iterator it = inputData.iterator(); tim@335: while (it.hasNext()) { tim@335: InputData tmpItem = it.next(); tim@335: if (tmpItem.getName().equals(inputName)){ tim@335: return tmpItem.getValue(); tim@335: } tim@335: } tim@335: return null; tim@335: } tim@335: tim@335: private void setSelection(InputData inputData, String uuid) { tim@335: log.debug("StateBase.setSelection"); tim@335: tim@335: Object o = this.getDescribeData(inputData.getName(),uuid); tim@335: if (o != null) { tim@335: if (o instanceof Collection) { tim@335: Collection values = (Collection) o; tim@335: tim@335: String value = inputData.getValue(); tim@335: String[] selectedValues = value.split(","); tim@335: Set selectedItems = new HashSet( tim@335: selectedValues.length); tim@335: for (int i = 0; i < selectedValues.length; i++) { tim@335: selectedItems.add(selectedValues[i].trim()); tim@335: } tim@335: // Selektion umsetzen tim@335: Iterator it = values.iterator(); tim@335: while (it.hasNext()) { tim@335: KeyValueDescibeData data = it.next(); tim@335: String key = "" + data.getKey(); tim@335: boolean selected = selectedItems.contains(key); tim@335: data.setSelected(selected); tim@335: } tim@335: } else if (o instanceof MinMaxDescribeData) { tim@335: MinMaxDescribeData data = (MinMaxDescribeData) o; tim@335: if (inputData.getName().equals(MINVALUEFIELDNAME)) { tim@335: data.setMinValue(inputData.getValue()); tim@335: } tim@335: if (inputData.getName().equals(MAXVALUEFIELDNAME)) { tim@335: data.setMaxValue(inputData.getValue()); tim@335: } tim@335: } else if (o instanceof SingleValueDescribeData) { tim@335: ((SingleValueDescribeData)o).setValue(inputData.getValue()); tim@335: } tim@335: } tim@335: } tim@335: tim@335: private Object getDescribeData(String name, String uuid) { tim@335: log.debug("StateBase.getDescribeData"); tim@335: Collection descibeData = this.getDescibeData(uuid); tim@335: if (descibeData != null) { tim@335: Iterator it = descibeData.iterator(); tim@335: while (it.hasNext()) { tim@335: Object o = it.next(); tim@335: if (o instanceof NamedCollection) { tim@335: if (name.equals(((NamedCollection) o).getName())) { tim@335: return o; tim@335: } tim@335: } else if (o instanceof MinMaxDescribeData) { tim@335: if (name.equals(((MinMaxDescribeData) o).getMinName())) { tim@335: return o; tim@335: } tim@335: if (name.equals(((MinMaxDescribeData) o).getMaxName())) { tim@335: return o; tim@335: } tim@335: }else if (o instanceof SingleValueDescribeData) { tim@335: if (name.equals(((SingleValueDescribeData)o).getName())){ tim@335: return o; tim@335: } tim@335: } tim@335: } tim@335: } tim@335: return null; tim@335: tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#advance(java.lang.String, tim@335: * de.intevation.artifacts.CallMeta) tim@335: */ tim@335: public void advance(String uuid, CallMeta callMeta) tim@335: throws StateException { tim@335: } tim@335: tim@335: public void initialize(String uuid, CallMeta callMeta) tim@335: throws StateException { tim@335: log.debug("StateBase.initialize"); tim@335: try { tim@335: String[] filterValues = this tim@335: .generateFilterValuesFromInputData(); tim@335: Collection result = null; tim@335: try { tim@335: if (this.queryID != null) { tim@335: QueryExecutor queryExecutor = QueryExecutorFactory tim@335: .getInstance().getQueryExecutor(); tim@335: result = queryExecutor.executeQuery(this.queryID, tim@335: filterValues); tim@335: } tim@335: this.purifyResult(result, uuid); tim@335: } catch (RuntimeException e) { tim@335: log.error(e, e); tim@335: } tim@335: } catch (QueryException e) { tim@335: log.error(e, e); tim@335: throw new StateException(e); tim@335: } tim@335: } tim@335: tim@335: /** tim@335: * @return tim@335: */ tim@335: protected String[] generateFilterValuesFromInputData() { tim@335: List list = new ArrayList(); tim@335: Iterator it = this.inputValueNames.iterator(); tim@335: while (it.hasNext()) { tim@335: String value = it.next(); tim@335: InputData data = this.inputData.get(value); tim@335: if (data != null tim@335: && this.inputValues.containsKey(data.getName())) { tim@335: int size = this.inputValues.get(data.getName()) tim@335: .usedInQueries(); tim@335: String type = this.inputValues.get(data.getName()) tim@335: .getType(); tim@335: String requestValue = data.getValue(); tim@335: if (type.equalsIgnoreCase("string")) { tim@335: requestValue = this tim@335: .prepareInputData4DBQuery(requestValue); tim@335: } else if (type.equalsIgnoreCase("date")) { tim@335: requestValue = this tim@335: .prepareInputData4DateDBQuery(requestValue); tim@335: } else if (type.equalsIgnoreCase("coordinate")){ tim@335: requestValue = this tim@335: .prepareInputData4RegionDBQuery(requestValue); tim@335: } tim@335: for (int j = 0; j < size; j++) { tim@335: list.add(requestValue); tim@335: } tim@335: } tim@335: } ingo@428: String[] filterValues = list.toArray(new String[list.size()]); tim@335: return filterValues; tim@335: } tim@335: tim@335: protected String prepareInputData4RegionDBQuery(String value){ tim@335: return value; tim@335: } tim@335: tim@335: private String prepareInputData4DateDBQuery(String value) { tim@335: log.debug("StateBase.prepareInputData4DateDBQuery"); tim@335: if (value != null) { tim@335: String[] values = value.split(","); tim@335: String newValue = ""; tim@335: for (int i = 0; i < values.length; i++) { tim@335: if (newValue.length() > 0) { tim@335: newValue = newValue + " , "; tim@335: } tim@335: // TODO JUST HACK FIND A BETTER RESOLUTION tim@335: newValue = newValue + "to_date('" + values[i].trim() tim@335: + "', 'YYYY.MM.DD HH24:MI:SS')"; tim@335: } tim@335: return newValue; tim@335: } tim@335: tim@335: return value; tim@335: } tim@335: tim@335: private String prepareInputData4DBQuery(String value) { tim@335: log.debug("StateBase.prepareInputData4DBQuery"); tim@335: if (value != null) { tim@335: String[] values = value.split(","); tim@335: String newValue = ""; tim@335: for (int i = 0; i < values.length; i++) { tim@335: if (newValue.length() > 0) { tim@335: newValue = newValue + " , "; tim@335: } tim@335: newValue = newValue + "'" + values[i].trim() + "'"; tim@335: } tim@335: return newValue; tim@335: } tim@335: tim@335: return value; tim@335: tim@335: } tim@335: tim@335: /** tim@335: * @param result tim@335: */ tim@335: protected void purifyResult(Collection result, String uuid) { tim@335: log.debug("StateBase.purifyResult"); tim@335: Collection describeData = this.getDescibeData(uuid); tim@335: if (describeData == null) { tim@335: describeData = new ArrayList(); tim@335: } tim@335: NamedCollection keyValueDescibeData = extractKVP(result, "KEY", "VALUE"); tim@335: describeData.add(keyValueDescibeData); tim@335: this.setDescibeData(uuid, describeData); tim@335: } tim@335: tim@335: /** tim@335: * @param result tim@335: * @return tim@335: */ tim@335: protected NamedCollection extractKVP(Collection result, tim@335: String keyid, tim@335: String valueid) { tim@335: Iterator rit = result.iterator(); tim@335: int dataSize = (this.dataNoSelect ? result.size()+1 : result.size()); tim@335: tim@335: NamedCollection keyValueDescibeData = new NamedArrayList( tim@335: this.dataName, dataSize); tim@335: keyValueDescibeData.setMultiSelect(this.dataMultiSelect); tim@335: tim@335: if (this.dataNoSelect){ tim@335: keyValueDescibeData.add(new DefaultKeyValueDescribeData(NODATASELECTIONKEY, tim@335: "No Selection")); tim@335: } tim@335: boolean initialized = false; tim@335: int keyPos= 0; tim@335: int valuePos = 1; tim@335: String previousKey = null; tim@335: while (rit.hasNext()) { tim@335: Result resultValue = rit.next(); tim@335: if (!initialized){ tim@335: keyPos = resultValue.getResultDescriptor().getColumnIndex(keyid); tim@335: valuePos = resultValue.getResultDescriptor().getColumnIndex(valueid); tim@335: if (valuePos < 0){ tim@335: valuePos = 1; tim@335: } tim@335: initialized = true; tim@335: } tim@335: String tmpKey = resultValue.getString(keyPos); tim@335: // TODO: HACK da die ARCSDE kein DISTINCT auf räumlichen Anfragen unterstützt. tim@335: if (previousKey == null || !tmpKey.equals(previousKey)){ tim@335: previousKey = tmpKey; tim@335: keyValueDescibeData.add(new DefaultKeyValueDescribeData(tmpKey, resultValue.getString(valuePos))); tim@335: } tim@335: } tim@335: return keyValueDescibeData; tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#describe(org.w3c.dom.Document, tim@335: * org.w3c.dom.Node, de.intevation.artifacts.CallMeta, tim@335: * java.lang.String) tim@335: */ tim@335: public void describe(Document document, Node rootNode, CallMeta callMeta,String uuid) { tim@335: log.debug("StateBase.describe"); tim@335: Collection descibeData = this.getDescibeData(uuid); tim@335: if (descibeData != null) { tim@335: ArtifactXMLUtilities xmlutilities = new ArtifactXMLUtilities(); tim@335: Iterator it = descibeData.iterator(); tim@335: Node staticNode = xmlutilities.createArtifactElement(document, tim@335: "static"); tim@335: Node dynamic = xmlutilities.createArtifactElement(document, tim@335: "dynamic"); tim@335: rootNode.appendChild(staticNode); tim@335: rootNode.appendChild(dynamic); tim@335: while (it.hasNext()) { tim@335: tim@335: Object o = it.next(); tim@335: if (o instanceof Collection) { tim@335: String name = null; tim@335: boolean multiselect = false; tim@335: if (o instanceof NamedCollection) { tim@335: NamedCollection nc = ((NamedCollection) o); tim@335: name = nc.getName(); tim@335: multiselect = nc.isMultiSelect(); tim@335: } else { tim@335: Object[] names = this.inputValueNames.toArray(); tim@335: name = names[names.length - 1].toString(); tim@335: } tim@335: tim@335: Element selectNode = xmlutilities.createXFormElement( tim@335: document, multiselect ? "select" : "select1"); tim@335: selectNode.setAttribute("ref", name); tim@335: tim@335: Element lableNode = xmlutilities.createXFormElement( tim@335: document, "label"); tim@335: lableNode.setTextContent(RessourceFactory.getInstance() tim@335: .getRessource(callMeta.getLanguages(), name, name)); tim@335: Element choiceNode = xmlutilities.createXFormElement( tim@335: document, "choices"); tim@335: tim@335: Collection values = (Collection) o; tim@335: Iterator resultIt = values.iterator(); tim@335: while (resultIt.hasNext()) { tim@335: KeyValueDescibeData result = resultIt.next(); tim@335: Element itemNode = xmlutilities.createXFormElement( tim@335: document, "item"); tim@335: tim@335: if (result.isSelected()) { tim@335: itemNode.setAttribute("selected", "true"); tim@335: } tim@335: tim@335: Element choiceLableNode = xmlutilities tim@335: .createXFormElement(document, "label"); tim@335: choiceLableNode.setTextContent(result.getValue()); tim@335: itemNode.appendChild(choiceLableNode); tim@335: tim@335: Element choicValueNode = xmlutilities tim@335: .createXFormElement(document, "value"); tim@335: choicValueNode.setTextContent("" + result.getKey()); tim@335: itemNode.appendChild(choicValueNode); tim@335: choiceNode.appendChild(itemNode); tim@335: } tim@335: selectNode.appendChild(lableNode); tim@335: selectNode.appendChild(choiceNode); tim@335: tim@335: if (!it.hasNext() && this.dataName != null) { tim@335: dynamic.appendChild(selectNode); tim@335: } else { tim@335: staticNode.appendChild(selectNode); tim@335: } tim@335: tim@335: } else if (o instanceof MinMaxDescribeData) { tim@335: MinMaxDescribeData minMaxDescibeData = (MinMaxDescribeData) o; tim@335: Object min = minMaxDescibeData.getMinValue(); tim@335: Object max = minMaxDescibeData.getMaxValue(); tim@335: if (min instanceof GregorianCalendar) { tim@335: Date d = ((GregorianCalendar) min).getTime(); tim@335: min = DateUtils.getPatternedDateAmer(d); tim@335: } tim@335: tim@335: if (max instanceof GregorianCalendar) { tim@335: Date d = ((GregorianCalendar) max).getTime(); tim@335: max = DateUtils.getPatternedDateAmer(d); tim@335: } tim@335: tim@335: Element groupNode = xmlutilities.createXFormElement( tim@335: document, "group"); tim@335: groupNode.setAttribute("ref", minMaxDescibeData.getName()); tim@335: Element groupNodeLableNode = xmlutilities tim@335: .createXFormElement(document, "label"); tim@335: groupNodeLableNode.setTextContent(RessourceFactory tim@335: .getInstance().getRessource( tim@335: callMeta.getLanguages(), tim@335: minMaxDescibeData.getName(), tim@335: minMaxDescibeData.getName())); tim@335: groupNode.appendChild(groupNodeLableNode); tim@335: tim@335: Element inputMinNode = xmlutilities.createXFormElement( tim@335: document, "input"); tim@335: inputMinNode.setAttribute("ref", MINVALUEFIELDNAME); tim@335: Element inputMinLableNode = xmlutilities tim@335: .createXFormElement(document, "label"); tim@335: inputMinLableNode.setTextContent(RessourceFactory tim@335: .getInstance().getRessource( tim@335: callMeta.getLanguages(), MINVALUEFIELDNAME, tim@335: MINVALUEFIELDNAME)); tim@335: inputMinNode.appendChild(inputMinLableNode); tim@335: tim@335: Element inputMinValueNode = xmlutilities tim@335: .createXFormElement(document, "value"); tim@335: inputMinValueNode.setTextContent(min.toString()); tim@335: inputMinNode.appendChild(inputMinValueNode); tim@335: tim@335: Element inputMaxNode = xmlutilities.createXFormElement( tim@335: document, "input"); tim@335: inputMaxNode.setAttribute("ref", MAXVALUEFIELDNAME); tim@335: Element inputMaxLableNode = xmlutilities tim@335: .createXFormElement(document, "label"); tim@335: inputMaxLableNode.setTextContent(RessourceFactory tim@335: .getInstance().getRessource( tim@335: callMeta.getLanguages(), MAXVALUEFIELDNAME, tim@335: MAXVALUEFIELDNAME)); tim@335: inputMaxNode.appendChild(inputMaxLableNode); tim@335: tim@335: Element inputMaxValueNode = xmlutilities tim@335: .createXFormElement(document, "value"); tim@335: inputMaxValueNode.setTextContent(max.toString()); tim@335: inputMaxNode.appendChild(inputMaxValueNode); tim@335: tim@335: groupNode.appendChild(inputMinNode); tim@335: groupNode.appendChild(inputMaxNode); tim@335: tim@335: if (!it.hasNext() && this.dataName != null) { tim@335: dynamic.appendChild(groupNode); tim@335: } else { tim@335: staticNode.appendChild(groupNode); tim@335: } tim@335: } else if (o instanceof SingleValueDescribeData) { tim@335: tim@335: SingleValueDescribeData svdb = (SingleValueDescribeData) o; tim@335: tim@335: Element groupNode = xmlutilities.createXFormElement( tim@335: document, "group"); tim@335: groupNode.setAttribute("ref", svdb.getName()); tim@335: Element groupNodeLableNode = xmlutilities tim@335: .createXFormElement(document, "label"); tim@335: groupNodeLableNode.setTextContent(RessourceFactory tim@335: .getInstance().getRessource( tim@335: callMeta.getLanguages(), tim@335: svdb.getName(), tim@335: svdb.getName())); tim@335: groupNode.appendChild(groupNodeLableNode); tim@335: tim@335: Element inputNode = xmlutilities.createXFormElement( tim@335: document, "input"); tim@335: inputNode.setAttribute("ref", svdb.getName()); tim@335: tim@335: Element inputLableNode = xmlutilities.createXFormElement( tim@335: document, "label"); tim@335: inputLableNode.setTextContent(""); tim@335: inputNode.appendChild(inputLableNode); tim@335: tim@335: Element inputValueNode = xmlutilities.createXFormElement( tim@335: document, "value"); tim@335: inputValueNode.setTextContent(svdb.getValue()); tim@335: inputNode.appendChild(inputValueNode); tim@335: tim@335: groupNode.appendChild(inputNode); tim@335: if (!it.hasNext() && this.dataName != null) { tim@335: dynamic.appendChild(groupNode); tim@335: } else { tim@335: staticNode.appendChild(groupNode); tim@335: } tim@335: } tim@335: tim@335: } tim@335: } tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getDescibeData() tim@335: */ tim@335: protected Collection getDescibeData(String uuid) { tim@335: if (CacheFactory.getInstance().isInitialized()) { tim@335: String key = uuid + DESCRIBEDATAKEY; tim@335: log.debug("Hash for Queryelements: " + key); tim@335: net.sf.ehcache.Element value = CacheFactory.getInstance().getCache().get(key); tim@335: if (value != null) { tim@335: return (Collection) (value.getObjectValue()); tim@335: } tim@335: } tim@335: return null; tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getDescibeData() tim@335: */ tim@335: protected void setDescibeData(String uuid, Collection describeData) { tim@335: tim@335: if (CacheFactory.getInstance().isInitialized()) { tim@335: String key = uuid + DESCRIBEDATAKEY; tim@335: log.debug("Hash for Queryelements: " + key); tim@335: CacheFactory.getInstance().getCache().put(new net.sf.ehcache.Element(key, describeData)); tim@335: } tim@335: } tim@335: tim@335: /** tim@335: * @see de.intevation.gnv.state.State#getInputData() tim@335: */ tim@335: public Collection getInputData() throws StateException { tim@335: return this.inputData != null ? this.inputData.values() : null; tim@335: } tim@335: }