Mercurial > dive4elements > river
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