diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java @ 9361:2aec052d4088

Refactoring on SalixLineCalculationResult etc., calculation using MQ etc., scenario (regional+supra) csv columns and meta data added
author mschaefer
date Wed, 01 Aug 2018 18:01:11 +0200
parents
children 0124d67ce5ab
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java	Wed Aug 01 18:01:11 2018 +0200
@@ -0,0 +1,174 @@
+/** 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
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.uinfo.salix;
+
+import java.text.NumberFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.ExportContextPDF;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.IExportContext;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
+import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.uinfo.common.UInfoResultType;
+
+import gnu.trove.TDoubleArrayList;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+class SalixLineCalculationResult extends AbstractCalculationExportableResult {
+
+    private static final long serialVersionUID = 1L;
+    private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
+
+    private final String[] scenarioLabels;
+
+    private final String partialRangeString;
+
+    private final String deltaWString;
+
+    public SalixLineCalculationResult(final String label, final Collection<ResultRow> rows) {
+        this(label, new String[] {}, "", "", rows);
+    }
+
+    public SalixLineCalculationResult(final String label, final String[] scenarioLabels, final String partialRangeString, final String deltaWString,
+            final Collection<ResultRow> rows) {
+        super(label, rows);
+        this.scenarioLabels = scenarioLabels;
+        this.partialRangeString = partialRangeString;
+        this.deltaWString = deltaWString;
+    }
+
+    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];
+
+        return "";
+    }
+
+    public String getPartialRangeString() {
+        return this.partialRangeString;
+    }
+
+    public String getDeltaWString() {
+        return this.deltaWString;
+    }
+
+    @Override
+    public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) {
+
+        final Collection<String> header = new ArrayList<>();
+
+        header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixline));
+        header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salix_mw_mnw));
+
+        for (int i = 1; i <= getScenarioCount(); i++) {
+            header.add(exportContextCSV.msg(SalixScenario.getDeltaWHeader()));
+            header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader()));
+        }
+        exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+    }
+
+    @Override
+    protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) {
+        return formatRow(exportContextCSV, row);
+    }
+
+    @Override
+    protected String[] formatPDFRow(final ExportContextPDF exportContextPDF, final ResultRow row) {
+        return formatRow(exportContextPDF, row);
+    }
+
+    @Override
+    protected String getJasperFile() {
+        return JASPER_FILE;
+    }
+
+    @Override
+    protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) {
+
+        /* additional column headings */
+        exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+        exportContextPDF.addJRMetadata(source, "salix_line", UInfoResultType.salixline);
+        exportContextPDF.addJRMetadata(source, "salix_delta_mw", UInfoResultType.salix_mw_mnw);
+
+        for (int i = 1; i <= this.getScenarioCount(); i++) {
+            // TODO Spaltenueberschriften der Scenarios
+        }
+    }
+
+    private String[] formatRow(final IExportContext context, final ResultRow row) {
+
+        final Collection<String> lines = new ArrayList<>();
+        lines.add(context.formatRowValue(row, GeneralResultType.station));
+        lines.add(context.formatRowValue(row, UInfoResultType.salixline));
+        lines.add(context.formatRowValue(row, UInfoResultType.salix_mw_mnw));
+
+        final NumberFormat formatter = ((ExportContextCSV) context).getSalixScenFormatter();
+        final List<SalixScenario> scenarios = (List<SalixScenario>) row.getValue(UInfoResultType.customMultiRowColSalixScenarios);
+        for (int i = 1; i <= this.getScenarioCount(); i++) {
+            if (i > scenarios.size())
+                break;
+            if (scenarios.get(i - 1) != null) {
+                lines.add(scenarios.get(i - 1).getDeltaWFormatted());
+                lines.add(scenarios.get(i - 1).getSalixValueFormatted(formatter));
+            }
+            else {
+                lines.add("");
+                lines.add("");
+            }
+        }
+        return lines.toArray(new String[lines.size()]);
+    }
+
+    @Override
+    protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) {
+        // do nothing. subclass may override
+    }
+
+    /**
+     * Gets a longitudinal section of the salix value of a scenario
+     */
+    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.customMultiRowColSalixScenarios);
+            if (dataIndex <= scenarios.size() - 1) {
+                final SalixScenario salixScenario = scenarios.get(dataIndex);
+                if (salixScenario != null) {
+                    final double value = salixScenario.getSalixValue();
+                    xPoints.add(station);
+                    yPoints.add(value);
+                }
+            }
+        }
+
+        return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
+    }
+}
\ No newline at end of file

http://dive4elements.wald.intevation.org