gernotbelger@9145: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9145: * Software engineering by gernotbelger@9145: * Björnsen Beratende Ingenieure GmbH gernotbelger@9145: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9145: * gernotbelger@9145: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9145: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9145: * documentation coming with Dive4Elements River for details. gernotbelger@9145: */ gernotbelger@9145: package org.dive4elements.river.artifacts.sinfo.flood_duration; gernotbelger@9145: gernotbelger@9145: import java.util.ArrayList; gernotbelger@9145: import java.util.Collection; gernotbelger@9145: import java.util.List; gernotbelger@9145: gernotbelger@9145: import org.apache.commons.lang.math.DoubleRange; gernotbelger@9150: import org.dive4elements.artifacts.CallContext; gernotbelger@9145: import org.dive4elements.river.artifacts.common.GeneralResultType; gernotbelger@9145: import org.dive4elements.river.artifacts.common.ResultRow; gernotbelger@9150: import org.dive4elements.river.artifacts.model.Calculation; gernotbelger@9145: import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider; gernotbelger@9145: import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; gernotbelger@9150: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@9145: import org.dive4elements.river.artifacts.sinfo.util.WstInfo; gernotbelger@9145: gernotbelger@9145: /** gernotbelger@9145: * @author Gernot Belger gernotbelger@9145: */ gernotbelger@9145: final class FloodDurationCalculator { gernotbelger@9145: gernotbelger@9145: private final Collection rows = new ArrayList<>(); gernotbelger@9145: gernotbelger@9145: private final RiverInfoProvider riverInfoProvider; gernotbelger@9145: gernotbelger@9150: private final CallContext context; gernotbelger@9145: gernotbelger@9150: public FloodDurationCalculator(final CallContext context, final RiverInfoProvider riverInfoProvider) { gernotbelger@9150: this.context = context; gernotbelger@9145: this.riverInfoProvider = riverInfoProvider; gernotbelger@9145: } gernotbelger@9145: gernotbelger@9150: public FloodDurationCalculationResults execute(final Calculation problems, final String label, final WstInfo wstInfo, final String calcModeLabel, gernotbelger@9150: final DoubleRange calcRange, final String riverside, final String user) { gernotbelger@9145: gernotbelger@9145: calculateResultRow(8888.888); gernotbelger@9145: calculateResultRow(99); gernotbelger@9145: calculateResultRow(77); gernotbelger@9150: gernotbelger@9150: final FloodDurationCalculationResult result = new FloodDurationCalculationResult(label, wstInfo, this.rows, 4); gernotbelger@9150: gernotbelger@9150: final RiverInfo riverInfo = new RiverInfo(this.riverInfoProvider.getRiver()); gernotbelger@9150: gernotbelger@9150: final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange, riverside); gernotbelger@9150: results.addResult(result, problems); gernotbelger@9150: return results; gernotbelger@9145: } gernotbelger@9145: gernotbelger@9145: private void calculateResultRow(final double station) { gernotbelger@9145: gernotbelger@9145: final ResultRow row = ResultRow.create(); gernotbelger@9145: gernotbelger@9145: // REMARK: access the location once only during calculation gernotbelger@9145: final String location = this.riverInfoProvider.getLocation(station); gernotbelger@9145: row.putValue(GeneralResultType.station, station); gernotbelger@9145: row.putValue(SInfoResultType.riverside, "todo:getRiverside"); gernotbelger@9145: row.putValue(SInfoResultType.inundationduration, 44); gernotbelger@9145: row.putValue(SInfoResultType.inundationdurationq, 444); gernotbelger@9145: row.putValue(SInfoResultType.infrastructureHeight, 55); gernotbelger@9145: row.putValue(SInfoResultType.infrastructuretype, "todo_get_infrastructureType"); gernotbelger@9145: gernotbelger@9145: // custom type; each entry produces 4 Columns gernotbelger@9145: final List rowWsps = new ArrayList<>(); gernotbelger@9145: gernotbelger@9145: rowWsps.add(new DurationWaterlevel(222, 30, 666, "1. Test")); gernotbelger@9145: rowWsps.add(new DurationWaterlevel(111, 40, 555, "2. Test")); gernotbelger@9145: rowWsps.add(new DurationWaterlevel(123, 333, 33, "3. Test")); gernotbelger@9145: rowWsps.add(new DurationWaterlevel(444, 452, 55, "4. Test")); gernotbelger@9145: row.putValue(SInfoResultType.customMultiRowColWaterlevel, rowWsps); gernotbelger@9145: gernotbelger@9145: row.putValue(SInfoResultType.gaugeLabel, "todo:getReferencedGauge"); gernotbelger@9145: row.putValue(SInfoResultType.location, "location"); gernotbelger@9145: gernotbelger@9145: this.rows.add(row); gernotbelger@9145: } gernotbelger@9145: }