gernotbelger@9426: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9426: * Software engineering by gernotbelger@9426: * Björnsen Beratende Ingenieure GmbH gernotbelger@9426: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9426: * gernotbelger@9426: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9426: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9426: * documentation coming with Dive4Elements River for details. gernotbelger@9426: */ gernotbelger@9426: package org.dive4elements.river.artifacts.uinfo.salix; gernotbelger@9426: gernotbelger@9426: import java.io.Serializable; gernotbelger@9426: gernotbelger@9426: import org.dive4elements.artifacts.CallContext; gernotbelger@9426: gernotbelger@9426: /** gernotbelger@9426: * The 'index' that tells the cross section facet which of my result are to be fetched as a cross section line. gernotbelger@9426: * gernotbelger@9426: * @author Gernot Belger gernotbelger@9426: */ gernotbelger@9426: public final class SalixLineCrossSectionIndexData implements Serializable { gernotbelger@9429: gernotbelger@9429: /** gernotbelger@9429: * Known waterlevels of the salix computation gernotbelger@9429: */ gernotbelger@9429: public enum SalixWaterlevel { mschaefer@9430: mnw, mw, mhw, hw5 gernotbelger@9429: } gernotbelger@9429: gernotbelger@9426: private static final long serialVersionUID = 1L; gernotbelger@9426: gernotbelger@9426: private static final SalixLineCrossSectionIndexData SALIX_LINE = new SalixLineCrossSectionIndexData(null, null); gernotbelger@9426: gernotbelger@9426: // REMARK: we know at the moment there is exactly one result gernotbelger@9426: private final int resultIndex = 0; gernotbelger@9426: gernotbelger@9426: private final Integer scenarioIndex; gernotbelger@9426: gernotbelger@9429: private final SalixWaterlevel waterlevel; gernotbelger@9426: gernotbelger@9426: /** gernotbelger@9426: * Creates an instance of this class that represants the salix line. gernotbelger@9426: */ gernotbelger@9426: public static final SalixLineCrossSectionIndexData salixLine() { gernotbelger@9426: return SALIX_LINE; gernotbelger@9426: } gernotbelger@9426: gernotbelger@9426: /** gernotbelger@9426: * Creates an instance of this class that represants the salix line. gernotbelger@9426: */ gernotbelger@9426: public static final SalixLineCrossSectionIndexData scenario(final int scenarioIndex) { gernotbelger@9426: return new SalixLineCrossSectionIndexData(scenarioIndex, null); gernotbelger@9426: } gernotbelger@9426: gernotbelger@9426: /** gernotbelger@9426: * Creates an instance of this class that represants the salix line. gernotbelger@9426: */ gernotbelger@9426: // FIXME: gemeint sind die einzublendenden 'MNW, MW, MHW, HW5' mir nicht klar wo diese Daten herkommen, ggf. aus der gernotbelger@9426: // Rechnung? gernotbelger@9426: // FIXME: statt 'name' vielleicht eine enum oder irgend etwas anderes was diese dinger eindeutig referenzieet? gernotbelger@9429: public static final SalixLineCrossSectionIndexData waterlevel(final SalixWaterlevel name) { gernotbelger@9426: assert name != null; gernotbelger@9426: return new SalixLineCrossSectionIndexData(null, name); gernotbelger@9426: } gernotbelger@9426: gernotbelger@9429: private SalixLineCrossSectionIndexData(final Integer scenarioIndex, final SalixWaterlevel waterlevel) { gernotbelger@9426: this.scenarioIndex = scenarioIndex; gernotbelger@9429: this.waterlevel = waterlevel; gernotbelger@9426: } gernotbelger@9426: gernotbelger@9429: public double getCrossSectionLine(final SalixLineCalculationResults results, final double currentKm, final double nextKm, final double prevKm, gernotbelger@9429: final CallContext context) { gernotbelger@9426: gernotbelger@9426: final SalixLineCalculationResult result = results.getResults().get(this.resultIndex); gernotbelger@9426: gernotbelger@9426: if (this.scenarioIndex != null) { gernotbelger@9426: // fetch scenario result data = salix line value at km gernotbelger@9426: return result.getSalixScenarioValue(currentKm, nextKm, prevKm, this.scenarioIndex); gernotbelger@9426: } gernotbelger@9426: gernotbelger@9429: if (this.waterlevel != null) { gernotbelger@9426: // fetch waterlevel result data = salix line value at km gernotbelger@9429: return result.getWaterlevelValue(currentKm, nextKm, prevKm, this.waterlevel); gernotbelger@9426: } gernotbelger@9426: gernotbelger@9426: // fetch normal result data = salix line value at km gernotbelger@9426: return result.getSalixValue(currentKm, nextKm, prevKm); gernotbelger@9426: } gernotbelger@9426: }