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@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@9426: private final String waterlevelName; 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@9426: public static final SalixLineCrossSectionIndexData waterlevel(final String name) { gernotbelger@9426: assert name != null; gernotbelger@9426: return new SalixLineCrossSectionIndexData(null, name); gernotbelger@9426: } gernotbelger@9426: gernotbelger@9426: private SalixLineCrossSectionIndexData(final Integer scenarioIndex, final String waterlevelName) { gernotbelger@9426: this.scenarioIndex = scenarioIndex; gernotbelger@9426: this.waterlevelName = waterlevelName; gernotbelger@9426: } gernotbelger@9426: gernotbelger@9426: public double getCrossSectionLine(final SalixLineCalculationResults results, final double currentKm, final double nextKm, gernotbelger@9426: final double prevKm, 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@9426: if (this.waterlevelName != null) { gernotbelger@9426: // fetch waterlevel result data = salix line value at km gernotbelger@9426: return result.getWaterlevelValue(currentKm, nextKm, prevKm, this.waterlevelName); 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: }