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@8964: import org.apache.commons.lang.math.DoubleRange; gernotbelger@8881: import org.dive4elements.river.artifacts.model.WKms; gernotbelger@8881: gernotbelger@8964: import gnu.trove.TDoubleArrayList; gernotbelger@8964: 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@8883: private final int year; gernotbelger@8883: 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@8883: public WaterlevelData(final WKms wkms, final int year) { gernotbelger@8883: this(wkms, year, false); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8883: public WaterlevelData(final WKms wkms, final int year, final boolean showAllGauges) { gernotbelger@8934: this(wkms.getName(), wkms, year, showAllGauges); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8883: private WaterlevelData(final String name, final WKms wkms, final int year, final boolean showAllGauges) { gernotbelger@8881: this.name = name; gernotbelger@8881: this.wkms = wkms; gernotbelger@8883: this.year = year; 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@8883: return new WaterlevelData(this.name, filteredWkms, this.year, this.showAllGauges); gernotbelger@8881: } gernotbelger@8881: gernotbelger@8881: public WaterlevelData withName(final String nameToSet) { gernotbelger@8883: return new WaterlevelData(nameToSet, this.wkms, this.year, 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@8883: public int getYear() { gernotbelger@8883: return this.year; gernotbelger@8883: } gernotbelger@8964: gernotbelger@8964: public boolean covers(final DoubleRange simulationRange) { gernotbelger@8964: gernotbelger@8964: final TDoubleArrayList allKms = this.wkms.allKms(); gernotbelger@8964: gernotbelger@8964: if (allKms.isEmpty()) gernotbelger@8964: return false; gernotbelger@8964: gernotbelger@8964: final double min = allKms.min(); gernotbelger@8964: if (min > simulationRange.getMaximumDouble()) gernotbelger@8964: return false; gernotbelger@8964: gernotbelger@8964: final double max = allKms.max(); gernotbelger@8964: if (max < simulationRange.getMinimumDouble()) gernotbelger@8964: return false; gernotbelger@8964: gernotbelger@8964: return true; gernotbelger@8964: } gernotbelger@8964: }