diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculation.java @ 8938:9c02733a1b3c

Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
author gernotbelger
date Tue, 06 Mar 2018 17:09:39 +0100
parents 5d5d0051723f
children 11bf13cf0463
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculation.java	Tue Mar 06 17:08:51 2018 +0100
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculation.java	Tue Mar 06 17:09:39 2018 +0100
@@ -30,6 +30,7 @@
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 import org.dive4elements.river.artifacts.states.WaterlevelData;
+import org.dive4elements.river.exports.WaterlevelDescriptionBuilder;
 import org.dive4elements.river.model.River;
 
 /**
@@ -56,8 +57,11 @@
         /* find relevant bed-heights */
         final Collection<BedHeightsFinder> bedHeights = BedHeightsFinder.createTkhBedHeights(river, problems, calcRange);
 
+        /* misuse winfo-artifact to calculate waterlevels in the same way */
+        final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo);
+
         /* calculate waterlevels */
-        final WQKms[] kms = calculateWaterlevels(sinfo, problems);
+        final WQKms[] kms = calculateWaterlevels(winfo, problems);
 
         final RiverInfoProvider infoProvider = RiverInfoProvider.forRange(this.context, river, calcRange);
 
@@ -65,12 +69,15 @@
 
         final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
 
+        final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder(winfo, this.context);
+        final String descriptionHeader = descBuilder.getColumnHeader();
+
         /* for each waterlevel, do a tkh calculation */
-        final TkhCalculationResults results = new TkhCalculationResults(calcModeLabel, user, riverInfo, calcRange);
+        final TkhCalculationResults results = new TkhCalculationResults(calcModeLabel, user, riverInfo, calcRange, descriptionHeader);
 
         for (final WQKms wqKms : kms) {
 
-            final TkhCalculationResult result = calculateResult(calcRange, infoProvider, wqKms, bedHeights, problems);
+            final TkhCalculationResult result = calculateResult(calcRange, infoProvider, wqKms, bedHeights, descBuilder, problems);
             if (result != null)
                 // FIXME: must be sorted by station!
                 results.addResult(result);
@@ -79,10 +86,7 @@
         return new CalculationResult(results, problems);
     }
 
-    private WQKms[] calculateWaterlevels(final SINFOArtifact sinfo, final Calculation problems) {
-
-        /* misuse winfo-artifact to calculate waterlevels in the same way */
-        final WINFOArtifact winfo = new WinfoArtifactWrapper(sinfo);
+    private WQKms[] calculateWaterlevels(final WINFOArtifact winfo, final Calculation problems) {
 
         final CalculationResult waterlevelData = winfo.getWaterlevelData(this.context);
 
@@ -99,7 +103,7 @@
     }
 
     private TkhCalculationResult calculateResult(final DoubleRange calcRange, final RiverInfoProvider riverInfo, final WQKms wkms,
-            final Collection<BedHeightsFinder> bedHeights, final Calculation problems) {
+            final Collection<BedHeightsFinder> bedHeights, final WaterlevelDescriptionBuilder descBuilder, final Calculation problems) {
 
         // FIXME: wo kommt das her? via winfo kein jahr vorhanden, oder doch? aber soll in metadaten ausgegeben werden...
         final int wspYear = -1;
@@ -109,9 +113,10 @@
 
         final RiverInfoProvider riverInfoProvider = riverInfo.forWaterlevel(waterlevel);
 
-        final String label = waterlevel.getName();
+        // FIXME: check with winfo how the name is generated
+        final String wstLabel = waterlevel.getName();
 
-        final WstInfo wstInfo = new WstInfo(label, wspYear, riverInfoProvider.getReferenceGauge());
+        final WstInfo wstInfo = new WstInfo(wstLabel, wspYear, riverInfoProvider.getReferenceGauge());
 
         final Collection<TkhResultRow> rows = new ArrayList<>();
 
@@ -124,7 +129,8 @@
             final DischargeValuesFinder dischargeProvider = DischargeValuesFinder.fromKms(wkms);
 
             /* initialize tkh calculator */
-            final TkhCalculator tkhCalculator = TkhCalculator.buildTkhCalculator(true, this.context, problems, label, riverInfoProvider.getRiver(), calcRange,
+            final TkhCalculator tkhCalculator = TkhCalculator.buildTkhCalculator(true, this.context, problems, wstLabel, riverInfoProvider.getRiver(),
+                    calcRange,
                     dischargeProvider, bedHeightsProvider);
             if (tkhCalculator == null) {
                 /* just abort, problems have already been updated by buildTkhCalculator() */
@@ -144,13 +150,14 @@
 
                 final Tkh tkh = tkhCalculator.getTkh(station, wst);
 
+                final String description = descBuilder.getDesc(wkms);
                 final String gaugeLabel = riverInfoProvider.findGauge(station);
                 final String location = riverInfoProvider.getLocation(station);
 
-                rows.add(new TkhResultRow(tkh, label, gaugeLabel, location));
+                rows.add(new TkhResultRow(tkh, description, gaugeLabel, location));
             }
         }
 
-        return new TkhCalculationResult(label, wstInfo, true, rows);
+        return new TkhCalculationResult(wstLabel, wstInfo, true, rows);
     }
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org