Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java @ 2228:4db19a88bddb
Implemented the first step of Calculation6; create Facets for each calculation results.
flys-artifacts/trunk@3868 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 01 Feb 2012 14:48:00 +0000 |
parents | 4b6e9b377a84 |
children | 59af81364eb1 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java Wed Feb 01 14:43:50 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/Calculation6.java Wed Feb 01 14:48:00 2012 +0000 @@ -1,8 +1,14 @@ package de.intevation.flys.artifacts.model; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + import org.apache.log4j.Logger; +import de.intevation.flys.model.DischargeTable; import de.intevation.flys.model.Gauge; +import de.intevation.flys.model.TimeInterval; /** @@ -13,7 +19,7 @@ private static final Logger logger = Logger.getLogger(Calculation6.class); private int mode; - private int[] timerange; + private long[] timerange; private double[] values; @@ -21,7 +27,7 @@ public static final int MODE_Q = 1; - public Calculation6(int mode, int[] timerange, double[] values) { + public Calculation6(int mode, long[] timerange, double[] values) { this.mode = mode; this.timerange = timerange; this.values = values; @@ -39,9 +45,13 @@ debug(); } - logger.warn("TODO: IMPLEMENT ME"); + List<DischargeTable> dts = fetchDischargeTables(gauge); - return null; + logger.debug("Take " + dts.size() + " into account."); + + WQTimerange[] wqt = prepareCalculationData(dts); + + return new CalculationResult(wqt, this); } @@ -65,6 +75,90 @@ } + protected List<DischargeTable> fetchDischargeTables(Gauge gauge) { + List<DischargeTable> relevant = new ArrayList<DischargeTable>(); + List<DischargeTable> all = gauge.getDischargeTables(); + + for (DischargeTable dt: all) { + if (isDischargeTableRelevant(dt)) { + relevant.add(dt); + } + } + + return relevant; + } + + + protected boolean isDischargeTableRelevant(DischargeTable dt) { + TimeInterval ti = dt.getTimeInterval(); + + Date start = ti.getStartTime(); + long startTime = start.getTime(); + + if (startTime >= timerange[0] && startTime <= timerange[1]) { + return true; + } + + Date stop = ti.getStopTime(); + long stopTime = stop != null ? stop.getTime() : -1l; + + if (stopTime >= timerange[0] && stopTime <= timerange[1]) { + return true; + } + + logger.debug("DischargeTable not in range: " + start + " -> " + stop); + + return false; + } + + + protected WQTimerange[] prepareCalculationData(List<DischargeTable> dts) { + List<WQTimerange> wqts = new ArrayList<WQTimerange>(values.length); + + for (double value: values) { + logger.debug("Prepare data for value: " + value); + + String name = mode == MODE_W ? "W=" + value : "Q=" + value; + WQTimerange wqt = new WQTimerange(name); + + for (DischargeTable dt: dts) { + TimeInterval ti = dt.getTimeInterval(); + + Timerange t = new Timerange(ti.getStartTime(),ti.getStopTime()); + double w; + double q; + + if (mode == MODE_W) { + w = value; + q = findValueForW(dt, w); + } + else { + q = value; + w = findValueForQ(dt, q); + } + + wqt.add(w, q, t); + } + + wqts.add(wqt); + } + + return (WQTimerange[]) wqts.toArray(new WQTimerange[wqts.size()]); + } + + + protected double findValueForW(DischargeTable dt, double w) { + logger.warn("TODO: IMPLEMENT ME!"); + return 5; + } + + + protected double findValueForQ(DischargeTable dt, double q) { + logger.warn("TODO: IMPLEMENT ME!"); + return 10; + } + + /** * Writes the parameters used for this calculation to logger. */