Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java @ 607:292fbcd5e9ac
Parted the cache blob into pieces and changed the way how user input is stored on each state.
gnv-artifacts/trunk@673 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 10 Feb 2010 11:43:35 +0000 |
parents | a6a33ef35809 |
children | 74dfb9346574 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java Tue Feb 09 15:23:07 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java Wed Feb 10 11:43:35 2010 +0000 @@ -1,21 +1,40 @@ -/** - * - */ package de.intevation.gnv.state; +import de.intevation.artifactdatabase.XMLUtils; + +import de.intevation.artifacts.CallMeta; + +import de.intevation.gnv.artifacts.ressource.RessourceFactory; + +import de.intevation.gnv.geobackend.base.Result; + +import de.intevation.gnv.geobackend.util.DateUtils; + +import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData; +import de.intevation.gnv.state.describedata.DescribeData; +import de.intevation.gnv.state.describedata.MinMaxDescribeData; + +import de.intevation.gnv.state.exception.StateException; + +import de.intevation.gnv.utils.InputValidator; + import java.util.ArrayList; import java.util.Collection; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; -import de.intevation.gnv.geobackend.base.Result; -import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData; -import de.intevation.gnv.state.describedata.DescribeData; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; /** - * @author Tim Englich <tim.englich@intevation.de> - * + * @author Tim Englich (tim.englich@intevation.de) + * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) */ public class MinMaxState extends StateBase { @@ -40,26 +59,151 @@ * java.lang.String) */ @Override - protected void purifyResult(Collection<Result> result, String uuid) { - log.debug("MinMaxState.purifyResult"); - List<Object> describeData = this.getDescibeData(uuid); - if (describeData == null) { - describeData = new ArrayList<Object>(); - } + protected List<Object> purifyResult( + Collection<Result> result, String uuid) + { + List<Object> describeData = new ArrayList<Object>(); + if (result != null && result.size() == 1) { - Result value = result.iterator().next(); DescribeData values = new DefaultMinMaxDescribeData( - dataName, - value.getObject("MIN"), + dataName, + value.getObject("MIN"), value.getObject("MAX"), getID()); - log.debug(values.toString()); describeData.add(values); } else { log.warn("Result cannot be handled as MinMax Resultset"); } - this.setDescibeData(uuid, describeData); + + return describeData; } + + /** + * @see de.intevation.gnv.state.StateBase#feed(java.util.Collection, + * java.lang.String) + */ + @Override + public void feed(Collection<InputData> inputData, String uuid) + throws StateException + { + if (inputData == null) + return; + + InputValidator iv = new InputValidator(); + Iterator iter = inputData.iterator(); + + Object min = null; + Object max = null; + + while (iter.hasNext()) { + InputData tmp = (InputData) iter.next(); + InputValue meta = inputValues.get(tmp.getName()); + String value = tmp.getValue(); + String name = tmp.getName(); + + if (meta == null) { + log.warn("Input data not expected here. Data will be ignored."); + return; + } + + boolean valid = iv.isInputValid(value, meta.getType()); + if (!valid) { + String msg = "Input is not valid for this state."; + log.error(msg); + throw new StateException(msg); + } + + if (name.equals(MINVALUEFIELDNAME)) { + min = value; + } + + if (name.equals(MAXVALUEFIELDNAME)) { + max = value; + } + } + + if (min != null && max != null) { + DescribeData values = new DefaultMinMaxDescribeData( + dataName, min, max, getID()); + + this.inputData.put(dataName, new DefaultInputData(dataName, values)); + } + } + + + @Override + protected void appendToStaticNode( + XMLUtils.ElementCreator artCreator, + XMLUtils.ElementCreator creator, + Document document, + Node staticNode, + CallMeta callMeta, + String inputKey + ) { + InputData data = inputData.get(dataName); + + if (data == null) { + return; + } + + MinMaxDescribeData minMax = (MinMaxDescribeData) data.getObject(); + + Object min = minMax.getMinValue(); + Object max = minMax.getMaxValue(); + if (min instanceof GregorianCalendar) { + Date d = ((GregorianCalendar) min).getTime(); + min = DateUtils.getPatternedDateAmer(d); + } + + if (max instanceof GregorianCalendar) { + Date d = ((GregorianCalendar) max).getTime(); + max = DateUtils.getPatternedDateAmer(d); + } + + Element groupNode = creator.create("group"); + artCreator.addAttr(groupNode, "state", minMax.getState(), true); + + creator.addAttr(groupNode, "ref", minMax.getName()); + Element groupNodeLableNode = creator.create("label"); + groupNodeLableNode.setTextContent(RessourceFactory + .getInstance().getRessource( + callMeta.getLanguages(), + minMax.getName(), + minMax.getName())); + groupNode.appendChild(groupNodeLableNode); + + Element inputMinNode = creator.create("input"); + creator.addAttr(inputMinNode, "ref", MINVALUEFIELDNAME); + Element inputMinLableNode = creator.create("label"); + inputMinLableNode.setTextContent(RessourceFactory + .getInstance().getRessource( + callMeta.getLanguages(), MINVALUEFIELDNAME, + MINVALUEFIELDNAME)); + inputMinNode.appendChild(inputMinLableNode); + + Element inputMinValueNode = creator.create("value"); + inputMinValueNode.setTextContent(min.toString()); + inputMinNode.appendChild(inputMinValueNode); + + Element inputMaxNode = creator.create("input"); + creator.addAttr(inputMaxNode, "ref", MAXVALUEFIELDNAME); + Element inputMaxLableNode = creator.create("label"); + inputMaxLableNode.setTextContent(RessourceFactory + .getInstance().getRessource( + callMeta.getLanguages(), MAXVALUEFIELDNAME, + MAXVALUEFIELDNAME)); + inputMaxNode.appendChild(inputMaxLableNode); + + Element inputMaxValueNode = creator.create("value"); + inputMaxValueNode.setTextContent(max.toString()); + inputMaxNode.appendChild(inputMaxValueNode); + + groupNode.appendChild(inputMinNode); + groupNode.appendChild(inputMaxNode); + + staticNode.appendChild(groupNode); + } } +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: