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: }