# HG changeset patch # User Sascha L. Teichmann # Date 1347818110 0 # Node ID 1ddbf66a2b0a01787aae3335e39a4a04360cd936 # Parent d52c4ca93ffb9b367698515d82662131f0667730 Implemented the access for 'Auslagerung extremer Wasserspiegellagen' flys-artifacts/trunk@5483 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r d52c4ca93ffb -r 1ddbf66a2b0a flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/ExtremeAccess.java --- 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 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 getRanges() { + + if (ranges == null) { + String rangesS = getString("ranges"); + if (ranges == null) { + return null; + } + ranges = new ArrayList(); + 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 : diff -r d52c4ca93ffb -r 1ddbf66a2b0a flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/RangeWithValues.java --- 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 Ingo Weinzierl */ @@ -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 : diff -r d52c4ca93ffb -r 1ddbf66a2b0a flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Segment.java --- 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 parseSegments(String input) { - ArrayList segments = new ArrayList(); - - TDoubleArrayList vs = new TDoubleArrayList(); + final List segments = new ArrayList(); - 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; } diff -r d52c4ca93ffb -r 1ddbf66a2b0a flys-artifacts/src/main/java/de/intevation/flys/utils/DoubleUtil.java --- 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 :