diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQSelect.java @ 379:c21fb8de54f8

Enabled the FLYSArtifact to handle an array of inserted WQ values (without given ranges). flys-artifacts/trunk@1793 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 02 May 2011 15:17:04 +0000
parents ed3325a0232a
children 929137ee8154
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQSelect.java	Mon May 02 13:42:02 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WQSelect.java	Mon May 02 15:17:04 2011 +0000
@@ -2,6 +2,8 @@
 
 import java.util.Map;
 
+import gnu.trove.TDoubleArrayList;
+
 import org.apache.log4j.Logger;
 
 import org.w3c.dom.Element;
@@ -40,6 +42,9 @@
     /** The name of the 'mode' field. */
     public static final String WQ_MODE = "wq_mode";
 
+    /** The name of the 'selection' field.*/
+    public static final String WQ_SELECTION = "wq_selection";
+
     /** The name of the 'from' field. */
     public static final String WQ_FROM = "wq_from";
 
@@ -49,6 +54,10 @@
     /** The name of the 'step' field. */
     public static final String WQ_STEP = "wq_step";
 
+    /** The name of the 'single' field. */
+    public static final String WQ_SINGLE = "wq_single";
+
+
     /**
      * The default constructor that initializes an empty State object.
      */
@@ -196,6 +205,69 @@
 
         Map<String, StateData> data = getData();
 
+        String selectionMode = (String) data.get(WQ_SELECTION).getValue();
+
+        if (selectionMode == null || selectionMode.equals("single")) {
+            return validateSingle(artifact, context);
+        }
+        else {
+            return validateRange(artifact, context);
+        }
+    }
+
+
+    protected boolean validateSingle(Artifact artifact, CallContext context)
+    throws    IllegalArgumentException
+    {
+        logger.debug("WQSelect.validateSingle");
+
+        String tmp = (String) data.get(WQ_SINGLE).getValue();
+
+        if (tmp == null || tmp.length() == 0) {
+            throw new IllegalArgumentException("error_empty_state");
+        }
+
+        String[] strValues = tmp.split(" ");
+        TDoubleArrayList all = new TDoubleArrayList();
+
+        for (String strValue: strValues) {
+            try {
+                all.add(Double.parseDouble(strValue));
+            }
+            catch (NumberFormatException nfe) {
+                logger.warn(nfe, nfe);
+            }
+        }
+
+        all.sort();
+
+        String mode = (String) data.get(WQ_MODE).getValue();
+        logger.debug("WQ Mode: " + mode);
+
+        double[] minmax = null;
+
+        if (mode != null && mode.trim().toLowerCase().equals("w")) {
+            minmax = determineMinMaxW(artifact);
+        }
+        else {
+            minmax = determineMinMaxQ(artifact);
+        }
+
+        double min = all.get(0);
+        double max = all.get(all.size()-1);
+
+        logger.debug("Inserted min value = " + min);
+        logger.debug("Inserted max value = " + max);
+
+        return validateBounds(minmax[0], minmax[1], min, max, 0d);
+    }
+
+
+    protected boolean validateRange(Artifact artifact, CallContext context)
+    throws    IllegalArgumentException
+    {
+        logger.debug("WQSelect.validateRange");
+
         String mode = (String) data.get(WQ_MODE).getValue();
         logger.debug("WQ Mode: " + mode);
 
@@ -251,7 +323,7 @@
 
         double[] minmaxW = determineMinMaxW(artifact);
 
-        return validateRange(minmaxW[0], minmaxW[1], from, to, step);
+        return validateBounds(minmaxW[0], minmaxW[1], from, to, step);
     }
 
 
@@ -278,7 +350,7 @@
 
         double[] minmaxQ = determineMinMaxQ(artifact);
 
-        return validateRange(minmaxQ[0], minmaxQ[1], from, to, step);
+        return validateBounds(minmaxQ[0], minmaxQ[1], from, to, step);
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org