diff artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java @ 9195:a4121ec450d6

'ca.'-issue ExportContextCSV+PDF separated uinfo.inundationduration url export
author gernotbelger
date Fri, 29 Jun 2018 14:52:54 +0200
parents bb929b444ea5
children 6393e05a9610
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java	Thu Jun 28 15:57:40 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java	Fri Jun 29 14:52:54 2018 +0200
@@ -14,15 +14,17 @@
 import org.apache.log4j.Logger;
 import org.dive4elements.artifacts.CallContext;
 import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
 import org.dive4elements.river.exports.AbstractExporter;
 import org.w3c.dom.Document;
 
 import au.com.bytecode.opencsv.CSVWriter;
+import net.sf.jasperreports.engine.JRException;
 
 /**
  * @author Gernot Belger
  */
-public abstract class AbstractCommonExporter<RESULTS extends AbstractCalculationResults> extends AbstractExporter {
+public abstract class AbstractCommonExporter<RESULT extends AbstractCalculationExportableResult, RESULTS extends AbstractCalculationResults<RESULT>> extends AbstractExporter {
 
     /** The log used in this exporter. */
     private final Logger log = Logger.getLogger(getClass());
@@ -34,17 +36,9 @@
 
     private RESULTS results = null;
 
-    private ExportContextPDF helper;
-
     @Override
     public void init(final String outName, final Document request, final OutputStream out, final CallContext context) {
         super.init(outName, request, out, context);
-
-        this.helper = new ExportContextPDF(context); // bleibt so asynchron zu ExportContextCSV - ist so beabsichtigt
-    }
-
-    protected final ExportContextPDF getHelper() {
-        return this.helper;
     }
 
     @Override
@@ -67,16 +61,37 @@
         return this.results;
     }
 
-    protected final AbstractCalculationResults getResults2() {
-        return this.results;
+    @Override
+    protected final void writeCSVData(final CSVWriter writer) {
+
+        final ExportContextCSV exportContext = new ExportContextCSV(this.context, writer, this.results);
+
+        doWriteCSVData(exportContext, this.results);
     }
 
-    @Override
-    protected final void writeCSVData(final CSVWriter writer) {
-        doWriteCSVData(writer, this.results);
+    protected final void doWriteCSVData(final ExportContextCSV exportContext, final RESULTS results) {
+
+        writeCSVGlobalMetadata(exportContext, results);
+
+        final RiverInfo river = results.getRiver();
+
+        final Class<?> lastResultType = null;
+
+        for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+            final Class<?> resultType = result.getClass();
+            if (lastResultType == null || lastResultType != resultType) {
+                exportContext.writeBlankLine();
+                result.writeCSVHeader(exportContext, river);
+                exportContext.writeBlankLine();
+            } else
+                exportContext.writeCSVLine(new String[] { "#" });
+
+            result.writeCsv(exportContext);
+        }
     }
 
-    protected abstract void doWriteCSVData(CSVWriter writer, RESULTS results);
+    protected abstract void writeCSVGlobalMetadata(final ExportContextCSV exportContext, final RESULTS results);
 
     /**
      * Formats header with unit and label: msg [unit] (label)
@@ -92,5 +107,35 @@
         doWritePdf(out, this.results);
     }
 
-    protected abstract void doWritePdf(OutputStream out, RESULTS results);
+    private final void doWritePdf(final OutputStream out, final RESULTS results) {
+
+        try {
+            final ExportContextPDF exportContext = new ExportContextPDF(this.context, results);
+
+            final JasperReporter reporter = new JasperReporter();
+
+            for (final RESULT result : results.getResults()) {
+
+                final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+
+                writePDFGlobalMetadata(exportContext, source);
+
+                final JasperDesigner design = result.addReport(exportContext, reporter, source);
+                configureDesign(result, design);
+            }
+
+            reporter.exportPDF(out);
+        }
+        catch (final JRException je) {
+            getLog().warn("Error generating PDF Report!", je);
+        }
+    }
+
+    /**
+     * Override to implement, does nothing by default.
+     */
+    protected void configureDesign(final RESULT result, final JasperDesigner design) {
+    }
+
+    protected abstract void writePDFGlobalMetadata(ExportContextPDF exportContext, MetaAndTableJRDataSource source);
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org