Mercurial > dive4elements > river
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 :