changeset 3776:1ddbf66a2b0a

Implemented the access for 'Auslagerung extremer Wasserspiegellagen' flys-artifacts/trunk@5483 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 16 Sep 2012 17:55:10 +0000
parents d52c4ca93ffb
children 048a02e29808
files flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/ExtremeAccess.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/RangeWithValues.java flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Segment.java flys-artifacts/src/main/java/de/intevation/flys/utils/DoubleUtil.java
diffstat 4 files changed, 175 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/ExtremeAccess.java	Sun Sep 16 11:40:38 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/ExtremeAccess.java	Sun Sep 16 17:55:10 2012 +0000
@@ -2,6 +2,13 @@
 
 import de.intevation.flys.artifacts.FLYSArtifact;
 
+import de.intevation.flys.artifacts.model.RangeWithValues;
+
+import de.intevation.flys.utils.DoubleUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.log4j.Logger;
 
 public class ExtremeAccess
@@ -9,11 +16,123 @@
 {
     private static Logger log = Logger.getLogger(ExtremeAccess.class);
 
+    protected String river;
+
+    protected Double from;
+    protected Double to;
+    protected Double step;
+
+    protected Long start;
+    protected Long end;
+
+    protected Double percent;
+
+    protected String function;
+
+    protected List<RangeWithValues> ranges;
+
     public ExtremeAccess() {
     }
 
     public ExtremeAccess(FLYSArtifact artifact) {
         super(artifact);
     }
+
+    public String getRiver() {
+        if (river == null) {
+            river = getString("river");
+        }
+        if (log.isDebugEnabled()) {
+            log.debug("river: '" + river + "'");
+        }
+        return river;
+    }
+
+    public Double getFrom() {
+
+        if (from == null) {
+            from = getDouble("ld_from");
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("from: '" + from + "'");
+        }
+
+        return from;
+    }
+
+    public Double getTo() {
+
+        if (to == null) {
+            to = getDouble("ld_to");
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("to: '" + to + "'");
+        }
+
+        return to;
+    }
+
+    public Double getStep() {
+
+        if (step == null) {
+            step = getDouble("ld_step");
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("step: '" + step + "'");
+        }
+
+        return step;
+    }
+
+    public Double getPercent() {
+
+        if (percent == null) {
+            percent = getDouble("percent");
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("percent: '" + percent + "'");
+        }
+
+        return percent;
+    }
+
+    public String getFunction() {
+        if (function == null) {
+            function = getString("function");
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("function: '" + function + "'");
+        }
+
+        return function;
+    }
+
+    public List<RangeWithValues> getRanges() {
+
+        if (ranges == null) {
+            String rangesS = getString("ranges");
+            if (ranges == null) {
+                return null;
+            }
+            ranges = new ArrayList<RangeWithValues>();
+            DoubleUtil.parseSegments(rangesS, new DoubleUtil.SegmentCallback() {
+                @Override
+                public void newSegment(double from, double to, double [] values) {
+                    ranges.add(new RangeWithValues(from, to, values));
+                }
+            });
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("ranges: " + ranges);
+        }
+
+        return ranges;
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/RangeWithValues.java	Sun Sep 16 11:40:38 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/RangeWithValues.java	Sun Sep 16 17:55:10 2012 +0000
@@ -1,5 +1,7 @@
 package de.intevation.flys.artifacts.model;
 
+import java.util.Arrays;
+
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
  */
@@ -18,5 +20,13 @@
     public double[] getValues() {
         return values;
     }
+
+    @Override
+    public String toString() {
+        return new StringBuilder("start=").append(start)
+            .append(" end=" ).append(end)
+            .append(" values=[").append(Arrays.toString(values)).append(']')
+            .toString();
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Segment.java	Sun Sep 16 11:40:38 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Segment.java	Sun Sep 16 17:55:10 2012 +0000
@@ -6,8 +6,6 @@
 
 import de.intevation.flys.utils.DoubleUtil;
 
-import gnu.trove.TDoubleArrayList;
-
 import java.io.Serializable;
 
 import java.util.ArrayList;
@@ -124,34 +122,14 @@
 
     public static List<Segment> parseSegments(String input) {
 
-        ArrayList<Segment> segments = new ArrayList<Segment>();
-
-        TDoubleArrayList vs = new TDoubleArrayList();
+        final List<Segment> segments = new ArrayList<Segment>();
 
-        for (String segmentStr: input.split(":")) {
-            String [] parts = segmentStr.split(";");
-            if (parts.length < 3) {
-                log.warn("invalid segment: '" + segmentStr + "'");
-                continue;
-            }
-            try {
-                double from = Double.parseDouble(parts[0].trim());
-                double to   = Double.parseDouble(parts[1].trim());
-
-                vs.clear();
-
-                for (String valueStr: parts[2].split(",")) {
-                    vs.add(DoubleUtil.round(
-                        Double.parseDouble(valueStr.trim())));
-                }
-
-                double [] values = vs.toNativeArray();
+        DoubleUtil.parseSegments(input, new DoubleUtil.SegmentCallback() {
+            @Override
+            public void newSegment(double from, double to, double [] values) {
                 segments.add(new Segment(from, to, values));
             }
-            catch (NumberFormatException nfe) {
-                log.warn("invalid segment: '" + segmentStr + "'");
-            }
-        }
+        });
 
         return segments;
     }
--- a/flys-artifacts/src/main/java/de/intevation/flys/utils/DoubleUtil.java	Sun Sep 16 11:40:38 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/utils/DoubleUtil.java	Sun Sep 16 17:55:10 2012 +0000
@@ -1,12 +1,17 @@
 package de.intevation.flys.utils;
 
+import de.intevation.flys.artifacts.math.Linear;
+
+import gnu.trove.TDoubleArrayList;
+
 import java.util.Arrays;
 
-import de.intevation.flys.artifacts.math.Linear;
-
+import org.apache.log4j.Logger;
 
 public class DoubleUtil
 {
+    private static Logger log = Logger.getLogger(DoubleUtil.class);
+
     public static final double DEFAULT_STEP_PRECISION = 1e6;
 
     private DoubleUtil() {
@@ -138,5 +143,39 @@
         Arrays.fill(result, value);
         return result;
     }
+
+    public interface SegmentCallback {
+        void newSegment(double from, double to, double [] values);
+    }
+
+    public static final void parseSegments(
+        String          input,
+        SegmentCallback callback
+    ) {
+        TDoubleArrayList vs = new TDoubleArrayList();
+
+        for (String segmentStr: input.split(":")) {
+            String [] parts = segmentStr.split(";");
+            if (parts.length < 3) {
+                log.warn("invalid segment: '" + segmentStr + "'");
+                continue;
+            }
+            try {
+                double from = Double.parseDouble(parts[0].trim());
+                double to   = Double.parseDouble(parts[1].trim());
+
+                vs.resetQuick();
+
+                for (String valueStr: parts[2].split(",")) {
+                    vs.add(round(Double.parseDouble(valueStr.trim())));
+                }
+
+                callback.newSegment(from, to, vs.toNativeArray());
+            }
+            catch (NumberFormatException nfe) {
+                log.warn("invalid segment: '" + segmentStr + "'");
+            }
+        }
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org