gernotbelger@8946: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8946: * Software engineering by gernotbelger@8946: * Björnsen Beratende Ingenieure GmbH gernotbelger@8946: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8946: * gernotbelger@8946: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8946: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8946: * documentation coming with Dive4Elements River for details. gernotbelger@8946: */ gernotbelger@8946: package org.dive4elements.river.artifacts.sinfo.flowdepthminmax; gernotbelger@8946: gernotbelger@9150: import java.util.ArrayList; gernotbelger@8946: import java.util.Collection; gernotbelger@8946: gernotbelger@9150: import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; gernotbelger@9150: import org.dive4elements.river.artifacts.common.ExportContextCSV; gernotbelger@9195: import org.dive4elements.river.artifacts.common.ExportContextPDF; gernotbelger@9150: import org.dive4elements.river.artifacts.common.GeneralResultType; gernotbelger@9195: import org.dive4elements.river.artifacts.common.IExportContext; 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@8946: import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; gernotbelger@9150: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@8946: import org.dive4elements.river.artifacts.sinfo.util.WstInfo; gernotbelger@8946: gernotbelger@8946: /** gernotbelger@9067: * Contains the results of a {@link FloodDurationCalculation}. gernotbelger@8946: * gernotbelger@8946: * @author Gernot Belger gernotbelger@8946: */ gernotbelger@9195: final class FlowDepthMinMaxCalculationResult extends AbstractCalculationExportableResult { gernotbelger@8946: gernotbelger@8946: private static final long serialVersionUID = 1L; gernotbelger@9150: private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthminmax.jrxml"; gernotbelger@8946: gernotbelger@8993: private final BedHeightInfo sounding; gernotbelger@9150: private final WstInfo wst; gernotbelger@8946: gernotbelger@9150: public FlowDepthMinMaxCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding, final Collection rows) { gernotbelger@9150: super(label, rows); gernotbelger@9150: this.wst = wst; gernotbelger@8993: this.sounding = sounding; gernotbelger@8946: } gernotbelger@8946: gernotbelger@8993: public BedHeightInfo getSounding() { gernotbelger@8993: return this.sounding; gernotbelger@8950: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) { 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.flowdepthmin)); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthmax)); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit())); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge)); gernotbelger@9318: header.add(exportContextCSV.formatCsvHeader(GeneralResultType.waterlevelLabel)); gernotbelger@9318: header.add(exportContextCSV.formatCsvHeader(GeneralResultType.gaugeLabel)); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit())); gernotbelger@9150: header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel)); gernotbelger@9312: header.add(exportContextCSV.formatCsvHeader(GeneralResultType.location)); gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); gernotbelger@9150: gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) { gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVSoundingMetadata(this.sounding); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVWaterlevelMetadata(this.wst); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { gernotbelger@9150: gernotbelger@9195: return formatRow(exportContextCSV, row); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: protected String[] formatPDFRow(final ExportContextPDF exportContextPDF, final ResultRow row) { gernotbelger@9150: gernotbelger@9195: return formatRow(exportContextPDF, row); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected String getJasperFile() { gernotbelger@9150: return this.JASPER_FILE; gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) { gernotbelger@9150: gernotbelger@9150: /* column headings */ gernotbelger@9150: exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthmin_header", SInfoResultType.flowdepthmin); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthmax_header", SInfoResultType.flowdepthmax); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge); gernotbelger@9318: exportContextPDF.addJRMetadata(source, "waterlevel_name_header", GeneralResultType.waterlevelLabel); gernotbelger@9318: exportContextPDF.addJRMetadata(source, "gauge_header", GeneralResultType.gaugeLabel); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "sounding_name_header", SInfoResultType.soundingLabel); gernotbelger@9312: exportContextPDF.addJRMetadata(source, "location_header", GeneralResultType.location); gernotbelger@9150: gernotbelger@9150: } gernotbelger@9150: gernotbelger@9195: protected String[] formatRow(final IExportContext exportContextCSV, final ResultRow row) { gernotbelger@9150: gernotbelger@9150: final Collection lines = new ArrayList<>(10); gernotbelger@9150: gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station)); gernotbelger@9150: gernotbelger@9150: // REMARK: null check as pdf will call this with null and in that case we show all columns (to avoid multiple jasper gernotbelger@9150: // FIXME: does not work like this: we may have several pairs of min/max; so we need to look at all of them? gernotbelger@9150: // templates) gernotbelger@9150: // if (result == null || result.getMinSounding() != null) gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthmin)); gernotbelger@9150: // if (result == null || result.getMaxSounding() != null) gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthmax)); gernotbelger@9150: gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevel)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.discharge)); gernotbelger@9318: lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.waterlevelLabel)); gernotbelger@9318: lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.gaugeLabel)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.meanBedHeight)); gernotbelger@9150: lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.soundingLabel)); gernotbelger@9312: lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.location)); gernotbelger@9150: gernotbelger@9150: return lines.toArray(new String[lines.size()]); gernotbelger@9150: } gernotbelger@8946: }