# HG changeset patch # User gernotbelger # Date 1532704767 -7200 # Node ID 0a0937f33bb5568ef6f5f6df47d3b631cefbdee9 # Parent 6a77589237627e6b0e1fdfb07e4ac585f3dc5b4e bundu.bezugswst first result for missing volume added diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/doc/conf/jasper/templates/bundu.bezugswst.jrxml --- a/artifacts/doc/conf/jasper/templates/bundu.bezugswst.jrxml Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/doc/conf/jasper/templates/bundu.bezugswst.jrxml Fri Jul 27 17:19:27 2018 +0200 @@ -1,6 +1,6 @@ - + @@ -8,6 +8,8 @@ + + @@ -135,31 +137,31 @@ - + - + - + - + - + @@ -180,7 +182,7 @@ - + @@ -191,7 +193,7 @@ - + @@ -202,7 +204,7 @@ - + @@ -213,7 +215,7 @@ - + @@ -224,7 +226,7 @@ - + @@ -242,12 +244,12 @@ - + - + diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/doc/conf/jasper/templates/bundu.bezugswst.result1.jrxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/jasper/templates/bundu.bezugswst.result1.jrxml Fri Jul 27 17:19:27 2018 +0200 @@ -0,0 +1,404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="30" splitType="Stretch"> + <textField> + <reportElement style="htmlStyle" x="0" y="0" width="515" height="30"/> + <textElement> + <font size="18"/> + </textElement> + <textFieldExpression><![CDATA[$F{meta:bezugswst_result_header}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml --- a/artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml Fri Jul 27 17:19:27 2018 +0200 @@ -1,6 +1,6 @@ - + diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduResultType.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduResultType.java Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/BunduResultType.java Fri Jul 27 17:19:27 2018 +0200 @@ -26,10 +26,15 @@ super(unit, csvHeader, pdfHeader); } + protected BunduResultType(final String unit, final String csvHeader) { + super(unit, csvHeader, csvHeader); + } + private static final long serialVersionUID = 1L; - public static final BunduResultType bezugswst = new BunduResultType(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, "bundu.wst.export.csv.meta.header.bezugswst", - "bundu.wst.export.csv.meta.header.bezugswst") { // UNIT needed? + public static final BunduResultType bezugswst = new BunduResultType(I18NStrings.UNIT_NONE, "bundu.wst.export.csv.meta.header.bezugswst", + "bundu.wst.export.pdf.meta.header.bezugswst") { // Unit + // dynamic private static final long serialVersionUID = 1L; @Override @@ -44,4 +49,189 @@ } }; + public static final BunduResultType sounding = new BunduResultType(I18NStrings.UNIT_NONE, "bundu.export.bezugswst.csv.meta.miss.sounding") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + return exportStringValue(value); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + throw new UnsupportedOperationException(); + } + }; + + public static final BunduResultType channelLowerEdge = new BunduResultType(I18NStrings.UNIT_NONE, "bundu.export.bezugswst.csv.meta.miss.channel.lower_edge", + "bundu.export.bezugswst.pdf.meta.miss.channel.lower_edge") { // Unit dynamic + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType channelMinDepth = new BunduResultType(I18NStrings.UNIT_M, "bundu.export.bezugswst.csv.meta.miss.channel.min_depth", + "bundu.export.bezugswst.pdf.meta.miss.channel.min_depth") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType hasMissingDepth = new BunduResultType(I18NStrings.UNIT_NONE, "bundu.export.bezugswst.csv.meta.miss.exists", + "bundu.export.bezugswst.pdf.meta.miss.exists") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + return exportStringValue(value); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + throw new UnsupportedOperationException(); + } + }; + public static final BunduResultType missVolume = new BunduResultType(I18NStrings.UNIT_CUBIC_M, "bundu.export.bezugswst.csv.meta.miss.volume") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType missMass = new BunduResultType(I18NStrings.UNIT_TON, "bundu.export.bezugswst.csv.meta.miss.mass", + "bundu.export.bezugswst.csv.meta.miss.mass") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType excavationVolume = new BunduResultType(I18NStrings.UNIT_CUBIC_M, "bundu.export.bezugswst.csv.meta.miss.excavation", + "bundu.export.bezugswst.pdf.meta.miss.excavation") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType excavationCosts = new BunduResultType(I18NStrings.UNIT_EURO, "bundu.export.bezugswst.csv.meta.miss.costs", + "bundu.export.bezugswst.pdf.meta.miss.costs") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType channelWidth = new BunduResultType(I18NStrings.UNIT_M, "bundu.export.bezugswst.csv.meta.miss.channel.width", + "bundu.export.bezugswst.pdf.meta.miss.channel.width") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType density = new BunduResultType(I18NStrings.UNIT_M, "bundu.export.bezugswst.csv.meta.miss.density", + "bundu.export.bezugswst.pdf.meta.miss.density") { + private static final long serialVersionUID = 1L; + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType field = new BunduResultType(I18NStrings.UNIT_NONE, "bundu.export.bezugswst.csv.meta.miss.field") { + private static final long serialVersionUID = 1L; // unit steht in der zelle jedesmal: z.B. 1125 [m³] / 1912.5 [t] (Dezimaltrennzeichen bwt) + // ist warscheinlich schwierig mit dem Replacement von "{0}" + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; + + public static final BunduResultType meanBedheight = new BunduResultType(I18NStrings.UNIT_NONE, "bundu.export.bezugswst.csv.meta.miss.mean_bedheight") { + private static final long serialVersionUID = 1L; // unit steht in der zelle jedesmal: z.B. 1125 [m³] / 1912.5 [t] (Dezimaltrennzeichen bwt) + + @Override + public String exportValue(final CallContext context, final Object value) { + final double doubleValue = asDouble(value); + return exportDoubleValue(context, doubleValue); + } + + @Override + protected NumberFormat createFormatter(final CallContext context) { + return Formatter.getWaterlevelQ(context); // Richtiges Format? TODO check! + } + }; } \ No newline at end of file diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculation.java Fri Jul 27 17:19:27 2018 +0200 @@ -13,6 +13,7 @@ import java.util.List; import org.dive4elements.artifacts.CallContext; +import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.artifacts.bundu.BUNDUArtifact; import org.dive4elements.river.artifacts.bundu.BunduResultType; import org.dive4elements.river.artifacts.common.GeneralResultType; @@ -38,13 +39,13 @@ public CalculationResult calculate(final BUNDUArtifact bunduartifact) { final String user = CalculationUtils.findArtifactUser(this.context, bunduartifact); - + final CallMeta m = this.context.getMeta(); /* access input data */ final BunduAccess access = new BunduAccess(bunduartifact); final River river = access.getRiver(); final RiverInfo riverInfo = new RiverInfo(river); - final String calcModeLabel = Resources.getMsg(this.context.getMeta(), "bundu_bezugswst"); + final String calcModeLabel = Resources.getMsg(m, "bundu_bezugswst"); final BezugswstCalculationResults results = new BezugswstCalculationResults(calcModeLabel, user, riverInfo, access.getRange()); // TODO: get wst, sounding for river @@ -60,6 +61,7 @@ final double[] qs = access.getQs(); final Double missingVolFrom = access.getMissingVolFrom(); final Double missingVolTo = access.getMissingVolTo(); + final List list = new ArrayList<>(); final ResultRow row = ResultRow.create(); row.putValue(GeneralResultType.station, 666.666); @@ -70,9 +72,39 @@ row.putValue(GeneralResultType.location, "keine Lage"); list.add(row); - final BezugswstCalculationResult result = new BezugswstCalculationResult("label? was fürn label?", list, sounding, wstInfo, function, preprocessing, - startYear, endYear, ud, qs, missingVolFrom, missingVolTo); + final BezugswstMainCalculationResult result = new BezugswstMainCalculationResult("label? was fürn label?", list, sounding, wstInfo, function, + preprocessing, startYear, endYear, ud, qs, missingVolFrom, missingVolTo); results.addResult(result, null); + + // missing volume calculation + if (access.getMissingVolFrom() != null) { + + final List listResult1 = new ArrayList<>(); + final ResultRow rowResult1 = ResultRow.create(); + rowResult1.putValue(BunduResultType.bezugswst, 45.15); + rowResult1.putValue(GeneralResultType.dischargeQwithUnit, 890); + rowResult1.putValue(GeneralResultType.waterlevelLabel, "GLQ"); + rowResult1.putValue(GeneralResultType.gaugeLabel, "Bonn"); + + rowResult1.putValue(BunduResultType.sounding, "NIEDERRHEIN_QP-2002"); + rowResult1.putValue(BunduResultType.channelLowerEdge, 42.65); + rowResult1.putValue(BunduResultType.channelMinDepth, 2.5); + rowResult1.putValue(BunduResultType.hasMissingDepth, Resources.getMsg(m, "true")); + rowResult1.putValue(BunduResultType.missVolume, 2250); + rowResult1.putValue(BunduResultType.missMass, 3897); + rowResult1.putValue(BunduResultType.excavationVolume, 2475); + rowResult1.putValue(BunduResultType.excavationCosts, 999.99); + rowResult1.putValue(BunduResultType.channelWidth, 150); + rowResult1.putValue(BunduResultType.density, 1732); + + rowResult1.putValue(GeneralResultType.location, "Spitzenlage"); + listResult1.add(rowResult1); + + final BezugswstMissVolCalculationResult1 r1 = new BezugswstMissVolCalculationResult1( + Resources.getMsg(m, "bundu.export.csv.title.bezugswst.result1"), listResult1); + results.addResult(r1, null); + } + return new CalculationResult(results, null);// problems); } diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculationResult.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculationResult.java Fri Jul 27 16:19:09 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde - * Software engineering by - * Björnsen Beratende Ingenieure GmbH - * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt - * - * This file is Free Software under the GNU AGPL (>=v3) - * and comes with ABSOLUTELY NO WARRANTY! Check out the - * documentation coming with Dive4Elements River for details. - */ -package org.dive4elements.river.artifacts.bundu.bezugswst; - -import java.util.ArrayList; -import java.util.Collection; - -import org.dive4elements.river.artifacts.bundu.BunduResultType; -import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; -import org.dive4elements.river.artifacts.common.ExportContextCSV; -import org.dive4elements.river.artifacts.common.ExportContextPDF; -import org.dive4elements.river.artifacts.common.GeneralResultType; -import org.dive4elements.river.artifacts.common.IExportContext; -import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; -import org.dive4elements.river.artifacts.common.ResultRow; -import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; -import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; -import org.dive4elements.river.artifacts.sinfo.util.WstInfo; - -/** - * Contains the results of a //TODO LINK{@link BezugswstCalculation}. - * - * @author Gernot Belger - */ -final class BezugswstCalculationResult extends AbstractCalculationExportableResult { - - private static final long serialVersionUID = 1L; - - private static final String JASPER_FILE = "/jasper/templates/bundu.bezugswst.jrxml"; - - private final WstInfo wst; - private final BedHeightInfo sounding; - private final String function; - private final boolean preprocessing; - private final int startYear; - private final int endYear; - private final Double missingVolumeFrom; - private final Double missingVolumeTo; - private final Integer ud; - private final double[] qOfGauges; - - public BezugswstCalculationResult(final String label, final Collection rows, final BedHeightInfo sounding, final WstInfo wst, - final String function, final boolean preprocessing, final int startYear, final int endYear, final Integer ud, final double[] qOfGauges, - final Double missingVolumeFrom, final Double missingVolumeTo) { - super(label, rows); - this.wst = wst; - this.sounding = sounding; - this.function = function; - this.preprocessing = preprocessing; - this.startYear = startYear; - this.endYear = endYear; - this.missingVolumeTo = missingVolumeTo; - this.missingVolumeFrom = missingVolumeFrom; - this.ud = ud; - this.qOfGauges = qOfGauges; - } - - @Override - protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) { - - // TODO: wenn wst und peilung vorhanden sind, sollte dieser Teil wieder einkommentiert werden - // exportContextCSV.writeCSVWaterlevelMetadata(wst); - // exportContextCSV.writeBlankLine(); - // exportContextCSV.writeCSVSoundingMetadata(this.sounding, " "); - - // Reihenfolge in der LV anders; ich finde sie aber so sinnvoller - exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.function", this.function); - exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.preprocessing", String.valueOf(this.preprocessing)); - exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.q_period", String.valueOf(this.startYear), String.valueOf(this.endYear)); - if (this.ud != null) - exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.ud", this.ud); - else if (this.qOfGauges != null) - exportContextCSV.writeCSVMetaEntry("common.export.waterlevel.csv.meta.q", this.qOfGauges); // was auch immer dieser String beinhalten mag - - exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.function", this.function); - exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.missing_volume_range", this.missingVolumeFrom, this.missingVolumeTo); - - exportContextCSV.writeBlankLine(); - } - - @Override - protected String getJasperFile() { - return JASPER_FILE; - } - - protected String[] formatRow(final IExportContext exportContext, final ResultRow row) { - - final Collection lines = new ArrayList<>(10); - - lines.add(exportContext.formatRowValue(row, GeneralResultType.station)); - lines.add(exportContext.formatRowValue(row, BunduResultType.bezugswst)); - lines.add(exportContext.formatRowValue(row, GeneralResultType.dischargeQwithUnit)); - - lines.add(exportContext.formatRowValue(row, GeneralResultType.waterlevelLabel)); - lines.add(exportContext.formatRowValue(row, GeneralResultType.gaugeLabel)); - lines.add(exportContext.formatRowValue(row, GeneralResultType.location)); - - return lines.toArray(new String[lines.size()]); - } - - @Override - public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) { - - final Collection header = new ArrayList<>(11); - - header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station)); - header.add(exportContextCSV.formatCsvHeader(BunduResultType.bezugswst)); - header.add(exportContextCSV.formatCsvHeader(GeneralResultType.dischargeQwithUnit)); - header.add(exportContextCSV.formatCsvHeader(GeneralResultType.waterlevelLabel)); - header.add(exportContextCSV.formatCsvHeader(GeneralResultType.gaugeLabel)); - header.add(exportContextCSV.formatCsvHeader(GeneralResultType.location)); - - exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); - - } - - @Override - protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { - - return this.formatRow(exportContextCSV, row); - } - - @Override - protected String[] formatPDFRow(final ExportContextPDF exportContextPDF, final ResultRow row) { - - return this.formatRow(exportContextPDF, row); - } - - @Override - protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) { - /* column headings */ - exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); - exportContextPDF.addJRMetadata(source, "bezugswst_header", BunduResultType.bezugswst); - exportContextPDF.addJRMetadata(source, "discharge_header", GeneralResultType.dischargeQwithUnit); - exportContextPDF.addJRMetadata(source, "waterlevel_name_header", GeneralResultType.waterlevelLabel); - exportContextPDF.addJRMetadata(source, "gauge_header", GeneralResultType.gaugeLabel); - exportContextPDF.addJRMetadata(source, "location_header", GeneralResultType.location); - - } -} \ No newline at end of file diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculationResults.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculationResults.java Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstCalculationResults.java Fri Jul 27 17:19:27 2018 +0200 @@ -10,6 +10,7 @@ package org.dive4elements.river.artifacts.bundu.bezugswst; import org.apache.commons.lang.math.DoubleRange; +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; import org.dive4elements.river.artifacts.common.AbstractCalculationResults; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; @@ -17,13 +18,12 @@ * @author Gernot Belger */ -final class BezugswstCalculationResults extends AbstractCalculationResults { +final class BezugswstCalculationResults extends AbstractCalculationResults { private static final long serialVersionUID = 1L; public BezugswstCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) { super(calcModeLabel, user, river, calcRange); - } } \ No newline at end of file diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMainCalculationResult.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMainCalculationResult.java Fri Jul 27 17:19:27 2018 +0200 @@ -0,0 +1,148 @@ +/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde + * Software engineering by + * Björnsen Beratende Ingenieure GmbH + * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ +package org.dive4elements.river.artifacts.bundu.bezugswst; + +import java.util.ArrayList; +import java.util.Collection; + +import org.dive4elements.river.artifacts.bundu.BunduResultType; +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; +import org.dive4elements.river.artifacts.common.ExportContextCSV; +import org.dive4elements.river.artifacts.common.ExportContextPDF; +import org.dive4elements.river.artifacts.common.GeneralResultType; +import org.dive4elements.river.artifacts.common.IExportContext; +import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; +import org.dive4elements.river.artifacts.common.ResultRow; +import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo; +import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; +import org.dive4elements.river.artifacts.sinfo.util.WstInfo; + +/** + * Contains the results of a //TODO LINK{@link BezugswstCalculation}. + * + * @author Gernot Belger + */ +final class BezugswstMainCalculationResult extends AbstractCalculationExportableResult { + + private static final long serialVersionUID = 1L; + + private static final String JASPER_FILE = "/jasper/templates/bundu.bezugswst.jrxml"; + + private final WstInfo wst; + private final BedHeightInfo sounding; + private final String function; + private final boolean preprocessing; + private final int startYear; + private final int endYear; + private final Double missingVolumeFrom; + private final Double missingVolumeTo; + private final Integer ud; + private final double[] qOfGauges; + + public BezugswstMainCalculationResult(final String label, final Collection rows, final BedHeightInfo sounding, final WstInfo wst, + final String function, final boolean preprocessing, final int startYear, final int endYear, final Integer ud, final double[] qOfGauges, + final Double missingVolumeFrom, final Double missingVolumeTo) { + super(label, rows); + this.wst = wst; + this.sounding = sounding; + this.function = function; + this.preprocessing = preprocessing; + this.startYear = startYear; + this.endYear = endYear; + this.missingVolumeTo = missingVolumeTo; + this.missingVolumeFrom = missingVolumeFrom; + this.ud = ud; + this.qOfGauges = qOfGauges; + } + + @Override + protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) { + + // TODO: wenn wst und peilung vorhanden sind, sollte dieser Teil wieder einkommentiert werden + // exportContextCSV.writeCSVWaterlevelMetadata(wst); + // exportContextCSV.writeBlankLine(); + // exportContextCSV.writeCSVSoundingMetadata(this.sounding, " "); + + // Reihenfolge in der LV anders; ich finde sie aber so sinnvoller + exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.function", this.function); + exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.preprocessing", exportContextCSV.msg(String.valueOf(this.preprocessing))); + exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.q_period", String.valueOf(this.startYear), String.valueOf(this.endYear)); + if (this.ud != null) + exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.ud", this.ud); + else if (this.qOfGauges != null) + exportContextCSV.writeCSVMetaEntry("common.export.waterlevel.csv.meta.q", this.qOfGauges); // was auch immer dieser String beinhalten mag + + exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.function", this.function); + exportContextCSV.writeCSVMetaEntry("bundu.export.bezugswst.csv.meta.missing_volume_range", this.missingVolumeFrom, this.missingVolumeTo); + + exportContextCSV.writeBlankLine(); + } + + @Override + protected String getJasperFile() { + return JASPER_FILE; + } + + protected String[] formatRow(final IExportContext exportContext, final ResultRow row) { + + final Collection lines = new ArrayList<>(10); + + lines.add(exportContext.formatRowValue(row, GeneralResultType.station)); + lines.add(exportContext.formatRowValue(row, BunduResultType.bezugswst)); + lines.add(exportContext.formatRowValue(row, GeneralResultType.dischargeQwithUnit)); + + lines.add(exportContext.formatRowValue(row, GeneralResultType.waterlevelLabel)); + lines.add(exportContext.formatRowValue(row, GeneralResultType.gaugeLabel)); + lines.add(exportContext.formatRowValue(row, GeneralResultType.location)); + + return lines.toArray(new String[lines.size()]); + } + + @Override + public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) { + final int colSize = 6; + exportContextCSV.writeTitleForTabs("bundu.export.csv.title.bezugswst.overview", colSize); // Voraussetzung für Tabs ist, dass der Titel vor den Headern + final Collection header = new ArrayList<>(colSize); + + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.bezugswst) + " [" + river.getWstUnit() + "]"); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.dischargeQwithUnit)); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.waterlevelLabel)); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.gaugeLabel)); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.location)); + + exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); + + } + + @Override + protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { + + return this.formatRow(exportContextCSV, row); + } + + @Override + protected String[] formatPDFRow(final ExportContextPDF exportContextPDF, final ResultRow row) { + + return this.formatRow(exportContextPDF, row); + } + + @Override + protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) { + /* column headings */ + exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station); + exportContextPDF.addJRMetadata(source, "bezugswst_header", BunduResultType.bezugswst); + exportContextPDF.addJRMetadata(source, "discharge_header", GeneralResultType.dischargeQwithUnit); + exportContextPDF.addJRMetadata(source, "waterlevel_name_header", GeneralResultType.waterlevelLabel); + exportContextPDF.addJRMetadata(source, "gauge_header", GeneralResultType.gaugeLabel); + exportContextPDF.addJRMetadata(source, "location_header", GeneralResultType.location); + + } +} \ No newline at end of file diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMissVolCalculationResult1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BezugswstMissVolCalculationResult1.java Fri Jul 27 17:19:27 2018 +0200 @@ -0,0 +1,140 @@ +/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde + * Software engineering by + * Björnsen Beratende Ingenieure GmbH + * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ +package org.dive4elements.river.artifacts.bundu.bezugswst; + +import java.util.ArrayList; +import java.util.Collection; + +import org.dive4elements.river.artifacts.bundu.BunduResultType; +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; +import org.dive4elements.river.artifacts.common.ExportContextCSV; +import org.dive4elements.river.artifacts.common.ExportContextPDF; +import org.dive4elements.river.artifacts.common.GeneralResultType; +import org.dive4elements.river.artifacts.common.IExportContext; +import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; +import org.dive4elements.river.artifacts.common.ResultRow; +import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; + +/** + * Contains the results of a //TODO LINK{@link BezugswstCalculation}. + * + * @author Gernot Belger + */ +final class BezugswstMissVolCalculationResult1 extends AbstractCalculationExportableResult { + + private static final long serialVersionUID = 1L; + + private static final String JASPER_FILE = "/jasper/templates/bundu.bezugswst.result1.jrxml"; + + public BezugswstMissVolCalculationResult1(final String label, final Collection rows) { + super(label, rows); + + } + + @Override + protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) { + // no metadata + } + + @Override + protected String getJasperFile() { + return JASPER_FILE; + } + + protected String[] formatRow(final IExportContext exportContext, final ResultRow row) { + + final Collection lines = new ArrayList<>(10); + + lines.add(exportContext.formatRowValue(row, BunduResultType.bezugswst)); + lines.add(exportContext.formatRowValue(row, GeneralResultType.dischargeQwithUnit)); + lines.add(exportContext.formatRowValue(row, GeneralResultType.waterlevelLabel)); + lines.add(exportContext.formatRowValue(row, GeneralResultType.gaugeLabel)); + + lines.add(exportContext.formatRowValue(row, BunduResultType.sounding)); + lines.add(exportContext.formatRowValue(row, BunduResultType.channelLowerEdge)); + lines.add(exportContext.formatRowValue(row, BunduResultType.channelMinDepth)); + lines.add(exportContext.formatRowValue(row, BunduResultType.hasMissingDepth)); + lines.add(exportContext.formatRowValue(row, BunduResultType.missVolume)); + lines.add(exportContext.formatRowValue(row, BunduResultType.missMass)); + lines.add(exportContext.formatRowValue(row, BunduResultType.excavationVolume)); + lines.add(exportContext.formatRowValue(row, BunduResultType.excavationCosts)); + lines.add(exportContext.formatRowValue(row, BunduResultType.channelWidth)); + lines.add(exportContext.formatRowValue(row, BunduResultType.density)); + + lines.add(exportContext.formatRowValue(row, GeneralResultType.location)); + + return lines.toArray(new String[lines.size()]); + } + + @Override + public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) { + + final int colSize = 15; + exportContextCSV.writeTitleForTabs("bundu.export.csv.title.bezugswst.result1", colSize); // Voraussetzung für Tabs ist, dass der Titel vor den Headern + final Collection header = new ArrayList<>(colSize); + + header.add(exportContextCSV.formatCsvHeader(BunduResultType.bezugswst) + " [" + river.getWstUnit() + "]"); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.dischargeQwithUnit)); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.waterlevelLabel)); + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.gaugeLabel)); + + header.add(exportContextCSV.formatCsvHeader(BunduResultType.sounding)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.channelLowerEdge)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.channelMinDepth)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.hasMissingDepth)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.missVolume)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.missMass)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.excavationVolume)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.excavationCosts)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.channelWidth)); + header.add(exportContextCSV.formatCsvHeader(BunduResultType.density)); + + header.add(exportContextCSV.formatCsvHeader(GeneralResultType.location)); + + exportContextCSV.writeCSVLine(header.toArray(new String[header.size()])); + + } + + @Override + protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final ResultRow row) { + + return this.formatRow(exportContextCSV, row); + } + + @Override + protected String[] formatPDFRow(final ExportContextPDF exportContextPDF, final ResultRow row) { + + return this.formatRow(exportContextPDF, row); + } + + @Override + protected void addJRTableHeader(final ExportContextPDF exportContextPDF, final MetaAndTableJRDataSource source) { + /* column headings */ + + exportContextPDF.addJRMetadata(source, "bezugswst_header", BunduResultType.bezugswst); + exportContextPDF.addJRMetadata(source, "discharge_header", GeneralResultType.dischargeQwithUnit); + exportContextPDF.addJRMetadata(source, "waterlevel_name_header", GeneralResultType.waterlevelLabel); + exportContextPDF.addJRMetadata(source, "gauge_header", GeneralResultType.gaugeLabel); + + exportContextPDF.addJRMetadata(source, "sounding_header", BunduResultType.sounding); + exportContextPDF.addJRMetadata(source, "channel_lower_edge_header", BunduResultType.channelLowerEdge); + exportContextPDF.addJRMetadata(source, "channel_min_depth_header", BunduResultType.channelMinDepth); + exportContextPDF.addJRMetadata(source, "channel_miss_depth_header", BunduResultType.hasMissingDepth); + exportContextPDF.addJRMetadata(source, "channel_miss_volume_header", BunduResultType.missVolume); + exportContextPDF.addJRMetadata(source, "channel_miss_mass_header", BunduResultType.missMass); + exportContextPDF.addJRMetadata(source, "excavation_volume_header", BunduResultType.excavationVolume); + exportContextPDF.addJRMetadata(source, "excavation_costs_header", BunduResultType.excavationCosts); + exportContextPDF.addJRMetadata(source, "channel_width_header", BunduResultType.channelWidth); + exportContextPDF.addJRMetadata(source, "density_header", BunduResultType.density); + + exportContextPDF.addJRMetadata(source, "location_header", GeneralResultType.location); + + } +} \ No newline at end of file diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BunduWstExporter.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BunduWstExporter.java Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/bundu/bezugswst/BunduWstExporter.java Fri Jul 27 17:19:27 2018 +0200 @@ -9,9 +9,11 @@ package org.dive4elements.river.artifacts.bundu.bezugswst; import org.apache.log4j.Logger; +import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult; import org.dive4elements.river.artifacts.common.AbstractCommonExporter; import org.dive4elements.river.artifacts.common.ExportContextCSV; import org.dive4elements.river.artifacts.common.ExportContextPDF; +import org.dive4elements.river.artifacts.common.JasperDesigner; import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; /** @@ -20,7 +22,7 @@ * * @author Ingo Weinzierl */ -public class BunduWstExporter extends AbstractCommonExporter { +public class BunduWstExporter extends AbstractCommonExporter { /** The log used in this exporter. */ private static Logger log = Logger.getLogger(BunduWstExporter.class); @@ -33,9 +35,15 @@ @Override protected void writePDFGlobalMetadata(final ExportContextPDF exportContext, final MetaAndTableJRDataSource source) { exportContext.addJRMetaDataForModules(source); - // TODO: add custom stuff here - // source.addMetaData("flowdepthdevelopment_header_label", - // SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta())); } + + @Override + protected void configureDesign(final AbstractCalculationExportableResult result, final JasperDesigner design) { + if (result instanceof BezugswstMissVolCalculationResult1 // || result intanceof BezugswstMiss...2,3 TODO + + ) { + design.getSource().addMetaData("bezugswst_result_header", result.getLabel()); // globalMeta? wrong place. only one result expected, so it works + } + } } \ No newline at end of file diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/common/I18NStrings.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/I18NStrings.java Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/I18NStrings.java Fri Jul 27 17:19:27 2018 +0200 @@ -64,4 +64,8 @@ String UNIT_CM_A = "cm/a"; String UNIT_CUBIC_M = "m³/s"; + + String UNIT_TON = "t"; + + String UNIT_EURO = "€"; } diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.java Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.java Fri Jul 27 17:19:27 2018 +0200 @@ -78,7 +78,7 @@ final FlowDepthDevelopmentCalculationResults results = (FlowDepthDevelopmentCalculationResults) res.getData(); final FlowDepthDevelopmentCalculationResult result = results.getResult(); if (result != null) { - // final BezugswstCalculationResult result = (BezugswstCalculationResult) resultList.get(0); + // final BezugswstMainCalculationResult result = (BezugswstMainCalculationResult) resultList.get(0); /* add themes for chart, for each result */ final int index = 0; diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/resources/messages.properties --- a/artifacts/src/main/resources/messages.properties Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/resources/messages.properties Fri Jul 27 17:19:27 2018 +0200 @@ -905,6 +905,31 @@ bundu.export.bezugswst.csv.meta.ud = # UD (d/a): {0} bundu.export.bezugswst.csv.meta.missing_volume_range = # Bereich der Fehltiefenermittlung: {0} - {1} +bundu.export.csv.title.bezugswst.overview = \u00dcbersicht +bundu.export.csv.title.bezugswst.result1 = Fehlvolumenermittlung 1 +bundu.export.csv.title.bezugswst.result2 = Fehlvolumenermittlung 2 +bundu.export.csv.title.bezugswst.result3 = Summe der Fehlvolumen + +bundu.export.bezugswst.csv.meta.miss.density = Lagerungsdichte [t/m\u00b3] +bundu.export.bezugswst.pdf.meta.miss.density = Lagerungs-dichte [t/m\u00b3] +bundu.export.bezugswst.csv.meta.miss.channel.width = Breite Fahrrinnenkasten [m] +bundu.export.bezugswst.pdf.meta.miss.channel.width = Breite Fahr-rinnen-kasten [m] +bundu.export.bezugswst.csv.meta.miss.costs = Baggerkosten [\u20ac] +bundu.export.bezugswst.pdf.meta.miss.costs = Bagger-kosten [\u20ac] +bundu.export.bezugswst.csv.meta.miss.excavation = Baggervolumina [m\u00b3] +bundu.export.bezugswst.pdf.meta.miss.excavation = Bagger-volumina [m\u00b3] +bundu.export.bezugswst.csv.meta.miss.mass = Masse Fehltiefe ges. [t] +bundu.export.bezugswst.csv.meta.miss.volume = Volumen Fehltiefe ges. [m\u00b3] +bundu.export.bezugswst.csv.meta.miss.exists = Fehltiefe vorhanden? +bundu.export.bezugswst.pdf.meta.miss.exists = Fehl-tiefe vor-handen? +bundu.export.bezugswst.csv.meta.miss.channel.min_depth = Zu gew\u00e4hrleistende Fahrrinnentiefe [m] +bundu.export.bezugswst.pdf.meta.miss.channel.min_depth = Zu gew\u00e4hr-leistende Fahrrinnen-tiefe [m] +bundu.export.bezugswst.csv.meta.miss.channel.lower_edge = Unterkante Fahrrinnenkasten [{0}] +bundu.export.bezugswst.pdf.meta.miss.channel.lower_edge = Unterkante Fahrrinnen-kasten [{0}] +bundu.export.bezugswst.csv.meta.miss.sounding = Peilung +bundu.export.bezugswst.csv.meta.miss.field = Feld {0} Fehlvolumen/-masse +bundu.export.bezugswst.csv.meta.miss.mean_bedheight = Mittlere Sohlh\u00f6he Fehlvolumen/-masse + export.flow_depth.csv.header.km = Fluss-km sinfo.export.flow_depth.csv.header.flowdepth = Flie\u00dftiefe sinfo.export.flow_depth.csv.header.flowdepthTkh = Flie\u00dftiefe mit TKH @@ -1225,6 +1250,7 @@ state.bundu.wst.function = Auswahl der Ausgleichsfunktion bundu.wst.export.csv.meta.header.bezugswst = Bezugswasserstand +bundu.wst.export.pdf.meta.header.bezugswst = Bezugs-wasserstand common.client.ui.selection = Selection common.client.ui.from = from diff -r 6a7758923762 -r 0a0937f33bb5 artifacts/src/main/resources/messages_de.properties --- a/artifacts/src/main/resources/messages_de.properties Fri Jul 27 16:19:09 2018 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Fri Jul 27 17:19:27 2018 +0200 @@ -905,6 +905,31 @@ bundu.export.bezugswst.csv.meta.ud = # UD (d/a): {0} bundu.export.bezugswst.csv.meta.missing_volume_range = # Bereich der Fehltiefenermittlung: {0} - {1} +bundu.export.csv.title.bezugswst.overview = \u00dcbersicht +bundu.export.csv.title.bezugswst.result1 = Fehlvolumenermittlung 1 +bundu.export.csv.title.bezugswst.result2 = Fehlvolumenermittlung 2 +bundu.export.csv.title.bezugswst.result3 = Summe der Fehlvolumen + +bundu.export.bezugswst.csv.meta.miss.density = Lagerungsdichte [t/m\u00b3] +bundu.export.bezugswst.pdf.meta.miss.density = Lagerungs-dichte [t/m\u00b3] +bundu.export.bezugswst.csv.meta.miss.channel.width = Breite Fahrrinnenkasten [m] +bundu.export.bezugswst.pdf.meta.miss.channel.width = Breite Fahr-rinnen-kasten [m] +bundu.export.bezugswst.csv.meta.miss.costs = Baggerkosten [\u20ac] +bundu.export.bezugswst.pdf.meta.miss.costs = Bagger-kosten [\u20ac] +bundu.export.bezugswst.csv.meta.miss.excavation = Baggervolumina [m\u00b3] +bundu.export.bezugswst.pdf.meta.miss.excavation = Bagger-volumina [m\u00b3] +bundu.export.bezugswst.csv.meta.miss.mass = Masse Fehltiefe ges. [t] +bundu.export.bezugswst.csv.meta.miss.volume = Volumen Fehltiefe ges. [m\u00b3] +bundu.export.bezugswst.csv.meta.miss.exists = Fehltiefe vorhanden? +bundu.export.bezugswst.pdf.meta.miss.exists = Fehl-tiefe vor-handen? +bundu.export.bezugswst.csv.meta.miss.channel.min_depth = Zu gew\u00e4hrleistende Fahrrinnentiefe [m] +bundu.export.bezugswst.pdf.meta.miss.channel.min_depth = Zu gew\u00e4hr-leistende Fahrrinnen-tiefe [m] +bundu.export.bezugswst.csv.meta.miss.channel.lower_edge = Unterkante Fahrrinnenkasten [{0}] +bundu.export.bezugswst.pdf.meta.miss.channel.lower_edge = Unterkante Fahrrinnen-kasten [{0}] +bundu.export.bezugswst.csv.meta.miss.sounding = Peilung +bundu.export.bezugswst.csv.meta.miss.field = Feld {0} Fehlvolumen/-masse +bundu.export.bezugswst.csv.meta.miss.mean_bedheight = Mittlere Sohlh\u00f6he Fehlvolumen/-masse + export.flow_depth.csv.header.km = Fluss-km sinfo.export.flow_depth.csv.header.flowdepth = Flie\u00dftiefe sinfo.export.flow_depth.csv.header.flowdepthTkh = Flie\u00dftiefe mit TKH @@ -1225,6 +1250,7 @@ state.bundu.wst.function = Auswahl der Ausgleichsfunktion bundu.wst.export.csv.meta.header.bezugswst = Bezugswasserstand +bundu.wst.export.pdf.meta.header.bezugswst = Bezugs-wasserstand common.client.ui.selection = Auswahl common.client.ui.from = von