Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java @ 9150:23945061daec
gigantic refactoring: exporter, result, results
to support multiple jaspers -> collisions
author | gernotbelger |
---|---|
date | Thu, 14 Jun 2018 16:56:31 +0200 |
parents | 7134a4c7d1b6 |
children | a4121ec450d6 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java Thu Jun 14 15:12:25 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java Thu Jun 14 16:56:31 2018 +0200 @@ -9,15 +9,12 @@ package org.dive4elements.river.artifacts.sinfo.flowdepthdev; import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Collection; -import org.apache.log4j.Logger; -import org.dive4elements.river.artifacts.common.GeneralResultType; +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; +import org.dive4elements.river.artifacts.common.AbstractCommonExporter; +import org.dive4elements.river.artifacts.common.ExportContextCSV; import org.dive4elements.river.artifacts.common.JasperReporter; import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; -import org.dive4elements.river.artifacts.common.ResultRow; -import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter; import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; @@ -31,142 +28,63 @@ * @author Gernot Belger */ // REMARK: must be public because its registered in generators.xml -public class FlowDepthDevelopmentExporter extends AbstractSInfoExporter<FlowDepthDevelopmentCalculationResult, FlowDepthDevelopmentCalculationResults> { - - private static final String CSV_META_HEADER_SOUNDING_CURRENT = "sinfo.export.csv.meta.header.sounding.current"; - - private static final String CSV_META_HEADER_SOUNDING_HISTORICAL = "sinfo.export.csv.meta.header.sounding.historical"; - - private static final String CSV_META_HEADER_WATERLEVEL_CURRENT = "sinfo.export.csv.meta.header.waterlevel.current"; - - private static final String CSV_META_HEADER_WATERLEVEL_HISTORICAL = "sinfo.export.csv.meta.header.waterlevel.historical"; - - /** The log used in this exporter. */ - private static Logger log = Logger.getLogger(FlowDepthDevelopmentExporter.class); - - private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthdevelopment.jrxml"; +public class FlowDepthDevelopmentExporter extends AbstractCommonExporter<FlowDepthDevelopmentCalculationResults> { @Override - protected Logger getLog() { - return log; - } - - @Override - protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results, - final FlowDepthDevelopmentCalculationResult result) { + protected void doWriteCSVData(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results) { + // TODO: Diesen Ablauf in super? - writeCSVSoundingMetadata(writer, result.getCurrentSounding(), CSV_META_HEADER_SOUNDING_CURRENT); - writer.writeNext(new String[] { "" }); // break line - writeCSVWaterlevelMetadata(writer, result.getCurrentWst(), CSV_META_HEADER_WATERLEVEL_CURRENT); - writer.writeNext(new String[] { "" }); // break line - writeCSVSoundingMetadata(writer, result.getHistoricalSounding(), CSV_META_HEADER_SOUNDING_HISTORICAL); - writer.writeNext(new String[] { "" }); // break line - writeCSVWaterlevelMetadata(writer, result.getHistoricalWst(), CSV_META_HEADER_WATERLEVEL_HISTORICAL); - writer.writeNext(new String[] { "" }); // break line + // TODO: move results into context? + final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer); + + getLog().info("writeCSVData"); + + /* write as csv */ + exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse + + // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance + + final RiverInfo river = results.getRiver(); + + final Class<?> lastResultType = null; + + for (final AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults> result : results.getResults()) { + + final Class<?> resultType = result.getClass(); + if (lastResultType == null || lastResultType != resultType) { + exportContextCSV.writeBlankLine(); + result.writeCSVHeader(exportContextCSV, results, river); + exportContextCSV.writeBlankLine(); + } else + exportContextCSV.writeCSVLine(new String[] { "#" }); + + result.writeCsv(exportContextCSV, results); + } } @Override - protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results) { - super.writeCSVGlobalMetadataDefaults(writer, results); - } - - /** - * Write the header, with different headings depending on whether at a - * gauge or at a location. - * - * @param river - * @param useTkh - */ - @Override - protected void writeCSVHeader(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results, final RiverInfo river) { - log.info("FlowDepthExporter.writeCSVHeader"); - - final FlowDepthDevelopmentCalculationResult result = results.getResult(); - - final Collection<String> header = new ArrayList<>(11); - - header.add(msg(GeneralResultType.station.getCsvHeader())); - header.add(msgUnit(SInfoResultType.flowdepthDevelopment.getCsvHeader(), SInfoResultType.flowdepthDevelopment.getUnit())); - header.add(msgUnit(SInfoResultType.flowdepthDevelopmentPerYear.getCsvHeader(), SInfoResultType.flowdepthDevelopmentPerYear.getUnit())); - header.add(msgUnitLabel(SInfoResultType.waterlevelDifference.getCsvHeader(), SInfoResultType.waterlevelDifference.getUnit(), - result.getWaterlevelDifferenceLabel())); - header.add(msgUnitLabel(SInfoResultType.bedHeightDifference.getCsvHeader(), SInfoResultType.bedHeightDifference.getUnit(), - result.getBedHeightDifferenceLabel())); - header.add( - msgUnitLabel(SInfoResultType.flowdepthCurrent.getCsvHeader(), SInfoResultType.flowdepthCurrent.getUnit(), result.getFlowDepthCurrentLabel())); - header.add(msgUnitLabel(SInfoResultType.flowdepthHistorical.getCsvHeader(), SInfoResultType.flowdepthHistorical.getUnit(), - result.getFlowDepthHistoricalLabel())); - header.add(msg(SInfoResultType.location.getCsvHeader())); - - writer.writeNext(header.toArray(new String[header.size()])); - } - - /** - * Format a row of a flow depth result into an array of string, both used by csv and pdf - * - * @param result - * - * @param useTkh - */ - @Override - protected String[] formatRow(final FlowDepthDevelopmentCalculationResults results, final ResultRow row, final ExportMode mode) { - - final Collection<String> lines = new ArrayList<>(10); - - lines.add(row.exportValue(this.context, GeneralResultType.station)); - lines.add(row.exportValue(this.context, SInfoResultType.flowdepthDevelopment)); - lines.add(row.exportValue(this.context, SInfoResultType.flowdepthDevelopmentPerYear)); - lines.add(row.exportValue(this.context, SInfoResultType.waterlevelDifference)); - lines.add(row.exportValue(this.context, SInfoResultType.bedHeightDifference)); - lines.add(row.exportValue(this.context, SInfoResultType.flowdepthCurrent)); - lines.add(row.exportValue(this.context, SInfoResultType.flowdepthHistorical)); - lines.add(row.exportValue(this.context, SInfoResultType.location)); - - return lines.toArray(new String[lines.size()]); - } - - @Override - protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthDevelopmentCalculationResults results) { - - /* general metadata */ - super.addJRMetaData(source, results); - - final FlowDepthDevelopmentCalculationResult result = results.getResult(); - source.addMetaData("flowdepthdevelopment", result.getLabel()); - source.addMetaData("flowdepthdevelopment_header_label", SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta())); - - /* column headings */ - source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); - source.addMetaData("flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment.getPdfHeader(this.context.getMeta())); - source.addMetaData("flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear.getPdfHeader(this.context.getMeta())); - - source.addMetaData("waterleveldifference_header", SInfoResultType.waterlevelDifference.getPdfHeader(this.context.getMeta())); - source.addMetaData("waterleveldifference_header2", result.getWaterlevelDifferenceLabel()); - - source.addMetaData("bedheightdifference_header", SInfoResultType.bedHeightDifference.getPdfHeader(this.context.getMeta())); - source.addMetaData("bedheightdifference_header2", result.getBedHeightDifferenceLabel()); - - source.addMetaData("flowdepthcurrent_header", SInfoResultType.flowdepthCurrent.getPdfHeader(this.context.getMeta())); - source.addMetaData("flowdepthcurrent_header2", result.getFlowDepthCurrentLabel()); - - source.addMetaData("flowdepthhistorical_header", SInfoResultType.flowdepthHistorical.getPdfHeader(this.context.getMeta())); - source.addMetaData("flowdepthhistorical_header2", result.getFlowDepthHistoricalLabel()); - - source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta())); - } - - @Override - protected void writePDF(final OutputStream out) { + protected void doWritePdf(final OutputStream out, final FlowDepthDevelopmentCalculationResults results) { + // TODO: Move to super //2 lines different try { - final MetaAndTableJRDataSource source = createJRData(this.data); + final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null); final JasperReporter reporter = new JasperReporter(); - reporter.addReport(JASPER_FILE, source); + + for (final AbstractCalculationExportableResult<FlowDepthDevelopmentCalculationResults> result : results.getResults()) { + final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource(); + getHelper().addJRMetaDataUSINFO(source, results); + + // move somewhere? global meta + source.addMetaData("flowdepthdevelopment", result.getLabel()); + source.addMetaData("flowdepthdevelopment_header_label", SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta())); + + result.addReport(exportContextCSV, results, reporter, source); + } + reporter.exportPDF(out); } catch (final JRException je) { getLog().warn("Error generating PDF Report!", je); } } - } \ No newline at end of file