diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java @ 9000:50cc99579a46

Work on uinfo
author gernotbelger
date Thu, 12 Apr 2018 19:16:10 +0200
parents 27851cfda84a
children 460fcc128794
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java	Thu Apr 12 19:15:42 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java	Thu Apr 12 19:16:10 2018 +0200
@@ -9,40 +9,28 @@
  */
 package org.dive4elements.river.artifacts.sinfo.common;
 
-import java.io.OutputStream;
 import java.text.DateFormat;
 import java.text.NumberFormat;
-import java.util.Collection;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.Locale;
-import java.util.Map;
 
 import org.apache.commons.lang.math.DoubleRange;
-import org.apache.log4j.Logger;
-import org.dive4elements.artifacts.CallMeta;
-import org.dive4elements.artifacts.common.utils.Config;
 import org.dive4elements.river.FLYS;
-import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.I18NStrings;
 import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.SInfoI18NStrings;
 import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
 import org.dive4elements.river.artifacts.sinfo.util.MetaAndTableJRDataSource;
 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
-import org.dive4elements.river.exports.AbstractExporter;
 
 import au.com.bytecode.opencsv.CSVWriter;
-import net.sf.jasperreports.engine.JRDataSource;
-import net.sf.jasperreports.engine.JRException;
-import net.sf.jasperreports.engine.JasperExportManager;
-import net.sf.jasperreports.engine.JasperFillManager;
-import net.sf.jasperreports.engine.JasperPrint;
 
 /**
  * @author Gernot Belger
  */
-public abstract class AbstractSInfoExporter<RESULT extends AbstractSInfoCalculationResult, RESULTS extends AbstractSInfoCalculationResults<RESULT>> extends AbstractExporter {
+public abstract class AbstractSInfoExporter<RESULT extends AbstractSInfoCalculationResult, RESULTS extends AbstractSInfoCalculationResults<RESULT>> extends AbstractCommonExporter<RESULT, RESULTS> {
 
     private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
 
@@ -50,191 +38,12 @@
 
     private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
 
-    private static final String CSV_META_HEADER_SOUNDING_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
-
     private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
 
     private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
 
     private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
 
-    /** The storage that contains the current calculation result. */
-    private RESULTS data = null;
-
-    protected abstract Logger getLog();
-
-    public RESULTS getData() {
-        return this.data;
-    }
-
-    @Override
-    protected final void addData(final Object d) {
-        /* reset */
-        this.data = null;
-
-        if (d instanceof CalculationResult) {
-
-            final Object dat = ((CalculationResult) d).getData();
-            if (dat != null) {
-                @SuppressWarnings("unchecked")
-                final RESULTS result = (RESULTS) dat;
-                this.data = result;
-            }
-        }
-    }
-
-    /**
-     * Formats header with unit and label: msg [unit] (label)
-     */
-    protected final String msgUnitLabel(final String key, final String unit, final String label) {
-        final String msg = msg(key);
-        return String.format("%s [%s] (%s)", msg, unit, label);
-    }
-
-    @Override
-    protected final void writeCSVData(final CSVWriter writer) {
-        getLog().info("writeCSVData");
-
-        /* fetch calculation results */
-        final RESULTS results = this.data;
-
-        final RiverInfo river = results.getRiver();
-
-        /* write as csv */
-        writeCSVGlobalMetadata(writer, results);
-        writeCSVHeader(writer, results, river);
-
-        for (final RESULT result : results.getResults()) {
-            writeCSVResult(writer, results, result);
-        }
-    }
-
-    protected abstract void writeCSVHeader(final CSVWriter writer, final RESULTS results, final RiverInfo river);
-
-    /**
-     * Add metadata that is once written to the top of the file.
-     */
-    protected abstract void writeCSVGlobalMetadata(final CSVWriter writer, final RESULTS results);
-
-    protected final void writeCSVMetaEntry(final CSVWriter writer, final String message, final Object... messageArgs) {
-
-        final CallMeta meta = this.context.getMeta();
-
-        writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
-    }
-
-    protected final void writeCSVResult(final CSVWriter writer, final RESULTS results, final RESULT result) {
-
-        writeCSVResultMetadata(writer, results, result);
-
-        /* nwo the value rows */
-        final Collection<SInfoResultRow> rows = result.getRows();
-        for (final SInfoResultRow row : rows) {
-            writeCSVRow(writer, results, result, row);
-        }
-    }
-
-    /**
-     * Add metadata that is written once per result set.
-     */
-    protected abstract void writeCSVResultMetadata(CSVWriter writer, RESULTS results, RESULT result);
-
-    protected final void writeCSVRow(final CSVWriter writer, final RESULTS results, final RESULT result, final SInfoResultRow row) {
-        getLog().debug("writeCSVFlowDepthRow");
-
-        final String[] formattedRow = formatCSVRow(results, result, row);
-        writer.writeNext(formattedRow);
-    }
-
-    protected abstract String[] formatCSVRow(RESULTS results, RESULT result, final SInfoResultRow row);
-
-    @Override
-    protected final void writePDF(final OutputStream outStream) {
-        getLog().debug("write PDF");
-
-        final JRDataSource source = createJRData();
-
-        final String confPath = Config.getConfigDirectory().toString();
-
-        // FIXME: distinguish between with and without tkh: we need two jasper reports!
-
-        final Map<String, Object> parameters = new HashMap<>();
-        parameters.put("ReportTitle", "Exported Data");
-
-        try {
-            final String jasperPath = confPath + getJasperFile();
-
-            final JasperPrint print = JasperFillManager.fillReport(jasperPath, parameters, source);
-            JasperExportManager.exportReportToPdfStream(print, outStream);
-        }
-        catch (final JRException je) {
-            getLog().warn("Error generating PDF Report!", je);
-        }
-    }
-
-    protected abstract String getJasperFile();
-
-    private JRDataSource createJRData() {
-
-        /* fetch calculation results */
-        final RESULTS results = this.data;
-
-        final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
-
-        addJRMetaData(source, results);
-
-        for (final RESULT result : results.getResults()) {
-            addJRTableData(source, results, result);
-        }
-
-        return source;
-    }
-
-    protected abstract void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results);
-
-    protected final void addJRTableData(final MetaAndTableJRDataSource source, final RESULTS results, final RESULT result) {
-
-        final Collection<SInfoResultRow> rows = result.getRows();
-
-        for (final SInfoResultRow row : rows) {
-
-            final String[] formattedRow = formatPDFRow(results, row);
-            source.addData(formattedRow);
-        }
-    }
-
-    protected abstract String[] formatPDFRow(RESULTS results, final SInfoResultRow row);
-
-    protected final void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final AbstractSInfoCalculationResults<?> results) {
-
-        final String calcModeLabel = results.getCalcModeLabel();
-        final RiverInfo river = results.getRiver();
-        final DoubleRange calcRange = results.getCalcRange();
-
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_RESULT, msg(SInfoI18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
-
-        // "# FLYS-Version: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_VERSION, msg(SInfoI18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
-
-        // "# Bearbeiter: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_USER, msg(SInfoI18NStrings.CSV_META_USER_LABEL), results.getUser());
-
-        // "# Datum der Erstellung: "
-        final Locale locale = Resources.getLocale(this.context.getMeta());
-        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_CREATION, msg(SInfoI18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
-
-        // "# Gewässer: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_RIVER, msg(SInfoI18NStrings.CSV_META_RIVER_LABEL), river.getName());
-
-        // "# Höhensystem des Flusses: "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
-
-        // "# Ort/Bereich (km): "
-        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_RANGE, msg(SInfoI18NStrings.CSV_META_RANGE_LABEL),
-                getKmFormatter().format(calcRange.getMinimumDouble()), getKmFormatter().format(calcRange.getMaximumDouble()));
-    }
-
     protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding) {
         writeCSVSoundingMetadata(writer, sounding, CSV_META_HEADER_SOUNDING);
     }
@@ -248,7 +57,7 @@
         // "# Aufnahmeart: "
         writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
         // "# Auswerter: "
-        writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_EVALUATOR, sounding.getEvaluationBy());
+        writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
         // "# Lagesystem: "
         writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
         // "# Höhensystem: "
@@ -277,33 +86,95 @@
             writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
     }
 
-    protected final void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final AbstractSInfoCalculationResults<?> results) {
+    @Override
+    protected void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results) {
+
+        final String calcModeLabel = results.getCalcModeLabel();
+        final RiverInfo river = results.getRiver();
+        final DoubleRange calcRange = results.getCalcRange();
+
+        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
+
+        // "# FLYS-Version: "
+        writeCSVMetaEntry(writer, I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
+
+        // "# Bearbeiter: "
+        writeCSVMetaEntry(writer, I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
+
+        // "# Datum der Erstellung: "
+        final Locale locale = Resources.getLocale(this.context.getMeta());
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        writeCSVMetaEntry(writer, I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
+
+        // "# Gewässer: "
+        writeCSVMetaEntry(writer, I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
+
+        // "# Höhensystem des Flusses: "
+        writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
+
+        if (calcRange != null) {
+            // "# Ort/Bereich (km): "
+            writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
+                    getKmFormatter().format(calcRange.getMaximumDouble()));
+        }
+    }
+
+    @Override
+    protected void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results) {
+
+        /* general metadata */
+        this.addJRMetaDataDefaults(source, results);
 
         final RiverInfo river = results.getRiver();
         final String wstUnitName = river.getWstUnit();
 
-        source.addMetaData("header", msg(SInfoI18NStrings.CSV_META_HEADER_RESULT_LABEL));
-        source.addMetaData("calcMode", results.getCalcModeLabel());
-
-        source.addMetaData("version_label", msg(SInfoI18NStrings.CSV_META_VERSION_LABEL));
-        source.addMetaData("version", FLYS.VERSION);
-
-        source.addMetaData("user_label", msg(SInfoI18NStrings.CSV_META_USER_LABEL));
-        source.addMetaData("user", results.getUser());
-
-        final Locale locale = Resources.getLocale(this.context.getMeta());
-        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
-        source.addMetaData("date_label", msg(SInfoI18NStrings.CSV_META_CREATION_LABEL));
-        source.addMetaData("date", df.format(new Date()));
-
-        source.addMetaData("river_label", msg(SInfoI18NStrings.CSV_META_RIVER_LABEL));
+        source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
         source.addMetaData("river", river.getName());
         source.addMetaData("river_unit", wstUnitName);
 
         final DoubleRange calcRange = results.getCalcRange();
         final NumberFormat kmFormatter = getKmFormatter();
         final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
-        source.addMetaData("range_label", msg(SInfoI18NStrings.CSV_META_RANGE_LABEL));
+        source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
         source.addMetaData("range", rangeValue);
+
+        /* column headings */
+        // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); // moved to
+        // super
+
+        // TODO: move to subs
+        /* column headings */
+        source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
+        source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
     }
+
+    @Override
+    protected void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results) {
+
+        source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
+        source.addMetaData("calcMode", results.getCalcModeLabel());
+
+        source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
+        source.addMetaData("version", FLYS.VERSION);
+
+        source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
+        source.addMetaData("user", results.getUser());
+
+        final Locale locale = Resources.getLocale(this.context.getMeta());
+        final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+        source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
+        source.addMetaData("date", df.format(new Date()));
+
+        /* column headings */
+        source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
+    }
+
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org