gernotbelger@8951: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8951: * Software engineering by gernotbelger@8951: * Björnsen Beratende Ingenieure GmbH gernotbelger@8951: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8951: * gernotbelger@8951: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8951: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8951: * documentation coming with Dive4Elements River for details. gernotbelger@8951: */ gernotbelger@8951: package org.dive4elements.river.artifacts.sinfo.flowdepthdev; gernotbelger@8951: gernotbelger@9150: import java.util.ArrayList; gernotbelger@8951: import java.util.Collection; gernotbelger@8951: 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@8951: import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; gernotbelger@9150: import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; gernotbelger@8951: import org.dive4elements.river.artifacts.sinfo.util.WstInfo; gernotbelger@8951: gernotbelger@8951: /** gernotbelger@9067: * Contains the results of a {@link FloodDurationCalculation}. gernotbelger@8951: * gernotbelger@8951: * @author Gernot Belger gernotbelger@8951: */ gernotbelger@9195: final class FlowDepthDevelopmentCalculationResult extends AbstractCalculationExportableResult { gernotbelger@8951: gernotbelger@8951: private static final long serialVersionUID = 1L; gernotbelger@8951: gernotbelger@9150: private static final String CSV_META_HEADER_SOUNDING_CURRENT = "sinfo.export.csv.meta.header.sounding.current"; gernotbelger@9150: gernotbelger@9150: private static final String CSV_META_HEADER_SOUNDING_HISTORICAL = "sinfo.export.csv.meta.header.sounding.historical"; gernotbelger@9150: gernotbelger@9150: private static final String CSV_META_HEADER_WATERLEVEL_CURRENT = "sinfo.export.csv.meta.header.waterlevel.current"; gernotbelger@9150: gernotbelger@9150: private static final String CSV_META_HEADER_WATERLEVEL_HISTORICAL = "sinfo.export.csv.meta.header.waterlevel.historical"; gernotbelger@9150: gernotbelger@9150: private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthdevelopment.jrxml"; gernotbelger@9150: gernotbelger@8951: private final BedHeightInfo currentSounding; gernotbelger@8951: gernotbelger@8951: private final BedHeightInfo historicalSounding; gernotbelger@8951: gernotbelger@8951: private final WstInfo historicalWst; gernotbelger@8951: gernotbelger@8951: private final WstInfo currentWst; gernotbelger@8951: gernotbelger@8951: public FlowDepthDevelopmentCalculationResult(final String label, final WstInfo currentWst, final WstInfo historicalWst, final BedHeightInfo currentSounding, gernotbelger@9150: final BedHeightInfo historicalSounding, final Collection rows) { gernotbelger@9150: super(label, rows); gernotbelger@8951: gernotbelger@8951: this.currentWst = currentWst; gernotbelger@8951: this.historicalWst = historicalWst; gernotbelger@8951: gernotbelger@8951: this.currentSounding = currentSounding; gernotbelger@8951: this.historicalSounding = historicalSounding; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: public WstInfo getCurrentWst() { gernotbelger@8951: return this.currentWst; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: public WstInfo getHistoricalWst() { gernotbelger@8951: return this.historicalWst; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: public BedHeightInfo getCurrentSounding() { gernotbelger@8951: return this.currentSounding; gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: public BedHeightInfo getHistoricalSounding() { gernotbelger@8951: return this.historicalSounding; gernotbelger@8951: } gernotbelger@8953: gernotbelger@8953: public String getWaterlevelDifferenceLabel() { gernotbelger@8953: return new StringBuilder(). // gernotbelger@8953: append(this.currentWst.getLabel()). // gernotbelger@8953: append(" - "). // gernotbelger@8953: append(this.historicalWst.getLabel()). // gernotbelger@8953: toString(); gernotbelger@8953: } gernotbelger@8953: gernotbelger@8953: public String getBedHeightDifferenceLabel() { gernotbelger@8953: return new StringBuilder(). // gernotbelger@8953: append(this.currentSounding.getDescription()). // gernotbelger@8953: append(" - "). // gernotbelger@8953: append(this.historicalSounding.getDescription()). // gernotbelger@8953: toString(); gernotbelger@8953: } gernotbelger@8953: gernotbelger@8953: public String getFlowDepthCurrentLabel() { gernotbelger@8953: return new StringBuilder(). // gernotbelger@8953: append(this.currentWst.getLabel()). // gernotbelger@8953: append(" - "). // gernotbelger@8953: append(this.currentSounding.getDescription()). // gernotbelger@8953: toString(); gernotbelger@8953: } gernotbelger@8953: gernotbelger@8953: public String getFlowDepthHistoricalLabel() { gernotbelger@8953: return new StringBuilder(). // gernotbelger@8953: append(this.historicalWst.getLabel()). // gernotbelger@8953: append(" - "). // gernotbelger@8953: append(this.historicalSounding.getDescription()). // gernotbelger@8953: toString(); gernotbelger@8953: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) { gernotbelger@9150: gernotbelger@9150: exportContextCSV.writeCSVSoundingMetadata(getCurrentSounding(), CSV_META_HEADER_SOUNDING_CURRENT); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: exportContextCSV.writeCSVWaterlevelMetadata(getCurrentWst(), CSV_META_HEADER_WATERLEVEL_CURRENT); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: exportContextCSV.writeCSVSoundingMetadata(getHistoricalSounding(), CSV_META_HEADER_SOUNDING_HISTORICAL); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: exportContextCSV.writeCSVWaterlevelMetadata(getHistoricalWst(), CSV_META_HEADER_WATERLEVEL_HISTORICAL); gernotbelger@9150: exportContextCSV.writeBlankLine(); gernotbelger@9150: gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9150: protected String getJasperFile() { gernotbelger@9150: return JASPER_FILE; gernotbelger@9150: } gernotbelger@9150: gernotbelger@9195: protected String[] formatRow(final IExportContext exportContext, final ResultRow row) { gernotbelger@9150: gernotbelger@9150: final Collection lines = new ArrayList<>(10); gernotbelger@9150: gernotbelger@9195: lines.add(exportContext.formatRowValue(row, GeneralResultType.station)); gernotbelger@9195: lines.add(exportContext.formatRowValue(row, SInfoResultType.flowdepthDevelopment)); gernotbelger@9195: lines.add(exportContext.formatRowValue(row, SInfoResultType.flowdepthDevelopmentPerYear)); gernotbelger@9195: lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevelDifference)); gernotbelger@9195: lines.add(exportContext.formatRowValue(row, SInfoResultType.bedHeightDifference)); gernotbelger@9195: lines.add(exportContext.formatRowValue(row, SInfoResultType.flowdepthCurrent)); gernotbelger@9195: lines.add(exportContext.formatRowValue(row, SInfoResultType.flowdepthHistorical)); gernotbelger@9312: lines.add(exportContext.formatRowValue(row, GeneralResultType.location)); gernotbelger@9150: gernotbelger@9150: return lines.toArray(new String[lines.size()]); gernotbelger@9150: } 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.flowdepthDevelopment, SInfoResultType.flowdepthDevelopment.getUnit())); gernotbelger@9150: header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthDevelopmentPerYear, SInfoResultType.flowdepthDevelopmentPerYear.getUnit())); gernotbelger@9150: header.add(exportContextCSV.msgUnitLabel(SInfoResultType.waterlevelDifference, getWaterlevelDifferenceLabel())); gernotbelger@9150: header.add(exportContextCSV.msgUnitLabel(SInfoResultType.bedHeightDifference, getBedHeightDifferenceLabel())); gernotbelger@9150: header.add(exportContextCSV.msgUnitLabel(SInfoResultType.flowdepthCurrent, getFlowDepthCurrentLabel())); gernotbelger@9150: header.add(exportContextCSV.msgUnitLabel(SInfoResultType.flowdepthHistorical, getFlowDepthHistoricalLabel())); 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 String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { gernotbelger@9150: gernotbelger@9195: return this.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 this.formatRow(exportContextPDF, row); gernotbelger@9150: } gernotbelger@9150: gernotbelger@9150: @Override gernotbelger@9195: protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) { gernotbelger@9150: /* column headings */ gernotbelger@9150: exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear); gernotbelger@9150: gernotbelger@9150: exportContextPDF.addJRMetadata(source, "waterleveldifference_header", SInfoResultType.waterlevelDifference); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "waterleveldifference_header2", getWaterlevelDifferenceLabel()); gernotbelger@9150: gernotbelger@9150: exportContextPDF.addJRMetadata(source, "bedheightdifference_header", SInfoResultType.bedHeightDifference); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "bedheightdifference_header2", getBedHeightDifferenceLabel()); gernotbelger@9150: gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthcurrent_header", SInfoResultType.flowdepthCurrent); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthcurrent_header2", getFlowDepthCurrentLabel()); gernotbelger@9150: gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthhistorical_header", SInfoResultType.flowdepthHistorical); gernotbelger@9150: exportContextPDF.addJRMetadata(source, "flowdepthhistorical_header2", getFlowDepthHistoricalLabel()); gernotbelger@9150: gernotbelger@9312: exportContextPDF.addJRMetadata(source, "location_header", GeneralResultType.location); gernotbelger@9150: gernotbelger@9150: } gernotbelger@8951: }