Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java @ 9176:1614cb14308f
Work on calculations for S-Info flood duration workflow
author | mschaefer |
---|---|
date | Mon, 25 Jun 2018 19:21:11 +0200 |
parents | 9b2e46090099 |
children | a4121ec450d6 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java Mon Jun 25 17:58:11 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java Mon Jun 25 19:21:11 2018 +0200 @@ -9,191 +9,115 @@ */ package org.dive4elements.river.artifacts.sinfo.flood_duration; -import java.text.NumberFormat; import java.util.ArrayList; import java.util.Collection; -import java.util.List; +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; import org.dive4elements.river.artifacts.common.ExportContextCSV; import org.dive4elements.river.artifacts.common.GeneralResultType; import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; import org.dive4elements.river.artifacts.common.ResultRow; -import org.dive4elements.river.artifacts.sinfo.common.AbstractTkhCalculationResult; import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; -import org.dive4elements.river.artifacts.sinfo.util.WstInfo; /** - * Contains the results of a {@link FloodDurationCalculation}. + * Contains the result of a {@link FloodDurationCalculation}. * * @author Gernot Belger */ -final class FloodDurationCalculationResult extends AbstractTkhCalculationResult<FloodDurationCalculationResults> { +final class FloodDurationCalculationResult extends AbstractCalculationExportableResult<FloodDurationCalculationResults> { private static final long serialVersionUID = 1L; - private final int waterlevelCount; // TODO: ggf 2 verschiedene Result-Klassen? - // private final WstInfo wstInfo; - private final int maxWaterlevelPdf = 3; - private enum ExportMode { - pdf, csv + private static final String JASPER_FILE = "/jasper/templates/sinfo.floodduration.jrxml"; + + + public FloodDurationCalculationResult(final String label, final Collection<ResultRow> rows) { + super(label, rows); } - public FloodDurationCalculationResult(final String label, final WstInfo wstInfo, final Collection<ResultRow> rows, final boolean hasTkh, - final int waterlevelCount) { - super(label, wstInfo, hasTkh, rows); - this.waterlevelCount = waterlevelCount; - // this.wstInfo = wstInfo; + + @Override + protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results) { + // TODO Metadaten der Wasserspiegellage(n) falls gewählt + // exportContextCSV.writeCSVWaterlevelMetadata(this.wstInfo); + // exportContextCSV.writeBlankLine(); + // writer.writeNext(new String[] { "" }); // break line + } + + @Override + protected String getJasperFile() { + // TODO Variante mit Wasserspiegellage(n) + return JASPER_FILE; + } + + protected String[] formatRow(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results, final ResultRow row) { + + final Collection<String> lines = new ArrayList<>(10); + + lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station)); + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.riverside)); + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.floodDuration)); + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.floodDischarge)); + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.infrastructureHeight)); + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.infrastructuretype)); + + // TODO Wasserspiegellage(n) und Dauerzahlen falls gewählt + + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel)); + lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location)); + + return lines.toArray(new String[lines.size()]); } @Override public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results, final RiverInfo river) { - final Collection<String> header = new ArrayList<>(99); + final Collection<String> header = new ArrayList<>(20); header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station)); header.add(exportContextCSV.formatCsvHeader(SInfoResultType.riverside)); - header.add(exportContextCSV.formatCsvHeader(SInfoResultType.inundationduration)); - header.add(exportContextCSV.formatCsvHeader(SInfoResultType.inundationdurationq)); - header.add(exportContextCSV.formatCsvHeader(SInfoResultType.infrastructureHeight)); + header.add(exportContextCSV.formatCsvHeader(SInfoResultType.floodDuration)); + header.add(exportContextCSV.msgUnitCSV(SInfoResultType.floodDischarge, SInfoResultType.floodDischarge.getUnit())); + header.add(exportContextCSV.msgUnitCSV(SInfoResultType.infrastructureHeight, SInfoResultType.infrastructureHeight.getUnit())); header.add(exportContextCSV.formatCsvHeader(SInfoResultType.infrastructuretype)); - // add dynamic headers - final int waterlevelCount = // results. - getWaterlevelCount(); - for (int i = 0; i < waterlevelCount; i++) { - final int naturalIndex = i + 1; - final String appendIndex = new StringBuilder().append("_").append(naturalIndex).toString(); - final Object[] args = new Object[] { appendIndex }; - // new StringBuilder().append('\u2081').toString(); // schlechter UTF-8-Support für subscript ints - header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderW(), new Object[] { appendIndex, "results.getRiver().getWstUnit()" })); - header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args)); - header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderQ(), args)); - header.add(exportContextCSV.msg(DurationWaterlevel.getHeaderBezeichn(), args)); - } + // TODO Je vier Spalten der bis zu drei Wasserspiegellagen header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel)); header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location)); exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); - } - - @Override - protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results) { - - exportContextCSV.writeCSVWaterlevelMetadata(super.getWst()); // -> export in super? -> TODO - exportContextCSV.writeBlankLine(); - // writer.writeNext(new String[] { "" }); // break line } @Override protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results, final ResultRow row) { - // TODO Auto-generated method stub - return formatRow(exportContextCSV, results, row, ExportMode.csv); - } - - @Override - protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results, final ResultRow row) { - return formatRow(exportContextCSV, results, row, ExportMode.pdf); - } - - @Override - protected String getJasperFile() { - if (this.waterlevelCount <= 1) - return "/jasper/templates/sinfo.floodduration.jrxml"; // TODO 2 different result-classes? - else - return "/jasper/templates/sinfo.floodduration2.jrxml"; + return this.formatRow(exportContextCSV, results, row); } @Override - protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, - final FloodDurationCalculationResults results) { - /* column headings */ - exportContextCSV.addJRMetadata(source, "station_header", GeneralResultType.station); - exportContextCSV.addJRMetadata(source, "riverside_header", SInfoResultType.riverside); - exportContextCSV.addJRMetadata(source, "inundationduration_header", SInfoResultType.inundationduration); - exportContextCSV.addJRMetadata(source, "inundationduration_q_header", SInfoResultType.inundationdurationq); - exportContextCSV.addJRMetadata(source, "infrastructure_height_header", SInfoResultType.infrastructureHeightFloodDur); - exportContextCSV.addJRMetadata(source, "infrastructure_type_header", SInfoResultType.infrastructuretype); - - // add dynamic headers - - if (this.waterlevelCount == 0 || this.waterlevelCount == 2) { - source.addMetaData("dummy", "dummy"); - source.addMetaData("dummy", "dummy"); - source.addMetaData("dummy", "dummy"); - source.addMetaData("dummy", "dummy"); - } + protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FloodDurationCalculationResults results, final ResultRow row) { - for (int i = 0; i < this.waterlevelCount; i++) { - final int naturalIndex = i + 1; - - final Object[] args = new String[] { new StringBuilder().append("_").append(naturalIndex).toString() }; - exportContextCSV.addJRMetadata(source, getPdfHeader("w", naturalIndex), exportContextCSV.msg(DurationWaterlevel.getHeaderW(), args)); - exportContextCSV.addJRMetadata(source, getPdfHeader("duration", naturalIndex), - exportContextCSV.msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args)); - exportContextCSV.addJRMetadata(source, getPdfHeader("q", naturalIndex), exportContextCSV.msg(DurationWaterlevel.getHeaderQ(), args)); - exportContextCSV.addJRMetadata(source, getPdfHeader("bezeichnung", naturalIndex), - exportContextCSV.msg(DurationWaterlevel.getHeaderBezeichn(), args)); - - } - - exportContextCSV.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel); - exportContextCSV.addJRMetadata(source, "location_header", SInfoResultType.location); - - } - - public int getWaterlevelCount() { // der exporter muss daran, um spalten auszublenden - return this.waterlevelCount; + return this.formatRow(exportContextPDF, results, row); } - private String[] formatRow(final ExportContextCSV exportContextCSV, final FloodDurationCalculationResults results, final ResultRow row, - final ExportMode mode) { - - final Collection<String> lines = new ArrayList<>(99); - - lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station)); - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.riverside)); - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.inundationduration)); - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.inundationdurationq)); - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.infrastructureHeight)); - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.infrastructuretype)); - - final List<DurationWaterlevel> waterlevelList = (List<DurationWaterlevel>) row.getValue(SInfoResultType.customMultiRowColWaterlevel); - if (waterlevelList != null) { - final NumberFormat wFormatter = exportContextCSV.getFlowDepthFormatter(); - final NumberFormat qFormatter = exportContextCSV.getQFormatter(); - - for (int i = 0; i < waterlevelList.size(); i++) { - - if (i == this.maxWaterlevelPdf && mode == ExportMode.pdf) - break; + @Override + protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, + final FloodDurationCalculationResults results) { - final DurationWaterlevel item = waterlevelList.get(i); - lines.add(item.getWFormatted(wFormatter)); - lines.add(item.getFloodDurDaysPerYearFormatted()); - lines.add(item.getQFormatted(qFormatter)); - lines.add(item.getBezeichnung()); - } - } + /* column headings */ + exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); + exportContextPDF.addJRMetadata(source, "riverside_header", SInfoResultType.riverside); + exportContextPDF.addJRMetadata(source, "inundationduration_header", SInfoResultType.floodDuration); + exportContextPDF.addJRMetadata(source, "inundationduration_q_header", SInfoResultType.floodDischarge); + exportContextPDF.addJRMetadata(source, "infrastructure_height_header", SInfoResultType.infrastructureHeightFloodDur); + exportContextPDF.addJRMetadata(source, "infrastructure_type_header", SInfoResultType.infrastructuretype); - if ((this.waterlevelCount == 0 || this.waterlevelCount == 2) && mode == ExportMode.pdf) { - lines.add("dummy"); - lines.add("dummy"); - lines.add("dummy"); - lines.add("dummy"); - } + // TODO Je vier Spalten der bis zu drei Wasserspiegellagen - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel)); - lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location)); - return lines.toArray(new String[lines.size()]); - } - - private String getPdfHeader(final String rootStr, final int index) { - final String hd = "_header"; - final StringBuilder builder = new StringBuilder(); - return builder.append(rootStr).append("_").append(index).append(hd).toString(); + exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel); + exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location); } } \ No newline at end of file