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:

http://dive4elements.wald.intevation.org