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