diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java @ 9176:1614cb14308f

Work on calculations for S-Info flood duration workflow
author mschaefer
date Mon, 25 Jun 2018 19:21:11 +0200
parents 23945061daec
children a4121ec450d6
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java	Mon Jun 25 17:58:11 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java	Mon Jun 25 19:21:11 2018 +0200
@@ -1,4 +1,4 @@
-/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
  * Software engineering by
  *  Björnsen Beratende Ingenieure GmbH
  *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
@@ -11,19 +11,25 @@
 
 import org.apache.commons.lang.math.DoubleRange;
 import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.WINFOArtifact;
 import org.dive4elements.river.artifacts.model.Calculation;
 import org.dive4elements.river.artifacts.model.CalculationResult;
 import org.dive4elements.river.artifacts.resources.Resources;
 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
 import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
+import org.dive4elements.river.artifacts.sinfo.flood_duration.RiversideRadioChoice.RiversideChoiceKey;
 import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper;
 import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.model.River;
+import org.dive4elements.river.model.sinfo.Infrastructure;
 
-class FloodDurationCalculation {
-
-    // private static Logger log = Logger.getLogger(FloodDurationCalculation.class);
+/**
+ * Calculation of the flood durations of the infrastructures of the km range of a river
+ *
+ * @author Matthias Schäfer
+ */
+final class FloodDurationCalculation {
 
     private final CallContext context;
 
@@ -38,44 +44,39 @@
         /* access input data */
         final FloodDurationAccess access = new FloodDurationAccess(sinfo);
         final River river = access.getRiver();
-
+        final RiverInfo riverInfo = new RiverInfo(river);
         final DoubleRange calcRange = access.getRange();
 
-        /* calculate results for each diff pair */
-        final Calculation problems = new Calculation();
-
         final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange);
-
         final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
+        final String riverside = Resources.getMsg(this.context.getMeta(), access.getRiverside());
+        final Infrastructure infrasSeries = Infrastructure.getSeries(river);
+        final String infrasType = (infrasSeries != null) ? infrasSeries.getType().getName() : "?";
 
-        // TODO: use enum for riverside
-        final String riverside = access.getRiverside();
-        // more
-        // TODO: mis- ups.. re-use WINFO Artifact as in TkhState
-        final WinfoArtifactWrapper winfo = new WinfoArtifactWrapper(sinfo);
-        // winfo.computeWaterlevelData();
-        final FloodDurationCalculationResults results = calculateResult(calcModeLabel, riverside, calcRange, infoProvider, user, problems);
+        final Calculation problems = new Calculation();
+
+        final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange);
+
+        final FloodDurationCalculationResult result = calculateResult(calcModeLabel, infrasType, riverside, calcRange, infoProvider,
+                RiversideChoiceKey.fromKey(access.getRiverside()), user, problems);
+        results.addResult(result, problems);
+
+        // Calculate the selected main values, if any
+        /* misuse winfo-artifact to calculate waterlevels in the same way */
+        final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo);
 
         return new CalculationResult(results, problems);
     }
 
     /**
-     * Calculates FAKE Flood Duration
-     *
-     * @param riverside
-     * @param calcModeLabel
-     * @param user
-     *
-     * @param infoProvider
+     * Calculates the flood durations of the infrastructures of a km range of a river
      */
-    private FloodDurationCalculationResults calculateResult(final String calcModeLabel, final String riverside, final DoubleRange calcRange,
-            final RiverInfoProvider riverInfoProvider, final String user, final Calculation problems) {
+    private FloodDurationCalculationResult calculateResult(final String calcModeLabel, final String infrastructureType, final String riverside,
+            final DoubleRange calcRange, final RiverInfoProvider riverInfoProvider, final RiversideChoiceKey riversideKey, final String user,
+            final Calculation problems) {
 
         final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, riverInfoProvider);
-        final String wspLabel = "WSP-Name";// wstKms.getName();
-        final int wspYear = 9999; // waterlevel.getYear();
-        final WstInfo wstInfo = new WstInfo(wspLabel, wspYear, riverInfoProvider.getReferenceGauge());
-        final String label = String.format("%s - %s", wspLabel, " soundingLabel");
-        return calculator.execute(problems, label, wstInfo, calcModeLabel, calcRange, riverside, user);
+        final String label = infrastructureType + ", " + riverside;
+        return calculator.execute(problems, label, calcModeLabel, calcRange, riversideKey, user).getResult();
     }
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org