view artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationExportableResult.java @ 9425:3f49835a00c3

Extended CrossSectionFacet so it may fetch different data from within the artifact result. Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author gernotbelger
date Fri, 17 Aug 2018 15:31:02 +0200
parents 49c0b687d22f
children 5f81d3f7b82b
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
 * Software engineering by
 *  Björnsen Beratende Ingenieure GmbH
 *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */
package org.dive4elements.river.artifacts.common;

import java.util.Collection;

import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;

import com.lowagie.text.html.HtmlEncoder;

import net.sf.jasperreports.engine.JRException;

/**
 * @author Domenico Nardi Tironi
 */
public abstract class AbstractCalculationExportableResult extends AbstractCalculationResult {

    private static final long serialVersionUID = 1L;

    public AbstractCalculationExportableResult(final String label, final Collection<ResultRow> rows) {
        super(label, rows);
    }

    public abstract void writeCSVHeader(ExportContextCSV exportContextCSV, final RiverInfo river);

    public final void writeCsv(final ExportContextCSV exportContextCSV) {

        writeCSVResultMetadata(exportContextCSV);
        // wenn resultsmetadata null sind!? keine neue zeile
        // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
        // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig

        /* now the value rows */
        final Collection<ResultRow> rows = getRows();
        for (final ResultRow row : rows)
            writeCSVRow(exportContextCSV, row);
    }

    protected abstract void writeCSVResultMetadata(final ExportContextCSV exportContextCSV);

    protected void writeCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) {
        final String[] formattedRow = formatCSVRow(exportContextCSV, row);
        exportContextCSV.writeCSVLine(formattedRow);
    }

    protected abstract String[] formatCSVRow(ExportContextCSV exportContextCSV, final ResultRow row);

    protected abstract String[] formatPDFRow(ExportContextPDF exportContextPDF, ResultRow row);

    public JasperDesigner addReport(final ExportContextPDF exportContext, final JasperReporter reporter, final MetaAndTableJRDataSource source)
            throws JRException {

        final JasperDesigner design = reporter.addReport(getJasperFile(), source);
        addJRTableHeader(exportContext, source);
        addJRTableData(exportContext, source);
        return design;
    }

    protected abstract String getJasperFile();

    protected abstract void addJRTableHeader(ExportContextPDF exportContext, MetaAndTableJRDataSource source);

    private void addJRTableData(final ExportContextPDF exportContext, final MetaAndTableJRDataSource source) {

        final Collection<ResultRow> rows = getRows();

        for (final ResultRow row : rows) {

            final String[] formattedRow = formatPDFRow(exportContext, row);

            final String[] encodedRow = new String[formattedRow.length];
            for (int i = 0; i < encodedRow.length; i++) {
                encodedRow[i] = HtmlEncoder.encode(formattedRow[i]);
            }

            source.addData(encodedRow);
        }
    }
}

http://dive4elements.wald.intevation.org