gernotbelger@9151: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9151: * Software engineering by gernotbelger@9151: * Björnsen Beratende Ingenieure GmbH gernotbelger@9151: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9151: * gernotbelger@9151: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9151: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9151: * documentation coming with Dive4Elements River for details. gernotbelger@9151: */ gernotbelger@9151: package org.dive4elements.river.artifacts.common; gernotbelger@9151: gernotbelger@9151: import java.io.OutputStream; gernotbelger@9151: gernotbelger@9151: import org.apache.log4j.Logger; gernotbelger@9151: import org.dive4elements.artifacts.CallContext; gernotbelger@9151: import org.dive4elements.river.artifacts.model.CalculationResult; gernotbelger@9151: import org.dive4elements.river.exports.AbstractExporter; gernotbelger@9151: import org.w3c.dom.Document; gernotbelger@9151: gernotbelger@9151: import au.com.bytecode.opencsv.CSVWriter; gernotbelger@9151: gernotbelger@9151: /** gernotbelger@9151: * @author Gernot Belger gernotbelger@9151: */ gernotbelger@9151: public abstract class AbstractCommonExporter extends AbstractExporter { gernotbelger@9151: gernotbelger@9151: /** The log used in this exporter. */ gernotbelger@9151: private final Logger log = Logger.getLogger(getClass()); gernotbelger@9151: gernotbelger@9151: /** The log used in this exporter. */ gernotbelger@9151: protected final Logger getLog() { gernotbelger@9151: return this.log; gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: private RESULTS results = null; gernotbelger@9151: gernotbelger@9151: private ExportContextPDF helper; gernotbelger@9151: gernotbelger@9151: @Override gernotbelger@9151: public void init(final String outName, final Document request, final OutputStream out, final CallContext context) { gernotbelger@9151: super.init(outName, request, out, context); gernotbelger@9151: gernotbelger@9151: this.helper = new ExportContextPDF(context); // bleibt so asynchron zu ExportContextCSV - ist so beabsichtigt gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: protected final ExportContextPDF getHelper() { gernotbelger@9151: return this.helper; gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: @Override gernotbelger@9151: protected final void addData(final Object d) { gernotbelger@9151: /* reset */ gernotbelger@9151: this.results = null; gernotbelger@9151: gernotbelger@9151: if (d instanceof CalculationResult) { gernotbelger@9151: gernotbelger@9151: final Object dat = ((CalculationResult) d).getData(); gernotbelger@9151: if (dat != null) { gernotbelger@9151: @SuppressWarnings("unchecked") gernotbelger@9151: final RESULTS result = (RESULTS) dat; gernotbelger@9151: this.results = result; gernotbelger@9151: } gernotbelger@9151: } gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: protected final RESULTS getResults() { gernotbelger@9151: return this.results; gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: protected final AbstractCalculationResults getResults2() { gernotbelger@9151: return this.results; gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: @Override gernotbelger@9151: protected final void writeCSVData(final CSVWriter writer) { gernotbelger@9151: doWriteCSVData(writer, this.results); gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: protected abstract void doWriteCSVData(CSVWriter writer, RESULTS results); gernotbelger@9151: gernotbelger@9151: /** gernotbelger@9151: * Formats header with unit and label: msg [unit] (label) gernotbelger@9151: */ gernotbelger@9151: // TODO: REMOVE, because it has moved to ExportContextCSV gernotbelger@9151: protected final String msgUnitLabel(final String key, final String unit, final String label) { gernotbelger@9151: final String msg = msg(key); gernotbelger@9151: return String.format("%s [%s] (%s)", msg, unit, label); gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: @Override gernotbelger@9151: protected final void writePDF(final OutputStream out) { gernotbelger@9151: doWritePdf(out, this.results); gernotbelger@9151: } gernotbelger@9151: gernotbelger@9151: protected abstract void doWritePdf(OutputStream out, RESULTS results); gernotbelger@9151: }