gernotbelger@8854: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8877: * Software engineering by gernotbelger@8877: * Björnsen Beratende Ingenieure GmbH gernotbelger@8854: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8854: * gernotbelger@8854: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8854: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8854: * documentation coming with Dive4Elements River for details. gernotbelger@8854: */ gernotbelger@8854: package org.dive4elements.river.artifacts.sinfo.flowdepth; gernotbelger@8854: gernotbelger@9150: import java.util.ArrayList; gernotbelger@8854: import java.util.Collection; gernotbelger@8854: gernotbelger@9150: import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; gernotbelger@9150: import org.dive4elements.river.artifacts.common.ExportContextCSV; gernotbelger@9150: import org.dive4elements.river.artifacts.common.GeneralResultType; gernotbelger@9150: import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; gernotbelger@8997: import org.dive4elements.river.artifacts.common.ResultRow; gernotbelger@9150: import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; gernotbelger@8894: import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; gernotbelger@9150: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@8894: import org.dive4elements.river.artifacts.sinfo.util.WstInfo; gernotbelger@8894: gernotbelger@8854: /** gernotbelger@9067: * Contains the results of a {@link FloodDurationCalculation}. gernotbelger@8854: * gernotbelger@8854: * @author Gernot Belger gernotbelger@8854: */ gernotbelger@9150: final class FlowDepthCalculationResult extends AbstractCalculationExportableResult { gernotbelger@8854: gernotbelger@8877: private static final long serialVersionUID = 1L; gernotbelger@8854: gernotbelger@9150: private enum ExportMode { // TODO; nicht ständig kopieren gernotbelger@9150: pdf, csv gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepth.jrxml"; // TODO use jrxml-path all over the project gernotbelger@9150: gernotbelger@8877: private final BedHeightInfo sounding; gernotbelger@9150: private final WstInfo wst; gernotbelger@9150: private final boolean hasTkh; gernotbelger@8877: gernotbelger@8915: public FlowDepthCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding, final boolean hasTkh, gernotbelger@8997: final Collection rows) { gernotbelger@9150: super(label, rows); gernotbelger@8877: gernotbelger@8915: this.sounding = sounding; gernotbelger@9150: this.wst = wst; gernotbelger@9150: this.hasTkh = hasTkh; gernotbelger@8877: } gernotbelger@8877: gernotbelger@8877: public BedHeightInfo getSounding() { gernotbelger@8877: return this.sounding; gernotbelger@8877: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final RiverInfo river) { gernotbelger@9150: // getLog().info("FlowDepthExporter.writeCSVHeader"); gernotbelger@9150: gernotbelger@9150: final Collection header = new ArrayList<>(11); gernotbelger@9150: gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station)); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepth)); gernotbelger@9150: gernotbelger@9150: if (this.hasTkh()) { gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthtkh)); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.tkh)); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit())); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge)); gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel)); gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel)); gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(SInfoResultType.meanBedHeight)); gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel)); gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location)); gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); gernotbelger@9150: gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results) { gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVSoundingMetadata(this.sounding); gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeBlankLine();// .writeNext(new String[] { "" }); // break line gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVWaterlevelMetadata(this.wst); gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeBlankLine();// .writeNext(new String[] { "" }); // break line gernotbelger@9150: gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected String getJasperFile() { gernotbelger@9150: return JASPER_FILE; gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final ResultRow row) { gernotbelger@9150: return formatRow(ExportMode.csv, exportContextCSV, results, row); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthCalculationResults results, final ResultRow row) { gernotbelger@9150: gernotbelger@9150: return formatRow(ExportMode.pdf, exportContextPDF, results, row); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final FlowDepthCalculationResults results) { gernotbelger@9150: gernotbelger@9150: /* column headings */ gernotbelger@9150: exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepth_header", SInfoResultType.flowdepth); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepth_tkh_header", SInfoResultType.flowdepthtkh); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "tkh_header", SInfoResultType.tkh); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "waterlevel_name_header", SInfoResultType.waterlevelLabel); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "sounding_name_header", SInfoResultType.soundingLabel); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: public boolean hasTkh() { gernotbelger@9150: return this.hasTkh; gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: private String[] formatRow(final ExportMode mode, final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final ResultRow row) { gernotbelger@9150: gernotbelger@9150: final Collection lines = new ArrayList<>(11); gernotbelger@9150: gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepth)); gernotbelger@9150: gernotbelger@9150: if (mode == ExportMode.pdf || results.isUseTkh()) { gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthtkh)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.tkh)); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevel)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.discharge)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelLabel)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.meanBedHeight)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.soundingLabel)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location)); gernotbelger@9150: gernotbelger@9150: return lines.toArray(new String[lines.size()]); gernotbelger@9150: } gernotbelger@9150: gernotbelger@8854: }