diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java @ 9316:72b3270e1568

U-Info salix line with regional and supraregional scenario calculation and chart display
author mschaefer
date Thu, 26 Jul 2018 17:28:32 +0200
parents 9a9f076d5716
children c36befc9011c
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java	Thu Jul 26 17:23:49 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java	Thu Jul 26 17:28:32 2018 +0200
@@ -14,12 +14,14 @@
 import java.util.List;
 
 import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
 import org.dive4elements.river.artifacts.common.IExportContext;
 import org.dive4elements.river.artifacts.common.ResultRow;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
 import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
 
+import gnu.trove.TDoubleArrayList;
+
 /**
  * @author Domenico Nardi Tironi
  */
@@ -27,8 +29,22 @@
 
     private static final long serialVersionUID = 1L;
 
-    public SalixLineCalculationRegionalResult(final String label, final WstInfo wst, final Collection<ResultRow> rows) {
-        super(label, wst, rows);
+    private final String[] scenarioLabels;
+
+    public SalixLineCalculationRegionalResult(final String label, final String[] scenarioLabels, final Collection<ResultRow> rows) {
+        super(label, rows);
+        this.scenarioLabels = scenarioLabels;
+    }
+
+    public final int getScenarioCount() {
+        return (this.scenarioLabels != null) ? this.scenarioLabels.length : 0;
+    }
+
+    public String getScenarioLabel(final int i) {
+        if ((this.scenarioLabels != null) && (i < this.scenarioLabels.length))
+            return this.scenarioLabels[i];
+        else
+            return "";
     }
 
     @Override
@@ -36,9 +52,10 @@
 
         final Collection<String> header = super.writeNoScenarioHeader(exportContextCSV);
 
-        header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader()));
-        header.add(exportContextCSV.msg(SalixScenario.getDwsplHeader()));
-
+        for (int i = 1; i <= getScenarioCount(); i++) {
+            header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader()));
+            header.add(exportContextCSV.msg(SalixScenario.getDwsplHeader()));
+        }
         exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
     }
 
@@ -50,12 +67,7 @@
     }
 
     @Override
-    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) {
-
-        return formatRow(exportContextCSV, row);
-    }
-
-    private String[] formatRow(final IExportContext context, final ResultRow row) {
+    protected String[] formatRow(final IExportContext context, final ResultRow row) {
 
         final Collection<String> lines = super.getNoScenarioFormat(row, context);
 
@@ -79,6 +91,31 @@
         writeRegionalCommonCSVMeta(exportContextCSV);
     }
 
+    /**
+     * Gets a longitudinal section of W, Q, or flood duration of one of the waterlevels
+     */
+    public final double[][] getScenarioPoints(final int dataIndex) {
+
+        final Collection<ResultRow> rows = getRows();
+
+        final TDoubleArrayList xPoints = new TDoubleArrayList(rows.size());
+        final TDoubleArrayList yPoints = new TDoubleArrayList(rows.size());
+
+        for (final ResultRow row : rows) {
+
+            final double station = row.getDoubleValue(GeneralResultType.station);
+
+            final List<SalixScenario> scenarios = (List<SalixScenario>) row.getValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl);
+            if (dataIndex <= scenarios.size() - 1) {
+                final double value = scenarios.get(dataIndex).getSalixValue();
+                xPoints.add(station);
+                yPoints.add(value);
+            }
+        }
+
+        return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
+    }
+
     // TODO: move to SupraRegionalEffectsResult-Class; remove here
     // private void writeExtendedRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
     // final String main = "uinfo.export.csv.meta.header.salix.regionalextended";

http://dive4elements.wald.intevation.org