gernotbelger@8881: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8881: * Software engineering by gernotbelger@8881: * Björnsen Beratende Ingenieure GmbH gernotbelger@8881: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8881: * gernotbelger@8881: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8881: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8881: * documentation coming with Dive4Elements River for details. gernotbelger@8881: */ gernotbelger@8881: package org.dive4elements.river.artifacts.states; gernotbelger@8881: gernotbelger@8881: import org.dive4elements.river.artifacts.model.WKms; gernotbelger@8881: import org.dive4elements.river.model.Gauge; gernotbelger@8881: import org.dive4elements.river.model.River; gernotbelger@8881: gernotbelger@8881: /** gernotbelger@8881: * Represents a waterlevel fetched with the {@link WaterlevelFetcher}. gernotbelger@8881: * gernotbelger@8881: * @author Gernot Belger gernotbelger@8881: */ gernotbelger@8881: public class WaterlevelData { gernotbelger@8881: private final WKms wkms; gernotbelger@8881: gernotbelger@8881: private final String name; gernotbelger@8881: gernotbelger@8881: /** If true, tabular export will show gauges for every station, else only for the first gauge */ gernotbelger@8881: private final boolean showAllGauges; gernotbelger@8881: gernotbelger@8881: public WaterlevelData(final WKms wkms) { gernotbelger@8881: this(wkms, false); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public WaterlevelData(final WKms wkms, final boolean showAllGauges) { gernotbelger@8881: this(null, wkms, showAllGauges); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public WaterlevelData(final String name, final WKms wkms, final boolean showAllGauges) { gernotbelger@8881: this.name = name; gernotbelger@8881: this.wkms = wkms; gernotbelger@8881: this.showAllGauges = showAllGauges; gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public WaterlevelData filterByRange(final double from, final double to) { gernotbelger@8881: if (Double.isNaN(from) || Double.isNaN(to)) { gernotbelger@8881: return this; gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: final WKms filteredWkms = this.wkms.filteredKms(from, to); gernotbelger@8881: return new WaterlevelData(filteredWkms); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public WaterlevelData withName(final String nameToSet) { gernotbelger@8881: return new WaterlevelData(nameToSet, this.wkms, this.showAllGauges); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public String getName() { gernotbelger@8881: return this.name; gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public WKms getWkms() { gernotbelger@8881: return this.wkms; gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public boolean isShowAllGauges() { gernotbelger@8881: return this.showAllGauges; gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public Gauge findReferenceGauge(final River river) { gernotbelger@8881: final double[] wstFromTo = findWstFromTo(); gernotbelger@8881: return river.determineRefGauge(wstFromTo, true); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: private double[] findWstFromTo() { gernotbelger@8881: gernotbelger@8881: final double from = this.wkms.getKm(0); gernotbelger@8881: final double to = this.wkms.getKm(this.wkms.size() - 1); gernotbelger@8881: gernotbelger@8881: final boolean waterIncreasing = this.wkms.guessWaterIncreasing(); gernotbelger@8881: if (waterIncreasing) gernotbelger@8881: return new double[] { to, from }; gernotbelger@8881: gernotbelger@8881: return new double[] { from, to }; gernotbelger@8881: } gernotbelger@8881: }