gernotbelger@8928: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@8928: * Software engineering by Intevation GmbH gernotbelger@8928: * gernotbelger@8928: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8928: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8928: * documentation coming with Dive4Elements River for details. gernotbelger@8928: */ gernotbelger@8928: gernotbelger@8928: package org.dive4elements.river.artifacts.sinfo.tkhstate; gernotbelger@8928: gernotbelger@9006: import java.io.OutputStream; gernotbelger@8928: gernotbelger@9150: import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; gernotbelger@9150: import org.dive4elements.river.artifacts.common.AbstractCommonExporter; gernotbelger@9150: import org.dive4elements.river.artifacts.common.ExportContextCSV; gernotbelger@9006: import org.dive4elements.river.artifacts.common.JasperReporter; gernotbelger@9006: import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; gernotbelger@8928: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@8928: gernotbelger@8928: import au.com.bytecode.opencsv.CSVWriter; gernotbelger@9006: import net.sf.jasperreports.engine.JRException; gernotbelger@8928: gernotbelger@8928: /** gernotbelger@8928: * Generates different output formats (csv, pdf) of data that resulted from a tkh computation. gernotbelger@8928: * gernotbelger@8928: * @author Gernot Belger gernotbelger@8928: */ gernotbelger@8928: // REMARK: must be public because its registered in generators.xml gernotbelger@9150: public class TkhExporter extends AbstractCommonExporter { gernotbelger@8928: gernotbelger@8928: private static final String CSV_META_CALCULATION_FORMULA = "sinfo.export.tkh.calculation.formula"; gernotbelger@8928: gernotbelger@8928: @Override gernotbelger@9150: protected void doWritePdf(final OutputStream out, final TkhCalculationResults results) { gernotbelger@9150: // TODO: Move to super gernotbelger@9006: try { gernotbelger@9150: final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null); gernotbelger@9006: gernotbelger@9006: final JasperReporter reporter = new JasperReporter(); gernotbelger@9150: gernotbelger@9150: for (final AbstractCalculationExportableResult result : results.getResults()) { gernotbelger@9150: final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource(); gernotbelger@9150: getHelper().addJRMetaDataUSINFO(source, results); gernotbelger@9150: gernotbelger@9150: source.addMetaData("calculation_label", msg("sinfo.export.flow_depth.pdf.meta.calculation.label")); gernotbelger@9150: source.addMetaData("calculation_name", msg("sinfo.export.flow_depth.pdf.meta.calculation.name")); gernotbelger@9150: gernotbelger@9150: result.addReport(exportContextCSV, results, reporter, source); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9006: reporter.exportPDF(out); gernotbelger@9006: } gernotbelger@9006: catch (final JRException je) { gernotbelger@9006: getLog().warn("Error generating PDF Report!", je); gernotbelger@9006: } gernotbelger@9006: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected void doWriteCSVData(final CSVWriter writer, final TkhCalculationResults results) { gernotbelger@9150: // TODO: Diesen Ablauf in super? _WINZIGE ABWEICHUNG vom Standard... gernotbelger@9150: gernotbelger@9150: // TODO: move results into context? gernotbelger@9150: final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer); gernotbelger@9150: gernotbelger@9150: getLog().info("writeCSVData"); gernotbelger@9150: gernotbelger@9150: /* write as csv */ gernotbelger@9150: exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse gernotbelger@9150: gernotbelger@9150: // "# Berechnungsgrundlage: Gleichung nach GILL (1971)" gernotbelger@9150: exportContextCSV.writeCSVMetaEntry(CSV_META_CALCULATION_FORMULA); gernotbelger@9150: gernotbelger@9150: // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance gernotbelger@9150: gernotbelger@9150: final RiverInfo river = results.getRiver(); gernotbelger@9150: gernotbelger@9150: final Class lastResultType = null; gernotbelger@9150: gernotbelger@9150: for (final AbstractCalculationExportableResult result : results.getResults()) { gernotbelger@9150: gernotbelger@9150: final Class resultType = result.getClass(); gernotbelger@9150: if (lastResultType == null || lastResultType != resultType) { gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: result.writeCSVHeader(exportContextCSV, results, river); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: } else gernotbelger@9150: exportContextCSV.writeCSVLine(new String[] { "#" }); gernotbelger@9150: gernotbelger@9150: result.writeCsv(exportContextCSV, results); gernotbelger@9150: } gernotbelger@9150: } gernotbelger@8928: }