gernotbelger@9145: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9145: * Software engineering by Intevation GmbH gernotbelger@9145: * gernotbelger@9145: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9145: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9145: * documentation coming with Dive4Elements River for details. gernotbelger@9145: */ gernotbelger@9145: gernotbelger@9145: package org.dive4elements.river.artifacts.sinfo.flood_duration; gernotbelger@9145: gernotbelger@9145: import java.io.OutputStream; gernotbelger@9145: 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@9145: import org.dive4elements.river.artifacts.common.JasperDesigner; gernotbelger@9145: import org.dive4elements.river.artifacts.common.JasperReporter; gernotbelger@9145: import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; gernotbelger@9145: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@9145: gernotbelger@9145: import au.com.bytecode.opencsv.CSVWriter; gernotbelger@9145: import net.sf.jasperreports.engine.JRException; gernotbelger@9145: gernotbelger@9145: /** gernotbelger@9145: * Generates different output formats (csv, pdf) of data that resulted from a flow depths min/max computation. gernotbelger@9145: * gernotbelger@9145: * @author Ingo Weinzierl gernotbelger@9145: * @author Gernot Belger gernotbelger@9145: */ gernotbelger@9145: // REMARK: must be public because its registered in generators.xml gernotbelger@9150: public class FloodDurationExporter extends AbstractCommonExporter { gernotbelger@9145: gernotbelger@9145: @Override gernotbelger@9150: protected void doWriteCSVData(final CSVWriter writer, final FloodDurationCalculationResults results) { gernotbelger@9150: // TODO: Diesen Ablauf in super? gernotbelger@9145: gernotbelger@9150: // TODO: move results into context? gernotbelger@9150: final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer); gernotbelger@9145: gernotbelger@9150: getLog().info("writeCSVData"); gernotbelger@9145: gernotbelger@9150: /* write as csv */ gernotbelger@9150: exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse gernotbelger@9145: 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@9145: gernotbelger@9145: } gernotbelger@9145: mschaefer@9176: @Override mschaefer@9176: protected void doWritePdf(final OutputStream out, final FloodDurationCalculationResults results) { mschaefer@9176: mschaefer@9176: // TODO: Move to super (hier ist aber spezieller code drin...) mschaefer@9176: try { mschaefer@9176: final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null); mschaefer@9176: mschaefer@9176: final JasperReporter reporter = new JasperReporter(); mschaefer@9176: mschaefer@9176: for (final AbstractCalculationExportableResult result : results.getResults()) { mschaefer@9176: final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource(); mschaefer@9176: getHelper().addJRMetaDataUSINFO(source, results); mschaefer@9176: mschaefer@9176: final JasperDesigner design = result.addReport(exportContextCSV, results, reporter, source); mschaefer@9176: if (result instanceof FloodDurationCalculationResult) { mschaefer@9176: // final int wlCount = ((FloodDurationCalculationResult) result).getWaterlevelCount(); mschaefer@9176: // if (wlCount == 0 || wlCount == 2) { mschaefer@9176: design.removeColumn("wOpt"); mschaefer@9176: design.removeColumn("qOpt"); mschaefer@9176: design.removeColumn("bezOpt"); mschaefer@9176: design.removeColumn("durOpt"); mschaefer@9176: // } mschaefer@9176: } mschaefer@9176: } mschaefer@9176: mschaefer@9176: reporter.exportPDF(out); mschaefer@9176: } mschaefer@9176: catch (final JRException je) { mschaefer@9176: getLog().warn("Error generating PDF Report!", je); mschaefer@9176: } mschaefer@9176: mschaefer@9176: } gernotbelger@9145: }