diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java @ 9229:0dcd1cd41915

Different themes/facets for left bank and right bank infrastructures in S-Info flood durations, some fixmes done
author mschaefer
date Thu, 05 Jul 2018 16:49:42 +0200
parents 4e6111f87dda
children b515ed950d39
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java	Thu Jul 05 13:46:36 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java	Thu Jul 05 16:49:42 2018 +0200
@@ -27,6 +27,7 @@
 import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.exports.DiagramGenerator;
+import org.dive4elements.river.model.Attribute.AttributeKey;
 
 import gnu.trove.TDoubleArrayList;
 
@@ -41,8 +42,8 @@
 
     private final String[] mainvalueLabels;
 
-    private final int waterlevelCount;
     // private final WstInfo wstInfo;
+
     private final int maxWaterlevelPdf = 3;
 
     public interface ValueGetter {
@@ -56,20 +57,9 @@
     public FloodDurationCalculationResult(final String label, final String[] mainvalueLabels, final Collection<ResultRow> rows) {
         super(label, rows);
         this.mainvalueLabels = mainvalueLabels;
-        this.waterlevelCount = mainvalueLabels.length;
     }
 
     /**
-     * The label of one of the optional main values, or null
-     */
-    // public String getMainValueLabel(final int index) {
-    // if (index <= this.mainvalueLabels.length - 1)
-    // return this.mainvalueLabels[index];
-    // else
-    // return null;
-    // }
-
-    /**
      * Collection of the result rows containing only the rows describing an infrastructure
      */
     @Override
@@ -81,38 +71,6 @@
         return Collections.unmodifiableCollection(infrasOnlyRows);
     }
 
-    /**
-     * Fetches the km-longitudinal section of the infrastructures and one of their result fields
-     */
-    public final double[][] fetchInfrastructurePoints(final IResultType type) {
-        final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
-        final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
-        for (final ResultRow row : this.rows) {
-            if (row.getValue(SInfoResultType.infrastructuretype) != null) {
-                xPoints.add(row.getDoubleValue(GeneralResultType.station));
-                yPoints.add(row.getDoubleValue(type));
-            }
-        }
-        return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
-    }
-
-    /**
-     * Fetches the km-longitudinal section of a main value
-     */
-    public final double[][] fetchMainValuePoints(final IResultType type) {
-        final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
-        final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
-        // final IResultType check = new IResultType[] { SInfoResultType.mainValue1Duration, SInfoResultType.mainValue2Duration,
-        // SInfoResultType.mainValue3Duration }[index];
-        for (final ResultRow row : this.rows) {
-            // if (!Double.isNaN(row.getDoubleValue(check))) {
-            xPoints.add(row.getDoubleValue(GeneralResultType.station));
-            yPoints.add(row.getDoubleValue(type));
-            // }
-        }
-        return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
-    }
-
     @Override
     protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) {
         if (this.mainvalueLabels.length >= 1) {
@@ -125,14 +83,17 @@
                 exportContextCSV.writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, String.format("%d: %s", i, label));
             }
             // "# Bezugspegel: "
-            exportContextCSV.writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, "TODO: gauge");
+            for (final ResultRow row : this.rows) {
+                exportContextCSV.writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, row.getValue(SInfoResultType.gaugeLabel));
+                break;
+            }
         }
         exportContextCSV.writeBlankLine();
     }
 
     @Override
     protected String getJasperFile() {
-        if (this.waterlevelCount <= 1)
+        if (this.getWaterlevelCount() <= 1)
             return "/jasper/templates/sinfo.floodduration.jrxml";
         else
             return "/jasper/templates/sinfo.floodduration2.jrxml";
@@ -189,14 +150,11 @@
         final int waterlevelCount = // results.
                 getWaterlevelCount();
         for (int i = 0; i < waterlevelCount; i++) {
-            final int naturalIndex = i + 1;
-            final String appendIndex = new StringBuilder().append("_").append(naturalIndex).toString();
-            final Object[] args = new Object[] { appendIndex };
-            // new StringBuilder().append('\u2081').toString(); // schlechter UTF-8-Support für subscript ints
-            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderWCsv(), new Object[] { appendIndex, "results.getRiver().getWstUnit()" }));
-            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderFloodDurPerYearCsv(), args));
-            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderQ(), args));
-            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderBezeichnCsv(), args));
+            final String appendIndex = "_" + Integer.toString(i + 1);
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderWCsv(), appendIndex, "results.getRiver().getWstUnit()"));
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderFloodDurPerYearCsv(), appendIndex));
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderQ(), appendIndex));
+            header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderBezeichnCsv(), appendIndex));
         }
 
         header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
@@ -229,39 +187,61 @@
         exportContextPDF.addJRMetadata(source, "infrastructure_height_header", SInfoResultType.infrastructureHeight);
         exportContextPDF.addJRMetadata(source, "infrastructure_type_header", SInfoResultType.infrastructuretype);
 
-        for (int i = 0; i < this.waterlevelCount; i++) {
-            final int naturalIndex = i + 1;
+        for (int i = 1; i <= this.getWaterlevelCount(); i++) {
 
-            final Object[] args = new String[] { new StringBuilder().append("_").append(naturalIndex).toString() };
-            exportContextPDF.addJRMetadata(source, getPdfHeader("w", naturalIndex), exportContextPDF.msg(DurationWaterlevel.getHeaderWPdf(), args));
-            exportContextPDF.addJRMetadata(source, getPdfHeader("duration", naturalIndex),
-                    exportContextPDF.msg(DurationWaterlevel.getHeaderFloodDurPerYearPdf(), args));
-            exportContextPDF.addJRMetadata(source, getPdfHeader("q", naturalIndex), exportContextPDF.msg(DurationWaterlevel.getHeaderQ(), args));
-            exportContextPDF.addJRMetadata(source, getPdfHeader("bezeichnung", naturalIndex),
-                    exportContextPDF.msg(DurationWaterlevel.getHeaderBezeichnPdf(), args));
+            final String appendIndex = "_" + Integer.toString(i);
+            exportContextPDF.addJRMetadata(source, getPdfHeader("w", i), exportContextPDF.msg(DurationWaterlevel.getHeaderWPdf(), appendIndex));
+            exportContextPDF.addJRMetadata(source, getPdfHeader("duration", i),
+                    exportContextPDF.msg(DurationWaterlevel.getHeaderFloodDurPerYearPdf(), appendIndex));
+            exportContextPDF.addJRMetadata(source, getPdfHeader("q", i), exportContextPDF.msg(DurationWaterlevel.getHeaderQ(), appendIndex));
+            exportContextPDF.addJRMetadata(source, getPdfHeader("bezeichnung", i),
+                    exportContextPDF.msg(DurationWaterlevel.getHeaderBezeichnPdf(), appendIndex));
         }
 
         exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
         exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
     }
 
-    public final int getWaterlevelCount() {
-        return this.waterlevelCount;
-    }
-
     private final String getPdfHeader(final String rootStr, final int index) {
         final String hd = "_header";
         final StringBuilder builder = new StringBuilder();
         return builder.append(rootStr).append("_").append(index).append(hd).toString();
     }
 
+    public final int getWaterlevelCount() {
+        return (this.mainvalueLabels != null) ? this.mainvalueLabels.length : 0;
+    }
+
     public String getMainValueLabel(final int j) {
-
         if (this.mainvalueLabels != null && j < this.mainvalueLabels.length)
             return this.mainvalueLabels[j];
         return "";
     }
 
+    /**
+     * Gets the longitudinal section of a result value type for one river side
+     */
+    public final double[][] getInfrastructurePoints(final IResultType type, final AttributeKey riverside) {
+
+        final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
+        final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
+
+        for (final ResultRow row : this.rows) {
+
+            final double station = row.getDoubleValue(GeneralResultType.station);
+            final double value = row.getDoubleValue(type);
+            if (row.getValue(SInfoResultType.riverside) == riverside) {
+                xPoints.add(station);
+                yPoints.add(value);
+            }
+        }
+
+        return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
+    }
+
+    /**
+     * Gets a longitudinal section of W, Q, or flood duration of one of the waterlevels
+     */
     public final double[][] getMainValueDurationPoints(final DiagramGenerator generator, final ValueGetter valuegetter, final int dataIndex) {
 
         final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());

http://dive4elements.wald.intevation.org