gernotbelger@9150: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9150: * Software engineering by gernotbelger@9150: * Björnsen Beratende Ingenieure GmbH gernotbelger@9150: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9150: * gernotbelger@9150: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9150: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9150: * documentation coming with Dive4Elements River for details. gernotbelger@9150: */ gernotbelger@9150: package org.dive4elements.river.artifacts.common; gernotbelger@9150: gernotbelger@9150: import java.util.Collection; gernotbelger@9150: gernotbelger@9150: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@9150: gernotbelger@9150: import net.sf.jasperreports.engine.JRException; gernotbelger@9150: gernotbelger@9150: /** gernotbelger@9150: * @author Domenico Nardi Tironi gernotbelger@9150: */ gernotbelger@9195: public abstract class AbstractCalculationExportableResult extends AbstractCalculationResult { gernotbelger@9150: gernotbelger@9150: private static final long serialVersionUID = 1L; gernotbelger@9150: gernotbelger@9150: public AbstractCalculationExportableResult(final String label, final Collection rows) { gernotbelger@9150: super(label, rows); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9195: public abstract void writeCSVHeader(ExportContextCSV exportContextCSV, final RiverInfo river); gernotbelger@9150: gernotbelger@9195: public final void writeCsv(final ExportContextCSV exportContextCSV) { gernotbelger@9150: gernotbelger@9195: writeCSVResultMetadata(exportContextCSV); gernotbelger@9150: // wenn resultsmetadata null sind!? keine neue zeile gernotbelger@9150: // writer.writeNext(new String[] { "" }); // break line in den Implementationen, gernotbelger@9150: // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig gernotbelger@9150: gernotbelger@9150: /* now the value rows */ gernotbelger@9150: final Collection rows = getRows(); gernotbelger@9150: for (final ResultRow row : rows) gernotbelger@9195: writeCSVRow(exportContextCSV, row); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9195: protected abstract void writeCSVResultMetadata(final ExportContextCSV exportContextCSV); gernotbelger@9150: gernotbelger@9195: protected void writeCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { gernotbelger@9195: final String[] formattedRow = formatCSVRow(exportContextCSV, row); gernotbelger@9150: exportContextCSV.writeCSVLine(formattedRow); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9195: protected abstract String[] formatCSVRow(ExportContextCSV exportContextCSV, final ResultRow row); gernotbelger@9150: gernotbelger@9195: protected abstract String[] formatPDFRow(ExportContextPDF exportContextPDF, ResultRow row); gernotbelger@9150: gernotbelger@9195: public JasperDesigner addReport(final ExportContextPDF exportContext, final JasperReporter reporter, final MetaAndTableJRDataSource source) gernotbelger@9195: throws JRException { gernotbelger@9150: gernotbelger@9150: final JasperDesigner design = reporter.addReport(getJasperFile(), source); gernotbelger@9195: addJRTableHeader(exportContext, source); gernotbelger@9195: addJRTableData(exportContext, source); gernotbelger@9150: return design; gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: protected abstract String getJasperFile(); gernotbelger@9150: gernotbelger@9195: protected abstract void addJRTableHeader(ExportContextPDF exportContext, MetaAndTableJRDataSource source); gernotbelger@9150: gernotbelger@9195: private void addJRTableData(final ExportContextPDF exportContext, final MetaAndTableJRDataSource source) { gernotbelger@9150: gernotbelger@9150: final Collection rows = getRows(); gernotbelger@9150: gernotbelger@9150: for (final ResultRow row : rows) { gernotbelger@9150: gernotbelger@9195: final String[] formattedRow = formatPDFRow(exportContext, row); gernotbelger@9150: source.addData(formattedRow); gernotbelger@9150: } gernotbelger@9150: } gernotbelger@9150: }