diff artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java @ 8881:6b93a2498e06

Slightly better abstraction for extraction waterlevels via datacage
author gernotbelger
date Fri, 09 Feb 2018 16:11:34 +0100
parents
children a536e1aacf0f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java	Fri Feb 09 16:11:34 2018 +0100
@@ -0,0 +1,84 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.states;
+
+import org.dive4elements.river.artifacts.model.WKms;
+import org.dive4elements.river.model.Gauge;
+import org.dive4elements.river.model.River;
+
+/**
+ * Represents a waterlevel fetched with the {@link WaterlevelFetcher}.
+ *
+ * @author Gernot Belger
+ */
+public class WaterlevelData {
+    private final WKms wkms;
+
+    private final String name;
+
+    /** If <code>true</code>, tabular export will show gauges for every station, else only for the first gauge */
+    private final boolean showAllGauges;
+
+    public WaterlevelData(final WKms wkms) {
+        this(wkms, false);
+    }
+
+    public WaterlevelData(final WKms wkms, final boolean showAllGauges) {
+        this(null, wkms, showAllGauges);
+    }
+
+    public WaterlevelData(final String name, final WKms wkms, final boolean showAllGauges) {
+        this.name = name;
+        this.wkms = wkms;
+        this.showAllGauges = showAllGauges;
+    }
+
+    public WaterlevelData filterByRange(final double from, final double to) {
+        if (Double.isNaN(from) || Double.isNaN(to)) {
+            return this;
+        }
+
+        final WKms filteredWkms = this.wkms.filteredKms(from, to);
+        return new WaterlevelData(filteredWkms);
+    }
+
+    public WaterlevelData withName(final String nameToSet) {
+        return new WaterlevelData(nameToSet, this.wkms, this.showAllGauges);
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public WKms getWkms() {
+        return this.wkms;
+    }
+
+    public boolean isShowAllGauges() {
+        return this.showAllGauges;
+    }
+
+    public Gauge findReferenceGauge(final River river) {
+        final double[] wstFromTo = findWstFromTo();
+        return river.determineRefGauge(wstFromTo, true);
+    }
+
+    private double[] findWstFromTo() {
+
+        final double from = this.wkms.getKm(0);
+        final double to = this.wkms.getKm(this.wkms.size() - 1);
+
+        final boolean waterIncreasing = this.wkms.guessWaterIncreasing();
+        if (waterIncreasing)
+            return new double[] { to, from };
+
+        return new double[] { from, to };
+    }
+}

http://dive4elements.wald.intevation.org