# HG changeset patch
# User gernotbelger
# Date 1528988191 -7200
# Node ID 23945061daece2efc7c0d1f53ebd0a54f77cccd4
# Parent 5be112fba8324dd6803a8f48b96c36612ef009a1
gigantic refactoring: exporter, result, results
to support multiple jaspers -> collisions
diff -r 5be112fba832 -r 23945061daec artifacts/doc/conf/generators/generators.xml
--- a/artifacts/doc/conf/generators/generators.xml Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/doc/conf/generators/generators.xml Thu Jun 14 16:56:31 2018 +0200
@@ -69,7 +69,8 @@
-
+
+
diff -r 5be112fba832 -r 23945061daec artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.detail.jrxml Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 5be112fba832 -r 23945061daec artifacts/doc/conf/jasper/templates/sinfo.collision.overview.jrxml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/jasper/templates/sinfo.collision.overview.jrxml Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 5be112fba832 -r 23945061daec artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml
--- a/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepth.jrxml Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
-
+
@@ -106,34 +106,34 @@
-
+
-
+
-
+
[m]"]]>
-
+
-
+
[cm]"]]>
-
+
@@ -141,37 +141,37 @@
[" + $F{meta:river_unit} + "]"]]>
-
+
[m³/s]"]]>
-
+
-
+
-
+
[" + $F{meta:river_unit} + "]"]]>
-
+
-
+
@@ -181,7 +181,7 @@
-
+
@@ -189,55 +189,55 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -246,7 +246,7 @@
-
+
diff -r 5be112fba832 -r 23945061daec artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml
--- a/artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.flowdepthdevelopment.jrxml Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
-
+
@@ -56,6 +56,10 @@
+
+
+
+
@@ -187,45 +191,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ["+$F{meta:river_unit}+"]"]]>
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+ ["+$F{meta:river_unit}+"]"]]>
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -255,6 +239,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 5be112fba832 -r 23945061daec artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml
--- a/artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/doc/conf/jasper/templates/sinfo.tkh.jrxml Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
-
+
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationExportableResult.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationExportableResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,79 @@
+/** 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.common;
+
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import net.sf.jasperreports.engine.JRException;
+
+/**
+ * @author Domenico Nardi Tironi
+ */
+public abstract class AbstractCalculationExportableResult extends AbstractCalculationResult {
+
+ private static final long serialVersionUID = 1L;
+
+ public AbstractCalculationExportableResult(final String label, final Collection rows) {
+ super(label, rows);
+ }
+
+ public abstract void writeCSVHeader(ExportContextCSV exportContextCSV, final RESULTS results, final RiverInfo river);
+
+ public final void writeCsv(final ExportContextCSV exportContextCSV, final RESULTS results) {
+
+ writeCSVResultMetadata(exportContextCSV, results);
+ // wenn resultsmetadata null sind!? keine neue zeile
+ // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
+ // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
+
+ /* now the value rows */
+ final Collection rows = getRows();
+ for (final ResultRow row : rows)
+ writeCSVRow(exportContextCSV, results, row);
+ }
+
+ protected abstract void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final RESULTS results);
+
+ protected void writeCSVRow(final ExportContextCSV exportContextCSV, final RESULTS results, final ResultRow row) {
+ final String[] formattedRow = formatCSVRow(exportContextCSV, results, row);
+ exportContextCSV.writeCSVLine(formattedRow);
+
+ }
+
+ protected abstract String[] formatCSVRow(ExportContextCSV exportContextCSV, final RESULTS results, final ResultRow row);
+
+ protected abstract String[] formatPDFRow(ExportContextCSV exportContextPDF, RESULTS results, ResultRow row);
+
+ public JasperDesigner addReport(final ExportContextCSV exportContextPDF, final RESULTS results, final JasperReporter reporter,
+ final MetaAndTableJRDataSource source) throws JRException {
+
+ final JasperDesigner design = reporter.addReport(getJasperFile(), source);
+ addJRTableHeader(exportContextPDF, source, results);
+ addJRTableData(exportContextPDF, source, results);
+ return design;
+ }
+
+ protected abstract String getJasperFile();
+
+ protected abstract void addJRTableHeader(ExportContextCSV exportContextPDF, MetaAndTableJRDataSource source, RESULTS results);
+
+ private void addJRTableData(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final RESULTS results) {
+
+ final Collection rows = getRows();
+
+ for (final ResultRow row : rows) {
+
+ final String[] formattedRow = formatPDFRow(exportContextPDF, results, row);
+ source.addData(formattedRow);
+ }
+ }
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationListResults.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationListResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,50 @@
+/** 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.common;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.river.artifacts.model.Calculation;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCalculationListResults extends AbstractCalculationResults {
+
+ private static final long serialVersionUID = 1L;
+
+ private final List results = new ArrayList<>();
+
+ public AbstractCalculationListResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
+ super(calcModeLabel, user, river, calcRange);
+ }
+
+ public final void addResult(final RESULT result, final Calculation problems) {
+ /* we assume error reporting was already done in this case */
+ if (result == null)
+ return;
+
+ if (result.isEmpty()) {
+ problems.addProblem("abstractsinfocalculationresults.emptyResult", result.getLabel());
+ return;
+ }
+
+ this.results.add(result);
+ }
+
+ public final List getResults() {
+ return Collections.unmodifiableList(this.results);
+ }
+
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,7 +15,6 @@
import java.util.Collections;
import java.util.List;
-import org.dive4elements.river.artifacts.common.IResultType;
import gnu.trove.TDoubleArrayList;
/**
@@ -29,38 +28,35 @@
private final String label;
-
-
- public AbstractCalculationResult(final String label, final Collection rows) {
- this.label = label;
+ public AbstractCalculationResult(final String label, final Collection rows) {
+ this.label = label;
this.rows = new ArrayList<>(rows);
}
public final String getLabel() {
return this.label;
}
-
public boolean isEmpty() {
return this.rows.isEmpty();
}
- public final void addRow(final ResultRow resultRow) {
- this.rows.add(resultRow);
- }
+ // public final void addRow(final ResultRow resultRow) {
+ // this.rows.add(resultRow);
+ // }
public final Collection getRows() {
return Collections.unmodifiableCollection(this.rows);
}
- public final double[][] getStationPoints(final IResultType type) { //gehört die Methode hier rein? oder in erbende Klassen?
+ public final double[][] getStationPoints(final IResultType type) { // gehört die Methode hier rein? oder in erbende Klassen?
final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size());
final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size());
for (final ResultRow row : this.rows) {
- final double station = row.getDoubleValue(GeneralResultType.station); //TODO: move "station" (and others) to common
+ final double station = row.getDoubleValue(GeneralResultType.station); // TODO: move "station" (and others) to common
final double value = row.getDoubleValue(type);
xPoints.add(station);
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +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.common;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.model.Calculation;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-
-/**
- * @author Gernot Belger
- */
-public abstract class AbstractCalculationResults implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
- private final List results = new ArrayList<>();
-
- private final String calcModeLabel;
-
- private final String user;
-
- private final RiverInfo river;
-
- private final DoubleRange calcRange;
-
- public AbstractCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange) {
- this.calcModeLabel = calcModeLabel;
- this.user = user;
- this.river = river;
- this.calcRange = calcRange;
- }
-
- public String getCalcModeLabel() {
- return this.calcModeLabel;
- }
-
- public String getUser() {
- return this.user;
- }
-
- public RiverInfo getRiver() {
- return this.river;
- }
-
- public DoubleRange getCalcRange() {
- return this.calcRange;
- }
-
- public void addResult(final RESULT result, final Calculation problems) {
- /* we assume error reporting was already done in this case */
- if (result == null)
- return;
-
- if (result.isEmpty()) {
- problems.addProblem("abstractsinfocalculationresults.emptyResult", result.getLabel());
- return;
- }
-
- this.results.add(result);
- }
-
- public List getResults() {
- return Collections.unmodifiableList(this.results);
- }
-}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +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.common;
-
-import java.util.Collection;
-
-import org.apache.log4j.Logger;
-import org.dive4elements.artifacts.CallMeta;
-import org.dive4elements.river.artifacts.model.CalculationResult;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.exports.AbstractExporter;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-/**
- * @author Gernot Belger
- */
-public abstract class AbstractCommonExporter> extends AbstractExporter {
-
- /** The storage that contains the current calculation result. */
- protected static enum ExportMode {
- pdf, csv
- }
-
- /** The log used in this exporter. */
- protected abstract Logger getLog();
-
- protected RESULTS data = null;
-
- public final RESULTS getData() {
- return this.data;
- }
-
- @Override
- protected final void addData(final Object d) {
- /* reset */
- this.data = null;
- if (d instanceof CalculationResult) {
-
- final Object dat = ((CalculationResult) d).getData();
- if (dat != null) {
- @SuppressWarnings("unchecked")
- final RESULTS result = (RESULTS) dat;
- this.data = result;
- }
- }
- }
-
- /**
- * Formats header with unit and label: msg [unit] (label)
- */
- protected final String msgUnitLabel(final String key, final String unit, final String label) {
- final String msg = msg(key);
- return String.format("%s [%s] (%s)", msg, unit, label);
- }
-
- @Override
- protected final void writeCSVData(final CSVWriter writer) {
- getLog().info("writeCSVData");
-
- /* fetch calculation results */
- final RESULTS results = this.data;
-
- /* write as csv */
- writeCSVGlobalMetadata(writer, results);
- writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
- final RiverInfo river = results.getRiver();
- // FIXME :with comment if not first result
- writeCSVHeader(writer, results, river);
- writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
-
- for (final RESULT result : results.getResults()) {
- writeCSVResult(writer, results, result);
- writer.writeNext(new String[] { "" }); // break line HERE after each resultset
- }
-
- }
-
- protected abstract void writeCSVHeader(final CSVWriter writer, final RESULTS results, final RiverInfo river);
-
- /**
- * Add metadata that is once written to the top of the file.
- */
- protected abstract void writeCSVGlobalMetadata(final CSVWriter writer, final RESULTS results);
-
- protected final void writeCSVMetaEntry(final CSVWriter writer, final String message, final Object... messageArgs) {
-
- final CallMeta meta = this.context.getMeta();
-
- writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
- }
-
- private final void writeCSVResult(final CSVWriter writer, final RESULTS results, final RESULT result) {
-
- writeCSVResultMetadata(writer, results, result);
- // wenn resultsmetadata null sind!? keine neue zeile
- // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
- // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
-
- /* now the value rows */
- final Collection rows = result.getRows();
- for (final ResultRow row : rows) {
- writeCSVRow(writer, results, result, row);
- }
- }
-
- /**
- * Add metadata that is written once per result set.
- */
- protected abstract void writeCSVResultMetadata(CSVWriter writer, RESULTS results, RESULT result);
-
- protected void writeCSVRow(final CSVWriter writer, final RESULTS results, final RESULT result, final ResultRow row) {
- getLog().debug("writeCSVFlowDepthRow");
-
- final String[] formattedRow = formatCSVRow(results, row);
- writer.writeNext(formattedRow);
- }
-
- protected final String[] formatCSVRow(final RESULTS results, final ResultRow row) {
- return formatRow(results, row, ExportMode.csv);
- }
-
- protected final MetaAndTableJRDataSource createJRData(final AbstractCalculationResults data) {
-
- /* fetch calculation results */
- final RESULTS results = this.data;
-
- final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
-
- addJRMetaData(source, results);
-
- for (final RESULT result : results.getResults())
- addJRTableData(source, results, result);
-
- return source;
- }
-
- protected abstract void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results);
-
- private void addJRTableData(final MetaAndTableJRDataSource source, final RESULTS results, final RESULT result) {
-
- final Collection rows = result.getRows();
-
- for (final ResultRow row : rows) {
-
- final String[] formattedRow = formatPDFRow(results, row);
- source.addData(formattedRow);
- }
- }
-
- protected abstract String[] formatRow(RESULTS results, ResultRow row, ExportMode mode);
-
- private final String[] formatPDFRow(final RESULTS results, final ResultRow row) {
- return formatRow(results, row, ExportMode.pdf);
- }
-
- protected abstract void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results);
-
- protected abstract void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results);
-}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonListExporter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCommonListExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,117 @@
+/** 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.common;
+
+import java.util.Collection;
+
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * @author Gernot Belger
+ */
+public abstract class AbstractCommonListExporter> extends AbstractCommonExporter {
+
+ /** The storage that contains the current calculation result. */
+ protected static enum ExportMode {
+ pdf, csv
+ }
+
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final RESULTS results) {
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ writeCSVGlobalMetadata(writer, results);
+
+ writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+ final RiverInfo river = results.getRiver();
+ // FIXME :with comment if not first result
+ writeCSVHeader(writer, results, river);
+ writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ for (final RESULT result : results.getResults()) {
+ writeCSVResult(writer, results, result);
+ writer.writeNext(new String[] { "" }); // break line HERE after each resultset
+ }
+ }
+
+ protected abstract void writeCSVHeader(final CSVWriter writer, final RESULTS results, final RiverInfo river);
+
+ /**
+ * Add metadata that is once written to the top of the file.
+ */
+ protected abstract void writeCSVGlobalMetadata(final CSVWriter writer, final RESULTS results);
+
+ private final void writeCSVResult(final CSVWriter writer, final RESULTS results, final RESULT result) {
+
+ writeCSVResultMetadata(writer, results, result);
+ // wenn resultsmetadata null sind!? keine neue zeile
+ // writer.writeNext(new String[] { "" }); // break line in den Implementationen,
+ // weil es sein kann, dass KEINE ResultMetadata geschrieben werden; dann wäre eine Leerzeile überflüssig
+
+ /* now the value rows */
+ final Collection rows = result.getRows();
+ for (final ResultRow row : rows)
+ writeCSVRow(writer, results, result, row);
+ }
+
+ /**
+ * Add metadata that is written once per result set.
+ */
+ protected abstract void writeCSVResultMetadata(CSVWriter writer, RESULTS results, RESULT result);
+
+ protected void writeCSVRow(final CSVWriter writer, final RESULTS results, final RESULT result, final ResultRow row) {
+ getLog().debug("writeCSVFlowDepthRow");
+
+ final String[] formattedRow = formatCSVRow(results, row);
+ writer.writeNext(formattedRow);
+ }
+
+ protected final String[] formatCSVRow(final RESULTS results, final ResultRow row) {
+ return formatRow(results, row, ExportMode.csv);
+ }
+
+ protected final MetaAndTableJRDataSource createJRData() {
+
+ /* fetch calculation results */
+ final RESULTS results = getResults();
+
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+
+ addJRMetaData(source, results);
+
+ for (final RESULT result : results.getResults())
+ addJRTableData(source, results, result);
+
+ return source;
+ }
+
+ protected abstract void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results);
+
+ private void addJRTableData(final MetaAndTableJRDataSource source, final RESULTS results, final RESULT result) {
+
+ final Collection rows = result.getRows();
+
+ for (final ResultRow row : rows) {
+
+ final String[] formattedRow = formatPDFRow(results, row);
+ source.addData(formattedRow);
+ }
+ }
+
+ protected abstract String[] formatRow(RESULTS results, ResultRow row, ExportMode mode);
+
+ private final String[] formatPDFRow(final RESULTS results, final ResultRow row) {
+ return formatRow(results, row, ExportMode.pdf);
+ }
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java Thu Jun 14 16:56:31 2018 +0200
@@ -86,6 +86,7 @@
protected abstract NumberFormat createFormatter(CallContext context);
+ @Override
public final String getCsvHeader() {
return this.csvHeader;
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextCSV.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,236 @@
+/** 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.common;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
+import org.dive4elements.river.FLYS;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoI18NStrings;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
+import org.dive4elements.river.utils.Formatter;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public final class ExportContextCSV {
+
+ private static final String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
+
+ private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
+
+ private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year";
+
+ private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
+
+ private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
+
+ private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
+
+ private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
+
+ private static NumberFormat qFormat = null;
+
+ private static NumberFormat flowDepthFormat = null;
+
+ private NumberFormat kmFormat;
+
+ /** The CallContext object. */
+ private final CallContext context;
+
+ private final CSVWriter writer;
+
+ public ExportContextCSV(final CallContext context, final CSVWriter writer) {
+ this.context = context;
+ this.writer = writer;
+ }
+
+ private String msg(final String key) {
+ return Resources.getMsg(this.context.getMeta(), key, key);
+ }
+
+ public String msg(final String key, final Object... args) {
+ return Resources.getMsg(this.context.getMeta(), key, key, args);
+ }
+
+ public final void writeCSVMetaEntry(final String message, final Object... messageArgs) {
+
+ final CallMeta meta = this.context.getMeta();
+
+ this.writer.writeNext(new String[] { Resources.getMsg(meta, message, message, messageArgs) });
+ }
+
+ public void writeBlankLine() {
+ writeCSVLine(new String[] { "" });
+
+ }
+
+ // *** CUSTOM STUFF that is used multiple times ***///
+
+ public final void writeCSVSoundingMetadata2(final BedHeightInfo sounding, final String mainLabel) {
+ // "##METADATEN PEILUNG"
+ writeCSVMetaEntry(mainLabel);
+
+ // "# Jahr der Peilung: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
+ // "# Aufnahmeart: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
+ // "# Auswerter: "
+ writeCSVMetaEntry(CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
+ // "# Lagesystem: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
+ // "# Höhensystem: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
+ // "# ursprüngliches Höhensystem: "
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
+ }
+
+ public final void writeCSVSoundingMetadata(final BedHeightInfo sounding) {
+ // "##METADATEN PEILUNG"
+ writeCSVMetaEntry(CSV_META_HEADER_SOUNDING);
+
+ }
+
+ public void writeCSVLine(final String[] line) {
+ this.writer.writeNext(line);
+ }
+
+ public String formatCsvHeader(final IResultType type) {
+ return msg(type.getCsvHeader());
+ }
+
+ public String formatRowValue(final ResultRow row, final IResultType type) {
+ return row.exportValue(this.context, type);
+ }
+
+ public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final IResultType type) {
+ source.addMetaData(key, type.getPdfHeader(this.context.getMeta()));
+ }
+
+ public final void writeCSVGlobalMetadataDefaults(final AbstractCalculationResults results) {
+ // TODO: results as member
+ final String calcModeLabel = results.getCalcModeLabel();
+ final RiverInfo river = results.getRiver();
+ final DoubleRange calcRange = results.getCalcRange();
+
+ writeCSVMetaEntry(I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
+
+ // "# FLYS-Version: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
+
+ // "# Bearbeiter: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
+
+ // "# Datum der Erstellung: "
+ final Locale locale = Resources.getLocale(this.context.getMeta());
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ writeCSVMetaEntry(I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
+
+ // "# Gewässer: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
+
+ // "# Höhensystem des Flusses: "
+ writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
+
+ if (calcRange != null) {
+ // "# Ort/Bereich (km): "
+ writeCSVMetaEntry(I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
+ getKmFormatter().format(calcRange.getMaximumDouble()));
+ }
+ }
+
+ public final void writeCSVWaterlevelMetadata(final WstInfo wst) {
+ writeCSVWaterlevelMetadata(wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL); // default Label; used in 99%
+ }
+
+ public final void writeCSVWaterlevelMetadata(final WstInfo wst, final String mainLabel) {
+ // "##METADATEN WASSERSPIEGELLAGE"
+ writeCSVMetaEntry(mainLabel);
+
+ // "# Bezeichnung der Wasserspiegellage: "
+ writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());
+
+ // "# Bezugspegel: "
+ writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());
+
+ // "# Jahr/Zeitraum der Wasserspiegellage: "
+ final int year = wst.getYear();
+ if (year > 0)
+ writeCSVMetaEntry(SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
+ }
+
+ // copy from AbstractExporter TODO merge with ExportContextPDF
+ protected NumberFormat getKmFormatter() {
+
+ if (this.kmFormat == null) {
+ this.kmFormat = Formatter.getWaterlevelKM(this.context);
+ }
+ return this.kmFormat;
+ }
+
+ public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final String msg) {
+ source.addMetaData(key, msg);
+
+ }
+
+ public NumberFormat getQFormatter() {
+ if (this.qFormat == null) {
+ this.qFormat = Formatter.getWaterlevelQ(this.context);
+ }
+ return this.qFormat;
+ }
+
+ public final NumberFormat getFlowDepthFormatter() {
+ if (this.flowDepthFormat == null)
+ this.flowDepthFormat = Formatter.getFlowDepth(this.context);
+ return this.flowDepthFormat;
+ }
+
+ /**
+ * Formats header with unit: msg [unit]
+ */
+
+ public String msgUnitCSV(final IResultType typeWithUnit) { // TODO: use generic Type!
+ final String unit = msg(typeWithUnit.getUnit());
+ return msgUnitCSV(typeWithUnit, unit);
+ }
+
+ public String msgUnitCSV(final IResultType type, final String unit) {
+ final String msg = msg(type.getCsvHeader());
+ return String.format("%s [%s]", msg, unit);
+ }
+
+ public void writeCSVSoundingMetadata(final BedHeightInfo currentSounding, final String csvMetaHeaderSoundingCurrent) {
+
+ }
+
+ public final String msgUnitLabel(final IResultType typeWithUnit, final String label) {
+ final String msg = msg(typeWithUnit.getCsvHeader());
+ final String unit = msg(typeWithUnit.getUnit());
+ return String.format("%s [%s] (%s)", msg, unit, label);
+ }
+
+ public String msgPdf(final SInfoResultType type) {
+ return type.getPdfHeader(this.context.getMeta());
+
+ }
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextPDF.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/ExportContextPDF.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,113 @@
+/** 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.common;
+
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.FLYS;
+import org.dive4elements.river.artifacts.resources.Resources;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.utils.Formatter;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public final class ExportContextPDF {
+
+ private NumberFormat kmFormat;
+
+ /** The CallContext object. */
+ private final CallContext context;
+
+ public ExportContextPDF(final CallContext context) {
+ this.context = context;
+
+ }
+
+ private String msg(final String key) {
+ return Resources.getMsg(this.context.getMeta(), key, key);
+ }
+
+ private String msg(final String key, final Object... args) {
+ return Resources.getMsg(this.context.getMeta(), key, key, args);
+ }
+
+ public void addJRMetadata(final MetaAndTableJRDataSource source, final String key, final IResultType type) {
+ source.addMetaData(key, type.getPdfHeader(this.context.getMeta()));
+ }
+
+ // *** CUSTOM STUFF that is used multiple times ***///
+ public void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final AbstractCalculationResults results) {
+
+ source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
+ source.addMetaData("calcMode", results.getCalcModeLabel());
+
+ source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
+ source.addMetaData("version", FLYS.VERSION);
+
+ source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
+ source.addMetaData("user", results.getUser());
+
+ final Locale locale = Resources.getLocale(this.context.getMeta());
+ final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
+ source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
+ source.addMetaData("date", df.format(new Date()));
+ }
+
+ public void addJRMetaDataUSINFO(final MetaAndTableJRDataSource source, final AbstractCalculationResults results) {
+
+ /* general metadata */
+ addJRMetaDataDefaults(source, results);
+
+ final RiverInfo river = results.getRiver();
+ final String wstUnitName = river.getWstUnit();
+
+ source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
+ source.addMetaData("river", river.getName());
+ source.addMetaData("river_unit", wstUnitName);
+
+ final DoubleRange calcRange = results.getCalcRange();
+ final NumberFormat kmFormatter = getKmFormatter();
+ final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
+ source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
+ source.addMetaData("range", rangeValue);
+
+ /* column headings */
+ // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
+
+ // moved to *result
+ /* column headings */
+ // source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
+ // source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
+ }
+
+ // copy from AbstractExporter TODO merge with ExportContextCSV
+ protected NumberFormat getKmFormatter() {
+
+ if (this.kmFormat == null) {
+ this.kmFormat = Formatter.getWaterlevelKM(this.context);
+ }
+ return this.kmFormat;
+ }
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/GeneralResultType.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -19,8 +19,10 @@
*
*/
public abstract class GeneralResultType extends AbstractResultType {
-
- public static final GeneralResultType station = new GeneralResultType(I18NStrings.UNIT_KM, I18NStrings.CSV_KM_HEADER) {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final GeneralResultType station = new GeneralResultType(I18NStrings.UNIT_KM, I18NStrings.CSV_KM_HEADER) {
@Override
public String exportValue(final CallContext context, final Object value) {
final double doubleValue = asDouble(value);
@@ -32,14 +34,13 @@
return Formatter.getWaterlevelKM(context);
}
};
-
-
- private GeneralResultType(String unit, String csvHeader) {
-
+
+ private GeneralResultType(final String unit, final String csvHeader) {
+
super(unit, csvHeader, csvHeader);
}
- private GeneralResultType(String unit, String csvHeader, String pdfHeader) {
+
+ private GeneralResultType(final String unit, final String csvHeader, final String pdfHeader) {
super(unit, csvHeader, pdfHeader);
}
-
-}
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/IResultType.java Thu Jun 14 16:56:31 2018 +0200
@@ -12,13 +12,20 @@
import java.io.Serializable;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.artifacts.CallMeta;
/**
* @author Domenico Nardi Tironi
*/
public interface IResultType extends Serializable {
- String exportValue(final CallContext context, final Object value);
+ String exportValue(CallContext context, Object value);
- double asDouble(final Object value);
+ double asDouble(Object value);
+
+ String getCsvHeader();
+
+ String getPdfHeader(CallMeta meta);
+
+ String getUnit();
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -79,9 +79,7 @@
final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
jasperPrintList.add(print);
} else {
-
- int totalpagesoffset = 0;
- int pagesCount = 0;
+ Integer totalpages = 0;
// erstes Rendern, um Seitenzahl zu ermitteln
for (final JasperDesigner designer : this.designs) {
@@ -91,16 +89,15 @@
final MetaAndTableJRDataSource source = designer.getSource();
final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
- pagesCount = print.getPages().size();
- designer.setPagesCount(totalpagesoffset);
+ final Integer pagesCount = print.getPages().size();
+ designer.setPagesCount(totalpages);
- totalpagesoffset += pagesCount;
+ totalpages += pagesCount;
}
- totalpagesoffset = totalpagesoffset - pagesCount; // offset darf die letzten Seiten nicht beinhalten!
// Sources mit pages machen
for (final JasperDesigner designer : this.designs) {
- final JRDataSource sourceWithPages = designer.getSource().withPagePageOffsets(designer.getPagesCount(), totalpagesoffset);
+ final JRDataSource sourceWithPages = designer.getSource().withPagePageOffsets(designer.getPagesCount(), totalpages);
sourcesWithPages.add(sourceWithPages);
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/MetaAndTableJRDataSource.java Thu Jun 14 16:56:31 2018 +0200
@@ -25,7 +25,7 @@
private final List data = new ArrayList<>();
- private final Map metaData = new HashMap<>();
+ private final Map metaData = new HashMap<>();
private int index = -1;
@@ -33,7 +33,7 @@
this.data.add(row);
}
- public void addMetaData(final String key, final String value) {
+ public void addMetaData(final String key, final Object value) {
this.metaData.put(key, value);
}
@@ -60,14 +60,14 @@
return null;
}
- public JRDataSource withPagePageOffsets(final int startpageoffset, final int totalpagesoffset) {
+ public JRDataSource withPagePageOffsets(final Integer startpageoffset, final Integer totalpages) {
final MetaAndTableJRDataSource newSource = new MetaAndTableJRDataSource();
newSource.data.addAll(this.data);
newSource.metaData.putAll(this.metaData);
- newSource.addMetaData("meta:startpageoffset", "" + startpageoffset);
- newSource.addMetaData("meta:totalpagesoffset", "" + totalpagesoffset);
+ newSource.addMetaData("startpageoffset", startpageoffset);
+ newSource.addMetaData("totalpages", totalpages);
return newSource;
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcDetailResult.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcDetailResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,109 @@
+/* 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.sinfo.collision;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+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.util.RiverInfo;
+
+/**
+ * Contains the results of a {@link FloodDurationCalculation}.
+ *
+ * @author Gernot Belger
+ */
+final class CollisionCalcDetailResult extends AbstractCalculationExportableResult {
+
+ private static final long serialVersionUID = 1L;
+ private static final String JASPER_FILE = "/jasper/templates/sinfo.collision.detail.jrxml";
+
+ public CollisionCalcDetailResult(final String label, final Collection rows) {
+ super(label, rows);
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results) {
+ // TODO Auto-generated method stub
+ // final WstInfo wst = result.getWst();
+ // exportContext.writeCSVWaterlevelMetadata(writer, wst);
+ // if hasMetadata...
+ exportContextCSV.writeBlankLine();
+ }
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final RiverInfo river) {
+
+ // FIXME wrong columns:
+ final Collection header = new ArrayList<>(99);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ //
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.riverside));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationduration));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationdurationq));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructureHeight));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructuretype));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.gaugeLabel));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.location));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ private String[] formatRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(11);
+
+ // FIXME wrong columns:
+ lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.tkh));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.soilkind));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.meanBedHeight));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevel));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.discharge));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.gaugeLabel));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
+ @Override
+ protected String getJasperFile() {
+ return JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, final CollisionCalculationResults results) {
+
+ /* column headings */
+ // FIXME wrong columns:
+ exportContextCSV.addJRMetadata(source, "station_header", GeneralResultType.station);
+ // exportContext.addJRMetadata(source, "station_header", GeneralResultType.station);
+ // exportContext.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+ // exportContext.addJRMetadata(source, "tkhkind_header", SInfoResultType.soilkind);
+ // exportContext.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+ // exportContext.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+ // exportContext.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+ }
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcOverviewResult.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcOverviewResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,108 @@
+/* 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.sinfo.collision;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+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.util.RiverInfo;
+
+/**
+ * Contains the results of a {@link FloodDurationCalculation}.
+ *
+ * @author Gernot Belger
+ */
+final class CollisionCalcOverviewResult extends AbstractCalculationExportableResult {
+
+ private static final long serialVersionUID = 1L;
+
+ private static final String JASPER_FILE = "/jasper/templates/sinfo.collision.overview.jrxml";
+
+ public CollisionCalcOverviewResult(final String label, final Collection rows) {
+ super(label, rows);
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results) {
+ // TODO Auto-generated method stub
+ // final WstInfo wst = result.getWst();
+ // exportContext.writeCSVWaterlevelMetadata(writer, wst);
+ }
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final RiverInfo river) {
+
+ // FIXME wrong columns:
+ final Collection header = new ArrayList<>(99);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ //
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.riverside));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationduration));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.inundationdurationq));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructureHeight));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.infrastructuretype));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.gaugeLabel));
+ // header.add(exportContext.formatCsvHeader(SInfoResultType.location));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ private String[] formatRow(final ExportContextCSV exportContextCSV, final CollisionCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(11);
+
+ // FIXME wrong columns:
+ lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.tkh));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.soilkind));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.meanBedHeight));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevel));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.discharge));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.gaugeLabel));
+ // lines.add(exportContext.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
+ @Override
+ protected String getJasperFile() {
+ return JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, final CollisionCalculationResults results) {
+
+ /* column headings */
+ // FIXME wrong columns:
+ exportContextCSV.addJRMetadata(source, "station_header", GeneralResultType.station);
+ // exportContext.addJRMetadata(source, "station_header", GeneralResultType.station);
+ // exportContext.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+ // exportContext.addJRMetadata(source, "tkhkind_header", SInfoResultType.soilkind);
+ // exportContext.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+ // exportContext.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+ // exportContext.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+ }
+}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,8 +9,13 @@
*/
package org.dive4elements.river.artifacts.sinfo.collision;
+import java.util.ArrayList;
+import java.util.Collection;
+
import org.apache.commons.lang.math.DoubleRange;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
+import org.dive4elements.river.artifacts.common.ResultRow;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.resources.Resources;
@@ -51,7 +56,29 @@
final int[] years = access.getYears();
final int[][] epochs = access.getEpochs();
- return null; // new CalculationResult(results, problems);
+ final Collection overViewRows = new ArrayList<>();
+ final Collection detailsRows = new ArrayList<>();
+
+ // TODO: calculate
+
+ final CollisionCalculationResults results = new CollisionCalculationResults(calcModeLabel, user, riverInfo, calcRange);
+
+ final ResultRow row = ResultRow.create().putValue(GeneralResultType.station, 8888.888);
+ final ResultRow row2 = ResultRow.create().putValue(GeneralResultType.station, 777.888);
+
+ for (int i = 0; i < 300; i++) {
+ overViewRows.add(row);
+ overViewRows.add(row2);
+ }
+ final CollisionCalcOverviewResult overviewResult = new CollisionCalcOverviewResult("Overview", overViewRows); // TODO: get Title-Strings from messages
+ results.addResult(overviewResult, problems);
+ for (int i = 0; i < 200; i++) {
+ detailsRows.add(row);
+ detailsRows.add(row2);
+ }
+ final CollisionCalcDetailResult detailResult = new CollisionCalcDetailResult("Details", detailsRows);
+ results.addResult(detailResult, problems);
+
+ return new CalculationResult(results, problems);
}
-
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculationResults.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,28 @@
+/** 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.sinfo.collision;
+
+import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+/**
+ * @author Gernot Belger
+ */
+final class CollisionCalculationResults extends AbstractCalculationListResults> {
+
+ private static final long serialVersionUID = 1L;
+
+ public CollisionCalculationResults(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 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionExporter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,82 @@
+/** 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.sinfo.collision;
+
+import java.io.OutputStream;
+
+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.JasperReporter;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+
+import au.com.bytecode.opencsv.CSVWriter;
+import net.sf.jasperreports.engine.JRException;
+
+/**
+ * @author Gernot Belger
+ */
+public final class CollisionExporter extends AbstractCommonExporter {
+
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final CollisionCalculationResults results) {
+ // TODO: Diesen Ablauf in super?
+
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
+ }
+
+ @Override
+ protected void doWritePdf(final OutputStream out, final CollisionCalculationResults results) {
+ // TODO: Move to super
+ try {
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
+
+ final JasperReporter reporter = new JasperReporter();
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
+ reporter.exportPDF(out);
+ }
+ catch (final JRException je) {
+ getLog().warn("Error generating PDF Report!", je);
+ }
+ }
+}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,8 +14,11 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.CalculationResult;
+import org.dive4elements.river.artifacts.model.DataFacet;
import org.dive4elements.river.artifacts.model.EmptyFacet;
+import org.dive4elements.river.artifacts.model.FacetTypes;
import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
import org.dive4elements.river.artifacts.states.DefaultState;
@@ -67,13 +70,14 @@
if (facets == null)
return res;
//
- // final FlowDepthCalculationResults results = (FlowDepthCalculationResults) res.getData();
+ final CollisionCalculationResults results = (CollisionCalculationResults) res.getData();
//
// /* add themes for chart, for each result */
- // final List resultList = results.getResults();
+ // final List resultList = results.getResults();
// for (int index = 0; index < resultList.size(); index++) {
//
- // final FlowDepthCalculationResult result = resultList.get(index);
+ final AbstractCalculationExportableResult result = results.getResults().get(0);
+
//
// /* filtered (zoom dependent mean) flow depth */
// facets.add(FlowDepthProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
@@ -88,13 +92,13 @@
// }
// }
- // if (!resultList.isEmpty()) {
- // final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
- // final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
- //
- // facets.add(csv);
- // facets.add(pdf);
- // }
+ if (!result.isEmpty()) {
+ final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
+ final Facet pdf = new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id);
+
+ facets.add(csv);
+ facets.add(pdf);
+ }
//
// final Calculation report = res.getReport();
//
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -12,14 +12,14 @@
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Gernot Belger
*/
-public abstract class AbstractSInfoCalculationResults extends AbstractCalculationResults {
+public abstract class AbstractSInfoCalculationResults extends AbstractCalculationListResults {
private static final long serialVersionUID = 1L;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +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.sinfo.common;
-
-import java.text.DateFormat;
-import java.text.NumberFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.FLYS;
-import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
-import org.dive4elements.river.artifacts.common.I18NStrings;
-import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-/**
- * @author Gernot Belger
- */
-public abstract class AbstractSInfoExporter> extends AbstractCommonExporter {
-
- private static final String CSV_META_HEADER_SOUNDING = "sinfo.export.flow_depth.csv.meta.header.sounding";
-
- private static final String CSV_META_HEADER_SOUNDING_YEAR = "sinfo.export.flow_depth.csv.meta.header.sounding.year";
-
- private static final String CSV_META_HEADER_SOUNDING_TYPE = "sinfo.export.flow_depth.csv.meta.header.sounding.type";
-
- private static final String CSV_META_HEADER_SOUNDING_PRJ = "sinfo.export.flow_depth.csv.meta.header.sounding.prj";
-
- private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel";
-
- private static final String CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL = "sinfo.export.flow_depth.csv.meta.header.sounding.elevationmodel.original";
-
- protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding) {
- writeCSVSoundingMetadata(writer, sounding, CSV_META_HEADER_SOUNDING);
- }
-
- protected final void writeCSVSoundingMetadata(final CSVWriter writer, final BedHeightInfo sounding, final String mainLabel) {
- // "##METADATEN PEILUNG"
- writeCSVMetaEntry(writer, mainLabel);
-
- // "# Jahr der Peilung: "
- writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_YEAR, Integer.toString(sounding.getYear()));
- // "# Aufnahmeart: "
- writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_TYPE, sounding.getType());
- // "# Auswerter: "
- writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_EVALUATOR, sounding.getEvaluationBy());
- // "# Lagesystem: "
- writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_PRJ, sounding.getLocationSystem());
- // "# Höhensystem: "
- writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL, sounding.getCurElevationModelUnit());
- // "# ursprüngliches Höhensystem: "
- writeCSVMetaEntry(writer, CSV_META_HEADER_SOUNDING_ELEVATIOIN_MODEL_ORIGINAL, sounding.getOldElevationModelUnit());
- }
-
- protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst) {
- writeCSVWaterlevelMetadata(writer, wst, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL);
- }
-
- protected final void writeCSVWaterlevelMetadata(final CSVWriter writer, final WstInfo wst, final String mainLabel) {
- // "##METADATEN WASSERSPIEGELLAGE"
- writeCSVMetaEntry(writer, mainLabel);
-
- // "# Bezeichnung der Wasserspiegellage: "
- writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_NAME, wst.getLabel());
-
- // "# Bezugspegel: "
- writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_GAUGE, wst.getGauge());
-
- // "# Jahr/Zeitraum der Wasserspiegellage: "
- final int year = wst.getYear();
- if (year > 0)
- writeCSVMetaEntry(writer, SInfoI18NStrings.CSV_META_HEADER_WATERLEVEL_YEAR, Integer.toString(year));
- }
-
- @Override
- protected void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results) {
-
- final String calcModeLabel = results.getCalcModeLabel();
- final RiverInfo river = results.getRiver();
- final DoubleRange calcRange = results.getCalcRange();
-
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
-
- // "# FLYS-Version: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
-
- // "# Bearbeiter: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
-
- // "# Datum der Erstellung: "
- final Locale locale = Resources.getLocale(this.context.getMeta());
- final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
-
- // "# Gewässer: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
-
- // "# Höhensystem des Flusses: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
-
- if (calcRange != null) {
- // "# Ort/Bereich (km): "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
- getKmFormatter().format(calcRange.getMaximumDouble()));
- }
- }
-
- @Override
- protected void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results) {
-
- /* general metadata */
- this.addJRMetaDataDefaults(source, results);
-
- final RiverInfo river = results.getRiver();
- final String wstUnitName = river.getWstUnit();
-
- source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
- source.addMetaData("river", river.getName());
- source.addMetaData("river_unit", wstUnitName);
-
- final DoubleRange calcRange = results.getCalcRange();
- final NumberFormat kmFormatter = getKmFormatter();
- final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()), kmFormatter.format(calcRange.getMaximumDouble()));
- source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
- source.addMetaData("range", rangeValue);
-
- /* column headings */
- // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); // moved to
- // super
-
- // TODO: move to subs
- /* column headings */
- source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
- source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
- source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
- }
-
- @Override
- protected void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results) {
-
- source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
- source.addMetaData("calcMode", results.getCalcModeLabel());
-
- source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
- source.addMetaData("version", FLYS.VERSION);
-
- source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
- source.addMetaData("user", results.getUser());
-
- final Locale locale = Resources.getLocale(this.context.getMeta());
- final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
- source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
- source.addMetaData("date", df.format(new Date()));
-
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
- }
-
-}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoLineProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoLineProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoLineProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -19,6 +19,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
import org.dive4elements.river.artifacts.context.RiverContext;
import org.dive4elements.river.artifacts.math.MovingAverage;
import org.dive4elements.river.artifacts.model.ZoomScale;
@@ -29,7 +30,7 @@
import org.dive4elements.river.jfree.StyledXYSeries;
import org.dive4elements.river.themes.ThemeDocument;
-abstract class AbstractSInfoLineProcessor extends AbstractSInfoProcessor {
+abstract class AbstractSInfoLineProcessor extends AbstractSInfoProcessor {
private static final double GAP_DISTANCE = 0.101;
@@ -101,7 +102,7 @@
return MovingAverage.weighted(points, radius);
}
- protected static final Facet createFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ protected static final Facet createFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index, final String axisLabel, final String facetId, final String description) {
final String facetFlowDepthFilteredDescription = Resources.getMsg(context.getMeta(), description, description, result.getLabel());
return new SInfoResultFacet(index, facetId, facetFlowDepthFilteredDescription, axisLabel, ComputeType.ADVANCE, id, hash);
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/D50Processor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/D50Processor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/D50Processor.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,6 +15,7 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
public final class D50Processor extends AbstractSInfoLineProcessor {
@@ -46,8 +47,7 @@
throw new UnsupportedOperationException(error);
}
- public static Facet createD50Facet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
- final int index) {
+ public static Facet createD50Facet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_D50_YAXIS_LABEL, FACET_TKH_D50_FILTERED,
I18N_FACET_TKH_D50_FILTERED_DESCRIPTION);
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentPerYearProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentPerYearProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentPerYearProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,8 +15,9 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
-public final class FlowDepthDevelopmentPerYearProcessor extends AbstractSInfoLineProcessor {
+public final class FlowDepthDevelopmentPerYearProcessor extends AbstractSInfoLineProcessor {
private static final String I18N_AXIS_LABEL = "sinfo.chart.flow_depth_development_per_year.section.yaxis.label";
@@ -47,7 +48,7 @@
}
@Override
- protected double[][] doGetPoints(final AbstractSInfoCalculationResult data, final String facetName) {
+ protected double[][] doGetPoints(final AbstractCalculationResult data, final String facetName) {
if (FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_FILTERED.contentEquals(facetName))
return data.getStationPoints(SInfoResultType.flowdepthDevelopmentPerYear);
@@ -59,13 +60,13 @@
}
public static Facet createFlowDepthDevelopmentFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_YAXIS_LABEL,
FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_FILTERED, FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_FILTERED_DESCRIPTION);
}
public static Facet createFlowDepthDevelopmentRawFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_YAXIS_LABEL,
FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW, FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW_DESCRIPTION);
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthDevelopmentProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,10 +15,11 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
-public final class FlowDepthDevelopmentProcessor extends AbstractSInfoLineProcessor {
+public final class FlowDepthDevelopmentProcessor extends AbstractSInfoLineProcessor {
private static final String I18N_AXIS_LABEL = "sinfo.chart.flow_depth_development.section.yaxis.label";
@@ -57,7 +58,7 @@
}
@Override
- protected double[][] doGetPoints(final AbstractSInfoCalculationResult data, final String facetName) {
+ protected double[][] doGetPoints(final AbstractCalculationResult data, final String facetName) {
if (FACET_FLOW_DEPTH_DEVELOPMENT_FILTERED.contentEquals(facetName))
return data.getStationPoints(SInfoResultType.flowdepthDevelopment);
@@ -75,27 +76,27 @@
}
public static Facet createFlowDepthDevelopmentFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_YAXIS_LABEL,
FACET_FLOW_DEPTH_DEVELOPMENT_FILTERED, FACET_FLOW_DEPTH_DEVELOPMENT_FILTERED_DESCRIPTION);
}
public static Facet createFlowDepthDevelopmentRawFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_YAXIS_LABEL,
FACET_FLOW_DEPTH_DEVELOPMENT_RAW, FACET_FLOW_DEPTH_DEVELOPMENT_RAW_DESCRIPTION);
}
- public static Facet createWaterlevelDifferenceFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createWaterlevelDifferenceFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
final String facetFlowDepthTkhFilteredDescription = Resources.getMsg(context.getMeta(), FACET_WATERLEVEL_DIFFERENCE_FILTERED_DESCRIPTION,
FACET_WATERLEVEL_DIFFERENCE_FILTERED_DESCRIPTION, result.getLabel());
return new SInfoResultFacet(index, FACET_WATERLEVEL_DIFFERENCE_FILTERED, facetFlowDepthTkhFilteredDescription,
SINFO_CHART_FLOW_DEPTH_DEVELOPMENT_YAXIS_LABEL, ComputeType.ADVANCE, id, hash);
}
- public static Facet createBedHeightDifferenceFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createBedHeightDifferenceFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
final String facetFlowDepthFilteredDescription = Resources.getMsg(context.getMeta(), FACET_BEDHEIGHT_DIFFERENCE_FILTERED_DESCRIPTION,
FACET_BEDHEIGHT_DIFFERENCE_FILTERED_DESCRIPTION, result.getLabel());
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/FlowDepthProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,8 +15,9 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
-public final class FlowDepthProcessor extends AbstractSInfoLineProcessor {
+public final class FlowDepthProcessor extends AbstractSInfoLineProcessor {
private static final String AXIS_LABEL = "sinfo.chart.flow_depth.section.yaxis.label";
@@ -102,7 +103,7 @@
}
@Override
- protected double[][] doGetPoints(final AbstractSInfoCalculationResult data, final String facetName) {
+ protected double[][] doGetPoints(final AbstractCalculationResult data, final String facetName) {
if (FACET_FLOW_DEPTH_FILTERED.contentEquals(facetName))
return data.getStationPoints(SInfoResultType.flowdepth);
@@ -138,74 +139,74 @@
throw new UnsupportedOperationException(error);
}
- public static Facet createFlowDepthFilteredFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ public static Facet createFlowDepthFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_FILTERED,
FACET_FLOW_DEPTH_FILTERED_DESCRIPTION);
}
- public static Facet createFlowDepthRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ public static Facet createFlowDepthRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_RAW,
FACET_FLOW_DEPTH_RAW_DESCRIPTION);
}
- public static Facet createFlowDepthTkhFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createFlowDepthTkhFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_TKH_FILTERED,
FACET_FLOW_DEPTH_TKH_FILTERED_DESCRIPTION);
}
- public static Facet createFlowDepthTkhRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ public static Facet createFlowDepthTkhRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_TKH_RAW,
FACET_FLOW_DEPTH_TKH_RAW_DESCRIPTION);
}
- public static Facet createFlowDepthMinFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createFlowDepthMinFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MIN_FILTERED,
FACET_FLOW_DEPTH_MIN_FILTERED_DESCRIPTION);
}
- public static Facet createFlowDepthMinRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ public static Facet createFlowDepthMinRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MIN_RAW,
FACET_FLOW_DEPTH_MIN_RAW_DESCRIPTION);
}
- public static Facet createFlowDepthMaxFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createFlowDepthMaxFilteredFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MAX_FILTERED,
FACET_FLOW_DEPTH_MAX_FILTERED_DESCRIPTION);
}
- public static Facet createFlowDepthMaxRawFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ public static Facet createFlowDepthMaxRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_MAX_RAW,
FACET_FLOW_DEPTH_MAX_RAW_DESCRIPTION);
}
public static Facet createFlowDepthCurrentFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_CURRENT_FILTERED,
FACET_FLOW_DEPTH_CURRENT_FILTERED_DESCRIPTION);
}
- public static Facet createFlowDepthCurrentRawFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createFlowDepthCurrentRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_CURRENT_RAW,
FACET_FLOW_DEPTH_CURRENT_RAW_DESCRIPTION);
}
public static Facet createFlowDepthHistoricalFilteredFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL,
FACET_FLOW_DEPTH_HISTORICAL_FILTERED, FACET_FLOW_DEPTH_HISTORICAL_FILTERED_DESCRIPTION);
}
- public static Facet createFlowDepthHistoricalRawFacet(final CallContext context, final String hash, final String id,
- final AbstractSInfoCalculationResult result, final int index) {
+ public static Facet createFlowDepthHistoricalRawFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
+ final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_FLOW_DEPTH_YAXIS_LABEL, FACET_FLOW_DEPTH_HISTORICAL_RAW,
FACET_FLOW_DEPTH_HISTORICAL_RAW_DESCRIPTION);
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoI18NStrings.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoI18NStrings.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoI18NStrings.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,15 +14,13 @@
*
* @author Gernot Belger
*/
-interface SInfoI18NStrings {
-
+public interface SInfoI18NStrings {
+ // TODO: MAKE interface package-visible again:-)
// TODO: Strings werden nur einmal verwenden; direkte Verwendung auch denkbar. Liste ist nicht vollständig
String CSV_META_HEADER_WATERLEVEL_GAUGE = "sinfo.export.flow_depth.csv.meta.header.waterlevel.gauge";
String CSV_META_HEADER_WATERLEVEL_YEAR = "sinfo.export.flow_depth.csv.meta.header.waterlevel.year";
- String CSV_META_HEADER_EVALUATOR = "sinfo.export.flow_depth.csv.meta.header.sounding.evaluator";
-
String CSV_MEAN_BED_HEIGHT_HEADER = "sinfo.export.flow_depth.csv.header.mean_bed_height";
String CSV_MEAN_BED_HEIGHT_HEADER_SHORT = "sinfo.export.flow_depth.csv.header.mean_bed_height.short";
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TauProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TauProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TauProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,6 +15,7 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
public final class TauProcessor extends AbstractSInfoLineProcessor {
@@ -46,8 +47,7 @@
throw new UnsupportedOperationException(error);
}
- public static Facet createTauFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
- final int index) {
+ public static Facet createTauFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_TAU_YAXIS_LABEL, FACET_TKH_TAU_FILTERED,
I18N_FACET_TKH_TAU_FILTERED_DESCRIPTION);
}
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TkhProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TkhProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/TkhProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -16,6 +16,7 @@
import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
import org.dive4elements.river.exports.DiagramGenerator;
@@ -75,8 +76,7 @@
return null;
}
- public static Facet createTkhFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
- final int index) {
+ public static Facet createTkhFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) {
final String facetTkhDescription = Resources.getMsg(context.getMeta(), I18N_FACET_TKH_DESCRIPTION, I18N_FACET_TKH_DESCRIPTION, result.getLabel());
return new SInfoResultFacet(index, TkhProcessor.FACET_TKH, facetTkhDescription, TkhProcessor.SINFO_CHART_TKX_YAXIS_LABEL, ComputeType.ADVANCE, id,
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/VelocityProcessor.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/VelocityProcessor.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/VelocityProcessor.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,6 +15,7 @@
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifacts.CallContext;
+import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
public final class VelocityProcessor extends AbstractSInfoLineProcessor {
@@ -46,7 +47,7 @@
throw new UnsupportedOperationException(error);
}
- public static Facet createVelocityFacet(final CallContext context, final String hash, final String id, final AbstractSInfoCalculationResult result,
+ public static Facet createVelocityFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result,
final int index) {
return AbstractSInfoLineProcessor.createFacet(context, hash, id, result, index, SINFO_CHART_VELOCITY_YAXIS_LABEL, FACET_TKH_VELOCITY_FILTERED,
I18N_FACET_TKH_VELOCITY_FILTERED_DESCRIPTION);
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculation.java Thu Jun 14 16:56:31 2018 +0200
@@ -18,7 +18,6 @@
import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
import org.dive4elements.river.artifacts.sinfo.tkhstate.WinfoArtifactWrapper;
import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
import org.dive4elements.river.model.River;
@@ -39,7 +38,6 @@
/* access input data */
final FloodDurationAccess access = new FloodDurationAccess(sinfo);
final River river = access.getRiver();
- final RiverInfo riverInfo = new RiverInfo(river);
final DoubleRange calcRange = access.getRange();
@@ -50,15 +48,13 @@
final String calcModeLabel = Resources.getMsg(this.context.getMeta(), sinfo.getCalculationMode().name());
+ // TODO: use enum for riverside
final String riverside = access.getRiverside();
- final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange, riverside); // TODO: add
- // more
+ // more
// TODO: mis- ups.. re-use WINFO Artifact as in TkhState
final WinfoArtifactWrapper winfo = new WinfoArtifactWrapper(sinfo);
// winfo.computeWaterlevelData();
- final FloodDurationCalculationResult result = calculateResult(calcRange, infoProvider, problems);
-
- results.addResult(result, problems);
+ final FloodDurationCalculationResults results = calculateResult(calcModeLabel, riverside, calcRange, infoProvider, user, problems);
return new CalculationResult(results, problems);
}
@@ -66,16 +62,20 @@
/**
* Calculates FAKE Flood Duration
*
+ * @param riverside
+ * @param calcModeLabel
+ * @param user
+ *
* @param infoProvider
*/
- private FloodDurationCalculationResult calculateResult(final DoubleRange calcRange, final RiverInfoProvider riverInfoProvider, final Calculation problems) {
+ private FloodDurationCalculationResults calculateResult(final String calcModeLabel, final String riverside, final DoubleRange calcRange,
+ final RiverInfoProvider riverInfoProvider, final String user, final Calculation problems) {
- final FloodDurationCalculator calculator = new FloodDurationCalculator(riverInfoProvider);
+ final FloodDurationCalculator calculator = new FloodDurationCalculator(this.context, riverInfoProvider);
final String wspLabel = "WSP-Name";// wstKms.getName();
final int wspYear = 9999; // waterlevel.getYear();
final WstInfo wstInfo = new WstInfo(wspLabel, wspYear, riverInfoProvider.getReferenceGauge());
final String label = String.format("%s - %s", wspLabel, " soundingLabel");
- return calculator.execute(label, wstInfo, calcRange);
+ return calculator.execute(problems, label, wstInfo, calcModeLabel, calcRange, riverside, user);
}
-
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,10 +9,19 @@
*/
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.AbstractCalculationResults;
+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.AbstractSInfoCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
/**
@@ -20,19 +29,170 @@
*
* @author Gernot Belger
*/
-final class FloodDurationCalculationResult extends AbstractSInfoCalculationResult {
+final class FloodDurationCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
- private final int waterlevelCount;
+ private final int waterlevelCount; // TODO: ggf 2 verschiedene Result-Klassen?
+ private final WstInfo wstInfo;
+ private final int maxWaterlevelPdf = 3;
+
+ private enum ExportMode {
+ pdf, csv
+ }
public FloodDurationCalculationResult(final String label, final WstInfo wstInfo, final Collection rows, final int waterlevelCount) {
- super(label, wstInfo, rows);
+ super(label, rows);
this.waterlevelCount = waterlevelCount;
+ this.wstInfo = wstInfo;
+ }
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(99);
+
+ 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.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));
+ }
+
+ 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 AbstractCalculationResults results) {
+
+ exportContextCSV.writeCSVWaterlevelMetadata(this.wstInfo); // TODO: Abweichend vom Allgemeinen werden hier andere Felder benötigt bei den
+ // Wasserspiegellagen
+ exportContextCSV.writeBlankLine();
+ // writer.writeNext(new String[] { "" }); // break line
}
- public int getWaterlevelCount() {
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final ResultRow row) {
+ // TODO Auto-generated method stub
+ return formatRow(exportContextCSV, results, row, ExportMode.csv);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextCSV, final AbstractCalculationResults 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";
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextCSV, final MetaAndTableJRDataSource source, final AbstractCalculationResults 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");
+ }
+
+ 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;
}
+ private String[] formatRow(final ExportContextCSV exportContextCSV, final AbstractCalculationResults results, final ResultRow row, final ExportMode mode) {
+
+ final Collection 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 waterlevelList = (List) 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;
+
+ final DurationWaterlevel item = waterlevelList.get(i);
+ lines.add(item.getWFormatted(wFormatter));
+ lines.add(item.getFloodDurDaysPerYearFormatted());
+ lines.add(item.getQFormatted(qFormatter));
+ lines.add(item.getBezeichnung());
+ }
+ }
+
+ if ((this.waterlevelCount == 0 || this.waterlevelCount == 2) && mode == ExportMode.pdf) {
+ lines.add("dummy");
+ lines.add("dummy");
+ lines.add("dummy");
+ lines.add("dummy");
+ }
+
+ 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();
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,13 +10,14 @@
package org.dive4elements.river.artifacts.sinfo.flood_duration;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Gernot Belger
*/
-final class FloodDurationCalculationResults extends AbstractSInfoCalculationResults {
+final class FloodDurationCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
@@ -25,7 +26,7 @@
public FloodDurationCalculationResults(final String calcModeLabel, final String user, final RiverInfo river, final DoubleRange calcRange,
final String riverside) {
super(calcModeLabel, user, river, calcRange);
- this.riverside = riverside;
+ this.riverside = riverside; // lieber in Result?
}
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationCalculator.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,10 +14,13 @@
import java.util.List;
import org.apache.commons.lang.math.DoubleRange;
+import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.common.GeneralResultType;
import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.sinfo.common.RiverInfoProvider;
import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
/**
@@ -29,18 +32,27 @@
private final RiverInfoProvider riverInfoProvider;
- public FloodDurationCalculator(final RiverInfoProvider riverInfoProvider) {
+ private final CallContext context;
+ public FloodDurationCalculator(final CallContext context, final RiverInfoProvider riverInfoProvider) {
+ this.context = context;
this.riverInfoProvider = riverInfoProvider;
-
}
- public FloodDurationCalculationResult execute(final String label, final WstInfo wstInfo, final DoubleRange calcRange) {
+ public FloodDurationCalculationResults execute(final Calculation problems, final String label, final WstInfo wstInfo, final String calcModeLabel,
+ final DoubleRange calcRange, final String riverside, final String user) {
calculateResultRow(8888.888);
calculateResultRow(99);
calculateResultRow(77);
- return new FloodDurationCalculationResult(label, wstInfo, this.rows, 4);
+
+ final FloodDurationCalculationResult result = new FloodDurationCalculationResult(label, wstInfo, this.rows, 4);
+
+ final RiverInfo riverInfo = new RiverInfo(this.riverInfoProvider.getRiver());
+
+ final FloodDurationCalculationResults results = new FloodDurationCalculationResults(calcModeLabel, user, riverInfo, calcRange, riverside);
+ results.addResult(result, problems);
+ return results;
}
private void calculateResultRow(final double station) {
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,21 +9,14 @@
package org.dive4elements.river.artifacts.sinfo.flood_duration;
import java.io.OutputStream;
-import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.JasperDesigner;
import org.dive4elements.river.artifacts.common.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -35,149 +28,31 @@
* @author Gernot Belger
*/
// REMARK: must be public because its registered in generators.xml
-public class FloodDurationExporter extends AbstractSInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(FloodDurationExporter.class);
-
- private final String getJasperFile(final int waterlevelCount) {
- if (waterlevelCount <= 1)
- return "/jasper/templates/sinfo.floodduration.jrxml"; // TODO use jrxml-path all over the project
- else
- return "/jasper/templates/sinfo.floodduration2.jrxml";
- }
-
- private static final int maxPdfWspls = 3;
-
- @Override
- protected Logger getLog() {
- return log;
- }
-
- @Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final FloodDurationCalculationResults results) {
- log.info("FloodDurationExporter.writeCSVMeta");
- super.writeCSVGlobalMetadataDefaults(writer, results);
- }
+public class FloodDurationExporter extends AbstractCommonExporter {
@Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final FloodDurationCalculationResults results, final FloodDurationCalculationResult result) {
-
- final WstInfo wst = result.getWst();
- super.writeCSVWaterlevelMetadata(writer, wst); // TODO: Abweichend vom Allgemeinen werden hier andere Felder benötigt bei den Wasserspiegellagen
-
- writer.writeNext(new String[] { "" }); // break line
-
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final FloodDurationCalculationResults results, final RiverInfo river) {
- log.info("FloodDurationExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(99);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- header.add(msg(SInfoResultType.riverside.getCsvHeader()));
- header.add(msg(SInfoResultType.inundationduration.getCsvHeader()));
- header.add(msg(SInfoResultType.inundationdurationq.getCsvHeader()));
- header.add(msg(SInfoResultType.infrastructureHeight.getCsvHeader()));
- header.add(msg(SInfoResultType.infrastructuretype.getCsvHeader()));
- // add dynamic headers
- final int waterlevelCount = 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(msg(DurationWaterlevel.getHeaderW(), new Object[] { appendIndex, "results.getRiver().getWstUnit()" }));
- header.add(msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args));
- header.add(msg(DurationWaterlevel.getHeaderQ(), args));
- header.add(msg(DurationWaterlevel.getHeaderBezeichn(), args));
- }
-
- header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.location.getCsvHeader()));
-
- writer.writeNext(header.toArray(new String[header.size()]));
- }
+ protected void doWritePdf(final OutputStream out, final FloodDurationCalculationResults results) {
- private int getWaterlevelCount() {
- final FloodDurationCalculationResults results = getData();
- if (results != null) {
- final List list = results.getResults();
- if (list != null && list.size() > 0) {
- final FloodDurationCalculationResult result = list.get(0);
- return result.getWaterlevelCount();
- }
- }
- return 0;
- }
-
- @Override
- protected String[] formatRow(final FloodDurationCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(99);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
- lines.add(row.exportValue(this.context, SInfoResultType.riverside));
- lines.add(row.exportValue(this.context, SInfoResultType.inundationduration));
- lines.add(row.exportValue(this.context, SInfoResultType.inundationdurationq));
- lines.add(row.exportValue(this.context, SInfoResultType.infrastructureHeight));
- lines.add(row.exportValue(this.context, SInfoResultType.infrastructuretype));
-
- final int waterlevelcount = this.getWaterlevelCount();
-
- final List waterlevelList = (List) row.getValue(SInfoResultType.customMultiRowColWaterlevel);
- if (waterlevelList != null) {
- final NumberFormat wFormatter = getFlowDepthFormatter();
- final NumberFormat qFormatter = getQFormatter();
-
- for (int i = 0; i < waterlevelList.size(); i++) {
+ // TODO: Move to super (hier ist aber spezieller code drin...)
+ try {
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
- if (i == FloodDurationExporter.maxPdfWspls && mode == ExportMode.pdf)
- break;
-
- final DurationWaterlevel item = waterlevelList.get(i);
- lines.add(item.getWFormatted(wFormatter));
- lines.add(item.getFloodDurDaysPerYearFormatted());
- lines.add(item.getQFormatted(qFormatter));
- lines.add(item.getBezeichnung());
- }
- }
-
- if ((waterlevelcount == 0 || waterlevelcount == 2) && mode == ExportMode.pdf) {
- lines.add("dummy");
- lines.add("dummy");
- lines.add("dummy");
- lines.add("dummy");
- }
+ final JasperReporter reporter = new JasperReporter();
- lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.location));
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
- try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
- final JasperReporter reporter = new JasperReporter();
- final int waterlevelCount = getWaterlevelCount();
- final JasperDesigner design = reporter.addReport(getJasperFile(waterlevelCount), source);
-
- if (waterlevelCount == 0 || waterlevelCount == 2) {
- design.removeColumn("wOpt");
- design.removeColumn("qOpt");
- design.removeColumn("bezOpt");
- design.removeColumn("durOpt");
+ final JasperDesigner design = result.addReport(exportContextCSV, results, reporter, source);
+ if (result instanceof FloodDurationCalculationResult) {
+ final int wlCount = ((FloodDurationCalculationResult) result).getWaterlevelCount();
+ if (wlCount == 0 || wlCount == 2) {
+ design.removeColumn("wOpt");
+ design.removeColumn("qOpt");
+ design.removeColumn("bezOpt");
+ design.removeColumn("durOpt");
+ }
+ }
}
reporter.exportPDF(out);
@@ -185,53 +60,40 @@
catch (final JRException je) {
getLog().warn("Error generating PDF Report!", je);
}
+
}
@Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FloodDurationCalculationResults results) {
-
- /* general metadata */
- super.addJRMetaData(source, results);
-
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
- source.addMetaData("riverside_header", SInfoResultType.riverside.getPdfHeader(this.context.getMeta()));
- source.addMetaData("inundationduration_header", SInfoResultType.inundationduration.getPdfHeader(this.context.getMeta()));
- source.addMetaData("inundationduration_q_header", SInfoResultType.inundationdurationq.getPdfHeader(this.context.getMeta()));
- source.addMetaData("infrastructure_height_header", SInfoResultType.infrastructureHeightFloodDur.getPdfHeader(this.context.getMeta()));
- source.addMetaData("infrastructure_type_header", SInfoResultType.infrastructuretype.getPdfHeader(this.context.getMeta()));
-
- // add dynamic headers
-
- final int waterlevelCount = getWaterlevelCount() > FloodDurationExporter.maxPdfWspls ? FloodDurationExporter.maxPdfWspls : getWaterlevelCount();
+ protected void doWriteCSVData(final CSVWriter writer, final FloodDurationCalculationResults results) {
+ // TODO: Diesen Ablauf in super?
- if (waterlevelCount == 0 || waterlevelCount == 2) {
- source.addMetaData("dummy", "dummy");
- source.addMetaData("dummy", "dummy");
- source.addMetaData("dummy", "dummy");
- source.addMetaData("dummy", "dummy");
- }
-
- for (int i = 0; i < waterlevelCount; i++) {
- final int naturalIndex = i + 1;
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
- final Object[] args = new String[] { new StringBuilder().append("_").append(naturalIndex).toString() };
- source.addMetaData(getPdfHeader("w", naturalIndex), msg(DurationWaterlevel.getHeaderW(), args));
- source.addMetaData(getPdfHeader("duration", naturalIndex), msg(DurationWaterlevel.getHeaderFloodDurPerYear(), args));
- source.addMetaData(getPdfHeader("q", naturalIndex), msg(DurationWaterlevel.getHeaderQ(), args));
- source.addMetaData(getPdfHeader("bezeichnung", naturalIndex), msg(DurationWaterlevel.getHeaderBezeichn(), args));
+ getLog().info("writeCSVData");
- }
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
- source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
}
- 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();
- }
-
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationState.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,6 +14,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
import org.dive4elements.river.artifacts.model.EmptyFacet;
@@ -72,10 +73,10 @@
final FloodDurationCalculationResults results = (FloodDurationCalculationResults) res.getData();
/* add themes for chart, for each result */
- final List resultList = results.getResults();
+ final List> resultList = results.getResults();
for (int index = 0; index < resultList.size(); index++) {
- final FloodDurationCalculationResult result = resultList.get(index);
+ final AbstractCalculationExportableResult result = resultList.get(0);
/* filtered (zoom dependent mean) flow depth TODO: */
// facets.add(FloodDurationProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,11 +9,17 @@
*/
package org.dive4elements.river.artifacts.sinfo.flowdepth;
+import java.util.ArrayList;
import java.util.Collection;
+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.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
/**
@@ -21,20 +27,130 @@
*
* @author Gernot Belger
*/
-final class FlowDepthCalculationResult extends AbstractTkhCalculationResult {
+final class FlowDepthCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+ private enum ExportMode { // TODO; nicht ständig kopieren
+ pdf, csv
+ }
+
+ private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepth.jrxml"; // TODO use jrxml-path all over the project
+
private final BedHeightInfo sounding;
+ private final WstInfo wst;
+ private final boolean hasTkh;
public FlowDepthCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding, final boolean hasTkh,
final Collection rows) {
- super(label, wst, hasTkh, rows);
+ super(label, rows);
this.sounding = sounding;
+ this.wst = wst;
+ this.hasTkh = hasTkh;
}
public BedHeightInfo getSounding() {
return this.sounding;
}
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final RiverInfo river) {
+ // getLog().info("FlowDepthExporter.writeCSVHeader");
+
+ final Collection header = new ArrayList<>(11);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepth));
+
+ if (this.hasTkh()) {
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthtkh));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.tkh));
+ }
+
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.meanBedHeight));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results) {
+
+ exportContextCSV.writeCSVSoundingMetadata(this.sounding);
+
+ exportContextCSV.writeBlankLine();// .writeNext(new String[] { "" }); // break line
+
+ exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
+
+ exportContextCSV.writeBlankLine();// .writeNext(new String[] { "" }); // break line
+
+ }
+
+ @Override
+ protected String getJasperFile() {
+ return JASPER_FILE;
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final ResultRow row) {
+ return formatRow(ExportMode.csv, exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthCalculationResults results, final ResultRow row) {
+
+ return formatRow(ExportMode.pdf, exportContextPDF, results, row);
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final FlowDepthCalculationResults results) {
+
+ /* column headings */
+ exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+ exportContextPDF.addJRMetadata(source, "flowdepth_header", SInfoResultType.flowdepth);
+ exportContextPDF.addJRMetadata(source, "flowdepth_tkh_header", SInfoResultType.flowdepthtkh);
+ exportContextPDF.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+ exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+ exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+ exportContextPDF.addJRMetadata(source, "waterlevel_name_header", SInfoResultType.waterlevelLabel);
+ exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+ exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+ exportContextPDF.addJRMetadata(source, "sounding_name_header", SInfoResultType.soundingLabel);
+ exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+ }
+
+ public boolean hasTkh() {
+ return this.hasTkh;
+ }
+
+ private String[] formatRow(final ExportMode mode, final ExportContextCSV exportContextCSV, final FlowDepthCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(11);
+
+ lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepth));
+
+ if (mode == ExportMode.pdf || results.isUseTkh()) {
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthtkh));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.tkh));
+ }
+
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.discharge));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelLabel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.meanBedHeight));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.soundingLabel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,13 +10,14 @@
package org.dive4elements.river.artifacts.sinfo.flowdepth;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Gernot Belger
*/
-final class FlowDepthCalculationResults extends AbstractSInfoCalculationResults {
+final class FlowDepthCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
@@ -32,4 +33,5 @@
public boolean isUseTkh() {
return this.useTkh;
}
+
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,20 +9,14 @@
package org.dive4elements.river.artifacts.sinfo.flowdepth;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.JasperDesigner;
import org.dive4elements.river.artifacts.common.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
-import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -34,139 +28,67 @@
* @author Gernot Belger
*/
// REMARK: must be public because its registered in generators.xml
-public class FlowDepthExporter extends AbstractSInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(FlowDepthExporter.class);
-
- private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepth.jrxml"; // TODO use jrxml-path all over the project
+public class FlowDepthExporter extends AbstractCommonExporter {
@Override
- protected Logger getLog() {
- return log;
- }
+ protected void doWriteCSVData(final CSVWriter writer, final FlowDepthCalculationResults results) {
+ // TODO: Diesen Ablauf in super?
- @Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthCalculationResults results) {
- log.info("FlowDepthExporter.writeCSVMeta");
- super.writeCSVGlobalMetadataDefaults(writer, results);
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
}
@Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthCalculationResults results, final FlowDepthCalculationResult result) {
-
- final BedHeightInfo sounding = result.getSounding();
- super.writeCSVSoundingMetadata(writer, sounding);
-
- writer.writeNext(new String[] { "" }); // break line
-
- final WstInfo wst = result.getWst();
- super.writeCSVWaterlevelMetadata(writer, wst);
-
- writer.writeNext(new String[] { "" }); // break line
-
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final FlowDepthCalculationResults results, final RiverInfo river) {
- log.info("FlowDepthExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(11);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
-
- if (results.isUseTkh()) {
- header.add(msgUnit(SInfoResultType.flowdepthtkh.getCsvHeader(), SInfoResultType.flowdepthtkh.getUnit()));
- header.add(msgUnit(SInfoResultType.tkh.getCsvHeader(), SInfoResultType.tkh.getUnit()));
- }
-
- header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
- header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
- header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
- header.add(msg(SInfoResultType.soundingLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.location.getCsvHeader()));
+ protected void doWritePdf(final OutputStream out, final FlowDepthCalculationResults results) {
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param pdf
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final FlowDepthCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(11);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepth));
-
- if (mode == ExportMode.pdf || getData().isUseTkh()) {
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthtkh));
- lines.add(row.exportValue(this.context, SInfoResultType.tkh));
- }
+ // TODO: Move to super? Maybe not, hier gibt es unterschiede -> design remove columns
+ try {
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
- lines.add(row.exportValue(this.context, SInfoResultType.discharge));
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
- lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.location));
-
- return lines.toArray(new String[lines.size()]);
- }
+ final JasperReporter reporter = new JasperReporter();
- @Override
- protected void writePDF(final OutputStream out) {
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
- try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
- final JasperReporter reporter = new JasperReporter();
- final JasperDesigner design = reporter.addReport(JASPER_FILE, source);
-
- if (!getData().isUseTkh()) {
- design.removeColumn("tkh");
- design.removeColumn("flowdepthtkh");
+ final JasperDesigner design = result.addReport(exportContextCSV, results, reporter, source);
+ if (result instanceof FlowDepthCalculationResult) {
+ if (!((FlowDepthCalculationResult) result).hasTkh()) {
+ design.removeColumn("tkh");
+ design.removeColumn("flowdepthtkh");
+ }
+ }
+ reporter.exportPDF(out);
}
- reporter.exportPDF(out);
}
catch (final JRException je) {
getLog().warn("Error generating PDF Report!", je);
}
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthCalculationResults results) {
-
- /* general metadata */
- super.addJRMetaData(source, results);
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
- source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
- source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
}
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/FlowDepthState.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,6 +14,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
@@ -76,10 +77,10 @@
final FlowDepthCalculationResults results = (FlowDepthCalculationResults) res.getData();
/* add themes for chart, for each result */
- final List resultList = results.getResults();
+ final List> resultList = results.getResults();
for (int index = 0; index < resultList.size(); index++) {
- final FlowDepthCalculationResult result = resultList.get(index);
+ final FlowDepthCalculationResult result = (FlowDepthCalculationResult) resultList.get(index);
/* filtered (zoom dependent mean) flow depth */
facets.add(FlowDepthProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,11 +9,17 @@
*/
package org.dive4elements.river.artifacts.sinfo.flowdepthdev;
+import java.util.ArrayList;
import java.util.Collection;
+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.AbstractSInfoCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
/**
@@ -21,10 +27,20 @@
*
* @author Gernot Belger
*/
-final class FlowDepthDevelopmentCalculationResult extends AbstractSInfoCalculationResult {
+final class FlowDepthDevelopmentCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+ private static final String CSV_META_HEADER_SOUNDING_CURRENT = "sinfo.export.csv.meta.header.sounding.current";
+
+ private static final String CSV_META_HEADER_SOUNDING_HISTORICAL = "sinfo.export.csv.meta.header.sounding.historical";
+
+ private static final String CSV_META_HEADER_WATERLEVEL_CURRENT = "sinfo.export.csv.meta.header.waterlevel.current";
+
+ private static final String CSV_META_HEADER_WATERLEVEL_HISTORICAL = "sinfo.export.csv.meta.header.waterlevel.historical";
+
+ private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthdevelopment.jrxml";
+
private final BedHeightInfo currentSounding;
private final BedHeightInfo historicalSounding;
@@ -34,9 +50,8 @@
private final WstInfo currentWst;
public FlowDepthDevelopmentCalculationResult(final String label, final WstInfo currentWst, final WstInfo historicalWst, final BedHeightInfo currentSounding,
- final BedHeightInfo historicalSounding, final Collection< ResultRow> rows) {
- // TODO: bad abstraction if we give null here...
- super(label, null, rows);
+ final BedHeightInfo historicalSounding, final Collection rows) {
+ super(label, rows);
this.currentWst = currentWst;
this.historicalWst = historicalWst;
@@ -92,4 +107,93 @@
append(this.historicalSounding.getDescription()). //
toString();
}
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results) {
+
+ exportContextCSV.writeCSVSoundingMetadata(getCurrentSounding(), CSV_META_HEADER_SOUNDING_CURRENT);
+ exportContextCSV.writeBlankLine();
+ exportContextCSV.writeCSVWaterlevelMetadata(getCurrentWst(), CSV_META_HEADER_WATERLEVEL_CURRENT);
+ exportContextCSV.writeBlankLine();
+ exportContextCSV.writeCSVSoundingMetadata(getHistoricalSounding(), CSV_META_HEADER_SOUNDING_HISTORICAL);
+ exportContextCSV.writeBlankLine();
+ exportContextCSV.writeCSVWaterlevelMetadata(getHistoricalWst(), CSV_META_HEADER_WATERLEVEL_HISTORICAL);
+ exportContextCSV.writeBlankLine();
+
+ }
+
+ @Override
+ protected String getJasperFile() {
+ return JASPER_FILE;
+ }
+
+ protected String[] formatRow(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(10);
+
+ lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthDevelopment));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthDevelopmentPerYear));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelDifference));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.bedHeightDifference));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthCurrent));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthHistorical));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(11);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthDevelopment, SInfoResultType.flowdepthDevelopment.getUnit()));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthDevelopmentPerYear, SInfoResultType.flowdepthDevelopmentPerYear.getUnit()));
+ header.add(exportContextCSV.msgUnitLabel(SInfoResultType.waterlevelDifference, getWaterlevelDifferenceLabel()));
+ header.add(exportContextCSV.msgUnitLabel(SInfoResultType.bedHeightDifference, getBedHeightDifferenceLabel()));
+ header.add(exportContextCSV.msgUnitLabel(SInfoResultType.flowdepthCurrent, getFlowDepthCurrentLabel()));
+ header.add(exportContextCSV.msgUnitLabel(SInfoResultType.flowdepthHistorical, getFlowDepthHistoricalLabel()));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthDevelopmentCalculationResults results, final ResultRow row) {
+
+ return this.formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthDevelopmentCalculationResults results, final ResultRow row) {
+
+ return this.formatRow(exportContextPDF, results, row);
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+ final FlowDepthDevelopmentCalculationResults results) {
+ /* column headings */
+ exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+ exportContextPDF.addJRMetadata(source, "flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment);
+ exportContextPDF.addJRMetadata(source, "flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear);
+
+ exportContextPDF.addJRMetadata(source, "waterleveldifference_header", SInfoResultType.waterlevelDifference);
+ exportContextPDF.addJRMetadata(source, "waterleveldifference_header2", getWaterlevelDifferenceLabel());
+
+ exportContextPDF.addJRMetadata(source, "bedheightdifference_header", SInfoResultType.bedHeightDifference);
+ exportContextPDF.addJRMetadata(source, "bedheightdifference_header2", getBedHeightDifferenceLabel());
+
+ exportContextPDF.addJRMetadata(source, "flowdepthcurrent_header", SInfoResultType.flowdepthCurrent);
+ exportContextPDF.addJRMetadata(source, "flowdepthcurrent_header2", getFlowDepthCurrentLabel());
+
+ exportContextPDF.addJRMetadata(source, "flowdepthhistorical_header", SInfoResultType.flowdepthHistorical);
+ exportContextPDF.addJRMetadata(source, "flowdepthhistorical_header2", getFlowDepthHistoricalLabel());
+
+ exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -12,13 +12,14 @@
import java.util.List;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Gernot Belger
*/
-final class FlowDepthDevelopmentCalculationResults extends AbstractSInfoCalculationResults {
+final class FlowDepthDevelopmentCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
@@ -30,10 +31,10 @@
* We know that this type of results only has one result member, so we can directly access it.
*/
public FlowDepthDevelopmentCalculationResult getResult() {
- final List results = getResults();
+ final List> results = getResults();
if (results.size() < 1)
return null;
- return results.get(0);
+ return (FlowDepthDevelopmentCalculationResult) results.get(0);
}
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,15 +9,12 @@
package org.dive4elements.river.artifacts.sinfo.flowdepthdev;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
@@ -31,142 +28,63 @@
* @author Gernot Belger
*/
// REMARK: must be public because its registered in generators.xml
-public class FlowDepthDevelopmentExporter extends AbstractSInfoExporter {
-
- private static final String CSV_META_HEADER_SOUNDING_CURRENT = "sinfo.export.csv.meta.header.sounding.current";
-
- private static final String CSV_META_HEADER_SOUNDING_HISTORICAL = "sinfo.export.csv.meta.header.sounding.historical";
-
- private static final String CSV_META_HEADER_WATERLEVEL_CURRENT = "sinfo.export.csv.meta.header.waterlevel.current";
-
- private static final String CSV_META_HEADER_WATERLEVEL_HISTORICAL = "sinfo.export.csv.meta.header.waterlevel.historical";
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(FlowDepthDevelopmentExporter.class);
-
- private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthdevelopment.jrxml";
+public class FlowDepthDevelopmentExporter extends AbstractCommonExporter {
@Override
- protected Logger getLog() {
- return log;
- }
-
- @Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results,
- final FlowDepthDevelopmentCalculationResult result) {
+ protected void doWriteCSVData(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results) {
+ // TODO: Diesen Ablauf in super?
- writeCSVSoundingMetadata(writer, result.getCurrentSounding(), CSV_META_HEADER_SOUNDING_CURRENT);
- writer.writeNext(new String[] { "" }); // break line
- writeCSVWaterlevelMetadata(writer, result.getCurrentWst(), CSV_META_HEADER_WATERLEVEL_CURRENT);
- writer.writeNext(new String[] { "" }); // break line
- writeCSVSoundingMetadata(writer, result.getHistoricalSounding(), CSV_META_HEADER_SOUNDING_HISTORICAL);
- writer.writeNext(new String[] { "" }); // break line
- writeCSVWaterlevelMetadata(writer, result.getHistoricalWst(), CSV_META_HEADER_WATERLEVEL_HISTORICAL);
- writer.writeNext(new String[] { "" }); // break line
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
}
@Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results) {
- super.writeCSVGlobalMetadataDefaults(writer, results);
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final FlowDepthDevelopmentCalculationResults results, final RiverInfo river) {
- log.info("FlowDepthExporter.writeCSVHeader");
-
- final FlowDepthDevelopmentCalculationResult result = results.getResult();
-
- final Collection header = new ArrayList<>(11);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.flowdepthDevelopment.getCsvHeader(), SInfoResultType.flowdepthDevelopment.getUnit()));
- header.add(msgUnit(SInfoResultType.flowdepthDevelopmentPerYear.getCsvHeader(), SInfoResultType.flowdepthDevelopmentPerYear.getUnit()));
- header.add(msgUnitLabel(SInfoResultType.waterlevelDifference.getCsvHeader(), SInfoResultType.waterlevelDifference.getUnit(),
- result.getWaterlevelDifferenceLabel()));
- header.add(msgUnitLabel(SInfoResultType.bedHeightDifference.getCsvHeader(), SInfoResultType.bedHeightDifference.getUnit(),
- result.getBedHeightDifferenceLabel()));
- header.add(
- msgUnitLabel(SInfoResultType.flowdepthCurrent.getCsvHeader(), SInfoResultType.flowdepthCurrent.getUnit(), result.getFlowDepthCurrentLabel()));
- header.add(msgUnitLabel(SInfoResultType.flowdepthHistorical.getCsvHeader(), SInfoResultType.flowdepthHistorical.getUnit(),
- result.getFlowDepthHistoricalLabel()));
- header.add(msg(SInfoResultType.location.getCsvHeader()));
-
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param result
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final FlowDepthDevelopmentCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(10);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthDevelopment));
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthDevelopmentPerYear));
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevelDifference));
- lines.add(row.exportValue(this.context, SInfoResultType.bedHeightDifference));
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthCurrent));
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthHistorical));
- lines.add(row.exportValue(this.context, SInfoResultType.location));
-
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthDevelopmentCalculationResults results) {
-
- /* general metadata */
- super.addJRMetaData(source, results);
-
- final FlowDepthDevelopmentCalculationResult result = results.getResult();
- source.addMetaData("flowdepthdevelopment", result.getLabel());
- source.addMetaData("flowdepthdevelopment_header_label", SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta()));
-
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthdevelopment_header", SInfoResultType.flowdepthDevelopment.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthdevelopmentperyear_header", SInfoResultType.flowdepthDevelopmentPerYear.getPdfHeader(this.context.getMeta()));
-
- source.addMetaData("waterleveldifference_header", SInfoResultType.waterlevelDifference.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterleveldifference_header2", result.getWaterlevelDifferenceLabel());
-
- source.addMetaData("bedheightdifference_header", SInfoResultType.bedHeightDifference.getPdfHeader(this.context.getMeta()));
- source.addMetaData("bedheightdifference_header2", result.getBedHeightDifferenceLabel());
-
- source.addMetaData("flowdepthcurrent_header", SInfoResultType.flowdepthCurrent.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthcurrent_header2", result.getFlowDepthCurrentLabel());
-
- source.addMetaData("flowdepthhistorical_header", SInfoResultType.flowdepthHistorical.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthhistorical_header2", result.getFlowDepthHistoricalLabel());
-
- source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ protected void doWritePdf(final OutputStream out, final FlowDepthDevelopmentCalculationResults results) {
+ // TODO: Move to super //2 lines different
try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
final JasperReporter reporter = new JasperReporter();
- reporter.addReport(JASPER_FILE, source);
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ // move somewhere? global meta
+ source.addMetaData("flowdepthdevelopment", result.getLabel());
+ source.addMetaData("flowdepthdevelopment_header_label", SInfoResultType.flowdepthDevelopment.getCsvHeader(this.context.getMeta()));// (this.context.getMeta()));
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
reporter.exportPDF(out);
}
catch (final JRException je) {
getLog().warn("Error generating PDF Report!", je);
}
}
-
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec 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 Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.java Thu Jun 14 16:56:31 2018 +0200
@@ -78,6 +78,7 @@
final FlowDepthDevelopmentCalculationResults results = (FlowDepthDevelopmentCalculationResults) res.getData();
final FlowDepthDevelopmentCalculationResult result = results.getResult();
if (result != null) {
+ // final FlowDepthDevelopmentCalculationResult result = (FlowDepthDevelopmentCalculationResult) resultList.get(0);
/* add themes for chart, for each result */
final int index = 0;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,11 +9,17 @@
*/
package org.dive4elements.river.artifacts.sinfo.flowdepthminmax;
+import java.util.ArrayList;
import java.util.Collection;
+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.AbstractSInfoCalculationResult;
+import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
/**
@@ -21,20 +27,112 @@
*
* @author Gernot Belger
*/
-final class FlowDepthMinMaxCalculationResult extends AbstractSInfoCalculationResult {
+final class FlowDepthMinMaxCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+ private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthminmax.jrxml";
private final BedHeightInfo sounding;
+ private final WstInfo wst;
- public FlowDepthMinMaxCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding,
- final Collection rows) {
- super(label, wst, rows);
-
+ public FlowDepthMinMaxCalculationResult(final String label, final WstInfo wst, final BedHeightInfo sounding, final Collection rows) {
+ super(label, rows);
+ this.wst = wst;
this.sounding = sounding;
}
public BedHeightInfo getSounding() {
return this.sounding;
}
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(11);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthmin));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepthmax));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit()));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results) {
+
+ exportContextCSV.writeCSVSoundingMetadata(this.sounding);
+ exportContextCSV.writeBlankLine();
+
+ exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
+ exportContextCSV.writeBlankLine();
+
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results, final ResultRow row) {
+
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final FlowDepthMinMaxCalculationResults results, final ResultRow row) {
+
+ return formatRow(exportContextPDF, results, row);
+ }
+
+ @Override
+ protected String getJasperFile() {
+ return this.JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+ final FlowDepthMinMaxCalculationResults results) {
+
+ /* column headings */
+ exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+ exportContextPDF.addJRMetadata(source, "flowdepthmin_header", SInfoResultType.flowdepthmin);
+ exportContextPDF.addJRMetadata(source, "flowdepthmax_header", SInfoResultType.flowdepthmax);
+ exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+ exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+ exportContextPDF.addJRMetadata(source, "waterlevel_name_header", SInfoResultType.waterlevelLabel);
+ exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+ exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+ exportContextPDF.addJRMetadata(source, "sounding_name_header", SInfoResultType.soundingLabel);
+ exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+ }
+
+ protected String[] formatRow(final ExportContextCSV exportContextCSV, final FlowDepthMinMaxCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(10);
+
+ lines.add(exportContextCSV.formatRowValue(row, GeneralResultType.station));
+
+ // REMARK: null check as pdf will call this with null and in that case we show all columns (to avoid multiple jasper
+ // FIXME: does not work like this: we may have several pairs of min/max; so we need to look at all of them?
+ // templates)
+ // if (result == null || result.getMinSounding() != null)
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthmin));
+ // if (result == null || result.getMaxSounding() != null)
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.flowdepthmax));
+
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.discharge));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.waterlevelLabel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.gaugeLabel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.meanBedHeight));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.soundingLabel));
+ lines.add(exportContextCSV.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,13 +10,14 @@
package org.dive4elements.river.artifacts.sinfo.flowdepthminmax;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Gernot Belger
*/
-final class FlowDepthMinMaxCalculationResults extends AbstractSInfoCalculationResults {
+final class FlowDepthMinMaxCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,19 +9,13 @@
package org.dive4elements.river.artifacts.sinfo.flowdepthminmax;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
-import org.dive4elements.river.artifacts.sinfo.util.BedHeightInfo;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -33,122 +27,23 @@
* @author Gernot Belger
*/
// REMARK: must be public because its registered in generators.xml
-public class FlowDepthMinMaxExporter extends AbstractSInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(FlowDepthMinMaxExporter.class);
-
- private static final String JASPER_FILE = "/jasper/templates/sinfo.flowdepthminmax.jrxml";
-
- @Override
- protected Logger getLog() {
- return log;
- }
-
- @Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results,
- final FlowDepthMinMaxCalculationResult result) {
-
- final BedHeightInfo sounding = result.getSounding();
- super.writeCSVSoundingMetadata(writer, sounding);
- writer.writeNext(new String[] { "" }); // break line
- final WstInfo wst = result.getWst();
- writeCSVWaterlevelMetadata(writer, wst);
- writer.writeNext(new String[] { "" }); // break line
- }
+public class FlowDepthMinMaxExporter extends AbstractCommonExporter {
@Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results) {
-
- super.writeCSVGlobalMetadataDefaults(writer, results);
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results, final RiverInfo river) {
- log.info("FlowDepthExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(11);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.flowdepthmin.getCsvHeader(), SInfoResultType.flowdepthmin.getUnit()));
- header.add(msgUnit(SInfoResultType.flowdepthmax.getCsvHeader(), SInfoResultType.flowdepthmax.getUnit()));
- header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
- header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
- header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
- header.add(msg(SInfoResultType.soundingLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.location.getCsvHeader()));
-
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param result
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final FlowDepthMinMaxCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(10);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
-
- // REMARK: null check as pdf will call this with null and in that case we show all columns (to avoid multiple jasper
- // FIXME: does not work like this: we may have several pairs of min/max; so we need to look at all of them?
- // templates)
- // if (result == null || result.getMinSounding() != null)
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthmin));
- // if (result == null || result.getMaxSounding() != null)
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepthmax));
-
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
- lines.add(row.exportValue(this.context, SInfoResultType.discharge));
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
- lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.location));
-
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final FlowDepthMinMaxCalculationResults results) {
-
- /* general metadata */
- super.addJRMetaData(source, results);
-
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthmin_header", SInfoResultType.flowdepthmin.getPdfHeader(this.context.getMeta()));
- source.addMetaData("flowdepthmax_header", SInfoResultType.flowdepthmax.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_name_header", SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
- source.addMetaData("sounding_name_header", SInfoResultType.soundingLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ protected void doWritePdf(final OutputStream out, final FlowDepthMinMaxCalculationResults results) {
+ // TODO: Move to super
try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
final JasperReporter reporter = new JasperReporter();
- reporter.addReport(JASPER_FILE, source);
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
reporter.exportPDF(out);
}
catch (final JRException je) {
@@ -156,4 +51,36 @@
}
}
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final FlowDepthMinMaxCalculationResults results) {
+ // TODO: Diesen Ablauf in super?
+
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
+
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthminmax/FlowDepthMinMaxState.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,6 +14,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
@@ -76,10 +77,10 @@
final FlowDepthMinMaxCalculationResults results = (FlowDepthMinMaxCalculationResults) res.getData();
/* add themes for chart, for each result */
- final List resultList = results.getResults();
+ final List> resultList = results.getResults();
for (int index = 0; index < resultList.size(); index++) {
- final FlowDepthMinMaxCalculationResult result = resultList.get(index);
+ final FlowDepthMinMaxCalculationResult result = (FlowDepthMinMaxCalculationResult) resultList.get(index);
/* filtered (zoom dependent mean) flow depth */
facets.add(FlowDepthProcessor.createFlowDepthMinFilteredFacet(context, hash, this.id, result, index));
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,10 +9,16 @@
*/
package org.dive4elements.river.artifacts.sinfo.tkhstate;
+import java.util.ArrayList;
import java.util.Collection;
+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;
/**
@@ -20,11 +26,109 @@
*
* @author Gernot Belger
*/
-final class TkhCalculationResult extends AbstractTkhCalculationResult {
+final class TkhCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+ private static final String JASPER_FILE = "/jasper/templates/sinfo.tkh.jrxml";
+ private final boolean hasTkh;
+ private final WstInfo wst;
+
+ private enum ExportMode {
+ pdf, csv
+ }
public TkhCalculationResult(final String label, final WstInfo wst, final boolean hasTkh, final Collection rows) {
- super(label, wst, hasTkh, rows);
+ super(label, rows);
+ this.hasTkh = hasTkh;
+ this.wst = wst;
}
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final TkhCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(11);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.tkh));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soilkind));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit()));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+
+ final String descriptionHeader = results.getDescriptionHeader();
+ if (descriptionHeader != null)
+ header.add(descriptionHeader);
+
+ 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 TkhCalculationResults results) {
+ exportContextCSV.writeCSVWaterlevelMetadata(this.wst);
+ exportContextCSV.writeBlankLine();
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final TkhCalculationResults results, final ResultRow row) {
+
+ return this.formatRow(exportContextCSV, results, row, ExportMode.csv);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final TkhCalculationResults results, final ResultRow row) {
+
+ return this.formatRow(exportContextPDF, results, row, ExportMode.pdf);
+ }
+
+ @Override
+ protected String getJasperFile() {
+ return JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final TkhCalculationResults results) {
+ /* column headings */
+ exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+ exportContextPDF.addJRMetadata(source, "tkh_header", SInfoResultType.tkh);
+ exportContextPDF.addJRMetadata(source, "tkhkind_header", SInfoResultType.soilkind);
+ exportContextPDF.addJRMetadata(source, "bedheight_header", SInfoResultType.meanBedHeight);
+ exportContextPDF.addJRMetadata(source, "waterlevel_header", SInfoResultType.waterlevel);
+ exportContextPDF.addJRMetadata(source, "discharge_header", SInfoResultType.discharge);
+
+ // REMARK: actually the column makes no sense if description header is null. But (software symmetry...) WINFO also
+ // writes an empty column into the pdf in that case (most probably to avoid the need for two jasper templates).
+ final String descriptionHeader = results.getDescriptionHeader();
+ final String waterlevelNameHeader = descriptionHeader == null ? exportContextPDF.msgPdf(SInfoResultType.waterlevelLabel) : descriptionHeader;
+ exportContextPDF.addJRMetadata(source, "waterlevel_name_header", waterlevelNameHeader);
+
+ exportContextPDF.addJRMetadata(source, "gauge_header", SInfoResultType.gaugeLabel);
+ exportContextPDF.addJRMetadata(source, "location_header", SInfoResultType.location);
+
+ }
+
+ private String[] formatRow(final ExportContextCSV exportContext, final TkhCalculationResults results, final ResultRow row, final ExportMode mode) {
+
+ final Collection lines = new ArrayList<>(11);
+
+ lines.add(exportContext.formatRowValue(row, GeneralResultType.station));
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.tkh));
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.soilkind));
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.meanBedHeight));
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevel));
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.discharge));
+
+ // REMARK: always export this column in pdf-mode, because WInfo also does it (no need for two jasper-templates).
+ if (results.getDescriptionHeader() != null || mode == ExportMode.pdf)
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.waterlevelLabel));
+
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.gaugeLabel));
+ lines.add(exportContext.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,13 +10,14 @@
package org.dive4elements.river.artifacts.sinfo.tkhstate;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Gernot Belger
*/
-final class TkhCalculationResults extends AbstractSInfoCalculationResults {
+final class TkhCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,18 +9,13 @@
package org.dive4elements.river.artifacts.sinfo.tkhstate;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.AbstractSInfoExporter;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -31,147 +26,67 @@
* @author Gernot Belger
*/
// REMARK: must be public because its registered in generators.xml
-public class TkhExporter extends AbstractSInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(TkhExporter.class);
+public class TkhExporter extends AbstractCommonExporter {
private static final String CSV_META_CALCULATION_FORMULA = "sinfo.export.tkh.calculation.formula";
- private static final String JASPER_FILE = "/jasper/templates/sinfo.tkh.jrxml";
-
- @Override
- protected Logger getLog() {
- return log;
- }
-
- @Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final TkhCalculationResults results) {
- log.info("TkhExporter.writeCSVMeta");
-
- super.writeCSVGlobalMetadataDefaults(writer, results);
-
- // "# Berechnungsgrundlage: Gleichung nach GILL (1971)"
- writeCSVMetaEntry(writer, CSV_META_CALCULATION_FORMULA);
- }
-
- /**
- * Write the header, with different headings depending on whether at a gauge or at a location.
- */
-
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final TkhCalculationResults results, final RiverInfo river) {
- log.info("TkhExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(11);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.tkh.getCsvHeader(), SInfoResultType.tkh.getUnit()));
- header.add(msg(SInfoResultType.soilkind.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
- header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
- header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
-
- final String descriptionHeader = results.getDescriptionHeader();
- if (descriptionHeader != null)
- header.add(msg(descriptionHeader));
-
- header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.location.getCsvHeader()));
-
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
@Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final TkhCalculationResults results, final TkhCalculationResult result) {
-
- final WstInfo wst = result.getWst();
- super.writeCSVWaterlevelMetadata(writer, wst);
-
- // REAMRK:
- // "# W/Pegel [cm]: " (nur bei Eingabe des Wasserstands am Pegel)
- // "# Q (m³/s): " (nur bei Eingabe des Durchflusses)
- // WaterlevelEXporter does this
- // final WaterlevelDescriptionBuilder descBuilder = new WaterlevelDescriptionBuilder((D4EArtifact) this.master,
- // this.context);
- // final String metadata = descBuilder.getMetadata();
- // BUT:
- // - the WINFO results do not contain this info per wst
- // - the WaterlevelExporter prints this in the global header for all waterlevels, simply based on the input fields
- // - instead we would want tis information per waterlevel
- // - the metadata 'Bezeichnung WST' contains exactly the wanted data
-
- writer.writeNext(new String[] { "" }); // break line
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param results
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final TkhCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(11);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
- lines.add(row.exportValue(this.context, SInfoResultType.tkh));
- lines.add(row.exportValue(this.context, SInfoResultType.soilkind));
- lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
- lines.add(row.exportValue(this.context, SInfoResultType.discharge));
-
- // REMARK: always export this column in pdf-mode, because WInfo also does it (no need for two jasper-templates).
- if (results.getDescriptionHeader() != null || mode == ExportMode.pdf)
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
-
- lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.location));
-
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final TkhCalculationResults results) {
-
- /* general metadata */
- super.addJRMetaData(source, results);
-
- source.addMetaData("calculation_label", msg("sinfo.export.flow_depth.pdf.meta.calculation.label"));
- source.addMetaData("calculation_name", msg("sinfo.export.flow_depth.pdf.meta.calculation.name"));
-
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
- source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
- source.addMetaData("tkhkind_header", SInfoResultType.soilkind.getPdfHeader(this.context.getMeta()));
- source.addMetaData("bedheight_header", SInfoResultType.meanBedHeight.getPdfHeader(this.context.getMeta()));
- source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-
- // REMARK: actually the column makes no sense if description header is null. But (software symmetry...) WINFO also
- // writes an empty column into the pdf in that case (most probably to avoid the need for two jasper templates).
- final String descriptionHeader = results.getDescriptionHeader();
- final String waterlevelNameHeader = descriptionHeader == null ? SInfoResultType.waterlevelLabel.getPdfHeader(this.context.getMeta())
- : descriptionHeader;
- source.addMetaData("waterlevel_name_header", waterlevelNameHeader);
-
- source.addMetaData("gauge_header", SInfoResultType.gaugeLabel.getPdfHeader(this.context.getMeta()));
- source.addMetaData("location_header", SInfoResultType.location.getPdfHeader(this.context.getMeta()));
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ protected void doWritePdf(final OutputStream out, final TkhCalculationResults results) {
+ // TODO: Move to super
try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
final JasperReporter reporter = new JasperReporter();
- reporter.addReport(JASPER_FILE, source);
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ source.addMetaData("calculation_label", msg("sinfo.export.flow_depth.pdf.meta.calculation.label"));
+ source.addMetaData("calculation_name", msg("sinfo.export.flow_depth.pdf.meta.calculation.name"));
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
reporter.exportPDF(out);
}
catch (final JRException je) {
getLog().warn("Error generating PDF Report!", je);
}
}
+
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final TkhCalculationResults results) {
+ // TODO: Diesen Ablauf in super? _WINZIGE ABWEICHUNG vom Standard...
+
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // "# Berechnungsgrundlage: Gleichung nach GILL (1971)"
+ exportContextCSV.writeCSVMetaEntry(CSV_META_CALCULATION_FORMULA);
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhState.java Thu Jun 14 16:56:31 2018 +0200
@@ -14,6 +14,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
@@ -80,10 +81,10 @@
final TkhCalculationResults results = (TkhCalculationResults) res.getData();
/* add themes for chart, for each result */
- final List resultList = results.getResults();
+ final List> resultList = results.getResults();
for (int index = 0; index < resultList.size(); index++) {
- final TkhCalculationResult result = resultList.get(index);
+ final TkhCalculationResult result = (TkhCalculationResult) resultList.get(index);
facets.add(TkhProcessor.createTkhFacet(context, hash, this.id, result, index));
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/commons/AbstractUInfoExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/commons/AbstractUInfoExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +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.uinfo.commons;
-
-import java.text.DateFormat;
-import java.text.NumberFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.FLYS;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
-import org.dive4elements.river.artifacts.common.AbstractCommonExporter;
-import org.dive4elements.river.artifacts.common.I18NStrings;
-import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-/**
- * @author Gernot Belger
- */
-public abstract class AbstractUInfoExporter> extends AbstractCommonExporter {
-
- @Override
- protected void addJRMetaData(final MetaAndTableJRDataSource source, final RESULTS results) {
-
- /* general metadata */
- this.addJRMetaDataDefaults(source, results);
-
- /* general metadata */
- this.addJRMetaDataDefaults(source, results);
-
- final RiverInfo river = results.getRiver();
- final String wstUnitName = river.getWstUnit();
-
- source.addMetaData("river_label", msg(I18NStrings.CSV_META_RIVER_LABEL));
- source.addMetaData("river", river.getName());
- source.addMetaData("river_unit", wstUnitName);
-
- source.addMetaData("range_label", msg(I18NStrings.CSV_META_RANGE_LABEL));
- final DoubleRange calcRange = results.getCalcRange();
- final NumberFormat kmFormatter = getKmFormatter();
- if (calcRange != null) {
- final String rangeValue = String.format("%s - %s", kmFormatter.format(calcRange.getMinimumDouble()),
- kmFormatter.format(calcRange.getMaximumDouble()));
- source.addMetaData("range", rangeValue);
- }
-
- /* column headings */
- // source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta())); // moved to
- // super
-
- // TODO: move to subs
- // source.addMetaData("flowdepth_header", SInfoResultType.flowdepth.getPdfHeader(this.context.getMeta()));
- // source.addMetaData("flowdepth_tkh_header", SInfoResultType.flowdepthtkh.getPdfHeader(this.context.getMeta()));
- // source.addMetaData("tkh_header", SInfoResultType.tkh.getPdfHeader(this.context.getMeta()));
- // source.addMetaData("waterlevel_header", SInfoResultType.waterlevel.getPdfHeader(this.context.getMeta()));
- // source.addMetaData("discharge_header", SInfoResultType.discharge.getPdfHeader(this.context.getMeta()));
-
- }
-
- @Override
- protected void writeCSVGlobalMetadataDefaults(final CSVWriter writer, final RESULTS results) {
-
- final String calcModeLabel = results.getCalcModeLabel();
- final RiverInfo river = results.getRiver();
- final DoubleRange calcRange = results.getCalcRange();
-
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEADER_RESULT, msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL), river.getName(), calcModeLabel);
-
- // "# FLYS-Version: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_VERSION, msg(I18NStrings.CSV_META_VERSION_LABEL), FLYS.VERSION);
-
- // "# Bearbeiter: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_USER, msg(I18NStrings.CSV_META_USER_LABEL), results.getUser());
-
- // "# Datum der Erstellung: "
- final Locale locale = Resources.getLocale(this.context.getMeta());
- final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_CREATION, msg(I18NStrings.CSV_META_CREATION_LABEL), df.format(new Date()));
-
- // "# Gewässer: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_RIVER, msg(I18NStrings.CSV_META_RIVER_LABEL), river.getName());
-
- if (calcRange != null) {
- // "# Ort/Bereich (km): "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
- getKmFormatter().format(calcRange.getMaximumDouble()));
- }
- }
-
- @Override
- protected void addJRMetaDataDefaults(final MetaAndTableJRDataSource source, final RESULTS results) {
-
- source.addMetaData("header", msg(I18NStrings.CSV_META_HEADER_RESULT_LABEL));
- source.addMetaData("calcMode", results.getCalcModeLabel());
-
- source.addMetaData("version_label", msg(I18NStrings.CSV_META_VERSION_LABEL));
- source.addMetaData("version", FLYS.VERSION);
-
- source.addMetaData("user_label", msg(I18NStrings.CSV_META_USER_LABEL));
- source.addMetaData("user", results.getUser());
-
- final Locale locale = Resources.getLocale(this.context.getMeta());
- final DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
- source.addMetaData("date_label", msg(I18NStrings.CSV_META_CREATION_LABEL));
- source.addMetaData("date", df.format(new Date()));
-
- }
-
-}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java Thu Jun 14 16:56:31 2018 +0200
@@ -16,6 +16,7 @@
import org.apache.commons.lang.math.DoubleRange;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.access.RiverAccess;
+import org.dive4elements.river.artifacts.common.GeneralResultType;
import org.dive4elements.river.artifacts.common.ResultRow;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
@@ -63,6 +64,7 @@
final Collection rows = new ArrayList<>();
final ResultRow row1 = ResultRow.create(). //
+ putValue(GeneralResultType.station, 88). //
putValue(SInfoResultType.discharge, 100). //
putValue(SInfoResultType.waterlevel, 2). //
putValue(SInfoResultType.gaugeLabel, "Torgau");
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -9,21 +9,95 @@
*/
package org.dive4elements.river.artifacts.uinfo.inundationduration;
+import java.util.ArrayList;
import java.util.Collection;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
+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.SInfoResultType;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
/**
* @author Domenico Nardi Tironi
*/
-final class InundationDurationCalculationResult extends AbstractCalculationResult {
+final class InundationDurationCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+ private static final String JASPER_FILE = "/jasper/templates/uinfo.inundationduration.jrxml";
- public InundationDurationCalculationResult(final String label, final WstInfo wst, final Collection< ResultRow> rows) {
- super(label, rows);
+ public InundationDurationCalculationResult(final String label, final WstInfo wst, final Collection rows) {
+ super(label, rows);
}
-
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final InundationDurationCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(11);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.flowdepth));
+
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.waterlevel, river.getWstUnit()));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.discharge));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.waterlevelLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.gaugeLabel));
+ header.add(exportContextCSV.msgUnitCSV(SInfoResultType.meanBedHeight, river.getWstUnit()));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.soundingLabel));
+ header.add(exportContextCSV.formatCsvHeader(SInfoResultType.location));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final InundationDurationCalculationResults results) {
+ // no Result metadata so far
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final InundationDurationCalculationResults results, final ResultRow row) {
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final InundationDurationCalculationResults results, final ResultRow row) {
+
+ return formatRow(exportContextPDF, results, row);
+ }
+
+ @Override
+ protected String getJasperFile() {
+
+ return JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+ final InundationDurationCalculationResults results) {
+
+ exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+ }
+
+ protected String[] formatRow(final ExportContextCSV context, final InundationDurationCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(11);
+
+ lines.add(context.formatRowValue(row, GeneralResultType.station));
+ lines.add(context.formatRowValue(row, SInfoResultType.flowdepth));
+
+ lines.add(context.formatRowValue(row, SInfoResultType.waterlevel));
+ lines.add(context.formatRowValue(row, SInfoResultType.discharge));
+ lines.add(context.formatRowValue(row, SInfoResultType.waterlevelLabel));
+ lines.add(context.formatRowValue(row, SInfoResultType.gaugeLabel));
+ lines.add(context.formatRowValue(row, SInfoResultType.meanBedHeight));
+ lines.add(context.formatRowValue(row, SInfoResultType.soundingLabel));
+ lines.add(context.formatRowValue(row, SInfoResultType.location));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -10,14 +10,15 @@
package org.dive4elements.river.artifacts.uinfo.inundationduration;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Domenico Nardi Tironi
*
*/
-final class InundationDurationCalculationResults extends AbstractCalculationResults {
+final class InundationDurationCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,18 +10,14 @@
package org.dive4elements.river.artifacts.uinfo.inundationduration;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.I18NStrings;
import org.dive4elements.river.artifacts.common.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
-import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -30,113 +26,23 @@
* @author Domenico Nardi Tironi
*
*/
-public class InundationDurationExporter extends AbstractUInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(InundationDurationExporter.class);
-
- private static final String JASPER_FILE = "/jasper/templates/uinfo.inundationduration.jrxml";
-
- @Override
- protected Logger getLog() {
- return log;
- }
-
- @Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final InundationDurationCalculationResults results) {
- log.info("SalixLineExporter.writeCSVMeta");
-
- super.writeCSVGlobalMetadataDefaults(writer, results);
-
- // "# Höhensystem des Flusses: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
-
- writer.writeNext(new String[] { "" }); // break line
- }
+public class InundationDurationExporter extends AbstractCommonExporter {
@Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final InundationDurationCalculationResults results,
- final InundationDurationCalculationResult result) {
-
- /*
- * final BedHeightInfo sounding = result.getSounding();
- * super.writeCSVSoundingMetadata(writer, sounding);
- * final WstInfo wst = result.getWst();
- * super.writeCSVWaterlevelMetadata(writer, wst);
- */
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final InundationDurationCalculationResults results, final RiverInfo river) {
- log.info("FlowDepthExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(11);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
-
- header.add(msgUnit(SInfoResultType.waterlevel.getCsvHeader(), river.getWstUnit()));
- header.add(msgUnit(SInfoResultType.discharge.getCsvHeader(), SInfoResultType.discharge.getUnit()));
- header.add(msg(SInfoResultType.waterlevelLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.gaugeLabel.getCsvHeader()));
- header.add(msgUnit(SInfoResultType.meanBedHeight.getCsvHeader(), river.getWstUnit()));
- header.add(msg(SInfoResultType.soundingLabel.getCsvHeader()));
- header.add(msg(SInfoResultType.location.getCsvHeader()));
-
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param pdf
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final InundationDurationCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(11);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
- lines.add(row.exportValue(this.context, SInfoResultType.flowdepth));
-
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevel));
- lines.add(row.exportValue(this.context, SInfoResultType.discharge));
- lines.add(row.exportValue(this.context, SInfoResultType.waterlevelLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.gaugeLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.meanBedHeight));
- lines.add(row.exportValue(this.context, SInfoResultType.soundingLabel));
- lines.add(row.exportValue(this.context, SInfoResultType.location));
-
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final InundationDurationCalculationResults results) {
-
- /* general metadata */
- super.addJRMetaData(source, results);
-
- /* column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ protected void doWritePdf(final OutputStream out, final InundationDurationCalculationResults results) {
+ // TODO: Move to super
try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
final JasperReporter reporter = new JasperReporter();
- reporter.addReport(JASPER_FILE, source);
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
reporter.exportPDF(out);
}
catch (final JRException je) {
@@ -144,4 +50,36 @@
}
}
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final InundationDurationCalculationResults results) {
+ // TODO: Diesen Ablauf in super? -> leichte abweichung
+
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ final RiverInfo river = results.getRiver();
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+ exportContextCSV.writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, river.getWstUnit());
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
+
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationState.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -15,6 +15,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
@@ -77,7 +78,7 @@
final InundationDurationCalculationResults results = (InundationDurationCalculationResults) res.getData();
- List resultList = results.getResults();
+ final List> resultList = results.getResults();
if (!resultList.isEmpty()) {
final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -9,21 +9,143 @@
*/
package org.dive4elements.river.artifacts.uinfo.salix;
+import java.util.ArrayList;
import java.util.Collection;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
+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.util.RiverInfo;
import org.dive4elements.river.artifacts.sinfo.util.WstInfo;
+import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
/**
* @author Domenico Nardi Tironi
*/
-final class SalixLineCalculationResult extends AbstractCalculationResult {
+final class SalixLineCalculationResult extends AbstractCalculationExportableResult {
private static final long serialVersionUID = 1L;
+ private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
- public SalixLineCalculationResult(final String label, final WstInfo wst, final Collection< ResultRow> rows) {
- super(label, rows);
+ public SalixLineCalculationResult(final String label, final WstInfo wst, final Collection rows) {
+ super(label, rows);
}
-
+
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final SalixLineCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(4);
+
+ header.add(exportContextCSV.formatCsvHeader(GeneralResultType.station));
+ // header.add(msgUnit(SInfoResultType.flowdepth, SInfoResultType.flowdepth.getUnit()));
+
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixline));
+ // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
+ // ausblenden!...!..!!
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixlinehist));
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.salixlinescen));
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final SalixLineCalculationResults results) {
+ writeRegionalEffectsCSVMetadata(exportContextCSV);
+ exportContextCSV.writeBlankLine();// writer.writeNext(new String[] { "" }); // break line
+ writeExtendedRegionalEffectsCSVMetadata(exportContextCSV);
+ exportContextCSV.writeBlankLine();
+ writeHistoricalViewCSVMetadata(exportContextCSV);
+ exportContextCSV.writeBlankLine();
+
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final SalixLineCalculationResults results, final ResultRow row) {
+
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final SalixLineCalculationResults results, final ResultRow row) {
+
+ return formatRow(exportContextPDF, results, row);
+ }
+
+ @Override
+ protected String getJasperFile() {
+
+ return this.JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source, final SalixLineCalculationResults results) {
+
+ /* additional column headings */
+ exportContextPDF.addJRMetadata(source, "station_header", GeneralResultType.station);
+
+ exportContextPDF.addJRMetadata(source, "salix_line", UInfoResultType.salixline);
+ // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
+ // ausblenden!...!..!!
+ exportContextPDF.addJRMetadata(source, "salix_line_hist", UInfoResultType.salixlinehist);
+ exportContextPDF.addJRMetadata(source, "salix_line_scen", UInfoResultType.salixlinescen);
+
+ }
+
+ private String[] formatRow(final ExportContextCSV context, final SalixLineCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(3);
+
+ lines.add(context.formatRowValue(row, GeneralResultType.station));
+ lines.add(context.formatRowValue(row, UInfoResultType.salixline));
+
+ // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
+ // ausblenden!...!..!!
+ lines.add(context.formatRowValue(row, UInfoResultType.salixlinehist));
+ lines.add(context.formatRowValue(row, UInfoResultType.salixlinescen));
+ return lines.toArray(new String[lines.size()]);
+ }
+
+ private void writeRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
+ final String main = "uinfo.export.csv.meta.header.salix.regional";
+ // "##Regional wirkende Eingriffe"
+ exportContextCSV.writeCSVMetaEntry(main);
+ writeRegionalCommonCSVMeta(exportContextCSV);
+ }
+
+ private void writeRegionalCommonCSVMeta(final ExportContextCSV exportContextCSV) {
+ final String main = "uinfo.export.csv.meta.header.salix";
+ // "# Szenariotyp: "
+ exportContextCSV.writeCSVMetaEntry(main + ".szenariotyp");
+ // "# Teilabschnitt: "
+ exportContextCSV.writeCSVMetaEntry(main + ".teilabschnitt");
+ // "# Mittelwasserspiegellagenänderung: "
+ exportContextCSV.writeCSVMetaEntry(main + ".mwspiegellaenderung");
+ }
+
+ private void writeExtendedRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
+ final String main = "uinfo.export.csv.meta.header.salix.regionalextended";
+ // "##Ãœberregional wirkende Eingriffe"
+ exportContextCSV.writeCSVMetaEntry(main);
+
+ writeRegionalCommonCSVMeta(exportContextCSV);
+ }
+
+ private void writeHistoricalViewCSVMetadata(final ExportContextCSV exportContextCSV) {
+ final String main = "uinfo.export.csv.meta.header.salix.historical";
+ // "##Historische Betrachtung"
+ exportContextCSV.writeCSVMetaEntry(main);
+
+ final String mainSub = "uinfo.export.csv.meta.header.salix";
+ // "# Szenariotyp: "
+ exportContextCSV.writeCSVMetaEntry(mainSub + ".szenariotyp");
+ // "# Teilabschnitt: "
+ exportContextCSV.writeCSVMetaEntry(mainSub + ".teilabschnitt");
+
+ // "# Art des Zeitraums: "
+ exportContextCSV.writeCSVMetaEntry(main + ".zeitart");
+ // "# Historischer Zeitpunkt: "
+ exportContextCSV.writeCSVMetaEntry(main + ".zeitpunkt");
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -10,14 +10,15 @@
package org.dive4elements.river.artifacts.uinfo.salix;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Domenico Nardi Tironi
*
*/
-final class SalixLineCalculationResults extends AbstractCalculationResults {
+final class SalixLineCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,18 +10,14 @@
package org.dive4elements.river.artifacts.uinfo.salix;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.GeneralResultType;
+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.I18NStrings;
import org.dive4elements.river.artifacts.common.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
-import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -30,166 +26,75 @@
* @author Domenico Nardi Tironi
*
*/
-public class SalixLineExporter extends AbstractUInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(SalixLineExporter.class);
-
- private static final String JASPER_FILE = "/jasper/templates/uinfo.salixline.jrxml";
-
- @Override
- protected Logger getLog() {
- return log;
- }
+public class SalixLineExporter extends AbstractCommonExporter {
@Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final SalixLineCalculationResults results) {
- log.info("SalixLineExporter.writeCSVMeta");
-
- super.writeCSVGlobalMetadataDefaults(writer, results);
-
- // "# Höhensystem des Flusses: "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
-
- // Add Auswerter, Bezugspegel, Jahr/Zeitraum der Wasserspiegellage
-
- // "# Auswerter: "
- writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.evaluator", "sounding.getEvaluationBy()");
- // "# Bezugspegel: "
- writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.waterlevel.gauge", "wst.getGauge()");
-
- // "# Jahr/Zeitraum der Wasserspiegellage: "
- // final int year = wst.getYear();
- // if (year > 0)
- writeCSVMetaEntry(writer, "uinfo.export.salix_line.csv.meta.header.waterlevel.year", "Integer.toString(year)");
-
- }
-
- private void writeRegionalEffectsCSVMetadata(final CSVWriter writer) {
- final String main = "uinfo.export.csv.meta.header.salix.regional";
- // "##Regional wirkende Eingriffe"
- writeCSVMetaEntry(writer, main);
- writeRegionalCommonCSVMeta(writer);
- }
-
- private void writeRegionalCommonCSVMeta(final CSVWriter writer) {
- final String main = "uinfo.export.csv.meta.header.salix";
- // "# Szenariotyp: "
- writeCSVMetaEntry(writer, main + ".szenariotyp");
- // "# Teilabschnitt: "
- writeCSVMetaEntry(writer, main + ".teilabschnitt");
- // "# Mittelwasserspiegellagenänderung: "
- writeCSVMetaEntry(writer, main + ".mwspiegellaenderung");
- }
-
- private void writeExtendedRegionalEffectsCSVMetadata(final CSVWriter writer) {
- final String main = "uinfo.export.csv.meta.header.salix.regionalextended";
- // "##Ãœberregional wirkende Eingriffe"
- writeCSVMetaEntry(writer, main);
-
- writeRegionalCommonCSVMeta(writer);
- }
-
- private void writeHistoricalViewCSVMetadata(final CSVWriter writer) {
- final String main = "uinfo.export.csv.meta.header.salix.historical";
- // "##Historische Betrachtung"
- writeCSVMetaEntry(writer, main);
-
- final String mainSub = "uinfo.export.csv.meta.header.salix";
- // "# Szenariotyp: "
- writeCSVMetaEntry(writer, mainSub + ".szenariotyp");
- // "# Teilabschnitt: "
- writeCSVMetaEntry(writer, mainSub + ".teilabschnitt");
-
- // "# Art des Zeitraums: "
- writeCSVMetaEntry(writer, main + ".zeitart");
- // "# Historischer Zeitpunkt: "
- writeCSVMetaEntry(writer, main + ".zeitpunkt");
- }
-
- @Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final SalixLineCalculationResults results, final SalixLineCalculationResult result) {
- writeRegionalEffectsCSVMetadata(writer);
- writer.writeNext(new String[] { "" }); // break line
- writeExtendedRegionalEffectsCSVMetadata(writer);
- writer.writeNext(new String[] { "" }); // break line
- writeHistoricalViewCSVMetadata(writer);
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final SalixLineCalculationResults results, final RiverInfo river) {
- log.info("FlowDepthExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(4);
-
- header.add(msg(GeneralResultType.station.getCsvHeader()));
- // header.add(msgUnit(SInfoResultType.flowdepth.getCsvHeader(), SInfoResultType.flowdepth.getUnit()));
-
- header.add(msg(UInfoResultType.salixline.getCsvHeader()));
- // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
- // ausblenden!...!..!!
- header.add(msg(UInfoResultType.salixlinehist.getCsvHeader()));
- header.add(msg(UInfoResultType.salixlinescen.getCsvHeader()));
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param pdf
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final SalixLineCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(3);
-
- lines.add(row.exportValue(this.context, GeneralResultType.station));
- lines.add(row.exportValue(this.context, UInfoResultType.salixline));
-
- // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
- // ausblenden!...!..!!
- lines.add(row.exportValue(this.context, UInfoResultType.salixlinehist));
- lines.add(row.exportValue(this.context, UInfoResultType.salixlinescen));
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final SalixLineCalculationResults results) {
-
- super.addJRMetaData(source, results);
-
- /* additional column headings */
- source.addMetaData("station_header", GeneralResultType.station.getPdfHeader(this.context.getMeta()));
-
- source.addMetaData("salix_line", UInfoResultType.salixline.getPdfHeader(this.context.getMeta()));
- // wenn "historisch" gewählt wurde, nur "historisch" anzeigen; sonst für jeden scen-wert ne neue Spalte und "hist"
- // ausblenden!...!..!!
- source.addMetaData("salix_line_hist", UInfoResultType.salixlinehist.getPdfHeader(this.context.getMeta()));
- source.addMetaData("salix_line_scen", UInfoResultType.salixlinescen.getPdfHeader(this.context.getMeta()));
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ protected void doWritePdf(final OutputStream out, final SalixLineCalculationResults results) {
+ // TODO: Move to super
try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
final JasperReporter reporter = new JasperReporter();
- reporter.addReport(JASPER_FILE, source);
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
reporter.exportPDF(out);
}
catch (final JRException je) {
getLog().warn("Error generating PDF Report!", je);
}
+ }
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final SalixLineCalculationResults results) {
+ // TODO: Diesen Ablauf in super? - ist etwas anders bei den globalen metadaten
+
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ // "# Höhensystem des Flusses: "
+ exportContextCSV.writeCSVMetaEntry(I18NStrings.CSV_META_HEIGHT_UNIT_RIVER, results.getRiver().getWstUnit());
+
+ // Add Auswerter, Bezugspegel, Jahr/Zeitraum der Wasserspiegellage
+
+ // "# Auswerter: "
+ exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.evaluator", "sounding.getEvaluationBy()");
+ // "# Bezugspegel: "
+ exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.waterlevel.gauge", "wst.getGauge()");
+
+ // "# Jahr/Zeitraum der Wasserspiegellage: "
+ // final int year = wst.getYear();
+ // if (year > 0)
+ exportContextCSV.writeCSVMetaEntry("uinfo.export.salix_line.csv.meta.header.waterlevel.year", "Integer.toString(year)");
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
}
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineState.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -15,6 +15,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
@@ -77,7 +78,7 @@
final SalixLineCalculationResults results = (SalixLineCalculationResults) res.getData();
- List resultList = results.getResults();
+ final List> resultList = results.getResults();
if (!resultList.isEmpty()) {
final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResult.java Thu Jun 14 16:56:31 2018 +0200
@@ -9,20 +9,82 @@
*/
package org.dive4elements.river.artifacts.uinfo.vegetationzones;
+import java.util.ArrayList;
import java.util.Collection;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.ExportContextCSV;
+import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
import org.dive4elements.river.artifacts.common.ResultRow;
+import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
+import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
/**
* @author Domenico Nardi Tironi
*/
-final class VegetationZonesCalculationResult extends AbstractCalculationResult {
+final class VegetationZonesCalculationResult extends AbstractCalculationExportableResult {
+ private static final long serialVersionUID = 1L;
- private static final long serialVersionUID = 1L;
+ private static final String JASPER_FILE = "/jasper/templates/uinfo.vegetationzones.jrxml";
public VegetationZonesCalculationResult(final String label, final Collection rows) {
super(label, rows);
}
+ @Override
+ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final VegetationZonesCalculationResults results, final RiverInfo river) {
+
+ final Collection header = new ArrayList<>(11);
+
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegname));
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegdauervon));
+ header.add(exportContextCSV.formatCsvHeader(UInfoResultType.vegdauerbis));
+
+ exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
+ }
+
+ @Override
+ protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV, final VegetationZonesCalculationResults results) {
+ // no metadata
+
+ }
+
+ @Override
+ protected String[] formatCSVRow(final ExportContextCSV exportContextCSV, final VegetationZonesCalculationResults results, final ResultRow row) {
+ return formatRow(exportContextCSV, results, row);
+ }
+
+ @Override
+ protected String[] formatPDFRow(final ExportContextCSV exportContextPDF, final VegetationZonesCalculationResults results, final ResultRow row) {
+
+ return formatRow(exportContextPDF, results, row);
+ }
+
+ @Override
+ protected String getJasperFile() {
+
+ return JASPER_FILE;
+ }
+
+ @Override
+ protected void addJRTableHeader(final ExportContextCSV exportContextPDF, final MetaAndTableJRDataSource source,
+ final VegetationZonesCalculationResults results) {
+ /* additional column headings */
+ exportContextPDF.addJRMetadata(source, "veg_name", UInfoResultType.vegname);
+ exportContextPDF.addJRMetadata(source, "veg_dauervon", UInfoResultType.vegdauervon);
+ exportContextPDF.addJRMetadata(source, "veg_dauerbis", UInfoResultType.vegdauerbis);
+
+ }
+
+ protected String[] formatRow(final ExportContextCSV context, final VegetationZonesCalculationResults results, final ResultRow row) {
+
+ final Collection lines = new ArrayList<>(11);
+
+ lines.add(context.formatRowValue(row, UInfoResultType.vegname));
+ lines.add(context.formatRowValue(row, UInfoResultType.vegdauervon));
+ lines.add(context.formatRowValue(row, UInfoResultType.vegdauerbis));
+
+ return lines.toArray(new String[lines.size()]);
+ }
+
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResults.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResults.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesCalculationResults.java Thu Jun 14 16:56:31 2018 +0200
@@ -1,6 +1,6 @@
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
- * Software engineering by
- * Björnsen Beratende Ingenieure GmbH
+ * 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)
@@ -10,14 +10,15 @@
package org.dive4elements.river.artifacts.uinfo.vegetationzones;
import org.apache.commons.lang.math.DoubleRange;
-import org.dive4elements.river.artifacts.common.AbstractCalculationResults;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
+import org.dive4elements.river.artifacts.common.AbstractCalculationListResults;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
/**
* @author Domenico Nardi Tironi
*
*/
-final class VegetationZonesCalculationResults extends AbstractCalculationResults {
+final class VegetationZonesCalculationResults extends AbstractCalculationListResults> {
private static final long serialVersionUID = 1L;
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -10,18 +10,13 @@
package org.dive4elements.river.artifacts.uinfo.vegetationzones;
import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import org.apache.commons.lang.math.DoubleRange;
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.common.I18NStrings;
+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.JasperReporter;
import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource;
-import org.dive4elements.river.artifacts.common.ResultRow;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
-import org.dive4elements.river.artifacts.uinfo.commons.AbstractUInfoExporter;
-import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
import au.com.bytecode.opencsv.CSVWriter;
import net.sf.jasperreports.engine.JRException;
@@ -30,94 +25,23 @@
* @author Domenico Nardi Tironi
*
*/
-public class VegetationZonesExporter extends AbstractUInfoExporter {
-
- /** The log used in this exporter. */
- private static Logger log = Logger.getLogger(VegetationZonesExporter.class);
-
- private static final String JASPER_FILE = "/jasper/templates/uinfo.vegetationzones.jrxml";
-
- @Override
- protected Logger getLog() {
- return log;
- }
+public class VegetationZonesExporter extends AbstractCommonExporter {
@Override
- protected void writeCSVGlobalMetadata(final CSVWriter writer, final VegetationZonesCalculationResults results) {
- log.info("SalixLineExporter.writeCSVMeta");
- super.writeCSVGlobalMetadataDefaults(writer, results);
-
- final DoubleRange calcRange = results.getCalcRange();
- if (calcRange != null) {
- // "# Ort/Bereich (km): "
- writeCSVMetaEntry(writer, I18NStrings.CSV_META_RANGE, msg(I18NStrings.CSV_META_RANGE_LABEL), getKmFormatter().format(calcRange.getMinimumDouble()),
- getKmFormatter().format(calcRange.getMaximumDouble()));
- }
- }
-
- /**
- * Write the header, with different headings depending on whether at a
- * gauge or at a location.
- *
- * @param river
- * @param useTkh
- */
- @Override
- protected void writeCSVHeader(final CSVWriter writer, final VegetationZonesCalculationResults results, final RiverInfo river) {
- log.info("FlowDepthExporter.writeCSVHeader");
-
- final Collection header = new ArrayList<>(11);
-
- header.add(msg(UInfoResultType.vegname.getCsvHeader()));
- header.add(msg(UInfoResultType.vegdauervon.getCsvHeader()));
- header.add(msg(UInfoResultType.vegdauerbis.getCsvHeader()));
-
- writer.writeNext(header.toArray(new String[header.size()]));
- }
-
- /**
- * Format a row of a flow depth result into an array of string, both used by csv and pdf
- *
- * @param pdf
- *
- * @param useTkh
- */
- @Override
- protected String[] formatRow(final VegetationZonesCalculationResults results, final ResultRow row, final ExportMode mode) {
-
- final Collection lines = new ArrayList<>(11);
-
- lines.add(row.exportValue(this.context, UInfoResultType.vegname));
- lines.add(row.exportValue(this.context, UInfoResultType.vegdauervon));
- lines.add(row.exportValue(this.context, UInfoResultType.vegdauerbis));
-
- return lines.toArray(new String[lines.size()]);
- }
-
- @Override
- protected void writeCSVResultMetadata(final CSVWriter writer, final VegetationZonesCalculationResults results,
- final VegetationZonesCalculationResult result) {
-
- }
-
- @Override
- protected final void addJRMetaData(final MetaAndTableJRDataSource source, final VegetationZonesCalculationResults results) {
-
- super.addJRMetaData(source, results);
-
- /* additional column headings */
- source.addMetaData("veg_name", UInfoResultType.vegname.getPdfHeader(this.context.getMeta()));
- source.addMetaData("veg_dauervon", UInfoResultType.vegdauervon.getPdfHeader(this.context.getMeta()));
- source.addMetaData("veg_dauerbis", UInfoResultType.vegdauerbis.getPdfHeader(this.context.getMeta()));
- }
-
- @Override
- protected void writePDF(final OutputStream out) {
+ protected void doWritePdf(final OutputStream out, final VegetationZonesCalculationResults results) {
+ // TODO: Move to super
try {
- final MetaAndTableJRDataSource source = createJRData(this.data);
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, null);
final JasperReporter reporter = new JasperReporter();
- reporter.addReport(JASPER_FILE, source);
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+ final MetaAndTableJRDataSource source = new MetaAndTableJRDataSource();
+ getHelper().addJRMetaDataUSINFO(source, results);
+
+ result.addReport(exportContextCSV, results, reporter, source);
+ }
+
reporter.exportPDF(out);
}
catch (final JRException je) {
@@ -125,4 +49,35 @@
}
}
+ @Override
+ protected void doWriteCSVData(final CSVWriter writer, final VegetationZonesCalculationResults results) {
+ // TODO: Diesen Ablauf in super?
+
+ // TODO: move results into context?
+ final ExportContextCSV exportContextCSV = new ExportContextCSV(this.context, writer);
+
+ getLog().info("writeCSVData");
+
+ /* write as csv */
+ exportContextCSV.writeCSVGlobalMetadataDefaults(results); // ggf auslagern innerhalb dieser Klasse
+
+ // writer.writeNext(new String[] { "" }); // break line HERE to avoid redundance
+
+ final RiverInfo river = results.getRiver();
+
+ final Class> lastResultType = null;
+
+ for (final AbstractCalculationExportableResult result : results.getResults()) {
+
+ final Class> resultType = result.getClass();
+ if (lastResultType == null || lastResultType != resultType) {
+ exportContextCSV.writeBlankLine();
+ result.writeCSVHeader(exportContextCSV, results, river);
+ exportContextCSV.writeBlankLine();
+ } else
+ exportContextCSV.writeCSVLine(new String[] { "#" });
+
+ result.writeCsv(exportContextCSV, results);
+ }
+ }
}
\ No newline at end of file
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/vegetationzones/VegetationZonesState.java Thu Jun 14 16:56:31 2018 +0200
@@ -15,6 +15,7 @@
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.ChartArtifact;
import org.dive4elements.river.artifacts.D4EArtifact;
+import org.dive4elements.river.artifacts.common.AbstractCalculationExportableResult;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.model.DataFacet;
@@ -76,7 +77,7 @@
final VegetationZonesCalculationResults results = (VegetationZonesCalculationResults) res.getData();
- final List resultList = results.getResults();
+ final List> resultList = results.getResults();
if (!resultList.isEmpty()) {
final Facet csv = new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id);
diff -r 5be112fba832 -r 23945061daec artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java
--- a/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java Thu Jun 14 15:12:25 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/exports/AbstractExporter.java Thu Jun 14 16:56:31 2018 +0200
@@ -11,30 +11,22 @@
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
-
import java.text.NumberFormat;
-import org.w3c.dom.Document;
-
import org.apache.log4j.Logger;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
+import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
+import org.dive4elements.artifactdatabase.state.Settings;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.artifacts.CallContext;
-
-import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
-import org.dive4elements.artifactdatabase.state.Settings;
-
import org.dive4elements.artifacts.common.ArtifactNamespaceContext;
import org.dive4elements.artifacts.common.utils.XMLUtils;
-
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.collections.D4EArtifactCollection;
-
import org.dive4elements.river.themes.ThemeDocument;
import org.dive4elements.river.utils.Formatter;
+import org.w3c.dom.Document;
+import au.com.bytecode.opencsv.CSVWriter;
/**
* Abstract exporter that implements some basic methods for exporting data of
@@ -44,7 +36,7 @@
*/
public abstract class AbstractExporter implements OutGenerator {
- /** The log used in this exporter.*/
+ /** The log used in this exporter. */
private static Logger log = Logger.getLogger(AbstractExporter.class);
/* XXX: Why does AbstractExporter do not implement FacetTypes? */
@@ -82,7 +74,7 @@
/** The selected facet. */
protected String facet;
- /** The collection.*/
+ /** The collection. */
protected D4EArtifactCollection collection;
/** The master artifact. */
@@ -106,24 +98,26 @@
* Concrete subclasses need to use this method to write their special data
* objects into the CSV document.
*
- * @param writer The CSVWriter.
+ * @param writer
+ * The CSVWriter.
*/
protected abstract void writeCSVData(CSVWriter writer) throws IOException;
-
/**
* Write lines of informative content to CSV file.
* Usually this will be done above the column headers from within
* the implementation of writeCSVData in concret subclasses.
*
- * @param writer The CSVWriter
- * @param infolines Array of Strings with informative content.
- * Each will be written to a separate line prefixed with START_META_CHAR.
+ * @param writer
+ * The CSVWriter
+ * @param infolines
+ * Array of Strings with informative content.
+ * Each will be written to a separate line prefixed with START_META_CHAR.
*/
- protected void writeCSVInfo(CSVWriter writer, String[] infolines) {
- String[] metaline = new String[1];
+ protected void writeCSVInfo(final CSVWriter writer, final String[] infolines) {
+ final String[] metaline = new String[1];
- for (String infoline: infolines) {
+ for (final String infoline : infolines) {
metaline[0] = START_META_CHAR + " " + infoline;
writer.writeNext(metaline);
}
@@ -136,74 +130,66 @@
*/
protected abstract void writePDF(OutputStream out);
-
/**
* This method enables concrete subclasses to collected its own special
* data.
*
- * @param data The artifact that stores the data that has to be
- * exported.
+ * @param data
+ * The artifact that stores the data that has to be
+ * exported.
*/
protected abstract void addData(Object data);
- public void setup(Object config) {
+ @Override
+ public void setup(final Object config) {
log.debug("AbstractExporter.setup");
}
-
@Override
- public void init(
- String outName,
- Document request,
- OutputStream out,
- CallContext context
- ) {
+ public void init(final String outName, final Document request, final OutputStream out, final CallContext context) {
log.debug("AbstractExporter.init");
this.outName = outName;
this.request = request;
- this.out = out;
+ this.out = out;
this.context = context;
}
-
@Override
- public void setMasterArtifact(Artifact master) {
+ public void setMasterArtifact(final Artifact master) {
this.master = master;
}
- /** Get the callcontext that this exporter has been initialized
- * with. */
+ /**
+ * Get the callcontext that this exporter has been initialized
+ * with.
+ */
public CallContext getCallContext() {
return this.context;
}
-
@Override
- public void setCollection(D4EArtifactCollection collection) {
+ public void setCollection(final D4EArtifactCollection collection) {
this.collection = collection;
}
-
/**
* This doOut() just collects the data of multiple artifacts. Therefore, it
* makes use of the addData() method which enables concrete subclasses to
* store its data on its own. The real output creation takes place in the
* concrete generate() methods.
*
- * @param artifactFacet The artifact and facet.
- * The facet to add - NOTE: the facet needs to fit to the first
- * facet inserted into this exporter. Otherwise this artifact/facet is
- * skipped.
- * @param attr The attr document.
+ * @param artifactFacet
+ * The artifact and facet.
+ * The facet to add - NOTE: the facet needs to fit to the first
+ * facet inserted into this exporter. Otherwise this artifact/facet is
+ * skipped.
+ * @param attr
+ * The attr document.
*/
@Override
- public void doOut(
- ArtifactAndFacet artifactFacet,
- ThemeDocument attr,
- boolean visible
- ) {
- String name = artifactFacet.getFacetName();
+ public void doOut(final ArtifactAndFacet artifactFacet, final ThemeDocument attr, final boolean visible) {
+ final String name = artifactFacet.getFacetName();
log.debug("AbstractExporter.doOut: " + name);
@@ -212,109 +198,98 @@
return;
}
- addData(artifactFacet.getData(context));
+ addData(artifactFacet.getData(this.context));
}
-
/**
* Generates an export based on a specified facet.
*/
@Override
- public void generate()
- throws IOException
- {
+ public void generate() throws IOException {
log.debug("AbstractExporter.generate");
- if (facet == null) {
+ if (this.facet == null) {
throw new IOException("invalid (null) facet for exporter");
}
- if (facet.equals(FACET_CSV)) {
+ if (this.facet.equals(FACET_CSV)) {
generateCSV();
- }
- else if (facet.equals(FACET_PDF)) {
+ } else if (this.facet.equals(FACET_PDF)) {
generatePDF();
- }
- else {
- throw new IOException(
- "invalid facet for exporter: '" + facet + "'");
+ } else {
+ throw new IOException("invalid facet for exporter: '" + this.facet + "'");
}
}
-
/**
* Determines if the desired facet is valid for this exporter. If no facet
* is currently set, facet is set.
*
- * @param facet The desired facet.
+ * @param facet
+ * The desired facet.
*
* @return true, if facet is valid, otherwise false.
*/
- protected boolean isFacetValid(String facet) {
- log.debug("AbstractExporter.isFacetValid : "
- + facet + " (" + getFacet() + ")" );
+ protected boolean isFacetValid(final String facet) {
+ log.debug("AbstractExporter.isFacetValid : " + facet + " (" + getFacet() + ")");
- String thisFacet = getFacet();
+ final String thisFacet = getFacet();
if (thisFacet == null || thisFacet.length() == 0) {
return false;
- }
- else if (facet == null || facet.length() == 0) {
+ } else if (facet == null || facet.length() == 0) {
return false;
- }
- else {
+ } else {
return thisFacet.equals(facet);
}
}
-
/**
* Returns the name of the desired facet.
*
* @return the name of the desired facet.
*/
protected String getFacet() {
- if (facet == null) {
- facet = getFacetFromRequest();
+ if (this.facet == null) {
+ this.facet = getFacetFromRequest();
}
- return facet;
+ return this.facet;
}
-
/**
* Extracts the name of the requested facet from request document.
*
* @return the name of the requested facet.
*/
protected String getFacetFromRequest() {
- return XMLUtils.xpathString(
- request, XPATH_FACET, ArtifactNamespaceContext.INSTANCE);
+ return XMLUtils.xpathString(this.request, XPATH_FACET, ArtifactNamespaceContext.INSTANCE);
}
protected String msg(final String key) {
- return Resources.getMsg(context.getMeta(), key, key);
+ return Resources.getMsg(this.context.getMeta(), key, key);
}
- protected String msg(String key, final String def) {
- return Resources.getMsg(context.getMeta(), key, def);
+ protected String msg(final String key, final String def) {
+ return Resources.getMsg(this.context.getMeta(), key, def);
}
- protected String msg(String key, Object[] args) {
- return Resources.getMsg(context.getMeta(), key, key, args);
+ protected String msg(final String key, final Object[] args) {
+ return Resources.getMsg(this.context.getMeta(), key, key, args);
}
- protected String msg(String key, String def, Object[] args) {
- return Resources.getMsg(context.getMeta(), key, def, args);
+ protected String msg(final String key, final String def, final Object[] args) {
+ return Resources.getMsg(this.context.getMeta(), key, def, args);
}
protected String msgVarg(final String key, final Object... args) {
- return Resources.getMsg(context.getMeta(), key, key, args);
+ return Resources.getMsg(this.context.getMeta(), key, key, args);
}
/**
* Formats header with unit: msg [unit]
*/
+ // TODO: REMOVE, because it has moved to ExportContextCSV
protected final String msgUnit(final String key, final String unit) {
final String msg = msg(key);
return String.format("%s [%s]", msg, unit);
@@ -324,116 +299,104 @@
* This method starts CSV creation. It makes use of writeCSVData() which has
* to be implemented by concrete subclasses.
*/
- protected void generateCSV()
- throws IOException
- {
+ protected void generateCSV() throws IOException {
log.info("AbstractExporter.generateCSV");
- char quote = '"';
- char escape = '\\';
+ final char quote = '"';
+ final char escape = '\\';
- CSVWriter writer = new CSVWriter(
- new OutputStreamWriter(
- out,
- DEFAULT_CSV_CHARSET),
- DEFAULT_CSV_SEPARATOR, quote, escape, "\r\n");
+ final CSVWriter writer = new CSVWriter(new OutputStreamWriter(this.out, DEFAULT_CSV_CHARSET), DEFAULT_CSV_SEPARATOR, quote, escape, "\r\n");
writeCSVData(writer);
writer.close();
}
-
/**
* This method starts PDF creation.
*/
- protected void generatePDF()
- throws IOException
- {
+ protected void generatePDF() throws IOException {
log.info("AbstractExporter.generatePDF");
writePDF(this.out);
}
-
/**
* Returns an instance of EmptySettings currently!
*
* @return an instance of EmptySettings.
*/
+ @Override
public Settings getSettings() {
return new EmptySettings();
}
-
/**
* This method is not implemented. Override it in subclasses if those need a
* Settings object.
*/
- public void setSettings(Settings settings) {
+ @Override
+ public void setSettings(final Settings settings) {
// do nothing
}
-
/**
* Returns the number formatter for kilometer values.
*
* @return the number formatter for kilometer values.
*/
protected NumberFormat getKmFormatter() {
- if (kmFormat == null) {
- kmFormat = Formatter.getWaterlevelKM(context);
+ if (this.kmFormat == null) {
+ this.kmFormat = Formatter.getWaterlevelKM(this.context);
}
- return kmFormat;
+ return this.kmFormat;
}
-
/**
* Returns the number formatter for W values.
*
* @return the number formatter for W values.
*/
protected NumberFormat getWFormatter() {
- if (wFormat == null) {
- wFormat = Formatter.getWaterlevelW(context);
+ if (this.wFormat == null) {
+ this.wFormat = Formatter.getWaterlevelW(this.context);
}
- return wFormat;
+ return this.wFormat;
}
-
/**
* Returns the number formatter for Q values.
*
* @return the number formatter for Q values.
*/
protected NumberFormat getQFormatter() {
- if (qFormat == null) {
- qFormat = Formatter.getWaterlevelQ(context);
+ if (this.qFormat == null) {
+ this.qFormat = Formatter.getWaterlevelQ(this.context);
}
- return qFormat;
+ return this.qFormat;
}
-
+
protected final NumberFormat getMeanBedHeighFormatter() {
- if( meanBedHeightFormat == null )
- meanBedHeightFormat = Formatter.getMeanBedHeight(context);
- return meanBedHeightFormat;
+ if (this.meanBedHeightFormat == null)
+ this.meanBedHeightFormat = Formatter.getMeanBedHeight(this.context);
+ return this.meanBedHeightFormat;
}
protected final NumberFormat getTkhFormatter() {
- if( tkhFormat == null )
- tkhFormat = Formatter.getTkh(context);
- return tkhFormat;
+ if (this.tkhFormat == null)
+ this.tkhFormat = Formatter.getTkh(this.context);
+ return this.tkhFormat;
}
protected final NumberFormat getFlowDepthFormatter() {
- if( flowDepthFormat == null )
- flowDepthFormat = Formatter.getFlowDepth(context);
- return flowDepthFormat;
+ if (this.flowDepthFormat == null)
+ this.flowDepthFormat = Formatter.getFlowDepth(this.context);
+ return this.flowDepthFormat;
}
protected final NumberFormat getW2Formatter() {
- if( w2Format == null )
- w2Format = Formatter.getFlowDepth(context);
- return w2Format;
+ if (this.w2Format == null)
+ this.w2Format = Formatter.getFlowDepth(this.context);
+ return this.w2Format;
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
diff -r 5be112fba832 -r 23945061daec gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java Thu Jun 14 15:12:25 2018 +0200
+++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/CollectionView.java Thu Jun 14 16:56:31 2018 +0200
@@ -8,28 +8,16 @@
package org.dive4elements.river.client.client.ui;
-import com.google.gwt.core.client.GWT;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-
-import com.smartgwt.client.util.SC;
-
-import com.smartgwt.client.widgets.Window;
-
-import com.smartgwt.client.widgets.events.CloseClickEvent;
-import com.smartgwt.client.widgets.events.CloseClickHandler;
-
-import com.smartgwt.client.widgets.layout.Layout;
-import com.smartgwt.client.widgets.layout.VLayout;
-
-import com.smartgwt.client.widgets.tab.TabSet;
-
-import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
import org.dive4elements.river.client.client.Config;
import org.dive4elements.river.client.client.FLYS;
import org.dive4elements.river.client.client.FLYSConstants;
-
import org.dive4elements.river.client.client.event.CollectionChangeEvent;
import org.dive4elements.river.client.client.event.CollectionChangeHandler;
import org.dive4elements.river.client.client.event.HasCollectionChangeHandlers;
@@ -38,7 +26,6 @@
import org.dive4elements.river.client.client.event.OutputModesChangeHandler;
import org.dive4elements.river.client.client.event.ParameterChangeEvent;
import org.dive4elements.river.client.client.event.ParameterChangeHandler;
-
import org.dive4elements.river.client.client.services.AddArtifactService;
import org.dive4elements.river.client.client.services.AddArtifactServiceAsync;
import org.dive4elements.river.client.client.services.ArtifactService;
@@ -51,7 +38,6 @@
import org.dive4elements.river.client.client.services.DescribeCollectionServiceAsync;
import org.dive4elements.river.client.client.services.LoadArtifactService;
import org.dive4elements.river.client.client.services.LoadArtifactServiceAsync;
-
import org.dive4elements.river.client.shared.model.Artifact;
import org.dive4elements.river.client.shared.model.ArtifactDescription;
import org.dive4elements.river.client.shared.model.Collection;
@@ -61,45 +47,37 @@
import org.dive4elements.river.client.shared.model.ReportMode;
import org.dive4elements.river.client.shared.model.User;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.CloseClickEvent;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.layout.Layout;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tab.TabSet;
+import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
/**
* @author Ingo Weinzierl
*/
-public class CollectionView
-extends Window
-implements CollectionChangeHandler, HasCollectionChangeHandlers,
- OutputModesChangeHandler, HasOutputModesChangeHandlers,
- ParameterChangeHandler, CloseClickHandler
-{
+public class CollectionView extends Window implements CollectionChangeHandler, HasCollectionChangeHandlers, OutputModesChangeHandler, HasOutputModesChangeHandlers, ParameterChangeHandler, CloseClickHandler {
/** The ArtifactService used to communicate with the Artifact server. */
- protected CreateCollectionServiceAsync createCollectionService =
- GWT.create(CreateCollectionService.class);
+ protected CreateCollectionServiceAsync createCollectionService = GWT.create(CreateCollectionService.class);
/** The ArtifactService used to communicate with the Artifact server. */
- protected ArtifactServiceAsync createArtifactService =
- GWT.create(ArtifactService.class);
+ protected ArtifactServiceAsync createArtifactService = GWT.create(ArtifactService.class);
/** The AddArtifactService used to add an artifact to a collection. */
- protected AddArtifactServiceAsync addArtifactService =
- GWT.create(AddArtifactService.class);
+ protected AddArtifactServiceAsync addArtifactService = GWT.create(AddArtifactService.class);
/** The DescribeCollectionService used to update the existing collection. */
- protected DescribeCollectionServiceAsync describeCollectionService =
- GWT.create(DescribeCollectionService.class);
+ protected DescribeCollectionServiceAsync describeCollectionService = GWT.create(DescribeCollectionService.class);
- protected CollectionAttributeServiceAsync updater =
- GWT.create(CollectionAttributeService.class);
+ protected CollectionAttributeServiceAsync updater = GWT.create(CollectionAttributeService.class);
- /** The LoadArtifactService used to load recommendations*/
- protected LoadArtifactServiceAsync loadArtifactService =
- GWT.create(LoadArtifactService.class);
+ /** The LoadArtifactService used to load recommendations */
+ protected LoadArtifactServiceAsync loadArtifactService = GWT.create(LoadArtifactService.class);
/** The message class that provides i18n strings. */
protected FLYSConstants messages = GWT.create(FLYSConstants.class);
@@ -137,7 +115,7 @@
protected int recommendationQueue;
protected Stack newRecommendations;
- /** Values for fix analysis charts*/
+ /** Values for fix analysis charts */
protected double currentKm;
protected double minKm;
protected double maxKm;
@@ -147,18 +125,17 @@
* This constructor creates a new CollectionView that is used to display the
* collection.
*/
- public CollectionView(FLYS flys) {
- this.flys = flys;
- this.tabs = new TabSet();
- this.outputTabs = new HashMap();
- this.handlers = new ArrayList();
- this.outHandlers = new ArrayList();
- this.layout = new VLayout();
- this.parameterList = new ParameterList(
- flys, this, messages.new_project());
- this.artifactsQueue = 0;
+ public CollectionView(final FLYS flys) {
+ this.flys = flys;
+ this.tabs = new TabSet();
+ this.outputTabs = new HashMap();
+ this.handlers = new ArrayList();
+ this.outHandlers = new ArrayList();
+ this.layout = new VLayout();
+ this.parameterList = new ParameterList(flys, this, this.messages.new_project());
+ this.artifactsQueue = 0;
this.recommendationQueue = 0;
- this.newRecommendations = new Stack();
+ this.newRecommendations = new Stack();
this.currentKm = -1d;
this.minKm = -1d;
@@ -166,29 +143,30 @@
this.steps = -1d;
addCollectionChangeHandler(this);
- addCollectionChangeHandler(parameterList);
+ addCollectionChangeHandler(this.parameterList);
addCollectionChangeHandler(flys);
addOutputModesChangeHandler(this);
- addOutputModesChangeHandler(parameterList);
+ addOutputModesChangeHandler(this.parameterList);
addCloseClickHandler(this);
- parameterList.addParameterChangeHandler(this);
+ this.parameterList.addParameterChangeHandler(this);
init();
}
/**
- * @param collection The collection to be displayed.
+ * @param collection
+ * The collection to be displayed.
*/
- public CollectionView(FLYS flys, Collection collection, Artifact artifact) {
- this.flys = flys;
- this.artifact = artifact;
- this.collection = collection;
- this.tabs = new TabSet();
- this.outputTabs = new HashMap();
- this.handlers = new ArrayList();
- this.outHandlers = new ArrayList();
- this.layout = new VLayout();
+ public CollectionView(final FLYS flys, final Collection collection, final Artifact artifact) {
+ this.flys = flys;
+ this.artifact = artifact;
+ this.collection = collection;
+ this.tabs = new TabSet();
+ this.outputTabs = new HashMap();
+ this.handlers = new ArrayList();
+ this.outHandlers = new ArrayList();
+ this.layout = new VLayout();
this.currentKm = -1d;
this.minKm = -1d;
@@ -196,31 +174,27 @@
this.steps = -1d;
if (artifact != null) {
- this.parameterList = new ParameterList(
- flys,
- this,
- // FIXME: literally every information about the artifact is transported from the server side
- // but... the international name is resolved client-side.... Instead also transport the description of the artifact and use it!
- // FIXME: the same holds for a very few other international strings (e.g. names of facets used in Tabs)
- messages.getString(artifact.getName()),
- artifact);
- }
- else {
- this.parameterList = new ParameterList(
- flys, this, messages.new_project());
+ this.parameterList = new ParameterList(flys, this,
+ // FIXME: literally every information about the artifact is transported from the server side
+ // but... the international name is resolved client-side.... Instead also transport the description of the artifact and
+ // use it!
+ // FIXME: the same holds for a very few other international strings (e.g. names of facets used in Tabs)
+ this.messages.getString(artifact.getName()), artifact);
+ } else {
+ this.parameterList = new ParameterList(flys, this, this.messages.new_project());
}
- this.artifactsQueue = 0;
+ this.artifactsQueue = 0;
this.newRecommendations = new Stack();
addCollectionChangeHandler(this);
- addCollectionChangeHandler(parameterList);
+ addCollectionChangeHandler(this.parameterList);
addCollectionChangeHandler(flys);
addOutputModesChangeHandler(this);
- addOutputModesChangeHandler(parameterList);
+ addOutputModesChangeHandler(this.parameterList);
addCloseClickHandler(this);
- parameterList.addParameterChangeHandler(this);
+ this.parameterList.addParameterChangeHandler(this);
init();
@@ -231,7 +205,6 @@
}
}
-
/**
* This method handles the initial layout stuff.
*/
@@ -241,7 +214,7 @@
setMaximized(true);
- layout.setWidth100();
+ this.layout.setWidth100();
setCanDragReposition(true);
setCanDragResize(true);
@@ -250,79 +223,72 @@
setTitle("");
- addItem(layout);
+ addItem(this.layout);
- layout.addMember(tabs);
- tabs.addTab(parameterList);
+ this.layout.addMember(this.tabs);
+ this.tabs.addTab(this.parameterList);
}
protected FLYS getFlys() {
- return flys;
+ return this.flys;
}
-
/**
* This method registers a new CollectionChangeHandler.
*
- * @param handler The new CollectionChangeHandler.
+ * @param handler
+ * The new CollectionChangeHandler.
*/
@Override
- public void addCollectionChangeHandler(CollectionChangeHandler handler) {
+ public void addCollectionChangeHandler(final CollectionChangeHandler handler) {
if (handler != null) {
- handlers.add(handler);
+ this.handlers.add(handler);
}
}
-
/**
* This method registers a new OutputModesChangeHandler.
*
- * @param handler The new OutputModesChangeHandler.
+ * @param handler
+ * The new OutputModesChangeHandler.
*/
@Override
- public void addOutputModesChangeHandler(OutputModesChangeHandler handler) {
+ public void addOutputModesChangeHandler(final OutputModesChangeHandler handler) {
if (handler != null) {
- outHandlers.add(handler);
+ this.outHandlers.add(handler);
}
}
-
/**
* This method calls the onValueChange()
method of all
* registered ValueChangeHanders.
*/
- protected void fireCollectionChangeEvent(
- Collection old, Collection newCol)
- {
- for (CollectionChangeHandler handler: handlers) {
+ protected void fireCollectionChangeEvent(final Collection old, final Collection newCol) {
+ for (final CollectionChangeHandler handler : this.handlers) {
handler.onCollectionChange(new CollectionChangeEvent(old, newCol));
}
}
-
- protected void fireOutputModesChangeEvent(OutputMode[] outputs) {
- if (collection == null) {
+ protected void fireOutputModesChangeEvent(final OutputMode[] outputs) {
+ if (this.collection == null) {
return;
}
- for (OutputModesChangeHandler handler: outHandlers) {
+ for (final OutputModesChangeHandler handler : this.outHandlers) {
handler.onOutputModesChange(new OutputModesChangeEvent(outputs));
}
}
-
/** Disables input, grey out, show spinning wheel of joy. */
public void lockUI() {
- lockScreen = ScreenLock.lockUI(layout, lockScreen);
+ this.lockScreen = ScreenLock.lockUI(this.layout, this.lockScreen);
}
-
/** Enable input, remove grey, remove spinning wheel of joy. */
public void unlockUI() {
- ScreenLock.unlockUI(layout, lockScreen);
+ ScreenLock.unlockUI(this.layout, this.lockScreen);
}
-
/**
* This method returns true, if the Collection is new and no plugins has
* been chosen.
@@ -330,67 +296,62 @@
* @return true, if the Collection is new.
*/
public boolean isNew() {
- return collection.hasItems();
+ return this.collection.hasItems();
}
-
/**
* Returns the artifact that is used for the parameterization.
*
* @return the artifact that is used for the parameterization.
*/
public Artifact getArtifact() {
- return artifact;
+ return this.artifact;
}
-
public User getUser() {
return getFlys().getCurrentUser();
}
-
/**
* Set the current artifact that is the master of the parameterization.
*
- * @param artifact The new artifact.
+ * @param artifact
+ * The new artifact.
*/
- public void setArtifact(Artifact artifact) {
+ public void setArtifact(final Artifact artifact) {
this.artifact = artifact;
onArtifactChanged(artifact);
}
-
- public void onArtifactChanged(Artifact artifact) {
+ public void onArtifactChanged(final Artifact artifact) {
artifactChanged();
if (artifact.isInBackground()) {
- LoadingPanel p = new LoadingPanel(this, artifact);
- p.addStepBackHandler(parameterList);
+ final LoadingPanel p = new LoadingPanel(this, artifact);
+ p.addStepBackHandler(this.parameterList);
}
}
-
/**
* Implements the onCollectionChange() method to do update the GUI after the
* parameterization has changed.
*
- * @param event The ParameterChangeEvent.
+ * @param event
+ * The ParameterChangeEvent.
*/
@Override
- public void onParameterChange(ParameterChangeEvent event) {
+ public void onParameterChange(final ParameterChangeEvent event) {
GWT.log("CollectionView.onParameterChange");
setArtifact(event.getNewValue());
}
-
protected void artifactChanged() {
- Collection c = getCollection();
+ final Collection c = getCollection();
if (c != null) {
loadCollection(c);
- }
- else {
+ } else {
updateView();
}
}
@@ -398,70 +359,68 @@
/**
* Loads all information of a collection.
* If 'recommendations' present, load these.
- * @param c the Collection
+ *
+ * @param c
+ * the Collection
*/
- private void loadCollection(Collection c) {
- ArtifactDescription desc = getArtifact().getArtifactDescription();
+ private void loadCollection(final Collection c) {
+ final ArtifactDescription desc = getArtifact().getArtifactDescription();
final Recommendation[] recom = desc.getRecommendations();
- Config config = Config.getInstance();
- String locale = config.getLocale();
+ final Config config = Config.getInstance();
+ final String locale = config.getLocale();
- describeCollectionService.describe(c.identifier(), locale,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("Could not DESCRIBE collection.");
- SC.warn(FLYS.getExceptionString(messages, caught));
- }
+ this.describeCollectionService.describe(c.identifier(), locale, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("Could not DESCRIBE collection.");
+ SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+ }
- @Override
- public void onSuccess(Collection newCollection) {
- GWT.log("Successfully DESCRIBED collection.");
- boolean loaded = true;
- for (Recommendation r: recom) {
- if(!newCollection.loadedRecommendation(r)) {
- loaded = false;
- }
- }
- if (!loaded) {
- loadRecommendedArtifacts(recom);
- }
- else {
- setCollection(newCollection);
+ @Override
+ public void onSuccess(final Collection newCollection) {
+ GWT.log("Successfully DESCRIBED collection.");
+ boolean loaded = true;
+ for (final Recommendation r : recom) {
+ if (!newCollection.loadedRecommendation(r)) {
+ loaded = false;
}
}
+ if (!loaded) {
+ loadRecommendedArtifacts(recom);
+ } else {
+ setCollection(newCollection);
+ }
}
- );
+ });
}
-
/**
* Returns the collection of displayed by this view.
*
* @return the collection of this view.
*/
public Collection getCollection() {
- return collection;
+ return this.collection;
}
-
- protected void setCollection(Collection collection) {
+ protected void setCollection(final Collection collection) {
setCollection(collection, false);
}
-
/**
* Set the current collection.
*
- * @param collection The new collection.
- * @param suppress Whether to fire a collectionchangeevent.
+ * @param collection
+ * The new collection.
+ * @param suppress
+ * Whether to fire a collectionchangeevent.
*/
- protected void setCollection(Collection collection, boolean suppress) {
+ protected void setCollection(final Collection collection, final boolean suppress) {
if (collection != null && this.collection == null) {
- flys.getWorkspace().addView(collection.identifier(), this);
+ this.flys.getWorkspace().addView(collection.identifier(), this);
}
- Collection tmp = this.collection;
+ final Collection tmp = this.collection;
this.collection = collection;
setTitle(collection.getDisplayName());
@@ -471,23 +430,22 @@
}
}
-
@Override
- public void onCollectionChange(CollectionChangeEvent event) {
- if (artifactsQueue > 0) {
+ public void onCollectionChange(final CollectionChangeEvent event) {
+ if (this.artifactsQueue > 0) {
GWT.log("Do not update UI because we are still loading Artifacts.");
return;
}
- Collection newCol = event.getNewValue();
+ final Collection newCol = event.getNewValue();
- Map outs = newCol.getOutputModes();
+ final Map outs = newCol.getOutputModes();
- Set keys = outs.keySet();
- OutputMode[] prepared = new OutputMode[outs.size()];
+ final Set keys = outs.keySet();
+ final OutputMode[] prepared = new OutputMode[outs.size()];
int idx = 0;
- for (String outname: keys) {
+ for (final String outname : keys) {
prepared[idx++] = outs.get(outname);
}
@@ -496,11 +454,10 @@
updateView();
}
-
@Override
- public void onOutputModesChange(OutputModesChangeEvent event) {
+ public void onOutputModesChange(final OutputModesChangeEvent event) {
clearOutputTabs();
- OutputMode[] outs = event.getOutputModes();
+ final OutputMode[] outs = event.getOutputModes();
if (outs == null) {
return;
@@ -508,11 +465,11 @@
boolean hasCSV = false;
- for (OutputMode out: outs) {
+ for (final OutputMode out : outs) {
addOutputTab(out.getName(), out);
if (out instanceof ExportMode) {
- ExportMode export = (ExportMode) out;
+ final ExportMode export = (ExportMode) out;
if (export.getFacet("csv") != null) {
hasCSV = true;
@@ -521,25 +478,25 @@
}
if (!hasCSV) {
- parameterList.removeTable();
+ this.parameterList.removeTable();
}
}
-
/**
* Adds a new tab for the OutputMode out.
*
- * @param name The name and title of the output.
+ * @param name
+ * The name and title of the output.
*/
- protected void addOutputTab(String name, OutputMode out) {
+ protected void addOutputTab(final String name, final OutputMode out) {
if (out instanceof ExportMode) {
- ExportMode export = (ExportMode) out;
+ final ExportMode export = (ExportMode) out;
- if (export.getFacet("csv") != null && !parameterList.hasTable()) {
- TableDataPanel p = new TableDataPanel();
- p.setUuid(collection.identifier());
+ if (export.getFacet("csv") != null && !this.parameterList.hasTable()) {
+ final TableDataPanel p = new TableDataPanel();
+ p.setUuid(this.collection.identifier());
p.setName(out.getName());
- parameterList.setTable(p);
+ this.parameterList.setTable(p);
}
return;
@@ -552,31 +509,29 @@
GWT.log("Add new output tab for '" + name + "'");
- String title = messages.getString(name);
- OutputTab tab = out.createOutputTab(title, getCollection(), this);
+ final String title = this.messages.getString(name);
+ final OutputTab tab = out.createOutputTab(title, getCollection(), this);
if (tab != null) {
- outputTabs.put(name, tab);
+ this.outputTabs.put(name, tab);
}
}
-
/**
* Removes all output mode tabs from tab bar.
*/
protected void clearOutputTabs() {
GWT.log("Clear OutputTabs.");
- int num = tabs.getNumTabs();
+ final int num = this.tabs.getNumTabs();
- for (int i = num-1; i >= 1; i--) {
- tabs.removeTab(i);
+ for (int i = num - 1; i >= 1; i--) {
+ this.tabs.removeTab(i);
}
- outputTabs.clear();
+ this.outputTabs.clear();
}
-
/**
* Update the view (refresh the list of old and current data).
*/
@@ -585,189 +540,158 @@
updateOutputTabs();
}
-
/**
* This method is used to update the tabs to show specific output modes.
*/
protected void updateOutputTabs() {
GWT.log("Update output tabs.");
- if (outputTabs != null) {
- Set keys = outputTabs.keySet();
+ if (this.outputTabs != null) {
+ final Set keys = this.outputTabs.keySet();
- for (String key: keys) {
- tabs.addTab(outputTabs.get(key));
+ for (final String key : keys) {
+ this.tabs.addTab(this.outputTabs.get(key));
}
}
}
-
@Override
- public void onCloseClick(CloseClickEvent event) {
- if (collection != null) {
- if(artifact != null) {
- flys.closeProject(collection.identifier());
+ public void onCloseClick(final CloseClickEvent event) {
+ if (this.collection != null) {
+ if (this.artifact != null) {
+ this.flys.closeProject(this.collection.identifier());
+ } else {
+ this.flys.getProjectList().deleteCollection(this.collection);
}
- else {
- flys.getProjectList().deleteCollection(collection);
- }
- }
- else {
+ } else {
hide();
destroy();
}
}
-
- public void addArtifactToCollection(Artifact artifact) {
- Config config = Config.getInstance();
- final String locale = config.getLocale();
+ public void addArtifactToCollection(final Artifact artifact) {
+ final Config config = Config.getInstance();
+ final String locale = config.getLocale();
final Collection collection = getCollection();
GWT.log("CollectionView.addArtifactToCollection " + collection);
if (collection != null) {
- addArtifactService.add(
- collection, artifact, locale,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("An error occured while adding artifact.");
- SC.warn(FLYS.getExceptionString(messages, caught));
- }
+ this.addArtifactService.add(collection, artifact, locale, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("An error occured while adding artifact.");
+ SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+ }
- @Override
- public void onSuccess(Collection newCollection) {
- GWT.log("Successfully added artifacts.");
- setCollection(newCollection);
- }
+ @Override
+ public void onSuccess(final Collection newCollection) {
+ GWT.log("Successfully added artifacts.");
+ setCollection(newCollection);
}
- );
- }
- else {
+ });
+ } else {
// Create new collection and add artifact.
final Artifact art = artifact;
- createCollectionService.create(
- locale,
- flys.getCurrentUser().identifier(),
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("Could not create the new collection.");
- SC.warn(FLYS.getExceptionString(messages, caught));
- }
+ this.createCollectionService.create(locale, this.flys.getCurrentUser().identifier(), new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("Could not create the new collection.");
+ SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+ }
- @Override
- public void onSuccess(Collection collection) {
- GWT.log("Successfully created a new collection.");
- addArtifactService.add(
- collection, art, locale,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("An error occured while "
- + "adding artifact.");
- SC.warn(FLYS.getExceptionString(
- messages, caught));
- }
+ @Override
+ public void onSuccess(final Collection collection) {
+ GWT.log("Successfully created a new collection.");
+ CollectionView.this.addArtifactService.add(collection, art, locale, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("An error occured while " + "adding artifact.");
+ SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+ }
- @Override
- public void onSuccess(
- Collection newCollection) {
- GWT.log("Successfully added artifacts.");
- setCollection(newCollection);
- }
- }
- );
- }
+ @Override
+ public void onSuccess(final Collection newCollection) {
+ GWT.log("Successfully added artifacts.");
+ setCollection(newCollection);
+ }
+ });
}
- );
+ });
}
}
-
protected void addRecommendationsToCollection() {
- Config config = Config.getInstance();
- final String locale = config.getLocale();
+ final Config config = Config.getInstance();
+ final String locale = config.getLocale();
final Collection collection = getCollection();
- collection.addRecommendations(newRecommendations);
-
- updater.update(collection, locale,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- newRecommendations.removeAllElements();
- setCollection(collection);
+ collection.addRecommendations(this.newRecommendations);
- GWT.log("An error occured while saving recommendations.");
- SC.warn(FLYS.getExceptionString(messages, caught));
- }
+ this.updater.update(collection, locale, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ CollectionView.this.newRecommendations.removeAllElements();
+ setCollection(collection);
- @Override
- public void onSuccess(Collection newCol) {
- GWT.log("Successfully saved recommendations.");
- newRecommendations.removeAllElements();
- setCollection(newCol);
- }
+ GWT.log("An error occured while saving recommendations.");
+ SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
}
- );
+
+ @Override
+ public void onSuccess(final Collection newCol) {
+ GWT.log("Successfully saved recommendations.");
+ CollectionView.this.newRecommendations.removeAllElements();
+ setCollection(newCol);
+ }
+ });
}
-
- protected void loadRecommendedArtifacts(Recommendation[] recommendations) {
- Config config = Config.getInstance();
- final String locale = config.getLocale();
+ protected void loadRecommendedArtifacts(final Recommendation[] recommendations) {
+ final Config config = Config.getInstance();
+ final String locale = config.getLocale();
final Collection collection = getCollection();
- Artifact masterArtifact = getArtifact();
+ final Artifact masterArtifact = getArtifact();
if (recommendations == null) {
GWT.log("WARNING: Currently no recommendations.");
return;
}
- for (final Recommendation recommendation: recommendations) {
+ for (final Recommendation recommendation : recommendations) {
if (collection.loadedRecommendation(recommendation)) {
continue;
}
- newRecommendations.push(recommendation);
+ this.newRecommendations.push(recommendation);
// XXX: UGLY! If no reference artifact given use uuid of
- // current artifact as reference.
+ // current artifact as reference.
if (recommendation.getMasterArtifact() == null) {
recommendation.setMasterArtifact(masterArtifact.getUuid());
}
}
- loadArtifactService.loadMany(
- collection,
- recommendations,
- null,
- locale,
- new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
- GWT.log("Error loading recommendations: " +
- caught.getMessage());
- SC.warn(FLYS.getExceptionString(messages, caught));
- }
+ this.loadArtifactService.loadMany(collection, recommendations, null, locale, new AsyncCallback() {
+ @Override
+ public void onFailure(final Throwable caught) {
+ GWT.log("Error loading recommendations: " + caught.getMessage());
+ SC.warn(FLYS.getExceptionString(CollectionView.this.messages, caught));
+ }
- @Override
- public void onSuccess(Artifact[] artifacts) {
- GWT.log("Loaded artifacts: " + artifacts.length);
- addRecommendationsToCollection();
- }
+ @Override
+ public void onSuccess(final Artifact[] artifacts) {
+ GWT.log("Loaded artifacts: " + artifacts.length);
+ addRecommendationsToCollection();
+ }
});
}
-
- public void registerTabHandler(TabSelectedHandler tse) {
- tabs.addTabSelectedHandler(tse);
+ public void registerTabHandler(final TabSelectedHandler tse) {
+ this.tabs.addTabSelectedHandler(tse);
}
-
- public void setCurrentKm(double currentKm) {
+ public void setCurrentKm(final double currentKm) {
this.currentKm = currentKm;
}
@@ -775,7 +699,7 @@
return this.currentKm;
}
- public void setMinKm(double km) {
+ public void setMinKm(final double km) {
this.minKm = km;
}
@@ -783,7 +707,7 @@
return this.minKm;
}
- public void setMaxKm(double km) {
+ public void setMaxKm(final double km) {
this.maxKm = km;
}
@@ -791,7 +715,7 @@
return this.maxKm;
}
- public void setSteps(double step) {
+ public void setSteps(final double step) {
this.steps = step;
}
diff -r 5be112fba832 -r 23945061daec gwt-client/src/test/java/test/SinfoTkhRunner.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/test/java/test/SinfoTkhRunner.java Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,70 @@
+/** 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 test;
+
+import java.io.IOException;
+
+import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException;
+import org.dive4elements.river.client.shared.exceptions.ServerException;
+import org.dive4elements.river.client.shared.model.Data;
+import org.dive4elements.river.client.shared.model.DataItem;
+import org.dive4elements.river.client.shared.model.DefaultDataItem;
+import org.dive4elements.river.client.shared.model.StringOptionsData;
+
+import test.BerechnungsartenTester.CalcMode;
+import test.BerechnungsartenTester.FilenameMapper;
+import test.BerechnungsartenTester.River;
+
+/**
+ * @author Domenico Nardi Tironi
+ *
+ */
+public class SinfoTkhRunner extends AbstractModuleRunner {
+
+ public SinfoTkhRunner(final String username, final String password, final CalcMode sinfoCalcFlowDepth, final FilenameMapper file, final double from,
+ final double to, final River river) throws ConnectionException, ServerException {
+ super(username, password, AbstractModuleRunner.Infotype.sinfo, sinfoCalcFlowDepth, file, from, to, river);
+
+ }
+
+ @Override
+ public void runTest(final boolean exportToFile) throws ServerException, IOException {
+ /* Select River */
+ super.selectRiver();
+
+ /* Select CalcMode */
+ super.selectCalcMode();
+
+ /* Select Range */
+ super.selectMaxRange();
+
+ /* Select TRANSPORTKÖRPERHÖHHEN - einziger Unterschied zu FlowdepthMinMax */
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+
+ feedAndGo(new Data[] {
+
+ new StringOptionsData("wq_isq", "wq_isq", new DataItem[] { new DefaultDataItem("false", "false", "false") }),
+ new StringOptionsData("wq_isfree", "wq_isfree", new DataItem[] { new DefaultDataItem("false", "false", "false") }),
+ new StringOptionsData("wq_isrange", "wq_isrange", new DataItem[] { new DefaultDataItem("false", "false", "false") }),
+
+ new StringOptionsData("wq_single", "wq_single", new DataItem[] { new DefaultDataItem("1059.446", "1059.446", "1059.446") }) }, 0);
+
+ describeCollection();
+
+ super.export(exportToFile);
+ }
+}
diff -r 5be112fba832 -r 23945061daec gwt-client/src/test/resources/sinfo/tkh/sinfo_tkh_export.csv
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gwt-client/src/test/resources/sinfo/tkh/sinfo_tkh_export.csv Thu Jun 14 16:56:31 2018 +0200
@@ -0,0 +1,1797 @@
+"##Ergebnisausgabe - Beispielfluss - Transportkörperhöhen"
+"# FLYS-Version: 3.3.0"
+"# Bearbeiter: belger"
+"# Datum der Erstellung: 12.06.18"
+"# Gewässer: Beispielfluss"
+"# Höhensystem des Flusses: NHN + m "
+"# Bereich (km): 0,000 - 182,400"
+"# Berechnungsgrundlage: Gleichung nach GILL (1971)"
+""
+"Fluss-km";"Transportkörperhöhe [cm]";"Einteilung der Gewässersohle";"Mittlere Sohlhöhe [NHN + m]";"Wasserstand [NHN + m]";"Q [m³/s]";"Bezeichnung";"Bezugspegel";"Lage"
+""
+"##METADATEN WASSERSPIEGELLAGE"
+"# Bezeichnung der Wasserspiegellage: Q=1059.446 "
+"# Bezugspegel: Torgau"
+""
+"1,600";"0,0";"Starr";"87,83";"94,28";"1.075";"1.059,45";"Torgau";""
+"1,700";"0,0";"Starr";"87,76";"94,26";"1.075";"1.059,45";"Torgau";""
+"1,800";"0,0";"Starr";"87,78";"94,24";"1.075";"1.059,45";"Torgau";""
+"1,900";"0,0";"Starr";"87,78";"94,22";"1.075";"1.059,45";"Torgau";""
+"2,000";"0,0";"Starr";"87,75";"94,19";"1.075";"1.059,45";"Torgau";""
+"2,100";"0,0";"Starr";"87,72";"94,17";"1.075";"1.059,45";"Torgau";""
+"2,200";"0,6";"Starr";"87,67";"94,14";"1.075";"1.059,45";"Torgau";""
+"2,300";"1,7";"Starr";"87,62";"94,11";"1.075";"1.059,45";"Torgau";""
+"2,400";"0,9";"Starr";"87,25";"94,08";"1.075";"1.059,45";"Torgau";""
+"2,500";"0,0";"Starr";"87,02";"94,06";"1.075";"1.059,45";"Torgau";""
+"2,600";"0,0";"Starr";"86,94";"94,03";"1.075";"1.059,45";"Torgau";"Gemeinde: Forberge"
+"2,700";"0,0";"Starr";"86,83";"94,01";"1.075";"1.059,45";"Torgau";""
+"2,800";"0,0";"Starr";"86,68";"93,98";"1.075";"1.059,45";"Torgau";""
+"2,900";"0,0";"Starr";"86,85";"93,97";"1.075";"1.059,45";"Torgau";""
+"3,000";"0,0";"Starr";"87,00";"93,96";"1.075";"1.059,45";"Torgau";""
+"3,100";"0,0";"Starr";"86,89";"93,93";"1.075";"1.059,45";"Torgau";""
+"3,200";"0,0";"Starr";"87,09";"93,90";"1.075";"1.059,45";"Torgau";""
+"3,300";"0,0";"Starr";"87,12";"93,88";"1.075";"1.059,45";"Torgau";""
+"3,400";"0,0";"Starr";"87,12";"93,85";"1.075";"1.059,45";"Torgau";""
+"3,500";"3,0";"Starr";"87,18";"93,83";"1.075";"1.059,45";"Torgau";""
+"3,600";"2,2";"Starr";"87,23";"93,80";"1.075";"1.059,45";"Torgau";""
+"3,700";"1,4";"Starr";"87,22";"93,78";"1.075";"1.059,45";"Torgau";""
+"3,800";"2,7";"Starr";"87,22";"93,75";"1.075";"1.059,45";"Torgau";""
+"3,900";"4,0";"Starr";"87,29";"93,73";"1.075";"1.059,45";"Torgau";""
+"4,000";"0,0";"Starr";"87,33";"93,70";"1.075";"1.059,45";"Torgau";""
+"4,100";"0,0";"Starr";"87,32";"93,68";"1.075";"1.059,45";"Torgau";""
+"4,200";"0,0";"Starr";"87,29";"93,66";"1.075";"1.059,45";"Torgau";""
+"4,300";"0,0";"Starr";"87,28";"93,64";"1.075";"1.059,45";"Torgau";""
+"4,400";"0,0";"Starr";"87,32";"93,61";"1.075";"1.059,45";"Torgau";""
+"4,500";"1,3";"Starr";"87,28";"93,58";"1.075";"1.059,45";"Torgau";""
+"4,600";"3,0";"Starr";"87,19";"93,55";"1.075";"1.059,45";"Torgau";"Gemeinde: Klein-Zschepa"
+"4,700";"4,8";"Starr";"87,07";"93,52";"1.075";"1.059,45";"Torgau";""
+"4,800";"6,8";"Starr";"86,96";"93,49";"1.075";"1.059,45";"Torgau";""
+"4,900";"8,9";"Starr";"86,78";"93,46";"1.075";"1.059,45";"Torgau";""
+"5,000";"14,3";"Starr";"86,45";"93,43";"1.075";"1.059,45";"Torgau";""
+"5,100";"18,4";"Starr";"86,46";"93,40";"1.075";"1.059,45";"Torgau";""
+"5,200";"17,6";"Starr";"86,55";"93,36";"1.075";"1.059,45";"Torgau";""
+"5,300";"17,1";"Starr";"86,50";"93,34";"1.075";"1.059,45";"Torgau";""
+"5,400";"17,2";"Starr";"86,58";"93,31";"1.075";"1.059,45";"Torgau";""
+"5,500";"17,3";"Starr";"86,63";"93,29";"1.075";"1.059,45";"Torgau";""
+"5,600";"16,3";"Starr";"86,65";"93,27";"1.075";"1.059,45";"Torgau";"Gemeinde: Groß-Zschepa"
+"5,700";"14,4";"Starr";"86,71";"93,25";"1.075";"1.059,45";"Torgau";""
+"5,800";"12,8";"Starr";"86,74";"93,23";"1.075";"1.059,45";"Torgau";""
+"5,900";"11,2";"Starr";"86,72";"93,22";"1.075";"1.059,45";"Torgau";""
+"6,000";"13,0";"Starr";"86,64";"93,20";"1.075";"1.059,45";"Torgau";""
+"6,100";"14,7";"Starr";"86,56";"93,18";"1.075";"1.059,45";"Torgau";""
+"6,200";"15,5";"Starr";"86,55";"93,15";"1.075";"1.059,45";"Torgau";""
+"6,300";"16,2";"Starr";"86,52";"93,12";"1.075";"1.059,45";"Torgau";""
+"6,400";"15,3";"Starr";"86,53";"93,09";"1.075";"1.059,45";"Torgau";""
+"6,500";"14,4";"Starr";"86,47";"93,06";"1.075";"1.059,45";"Torgau";""
+"6,600";"16,3";"Starr";"86,10";"93,03";"1.075";"1.059,45";"Torgau";"Gemeinde: Strehla"
+"6,700";"18,1";"Starr";"85,78";"93,01";"1.075";"1.059,45";"Torgau";""
+"6,800";"10,9";"Starr";"86,24";"92,98";"1.075";"1.059,45";"Torgau";""
+"6,900";"3,3";"Starr";"86,19";"92,98";"1.075";"1.059,45";"Torgau";""
+"7,000";"0,3";"Starr";"86,21";"92,97";"1.075";"1.059,45";"Torgau";""
+"7,100";"0,0";"Starr";"86,10";"92,96";"1.075";"1.059,45";"Torgau";""
+"7,200";"5,1";"Starr";"86,06";"92,94";"1.075";"1.059,45";"Torgau";""
+"7,300";"11,3";"Starr";"86,20";"92,91";"1.075";"1.059,45";"Torgau";""
+"7,400";"11,5";"Starr";"86,27";"92,88";"1.075";"1.059,45";"Torgau";""
+"7,500";"11,9";"Starr";"86,25";"92,86";"1.075";"1.059,45";"Torgau";""
+"7,600";"10,6";"Starr";"86,21";"92,83";"1.075";"1.059,45";"Torgau";""
+"7,700";"9,3";"Starr";"86,15";"92,81";"1.075";"1.059,45";"Torgau";""
+"7,800";"19,8";"Starr";"86,16";"92,79";"1.075";"1.059,45";"Torgau";""
+"7,900";"26,2";"Starr";"86,18";"92,73";"1.075";"1.059,45";"Torgau";""
+"8,000";"28,0";"Starr";"86,14";"92,67";"1.075";"1.059,45";"Torgau";""
+"8,100";"29,6";"Starr";"86,09";"92,62";"1.075";"1.059,45";"Torgau";""
+"8,200";"32,2";"Starr";"86,07";"92,57";"1.075";"1.059,45";"Torgau";""
+"8,300";"34,5";"Starr";"85,94";"92,50";"1.075";"1.059,45";"Torgau";""
+"8,400";"30,5";"Starr";"85,54";"92,43";"1.075";"1.059,45";"Torgau";""
+"8,500";"15,7";"Starr";"85,56";"92,47";"1.075";"1.059,45";"Torgau";""
+"8,600";"21,5";"Starr";"85,65";"92,50";"1.075";"1.059,45";"Torgau";"Gemeinde: Nixstein"
+"8,700";"25,8";"Starr";"85,65";"92,45";"1.075";"1.059,45";"Torgau";""
+"8,800";"25,9";"Starr";"85,61";"92,39";"1.075";"1.059,45";"Torgau";""
+"8,900";"25,3";"Starr";"85,72";"92,36";"1.075";"1.059,45";"Torgau";""
+"9,000";"25,9";"Starr";"85,69";"92,33";"1.075";"1.059,45";"Torgau";""
+"9,100";"26,3";"Starr";"85,69";"92,31";"1.075";"1.059,45";"Torgau";""
+"9,200";"29,2";"Starr";"85,68";"92,29";"1.075";"1.059,45";"Torgau";""
+"9,300";"31,1";"Starr";"85,73";"92,25";"1.075";"1.059,45";"Torgau";""
+"9,400";"31,5";"Starr";"85,55";"92,21";"1.075";"1.059,45";"Torgau";""
+"9,500";"34,0";"Starr";"85,00";"92,18";"1.075";"1.059,45";"Torgau";""
+"9,600";"33,8";"Starr";"85,04";"92,14";"1.075";"1.059,45";"Torgau";"Gemeinde: Görzig,Trebnitz"
+"9,700";"32,0";"Starr";"85,35";"92,11";"1.075";"1.059,45";"Torgau";""
+"9,800";"25,9";"Starr";"85,76";"92,08";"1.075";"1.059,45";"Torgau";""
+"9,900";"20,0";"Starr";"85,88";"92,07";"1.075";"1.059,45";"Torgau";""
+"10,000";"20,9";"Starr";"85,50";"92,05";"1.075";"1.059,45";"Torgau";""
+"10,100";"20,5";"Starr";"85,41";"92,03";"1.075";"1.059,45";"Torgau";""
+"10,200";"22,1";"Starr";"85,29";"92,00";"1.075";"1.059,45";"Torgau";""
+"10,300";"23,6";"Starr";"85,20";"91,98";"1.075";"1.059,45";"Torgau";""
+"10,400";"27,9";"Starr";"85,20";"91,95";"1.075";"1.059,45";"Torgau";""
+"10,500";"30,9";"Starr";"85,21";"91,92";"1.075";"1.059,45";"Torgau";""
+"10,600";"27,8";"Starr";"85,25";"91,89";"1.075";"1.059,45";"Torgau";""
+"10,700";"23,9";"Starr";"85,32";"91,88";"1.075";"1.059,45";"Torgau";""
+"10,800";"22,9";"Starr";"85,38";"91,86";"1.075";"1.059,45";"Torgau";"Gemeinde: Kreinitz"
+"10,900";"22,1";"Starr";"85,39";"91,83";"1.075";"1.059,45";"Torgau";""
+"11,000";"19,9";"Starr";"85,39";"91,80";"1.075";"1.059,45";"Torgau";""
+"11,100";"18,0";"Starr";"85,23";"91,77";"1.075";"1.059,45";"Torgau";""
+"11,200";"20,3";"Starr";"85,17";"91,74";"1.075";"1.059,45";"Torgau";""
+"11,300";"21,7";"Starr";"85,27";"91,71";"1.075";"1.059,45";"Torgau";""
+"11,400";"22,8";"Starr";"85,28";"91,68";"1.075";"1.059,45";"Torgau";""
+"11,500";"23,9";"Starr";"85,28";"91,66";"1.075";"1.059,45";"Torgau";""
+"11,600";"23,5";"Starr";"85,27";"91,63";"1.075";"1.059,45";"Torgau";""
+"11,700";"23,2";"Starr";"85,24";"91,60";"1.075";"1.059,45";"Torgau";""
+"11,800";"23,4";"Starr";"85,22";"91,57";"1.075";"1.059,45";"Torgau";""
+"11,900";"23,9";"Starr";"85,12";"91,54";"1.075";"1.059,45";"Torgau";""
+"12,000";"23,6";"Starr";"85,02";"91,51";"1.075";"1.059,45";"Torgau";""
+"12,100";"23,0";"Starr";"84,98";"91,49";"1.075";"1.059,45";"Torgau";""
+"12,200";"21,8";"Starr";"85,05";"91,46";"1.075";"1.059,45";"Torgau";""
+"12,300";"21,0";"Starr";"85,04";"91,44";"1.075";"1.059,45";"Torgau";""
+"12,400";"24,7";"Starr";"84,88";"91,42";"1.075";"1.059,45";"Torgau";""
+"12,500";"27,1";"Starr";"84,89";"91,38";"1.075";"1.059,45";"Torgau";""
+"12,600";"27,7";"Starr";"84,93";"91,34";"1.075";"1.059,45";"Torgau";""
+"12,700";"32,3";"Starr";"84,20";"91,32";"1.075";"1.059,45";"Torgau";""
+"12,800";"32,4";"Starr";"84,32";"91,30";"1.075";"1.059,45";"Torgau";""
+"12,900";"33,7";"Starr";"84,22";"91,27";"1.075";"1.059,45";"Torgau";""
+"13,000";"27,3";"Starr";"84,18";"91,24";"1.075";"1.059,45";"Torgau";""
+"13,100";"31,1";"Starr";"83,97";"91,19";"1.075";"1.059,45";"Torgau";""
+"13,200";"33,1";"Starr";"83,94";"91,14";"1.075";"1.059,45";"Torgau";""
+"13,300";"35,0";"Starr";"83,88";"91,10";"1.075";"1.059,45";"Torgau";""
+"13,400";"33,1";"Starr";"83,81";"91,06";"1.075";"1.059,45";"Torgau";""
+"13,500";"30,1";"Starr";"83,80";"90,95";"1.075";"1.059,45";"Torgau";""
+"13,600";"30,7";"Starr";"83,86";"90,84";"1.075";"1.059,45";"Torgau";""
+"13,700";"31,9";"Starr";"83,82";"90,73";"1.075";"1.059,45";"Torgau";""
+"13,800";"29,2";"Starr";"83,90";"90,62";"1.075";"1.059,45";"Torgau";""
+"13,900";"27,0";"Starr";"83,89";"90,59";"1.075";"1.059,45";"Torgau";""
+"14,000";"26,4";"Starr";"83,84";"90,56";"1.075";"1.059,45";"Torgau";""
+"14,100";"26,0";"Starr";"83,74";"90,55";"1.075";"1.059,45";"Torgau";""
+"14,200";"29,0";"Starr";"83,67";"90,53";"1.075";"1.059,45";"Torgau";""
+"14,300";"31,1";"Starr";"83,68";"90,49";"1.075";"1.059,45";"Torgau";""
+"14,400";"29,4";"Starr";"83,74";"90,44";"1.075";"1.059,45";"Torgau";""
+"14,500";"27,4";"Starr";"83,83";"90,42";"1.075";"1.059,45";"Torgau";""
+"14,600";"30,3";"Starr";"83,72";"90,39";"1.075";"1.059,45";"Torgau";""
+"14,700";"34,5";"Starr";"83,31";"90,35";"1.075";"1.059,45";"Torgau";""
+"14,800";"40,7";"Starr";"82,68";"90,31";"1.075";"1.059,45";"Torgau";""
+"14,900";"43,4";"Starr";"82,55";"90,26";"1.075";"1.059,45";"Torgau";""
+"15,000";"40,1";"Starr";"82,88";"90,21";"1.075";"1.059,45";"Torgau";""
+"15,100";"36,8";"Starr";"83,23";"90,19";"1.075";"1.059,45";"Torgau";""
+"15,200";"33,5";"Starr";"83,48";"90,17";"1.075";"1.059,45";"Torgau";""
+"15,300";"31,5";"Starr";"83,44";"90,16";"1.075";"1.059,45";"Torgau";""
+"15,400";"34,6";"Starr";"83,29";"90,15";"1.075";"1.059,45";"Torgau";""
+"15,500";"36,6";"Starr";"83,24";"90,11";"1.075";"1.059,45";"Torgau";""
+"15,600";"36,7";"Starr";"83,11";"90,07";"1.075";"1.059,45";"Torgau";""
+"15,700";"36,3";"Starr";"83,09";"90,05";"1.075";"1.059,45";"Torgau";""
+"15,800";"37,1";"Starr";"83,12";"90,02";"1.075";"1.059,45";"Torgau";""
+"15,900";"37,9";"Starr";"83,13";"89,99";"1.075";"1.059,45";"Torgau";""
+"16,000";"36,1";"Starr";"83,24";"89,95";"1.075";"1.059,45";"Torgau";""
+"16,100";"35,7";"Starr";"83,12";"89,93";"1.075";"1.059,45";"Torgau";""
+"16,200";"37,8";"Starr";"82,84";"89,90";"1.075";"1.059,45";"Torgau";""
+"16,300";"37,9";"Starr";"82,86";"89,87";"1.075";"1.059,45";"Torgau";""
+"16,400";"39,4";"Starr";"82,92";"89,84";"1.075";"1.059,45";"Torgau";""
+"16,500";"41,9";"Starr";"82,78";"89,81";"1.075";"1.059,45";"Torgau";""
+"16,600";"43,7";"Starr";"82,72";"89,78";"1.075";"1.059,45";"Torgau";""
+"16,700";"44,2";"Starr";"82,78";"89,75";"1.075";"1.059,45";"Torgau";""
+"16,800";"43,3";"Starr";"82,89";"89,71";"1.075";"1.059,45";"Torgau";""
+"16,900";"43,0";"Starr";"82,93";"89,68";"1.075";"1.059,45";"Torgau";""
+"17,000";"42,6";"Starr";"82,92";"89,64";"1.075";"1.059,45";"Torgau";""
+"17,100";"42,9";"Starr";"82,83";"89,61";"1.075";"1.059,45";"Torgau";""
+"17,200";"43,8";"Starr";"82,74";"89,57";"1.075";"1.059,45";"Torgau";""
+"17,300";"44,2";"Starr";"82,72";"89,54";"1.075";"1.059,45";"Torgau";""
+"17,400";"45,9";"Starr";"82,56";"89,51";"1.075";"1.059,45";"Torgau";""
+"17,500";"48,8";"Starr";"82,24";"89,47";"1.075";"1.059,45";"Torgau";""
+"17,600";"45,5";"Starr";"82,56";"89,43";"1.075";"1.059,45";"Torgau";""
+"17,700";"44,1";"Starr";"82,66";"89,40";"1.075";"1.059,45";"Torgau";""
+"17,800";"42,1";"Starr";"82,89";"89,37";"1.075";"1.059,45";"Torgau";""
+"17,900";"46,5";"Starr";"82,33";"89,34";"1.075";"1.059,45";"Torgau";""
+"18,000";"49,3";"Starr";"81,93";"89,31";"1.075";"1.059,45";"Torgau";""
+"18,100";"48,9";"Starr";"81,92";"89,28";"1.075";"1.059,45";"Torgau";""
+"18,200";"48,1";"Starr";"82,15";"89,25";"1.075";"1.059,45";"Torgau";"Geschiebemessstelle: Mühlberg"
+"18,300";"47,2";"Starr";"82,27";"89,21";"1.075";"1.059,45";"Torgau";""
+"18,400";"46,8";"Starr";"82,19";"89,17";"1.075";"1.059,45";"Torgau";""
+"18,500";"47,7";"Starr";"81,95";"89,15";"1.075";"1.059,45";"Torgau";""
+"18,600";"48,8";"Starr";"81,69";"89,12";"1.075";"1.059,45";"Torgau";""
+"18,700";"49,7";"Starr";"81,44";"89,11";"1.075";"1.059,45";"Torgau";"Hafen: Mühlberg -Schutz- und Sicherheitshafen"
+"18,800";"45,9";"Starr";"81,27";"89,10";"1.075";"1.059,45";"Torgau";""
+"18,900";"36,8";"Starr";"81,44";"89,10";"1.075";"1.059,45";"Torgau";""
+"19,000";"43,3";"Starr";"81,47";"89,09";"1.075";"1.059,45";"Torgau";""
+"19,100";"44,2";"Starr";"81,88";"89,06";"1.075";"1.059,45";"Torgau";""
+"19,200";"42,1";"Starr";"82,06";"89,03";"1.075";"1.059,45";"Torgau";""
+"19,300";"42,6";"Starr";"81,87";"89,01";"1.075";"1.059,45";"Torgau";""
+"19,400";"41,1";"Starr";"81,76";"88,98";"1.075";"1.059,45";"Torgau";""
+"19,500";"39,6";"Starr";"81,58";"88,96";"1.075";"1.059,45";"Torgau";"Fähre: Köttlitz -Gierseilfähre"
+"19,600";"42,8";"Starr";"81,18";"88,94";"1.075";"1.059,45";"Torgau";"Zufluss: Lukke"
+"19,700";"43,5";"Starr";"81,14";"88,89";"1.075";"1.059,45";"Torgau";""
+"19,800";"42,8";"Starr";"81,50";"88,84";"1.068";"1.059,45";"Torgau";""
+"19,900";"42,4";"Starr";"81,73";"88,81";"1.068";"1.059,45";"Torgau";""
+"20,000";"41,1";"Starr";"81,91";"88,77";"1.068";"1.059,45";"Torgau";""
+"20,100";"40,5";"Starr";"81,98";"88,74";"1.068";"1.059,45";"Torgau";""
+"20,200";"40,3";"Starr";"81,94";"88,70";"1.068";"1.059,45";"Torgau";""
+"20,300";"40,1";"Starr";"81,90";"88,67";"1.068";"1.059,45";"Torgau";""
+"20,400";"39,1";"Starr";"81,96";"88,64";"1.068";"1.059,45";"Torgau";""
+"20,500";"39,5";"Starr";"81,82";"88,61";"1.068";"1.059,45";"Torgau";""
+"20,600";"39,8";"Starr";"81,91";"88,58";"1.068";"1.059,45";"Torgau";""
+"20,700";"40,8";"Starr";"81,83";"88,54";"1.068";"1.059,45";"Torgau";""
+"20,800";"40,8";"Starr";"81,60";"88,50";"1.068";"1.059,45";"Torgau";""
+"20,900";"40,0";"Starr";"81,39";"88,48";"1.068";"1.059,45";"Torgau";""
+"21,000";"42,3";"Starr";"81,00";"88,45";"1.068";"1.059,45";"Torgau";""
+"21,100";"43,4";"Starr";"80,80";"88,42";"1.068";"1.059,45";"Torgau";""
+"21,200";"42,2";"Starr";"80,90";"88,39";"1.068";"1.059,45";"Torgau";""
+"21,300";"40,4";"Starr";"81,09";"88,36";"1.068";"1.059,45";"Torgau";""
+"21,400";"38,4";"Starr";"81,28";"88,32";"1.068";"1.059,45";"Torgau";""
+"21,500";"40,0";"Starr";"80,94";"88,28";"1.068";"1.059,45";"Torgau";""
+"21,600";"39,8";"Starr";"81,13";"88,24";"1.068";"1.059,45";"Torgau";""
+"21,700";"39,6";"Starr";"81,25";"88,20";"1.068";"1.059,45";"Torgau";""
+"21,800";"38,9";"Starr";"81,28";"88,16";"1.064";"1.059,45";"Torgau";""
+"21,900";"38,6";"Starr";"81,26";"88,13";"1.064";"1.059,45";"Torgau";""
+"22,000";"37,1";"Starr";"81,29";"88,09";"1.064";"1.059,45";"Torgau";""
+"22,100";"35,5";"Starr";"81,30";"88,07";"1.064";"1.059,45";"Torgau";""
+"22,200";"36,1";"Starr";"80,90";"88,04";"1.064";"1.059,45";"Torgau";""
+"22,300";"33,4";"Starr";"80,98";"88,02";"1.064";"1.059,45";"Torgau";""
+"22,400";"35,2";"Starr";"80,94";"87,99";"1.064";"1.059,45";"Torgau";""
+"22,500";"36,5";"Starr";"80,91";"87,95";"1.064";"1.059,45";"Torgau";""
+"22,600";"34,1";"Starr";"81,11";"87,91";"1.064";"1.059,45";"Torgau";""
+"22,700";"32,9";"Starr";"81,09";"87,88";"1.064";"1.059,45";"Torgau";""
+"22,800";"30,8";"Starr";"81,10";"87,84";"1.064";"1.059,45";"Torgau";""
+"22,900";"28,9";"Starr";"81,02";"87,82";"1.064";"1.059,45";"Torgau";""
+"23,000";"28,7";"Starr";"81,11";"87,79";"1.064";"1.059,45";"Torgau";""
+"23,100";"30,2";"Starr";"80,86";"87,75";"1.064";"1.059,45";"Torgau";""
+"23,200";"28,8";"Starr";"80,82";"87,70";"1.064";"1.059,45";"Torgau";""
+"23,300";"27,4";"Starr";"80,78";"87,68";"1.064";"1.059,45";"Torgau";""
+"23,400";"25,2";"Starr";"80,80";"87,65";"1.064";"1.059,45";"Torgau";""
+"23,500";"23,0";"Starr";"80,78";"87,64";"1.064";"1.059,45";"Torgau";""
+"23,600";"29,3";"Starr";"80,74";"87,62";"1.064";"1.059,45";"Torgau";""
+"23,700";"33,6";"Starr";"80,70";"87,58";"1.064";"1.059,45";"Torgau";""
+"23,800";"32,7";"Starr";"80,70";"87,53";"1.064";"1.059,45";"Torgau";""
+"23,900";"32,2";"Starr";"80,64";"87,50";"1.064";"1.059,45";"Torgau";""
+"24,000";"32,9";"Starr";"80,52";"87,47";"1.064";"1.059,45";"Torgau";""
+"24,100";"33,7";"Starr";"80,38";"87,44";"1.064";"1.059,45";"Torgau";""
+"24,200";"35,0";"Starr";"80,16";"87,41";"1.064";"1.059,45";"Torgau";""
+"24,300";"36,3";"Starr";"79,94";"87,39";"1.064";"1.059,45";"Torgau";""
+"24,400";"35,2";"Starr";"80,02";"87,36";"1.064";"1.059,45";"Torgau";""
+"24,500";"33,2";"Starr";"80,24";"87,34";"1.064";"1.059,45";"Torgau";""
+"24,600";"33,7";"Starr";"80,44";"87,31";"1.064";"1.059,45";"Torgau";""
+"24,700";"34,5";"Starr";"80,53";"87,28";"1.064";"1.059,45";"Torgau";""
+"24,800";"35,8";"Starr";"80,50";"87,25";"1.064";"1.059,45";"Torgau";""
+"24,900";"37,9";"Starr";"80,32";"87,21";"1.064";"1.059,45";"Torgau";""
+"25,000";"37,6";"Starr";"80,34";"87,17";"1.064";"1.059,45";"Torgau";""
+"25,100";"37,2";"Starr";"80,36";"87,14";"1.064";"1.059,45";"Torgau";""
+"25,200";"37,2";"Starr";"80,31";"87,11";"1.064";"1.059,45";"Torgau";""
+"25,300";"36,3";"Starr";"80,41";"87,09";"1.064";"1.059,45";"Torgau";""
+"25,400";"35,8";"Starr";"80,36";"87,06";"1.064";"1.059,45";"Torgau";""
+"25,500";"36,5";"Starr";"80,11";"87,04";"1.064";"1.059,45";"Torgau";""
+"25,600";"39,1";"Starr";"79,87";"87,02";"1.064";"1.059,45";"Torgau";""
+"25,700";"40,2";"Starr";"79,79";"86,99";"1.064";"1.059,45";"Torgau";""
+"25,800";"40,0";"Starr";"79,82";"86,95";"1.064";"1.059,45";"Torgau";""
+"25,900";"40,4";"Starr";"79,78";"86,92";"1.064";"1.059,45";"Torgau";""
+"26,000";"41,2";"Starr";"79,52";"86,88";"1.064";"1.059,45";"Torgau";""
+"26,100";"40,3";"Starr";"79,52";"86,86";"1.064";"1.059,45";"Torgau";""
+"26,200";"40,4";"Starr";"79,53";"86,83";"1.064";"1.059,45";"Torgau";""
+"26,300";"40,7";"Starr";"79,52";"86,79";"1.064";"1.059,45";"Torgau";""
+"26,400";"42,0";"Starr";"79,39";"86,75";"1.064";"1.059,45";"Torgau";""
+"26,500";"42,1";"Starr";"79,43";"86,72";"1.064";"1.059,45";"Torgau";""
+"26,600";"38,8";"Starr";"79,75";"86,68";"1.064";"1.059,45";"Torgau";"Bundesland: Freistaat Sachsen"
+"26,700";"36,6";"Starr";"79,90";"86,67";"1.064";"1.059,45";"Torgau";""
+"26,800";"36,9";"Starr";"79,94";"86,65";"1.064";"1.059,45";"Torgau";""
+"26,900";"37,2";"Starr";"79,94";"86,61";"1.064";"1.059,45";"Torgau";""
+"27,000";"37,8";"Starr";"79,91";"86,57";"1.064";"1.059,45";"Torgau";""
+"27,100";"40,2";"Starr";"79,61";"86,53";"1.064";"1.059,45";"Torgau";""
+"27,200";"39,9";"Starr";"79,59";"86,49";"1.064";"1.059,45";"Torgau";""
+"27,300";"38,9";"Starr";"79,68";"86,47";"1.064";"1.059,45";"Torgau";""
+"27,400";"38,2";"Starr";"79,66";"86,45";"1.064";"1.059,45";"Torgau";""
+"27,500";"36,7";"Starr";"79,76";"86,43";"1.064";"1.059,45";"Torgau";""
+"27,600";"34,0";"Starr";"79,89";"86,41";"1.064";"1.059,45";"Torgau";""
+"27,700";"31,0";"Starr";"80,05";"86,39";"1.064";"1.059,45";"Torgau";""
+"27,800";"33,3";"Starr";"79,83";"86,37";"1.064";"1.059,45";"Torgau";""
+"27,900";"36,0";"Starr";"79,52";"86,33";"1.064";"1.059,45";"Torgau";""
+"28,000";"38,4";"Starr";"79,49";"86,29";"1.064";"1.059,45";"Torgau";""
+"28,100";"39,9";"Starr";"79,51";"86,24";"1.064";"1.059,45";"Torgau";""
+"28,200";"38,6";"Starr";"79,52";"86,18";"1.064";"1.059,45";"Torgau";""
+"28,300";"37,6";"Starr";"79,49";"86,17";"1.064";"1.059,45";"Torgau";""
+"28,400";"38,4";"Starr";"79,45";"86,15";"1.064";"1.059,45";"Torgau";""
+"28,500";"38,8";"Starr";"79,44";"86,11";"1.064";"1.059,45";"Torgau";""
+"28,600";"38,5";"Starr";"79,44";"86,07";"1.064";"1.059,45";"Torgau";""
+"28,700";"38,8";"Starr";"79,35";"86,04";"1.064";"1.059,45";"Torgau";""
+"28,800";"39,5";"Starr";"79,27";"86,00";"1.064";"1.059,45";"Torgau";""
+"28,900";"40,1";"Starr";"79,18";"85,97";"1.064";"1.059,45";"Torgau";""
+"29,000";"42,4";"Starr";"78,96";"85,93";"1.064";"1.059,45";"Torgau";""
+"29,100";"42,2";"Starr";"79,04";"85,89";"1.064";"1.059,45";"Torgau";""
+"29,200";"41,0";"Starr";"79,13";"85,84";"1.064";"1.059,45";"Torgau";""
+"29,300";"40,2";"Starr";"79,15";"85,82";"1.064";"1.059,45";"Torgau";""
+"29,400";"39,8";"Starr";"79,16";"85,80";"1.064";"1.059,45";"Torgau";""
+"29,500";"40,0";"Starr";"79,07";"85,77";"1.064";"1.059,45";"Torgau";""
+"29,600";"41,4";"Starr";"78,94";"85,73";"1.064";"1.059,45";"Torgau";""
+"29,700";"42,0";"Starr";"78,91";"85,69";"1.064";"1.059,45";"Torgau";""
+"29,800";"40,2";"Starr";"78,95";"85,64";"1.064";"1.059,45";"Torgau";""
+"29,900";"38,7";"Starr";"78,95";"85,63";"1.064";"1.059,45";"Torgau";""
+"30,000";"43,5";"Starr";"78,45";"85,62";"1.064";"1.059,45";"Torgau";""
+"30,100";"46,0";"Starr";"78,25";"85,59";"1.064";"1.059,45";"Torgau";""
+"30,200";"45,5";"Starr";"78,09";"85,55";"1.064";"1.059,45";"Torgau";""
+"30,300";"43,7";"Starr";"78,07";"85,54";"1.064";"1.059,45";"Torgau";""
+"30,400";"44,8";"Starr";"78,04";"85,52";"1.064";"1.059,45";"Torgau";""
+"30,500";"43,7";"Starr";"78,30";"85,48";"1.064";"1.059,45";"Torgau";""
+"30,600";"44,0";"Starr";"78,27";"85,44";"1.064";"1.059,45";"Torgau";""
+"30,700";"44,6";"Starr";"78,22";"85,42";"1.064";"1.059,45";"Torgau";""
+"30,800";"43,3";"Starr";"78,30";"85,39";"1.062";"1.059,45";"Torgau";""
+"30,900";"42,7";"Starr";"78,26";"85,37";"1.062";"1.059,45";"Torgau";""
+"31,000";"43,9";"Starr";"78,19";"85,34";"1.062";"1.059,45";"Torgau";""
+"31,100";"44,2";"Starr";"78,19";"85,29";"1.062";"1.059,45";"Torgau";""
+"31,200";"46,7";"Starr";"78,03";"85,24";"1.062";"1.059,45";"Torgau";""
+"31,300";"50,3";"Starr";"77,69";"85,19";"1.062";"1.059,45";"Torgau";""
+"31,400";"47,7";"Starr";"77,98";"85,14";"1.062";"1.059,45";"Torgau";""
+"31,500";"45,8";"Starr";"78,14";"85,09";"1.062";"1.059,45";"Torgau";""
+"31,600";"45,6";"Starr";"78,05";"85,03";"1.062";"1.059,45";"Torgau";""
+"32,200";"43,3";"Starr";"77,85";"85,01";"1.062";"1.059,45";"Torgau";""
+"32,300";"42,8";"Starr";"77,84";"85,00";"1.062";"1.059,45";"Torgau";""
+"32,400";"44,5";"Starr";"77,69";"84,98";"1.062";"1.059,45";"Torgau";""
+"32,500";"45,1";"Starr";"77,68";"84,95";"1.062";"1.059,45";"Torgau";""
+"32,600";"45,1";"Starr";"77,75";"84,92";"1.062";"1.059,45";"Torgau";""
+"32,700";"45,9";"Starr";"77,70";"84,89";"1.062";"1.059,45";"Torgau";""
+"32,800";"46,3";"Starr";"77,59";"84,85";"1.062";"1.059,45";"Torgau";""
+"32,900";"44,9";"Starr";"77,74";"84,83";"1.062";"1.059,45";"Torgau";""
+"33,000";"47,0";"Starr";"77,45";"84,80";"1.062";"1.059,45";"Torgau";""
+"33,100";"47,6";"Starr";"77,35";"84,78";"1.062";"1.059,45";"Torgau";""
+"33,200";"47,2";"Starr";"77,40";"84,76";"1.062";"1.059,45";"Torgau";""
+"33,300";"46,1";"Starr";"77,55";"84,74";"1.062";"1.059,45";"Torgau";""
+"33,400";"45,9";"Starr";"77,57";"84,71";"1.062";"1.059,45";"Torgau";""
+"33,500";"46,1";"Starr";"77,54";"84,69";"1.062";"1.059,45";"Torgau";""
+"33,600";"47,7";"Starr";"77,42";"84,67";"1.062";"1.059,45";"Torgau";""
+"33,700";"48,4";"Starr";"77,39";"84,64";"1.062";"1.059,45";"Torgau";""
+"33,800";"49,6";"Starr";"77,24";"84,61";"1.062";"1.059,45";"Torgau";""
+"33,900";"50,9";"Starr";"77,08";"84,59";"1.062";"1.059,45";"Torgau";""
+"34,000";"50,0";"Starr";"77,04";"84,56";"1.062";"1.059,45";"Torgau";""
+"34,100";"50,3";"Starr";"76,80";"84,54";"1.062";"1.059,45";"Torgau";""
+"34,200";"50,4";"Starr";"76,77";"84,52";"1.062";"1.059,45";"Torgau";""
+"34,300";"48,9";"Starr";"76,95";"84,50";"1.062";"1.059,45";"Torgau";""
+"34,400";"49,2";"Starr";"77,08";"84,47";"1.062";"1.059,45";"Torgau";""
+"34,500";"49,4";"Starr";"77,19";"84,45";"1.062";"1.059,45";"Torgau";""
+"34,600";"48,6";"Starr";"77,31";"84,42";"1.062";"1.059,45";"Torgau";""
+"34,700";"48,2";"Starr";"77,36";"84,39";"1.062";"1.059,45";"Torgau";""
+"34,800";"50,8";"Starr";"77,05";"84,36";"1.062";"1.059,45";"Torgau";""
+"34,900";"52,9";"Starr";"76,83";"84,35";"1.062";"1.059,45";"Torgau";""
+"35,000";"51,5";"Starr";"76,88";"84,33";"1.062";"1.059,45";"Torgau";""
+"35,100";"52,6";"Mobil";"76,55";"84,31";"1.062";"1.059,45";"Torgau";""
+"35,200";"53,8";"Mobil";"76,52";"84,28";"1.062";"1.059,45";"Torgau";""
+"35,300";"53,6";"Starr";"76,62";"84,25";"1.062";"1.059,45";"Torgau";""
+"35,400";"53,4";"Starr";"76,63";"84,21";"1.062";"1.059,45";"Torgau";""
+"35,500";"54,3";"Starr";"76,52";"84,19";"1.062";"1.059,45";"Torgau";""
+"35,600";"57,6";"Starr";"76,11";"84,16";"1.062";"1.059,45";"Torgau";""
+"35,700";"59,8";"Starr";"75,83";"84,13";"1.062";"1.059,45";"Torgau";""
+"35,800";"60,1";"Starr";"75,82";"84,10";"1.062";"1.059,45";"Torgau";""
+"35,900";"59,7";"Starr";"75,88";"84,07";"1.062";"1.059,45";"Torgau";""
+"36,000";"59,6";"Starr";"75,87";"84,03";"1.062";"1.059,45";"Torgau";""
+"36,100";"58,5";"Starr";"75,98";"84,00";"1.062";"1.059,45";"Torgau";""
+"36,200";"57,9";"Starr";"75,83";"83,97";"1.062";"1.059,45";"Torgau";""
+"36,300";"56,8";"Starr";"75,71";"83,96";"1.062";"1.059,45";"Torgau";""
+"36,400";"57,3";"Starr";"75,97";"83,94";"1.062";"1.059,45";"Torgau";""
+"36,500";"56,3";"Starr";"76,21";"83,90";"1.062";"1.059,45";"Torgau";""
+"36,600";"57,5";"Starr";"76,00";"83,86";"1.062";"1.059,45";"Torgau";""
+"36,700";"55,3";"Starr";"76,19";"83,84";"1.062";"1.059,45";"Torgau";""
+"36,800";"55,7";"Starr";"76,17";"83,81";"1.062";"1.059,45";"Torgau";""
+"36,900";"55,0";"Starr";"76,25";"83,78";"1.062";"1.059,45";"Torgau";""
+"37,000";"55,1";"Starr";"76,21";"83,74";"1.062";"1.059,45";"Torgau";""
+"37,100";"56,0";"Starr";"76,08";"83,71";"1.062";"1.059,45";"Torgau";""
+"37,200";"55,6";"Starr";"76,03";"83,68";"1.062";"1.059,45";"Torgau";""
+"37,300";"55,2";"Starr";"75,99";"83,66";"1.062";"1.059,45";"Torgau";""
+"37,400";"52,7";"Starr";"76,20";"83,64";"1.062";"1.059,45";"Torgau";""
+"37,500";"50,8";"Starr";"76,34";"83,63";"1.062";"1.059,45";"Torgau";""
+"37,600";"52,1";"Starr";"76,23";"83,61";"1.062";"1.059,45";"Torgau";""
+"37,700";"52,1";"Starr";"76,25";"83,58";"1.062";"1.059,45";"Torgau";""
+"37,800";"51,3";"Starr";"75,97";"83,55";"1.062";"1.059,45";"Torgau";""
+"37,900";"46,1";"Starr";"75,94";"83,56";"1.062";"1.059,45";"Torgau";""
+"38,000";"46,6";"Starr";"76,03";"83,56";"1.062";"1.059,45";"Torgau";""
+"38,100";"46,7";"Starr";"76,14";"83,54";"1.062";"1.059,45";"Torgau";""
+"38,200";"48,6";"Starr";"76,17";"83,52";"1.062";"1.059,45";"Torgau";""
+"38,300";"50,7";"Starr";"76,05";"83,47";"1.062";"1.059,45";"Torgau";""
+"38,400";"48,9";"Starr";"76,12";"83,42";"1.062";"1.059,45";"Torgau";""
+"38,500";"47,5";"Starr";"76,14";"83,40";"1.062";"1.059,45";"Torgau";""
+"38,600";"48,0";"Starr";"76,22";"83,37";"1.062";"1.059,45";"Torgau";""
+"38,700";"49,2";"Starr";"76,15";"83,33";"1.062";"1.059,45";"Torgau";""
+"38,800";"48,7";"Starr";"76,22";"83,29";"1.062";"1.059,45";"Torgau";""
+"38,900";"48,2";"Starr";"76,29";"83,26";"1.062";"1.059,45";"Torgau";""
+"39,000";"46,1";"Starr";"76,29";"83,23";"1.062";"1.059,45";"Torgau";""
+"39,100";"44,6";"Starr";"76,10";"83,22";"1.062";"1.059,45";"Torgau";""
+"39,200";"45,6";"Starr";"76,13";"83,21";"1.062";"1.059,45";"Torgau";""
+"39,300";"45,9";"Starr";"76,20";"83,18";"1.062";"1.059,45";"Torgau";""
+"39,400";"47,3";"Starr";"75,99";"83,14";"1.062";"1.059,45";"Torgau";""
+"39,500";"47,6";"Starr";"75,94";"83,12";"1.062";"1.059,45";"Torgau";""
+"39,600";"49,1";"Starr";"75,74";"83,09";"1.062";"1.059,45";"Torgau";""
+"39,700";"49,8";"Starr";"75,63";"83,06";"1.062";"1.059,45";"Torgau";""
+"39,800";"50,7";"Starr";"75,41";"83,02";"1.062";"1.059,45";"Torgau";""
+"39,900";"51,5";"Starr";"75,20";"83,01";"1.062";"1.059,45";"Torgau";""
+"40,000";"51,8";"Starr";"75,08";"82,99";"1.062";"1.059,45";"Torgau";""
+"40,100";"51,2";"Starr";"75,07";"82,98";"1.062";"1.059,45";"Torgau";""
+"40,200";"50,1";"Starr";"75,00";"82,96";"1.062";"1.059,45";"Torgau";""
+"40,300";"47,8";"Starr";"75,04";"82,94";"1.062";"1.059,45";"Torgau";""
+"40,400";"47,9";"Starr";"74,99";"82,92";"1.062";"1.059,45";"Torgau";""
+"40,500";"48,8";"Starr";"74,83";"82,90";"1.062";"1.059,45";"Torgau";""
+"40,600";"46,1";"Starr";"75,04";"82,87";"1.062";"1.059,45";"Torgau";""
+"40,700";"42,7";"Starr";"75,37";"82,85";"1.062";"1.059,45";"Torgau";""
+"40,800";"39,3";"Starr";"75,44";"82,83";"1.059";"1.059,45";"Torgau";""
+"40,900";"36,1";"Starr";"75,39";"82,82";"1.059";"1.059,45";"Torgau";""
+"41,000";"38,1";"Starr";"75,40";"82,81";"1.059";"1.059,45";"Torgau";""
+"41,100";"39,2";"Starr";"75,49";"82,78";"1.059";"1.059,45";"Torgau";""
+"41,200";"41,9";"Starr";"75,40";"82,75";"1.059";"1.059,45";"Torgau";""
+"41,300";"46,9";"Starr";"74,89";"82,71";"1.059";"1.059,45";"Torgau";""
+"41,400";"48,9";"Starr";"74,60";"82,67";"1.059";"1.059,45";"Torgau";""
+"41,500";"48,9";"Starr";"74,63";"82,66";"1.059";"1.059,45";"Torgau";""
+"41,600";"47,3";"Starr";"74,75";"82,65";"1.059";"1.059,45";"Torgau";""
+"41,700";"47,8";"Starr";"74,71";"82,63";"1.059";"1.059,45";"Torgau";""
+"41,800";"46,4";"Starr";"74,91";"82,61";"1.059";"1.059,45";"Torgau";""
+"41,900";"45,3";"Starr";"75,05";"82,59";"1.059";"1.059,45";"Torgau";""
+"42,000";"47,6";"Starr";"75,07";"82,56";"1.059";"1.059,45";"Torgau";""
+"42,100";"49,7";"Starr";"75,05";"82,53";"1.059";"1.059,45";"Torgau";""
+"42,200";"49,2";"Starr";"74,97";"82,50";"1.059";"1.059,45";"Torgau";""
+"42,300";"49,6";"Starr";"74,74";"82,49";"1.059";"1.059,45";"Torgau";""
+"42,400";"51,0";"Starr";"74,68";"82,48";"1.059";"1.059,45";"Torgau";""
+"42,500";"52,9";"Starr";"74,52";"82,46";"1.059";"1.059,45";"Torgau";""
+"42,600";"53,0";"Starr";"74,49";"82,43";"1.059";"1.059,45";"Torgau";""
+"42,700";"53,7";"Starr";"74,39";"82,42";"1.059";"1.059,45";"Torgau";""
+"42,800";"55,1";"Starr";"74,34";"82,40";"1.059";"1.059,45";"Torgau";""
+"42,900";"57,7";"Starr";"74,13";"82,38";"1.059";"1.059,45";"Torgau";""
+"43,000";"58,6";"Starr";"74,10";"82,36";"1.059";"1.059,45";"Torgau";""
+"43,100";"56,2";"Starr";"74,47";"82,34";"1.059";"1.059,45";"Torgau";""
+"43,200";"58,1";"Starr";"74,35";"82,32";"1.059";"1.059,45";"Torgau";""
+"43,300";"57,8";"Starr";"74,48";"82,30";"1.059";"1.059,45";"Torgau";""
+"43,400";"58,2";"Starr";"74,58";"82,28";"1.059";"1.059,45";"Torgau";""
+"43,500";"60,7";"Starr";"74,40";"82,26";"1.059";"1.059,45";"Torgau";""
+"43,600";"60,6";"Starr";"74,43";"82,24";"1.059";"1.059,45";"Torgau";""
+"43,700";"59,5";"Starr";"74,57";"82,23";"1.059";"1.059,45";"Torgau";""
+"43,800";"60,2";"Starr";"74,35";"82,22";"1.059";"1.059,45";"Torgau";""
+"43,900";"60,0";"Starr";"74,18";"82,22";"1.059";"1.059,45";"Torgau";""
+"44,000";"61,4";"Starr";"74,41";"82,21";"1.059";"1.059,45";"Torgau";""
+"44,100";"62,9";"Starr";"74,47";"82,17";"1.059";"1.059,45";"Torgau";""
+"44,200";"64,4";"Starr";"74,30";"82,13";"1.059";"1.059,45";"Torgau";""
+"44,300";"65,7";"Starr";"74,17";"82,13";"1.059";"1.059,45";"Torgau";""
+"44,400";"68,0";"Starr";"74,08";"82,13";"1.059";"1.059,45";"Torgau";""
+"44,500";"72,2";"Starr";"73,75";"82,11";"1.059";"1.059,45";"Torgau";""
+"44,600";"74,3";"Starr";"73,66";"82,08";"1.059";"1.059,45";"Torgau";""
+"44,700";"75,3";"Starr";"73,65";"82,05";"1.059";"1.059,45";"Torgau";""
+"44,800";"76,0";"Starr";"73,62";"82,02";"1.059";"1.059,45";"Torgau";""
+"44,900";"77,6";"Starr";"73,52";"82,00";"1.059";"1.059,45";"Torgau";""
+"45,000";"79,8";"Starr";"73,35";"81,98";"1.059";"1.059,45";"Torgau";""
+"45,100";"80,2";"Starr";"73,36";"81,97";"1.059";"1.059,45";"Torgau";""
+"45,200";"80,4";"Starr";"73,46";"81,96";"1.059";"1.059,45";"Torgau";""
+"45,300";"80,7";"Starr";"73,47";"81,93";"1.059";"1.059,45";"Torgau";""
+"45,400";"82,1";"Starr";"73,39";"81,89";"1.059";"1.059,45";"Torgau";""
+"45,500";"82,8";"Mobil";"73,39";"81,89";"1.059";"1.059,45";"Torgau";""
+"45,600";"83,0";"Mobil";"73,45";"81,88";"1.059";"1.059,45";"Torgau";""
+"45,700";"79,7";"Mobil";"73,58";"81,84";"1.059";"1.059,45";"Torgau";""
+"45,800";"76,5";"Mobil";"73,73";"81,80";"1.059";"1.059,45";"Torgau";"Hafen: Torgau"
+"45,900";"77,8";"Starr";"73,47";"81,80";"1.059";"1.059,45";"Torgau";""
+"46,000";"75,4";"Starr";"73,56";"81,79";"1.059";"1.059,45";"Torgau";""
+"46,100";"71,9";"Starr";"73,76";"81,77";"1.059";"1.059,45";"Torgau";"Brücke: Torgau -Straße B87"
+"46,200";"64,2";"Starr";"74,44";"81,75";"1.059";"1.059,45";"Torgau";""
+"46,300";"65,9";"Starr";"74,17";"81,72";"1.059";"1.059,45";"Torgau";""
+"46,400";"65,5";"Starr";"74,07";"81,69";"1.059";"1.059,45";"Torgau";""
+"46,500";"62,8";"Starr";"74,20";"81,66";"1.059";"1.059,45";"Torgau";""
+"46,600";"61,5";"Starr";"74,18";"81,63";"1.059";"1.059,45";"Torgau";""
+"46,700";"60,8";"Starr";"74,09";"81,61";"1.059";"1.059,45";"Torgau";""
+"46,800";"63,0";"Starr";"73,58";"81,59";"1.059";"1.059,45";"Torgau";"Geschiebemessstelle: Torgau"
+"46,900";"62,0";"Starr";"73,51";"81,58";"1.059";"1.059,45";"Torgau";""
+"47,000";"62,6";"Starr";"73,62";"81,57";"1.059";"1.059,45";"Torgau";""
+"47,100";"61,6";"Starr";"73,80";"81,53";"1.059";"1.059,45";"Torgau";""
+"47,200";"60,3";"Starr";"73,81";"81,48";"1.059";"1.059,45";"Torgau";""
+"47,300";"65,5";"Starr";"73,09";"81,48";"1.059";"1.059,45";"Torgau";""
+"47,400";"65,1";"Starr";"72,85";"81,47";"1.059";"1.059,45";"Torgau";""
+"47,500";"61,3";"Starr";"72,84";"81,47";"1.059";"1.059,45";"Torgau";""
+"47,600";"61,6";"Starr";"72,92";"81,46";"1.059";"1.059,45";"Torgau";""
+"47,700";"58,2";"Starr";"73,43";"81,44";"1.059";"1.059,45";"Torgau";""
+"47,800";"58,4";"Starr";"73,35";"81,41";"1.059";"1.059,45";"Torgau";""
+"47,900";"58,5";"Starr";"73,29";"81,40";"1.059";"1.059,45";"Torgau";""
+"48,000";"57,9";"Starr";"73,58";"81,38";"1.059";"1.059,45";"Torgau";""
+"48,100";"59,0";"Starr";"73,56";"81,35";"1.059";"1.059,45";"Torgau";""
+"48,200";"60,0";"Starr";"73,51";"81,32";"1.059";"1.059,45";"Torgau";""
+"48,300";"60,3";"Starr";"73,52";"81,30";"1.059";"1.059,45";"Torgau";""
+"48,400";"60,2";"Starr";"73,47";"81,27";"1.059";"1.059,45";"Torgau";""
+"48,500";"58,7";"Starr";"73,57";"81,25";"1.059";"1.059,45";"Torgau";""
+"48,600";"58,7";"Starr";"73,51";"81,22";"1.059";"1.059,45";"Torgau";""
+"48,700";"59,3";"Starr";"73,40";"81,20";"1.059";"1.059,45";"Torgau";""
+"48,800";"58,8";"Starr";"73,36";"81,17";"1.059";"1.059,45";"Torgau";""
+"48,900";"58,0";"Starr";"73,38";"81,16";"1.059";"1.059,45";"Torgau";""
+"49,000";"59,1";"Starr";"73,28";"81,15";"1.059";"1.059,45";"Torgau";""
+"49,100";"56,6";"Starr";"73,56";"81,12";"1.059";"1.059,45";"Torgau";""
+"49,200";"56,0";"Starr";"73,66";"81,08";"1.059";"1.059,45";"Torgau";""
+"49,300";"56,6";"Starr";"73,62";"81,06";"1.059";"1.059,45";"Torgau";""
+"49,400";"57,8";"Starr";"73,35";"81,04";"1.059";"1.059,45";"Torgau";""
+"49,500";"57,8";"Starr";"73,17";"81,03";"1.059";"1.059,45";"Torgau";""
+"49,600";"56,6";"Starr";"73,27";"81,01";"1.059";"1.059,45";"Torgau";""
+"49,700";"57,1";"Starr";"73,16";"80,99";"1.059";"1.059,45";"Torgau";""
+"49,800";"58,3";"Starr";"72,93";"80,96";"1.059";"1.059,45";"Torgau";""
+"49,900";"58,0";"Starr";"72,90";"80,94";"1.059";"1.059,45";"Torgau";""
+"50,000";"57,4";"Starr";"73,21";"80,92";"1.059";"1.059,45";"Torgau";""
+"50,100";"58,0";"Starr";"73,23";"80,87";"1.059";"1.059,45";"Torgau";""
+"50,200";"57,6";"Starr";"73,12";"80,82";"1.059";"1.059,45";"Torgau";""
+"50,300";"59,3";"Starr";"72,76";"80,81";"1.059";"1.059,45";"Torgau";""
+"50,400";"55,6";"Starr";"73,07";"80,79";"1.059";"1.059,45";"Torgau";""
+"50,500";"52,0";"Starr";"73,36";"80,78";"1.059";"1.059,45";"Torgau";""
+"50,600";"51,8";"Starr";"73,34";"80,76";"1.059";"1.059,45";"Torgau";""
+"50,700";"51,8";"Starr";"73,30";"80,74";"1.059";"1.059,45";"Torgau";""
+"50,800";"52,7";"Starr";"73,23";"80,72";"1.059";"1.059,45";"Torgau";""
+"50,900";"53,9";"Starr";"73,11";"80,70";"1.059";"1.059,45";"Torgau";""
+"51,000";"54,2";"Starr";"73,12";"80,67";"1.059";"1.059,45";"Torgau";""
+"51,100";"57,2";"Starr";"72,77";"80,64";"1.059";"1.059,45";"Torgau";""
+"51,200";"57,6";"Starr";"72,70";"80,61";"1.059";"1.059,45";"Torgau";""
+"51,300";"57,8";"Starr";"72,64";"80,58";"1.059";"1.059,45";"Torgau";""
+"51,400";"58,2";"Starr";"72,55";"80,55";"1.059";"1.059,45";"Torgau";""
+"51,500";"56,1";"Starr";"72,78";"80,53";"1.059";"1.059,45";"Torgau";""
+"51,600";"56,3";"Starr";"72,75";"80,50";"1.059";"1.059,45";"Torgau";""
+"51,700";"56,5";"Starr";"72,71";"80,48";"1.059";"1.059,45";"Torgau";""
+"51,800";"57,1";"Starr";"72,66";"80,45";"1.059";"1.059,45";"Torgau";""
+"51,900";"55,8";"Starr";"72,82";"80,42";"1.059";"1.059,45";"Torgau";""
+"52,000";"54,1";"Starr";"72,92";"80,39";"1.059";"1.059,45";"Torgau";""
+"52,100";"57,7";"Starr";"72,40";"80,37";"1.059";"1.059,45";"Torgau";""
+"52,200";"59,4";"Starr";"72,19";"80,34";"1.059";"1.059,45";"Torgau";""
+"52,300";"60,4";"Starr";"72,07";"80,32";"1.059";"1.059,45";"Torgau";""
+"52,400";"60,6";"Starr";"72,00";"80,29";"1.059";"1.059,45";"Torgau";""
+"52,500";"60,9";"Starr";"71,90";"80,28";"1.059";"1.059,45";"Torgau";""
+"52,600";"62,6";"Starr";"71,75";"80,27";"1.059";"1.059,45";"Torgau";""
+"52,700";"60,8";"Starr";"72,02";"80,26";"1.059";"1.059,45";"Torgau";""
+"52,800";"62,4";"Starr";"72,01";"80,24";"1.059";"1.059,45";"Torgau";""
+"52,900";"59,8";"Starr";"72,42";"80,20";"1.059";"1.059,45";"Torgau";""
+"53,000";"60,2";"Starr";"72,39";"80,16";"1.059";"1.059,45";"Torgau";""
+"53,100";"62,4";"Starr";"72,18";"80,14";"1.059";"1.059,45";"Torgau";""
+"53,200";"63,2";"Starr";"72,18";"80,12";"1.059";"1.059,45";"Torgau";""
+"53,300";"63,5";"Starr";"72,21";"80,09";"1.059";"1.059,45";"Torgau";""
+"53,400";"63,2";"Starr";"72,22";"80,05";"1.059";"1.059,45";"Torgau";""
+"53,500";"66,8";"Starr";"71,83";"80,03";"1.059";"1.059,45";"Torgau";""
+"53,600";"64,7";"Starr";"72,06";"80,00";"1.059";"1.059,45";"Torgau";""
+"53,700";"66,0";"Starr";"71,92";"79,99";"1.059";"1.059,45";"Torgau";""
+"53,800";"66,3";"Starr";"71,92";"79,97";"1.059";"1.059,45";"Torgau";""
+"53,900";"65,1";"Starr";"72,06";"79,96";"1.059";"1.059,45";"Torgau";""
+"54,000";"64,8";"Starr";"72,18";"79,94";"1.059";"1.059,45";"Torgau";""
+"54,100";"66,0";"Starr";"72,13";"79,92";"1.059";"1.059,45";"Torgau";""
+"54,200";"65,3";"Starr";"72,19";"79,90";"1.059";"1.059,45";"Torgau";""
+"54,300";"66,3";"Starr";"72,10";"79,89";"1.059";"1.059,45";"Torgau";""
+"54,400";"68,4";"Starr";"71,94";"79,88";"1.059";"1.059,45";"Torgau";""
+"54,500";"66,4";"Starr";"72,20";"79,86";"1.059";"1.059,45";"Torgau";""
+"54,600";"66,0";"Starr";"72,30";"79,84";"1.059";"1.059,45";"Torgau";""
+"54,700";"67,2";"Mobil";"72,21";"79,81";"1.059";"1.059,45";"Torgau";""
+"54,800";"73,0";"Mobil";"71,64";"79,77";"1.059";"1.059,45";"Torgau";""
+"54,900";"76,4";"Mobil";"71,34";"79,77";"1.059";"1.059,45";"Torgau";""
+"55,000";"77,4";"Mobil";"71,34";"79,76";"1.059";"1.059,45";"Torgau";""
+"55,100";"71,1";"Mobil";"71,85";"79,73";"1.059";"1.059,45";"Torgau";""
+"55,200";"73,4";"Mobil";"71,53";"79,69";"1.059";"1.059,45";"Torgau";""
+"55,300";"69,6";"Mobil";"71,82";"79,67";"1.059";"1.059,45";"Torgau";""
+"55,400";"68,4";"Starr";"71,84";"79,64";"1.059";"1.059,45";"Torgau";""
+"55,500";"67,1";"Starr";"71,88";"79,62";"1.059";"1.059,45";"Torgau";""
+"55,600";"62,9";"Starr";"72,21";"79,60";"1.059";"1.059,45";"Torgau";""
+"55,700";"63,3";"Starr";"72,07";"79,59";"1.059";"1.059,45";"Torgau";""
+"55,800";"63,0";"Starr";"72,07";"79,57";"1.059";"1.059,45";"Torgau";""
+"55,900";"64,0";"Starr";"71,91";"79,54";"1.059";"1.059,45";"Torgau";""
+"56,000";"65,5";"Starr";"71,57";"79,51";"1.059";"1.059,45";"Torgau";""
+"56,100";"64,2";"Starr";"71,47";"79,50";"1.059";"1.059,45";"Torgau";""
+"56,200";"60,4";"Starr";"71,75";"79,49";"1.059";"1.059,45";"Torgau";""
+"56,300";"58,4";"Starr";"71,82";"79,48";"1.059";"1.059,45";"Torgau";""
+"56,400";"59,7";"Starr";"71,64";"79,46";"1.059";"1.059,45";"Torgau";""
+"56,500";"57,3";"Starr";"71,88";"79,44";"1.059";"1.059,45";"Torgau";""
+"56,600";"56,2";"Starr";"71,80";"79,41";"1.059";"1.059,45";"Torgau";""
+"56,700";"56,9";"Starr";"71,48";"79,39";"1.059";"1.059,45";"Torgau";""
+"56,800";"56,6";"Starr";"71,38";"79,37";"1.059";"1.059,45";"Torgau";""
+"56,900";"55,5";"Starr";"71,38";"79,35";"1.059";"1.059,45";"Torgau";""
+"57,000";"54,5";"Starr";"71,43";"79,33";"1.059";"1.059,45";"Torgau";""
+"57,100";"52,8";"Starr";"71,57";"79,31";"1.059";"1.059,45";"Torgau";""
+"57,200";"49,5";"Starr";"72,00";"79,28";"1.059";"1.059,45";"Torgau";""
+"57,300";"52,3";"Starr";"71,64";"79,26";"1.059";"1.059,45";"Torgau";""
+"57,400";"57,0";"Starr";"70,98";"79,23";"1.059";"1.059,45";"Torgau";""
+"57,500";"56,6";"Starr";"70,97";"79,20";"1.059";"1.059,45";"Torgau";""
+"57,600";"54,7";"Starr";"71,21";"79,17";"1.059";"1.059,45";"Torgau";""
+"57,700";"52,9";"Starr";"71,41";"79,13";"1.059";"1.059,45";"Torgau";""
+"57,800";"52,6";"Starr";"71,21";"79,09";"1.059";"1.059,45";"Torgau";""
+"57,900";"51,6";"Starr";"71,08";"79,07";"1.059";"1.059,45";"Torgau";""
+"58,000";"50,7";"Starr";"71,20";"79,05";"1.059";"1.059,45";"Torgau";""
+"58,100";"49,7";"Starr";"71,34";"79,03";"1.059";"1.059,45";"Torgau";""
+"58,200";"45,8";"Starr";"71,58";"79,01";"1.059";"1.059,45";"Torgau";""
+"58,300";"43,1";"Starr";"71,62";"79,00";"1.059";"1.059,45";"Torgau";""
+"58,400";"41,0";"Starr";"71,70";"78,98";"1.059";"1.059,45";"Torgau";""
+"58,500";"42,4";"Starr";"71,18";"78,96";"1.059";"1.059,45";"Torgau";""
+"58,600";"44,2";"Starr";"70,75";"78,94";"1.059";"1.059,45";"Torgau";""
+"58,700";"41,6";"Starr";"71,06";"78,92";"1.059";"1.059,45";"Torgau";""
+"58,800";"36,5";"Starr";"71,38";"78,90";"1.059";"1.059,45";"Torgau";""
+"58,900";"31,2";"Starr";"71,71";"78,88";"1.059";"1.059,45";"Torgau";""
+"59,000";"33,0";"Starr";"71,54";"78,86";"1.059";"1.059,45";"Torgau";""
+"59,100";"34,2";"Starr";"71,49";"78,84";"1.059";"1.059,45";"Torgau";""
+"59,200";"25,3";"Starr";"71,31";"78,81";"1.059";"1.059,45";"Torgau";""
+"59,300";"9,8";"Starr";"71,07";"78,82";"1.059";"1.059,45";"Torgau";""
+"59,400";"22,2";"Starr";"70,97";"78,82";"1.059";"1.059,45";"Torgau";""
+"59,500";"32,1";"Mobil";"70,79";"78,80";"1.059";"1.059,45";"Torgau";""
+"59,600";"31,8";"Mobil";"70,95";"78,77";"1.059";"1.059,45";"Torgau";""
+"59,700";"31,3";"Mobil";"71,15";"78,75";"1.059";"1.059,45";"Torgau";""
+"59,800";"30,6";"Mobil";"71,37";"78,73";"1.059";"1.059,45";"Torgau";""
+"59,900";"30,6";"Mobil";"71,44";"78,72";"1.059";"1.059,45";"Torgau";""
+"60,000";"30,5";"Mobil";"71,49";"78,70";"1.059";"1.059,45";"Torgau";""
+"60,100";"30,1";"Mobil";"71,59";"78,69";"1.059";"1.059,45";"Torgau";""
+"60,200";"36,0";"Mobil";"71,53";"78,67";"1.059";"1.059,45";"Torgau";"HW-Schutz: Prettiner-Deich"
+"60,300";"40,1";"Mobil";"71,52";"78,63";"1.059";"1.059,45";"Torgau";""
+"60,400";"40,1";"Mobil";"71,41";"78,59";"1.059";"1.059,45";"Torgau";""
+"60,500";"39,3";"Mobil";"71,43";"78,58";"1.059";"1.059,45";"Torgau";""
+"60,600";"38,8";"Mobil";"71,44";"78,57";"1.059";"1.059,45";"Torgau";""
+"60,700";"39,4";"Mobil";"71,25";"78,56";"1.059";"1.059,45";"Torgau";""
+"60,800";"41,8";"Mobil";"71,18";"78,54";"1.059";"1.059,45";"Torgau";""
+"60,900";"44,0";"Mobil";"71,12";"78,52";"1.059";"1.059,45";"Torgau";""
+"61,000";"45,0";"Mobil";"70,93";"78,50";"1.059";"1.059,45";"Torgau";""
+"61,100";"45,1";"Mobil";"70,88";"78,49";"1.059";"1.059,45";"Torgau";""
+"61,200";"49,4";"Mobil";"70,83";"78,47";"1.059";"1.059,45";"Torgau";""
+"61,300";"51,9";"Mobil";"70,88";"78,45";"1.059";"1.059,45";"Torgau";""
+"61,400";"52,9";"Mobil";"70,77";"78,42";"1.059";"1.059,45";"Torgau";""
+"61,500";"51,2";"Mobil";"71,01";"78,41";"1.059";"1.059,45";"Torgau";""
+"61,600";"53,8";"Mobil";"70,81";"78,39";"1.059";"1.059,45";"Torgau";""
+"61,700";"57,2";"Mobil";"70,52";"78,37";"1.059";"1.059,45";"Torgau";""
+"61,800";"58,6";"Mobil";"70,39";"78,35";"1.059";"1.059,45";"Torgau";""
+"61,900";"59,2";"Mobil";"70,36";"78,34";"1.059";"1.059,45";"Torgau";""
+"62,000";"60,8";"Mobil";"70,41";"78,32";"1.059";"1.059,45";"Torgau";""
+"62,100";"65,4";"Mobil";"70,07";"78,30";"1.059";"1.059,45";"Torgau";""
+"62,200";"62,1";"Mobil";"70,53";"78,28";"1.059";"1.059,45";"Torgau";""
+"62,300";"59,3";"Mobil";"70,94";"78,26";"1.059";"1.059,45";"Torgau";""
+"62,400";"58,9";"Starr";"71,11";"78,24";"1.059";"1.059,45";"Torgau";""
+"62,500";"59,0";"Starr";"71,23";"78,23";"1.059";"1.059,45";"Torgau";""
+"62,600";"61,4";"Starr";"71,06";"78,21";"1.059";"1.059,45";"Torgau";""
+"62,700";"62,5";"Starr";"70,89";"78,20";"1.059";"1.059,45";"Torgau";""
+"62,800";"63,4";"Starr";"70,83";"78,18";"1.059";"1.059,45";"Torgau";""
+"62,900";"65,4";"Mobil";"70,62";"78,15";"1.059";"1.059,45";"Torgau";""
+"63,000";"64,6";"Mobil";"70,66";"78,12";"1.059";"1.059,45";"Torgau";""
+"63,100";"62,7";"Mobil";"70,83";"78,10";"1.059";"1.059,45";"Torgau";""
+"63,200";"63,5";"Mobil";"70,73";"78,08";"1.059";"1.059,45";"Torgau";""
+"63,300";"64,5";"Mobil";"70,62";"78,05";"1.059";"1.059,45";"Torgau";""
+"63,400";"65,2";"Mobil";"70,49";"78,02";"1.059";"1.059,45";"Torgau";""
+"63,500";"64,9";"Mobil";"70,47";"78,00";"1.059";"1.059,45";"Torgau";""
+"63,600";"65,2";"Mobil";"70,40";"77,98";"1.059";"1.059,45";"Torgau";"Fähre: Prettin -Gierseilfähre"
+"63,700";"67,8";"Mobil";"70,09";"77,96";"1.059";"1.059,45";"Torgau";""
+"63,800";"70,9";"Mobil";"69,85";"77,94";"1.059";"1.059,45";"Torgau";""
+"63,900";"68,6";"Mobil";"70,08";"77,91";"1.059";"1.059,45";"Torgau";""
+"64,000";"63,1";"Mobil";"70,59";"77,87";"1.059";"1.059,45";"Torgau";""
+"64,100";"62,6";"Mobil";"70,60";"77,85";"1.059";"1.059,45";"Torgau";"HW-Schutz: Axiener-Deich"
+"64,200";"64,6";"Mobil";"70,38";"77,82";"1.059";"1.059,45";"Torgau";""
+"64,300";"67,0";"Mobil";"70,12";"77,80";"1.059";"1.059,45";"Torgau";""
+"64,400";"67,3";"Mobil";"70,07";"77,78";"1.059";"1.059,45";"Torgau";""
+"64,500";"66,8";"Mobil";"70,09";"77,75";"1.059";"1.059,45";"Torgau";""
+"64,600";"65,2";"Mobil";"70,20";"77,71";"1.059";"1.059,45";"Torgau";""
+"64,700";"65,1";"Mobil";"70,17";"77,69";"1.059";"1.059,45";"Torgau";""
+"64,800";"63,7";"Mobil";"70,27";"77,67";"1.059";"1.059,45";"Torgau";""
+"64,900";"62,2";"Mobil";"70,37";"77,66";"1.059";"1.059,45";"Torgau";""
+"65,000";"62,4";"Mobil";"70,30";"77,65";"1.059";"1.059,45";"Torgau";""
+"65,100";"63,5";"Mobil";"70,10";"77,63";"1.059";"1.059,45";"Torgau";""
+"65,200";"64,8";"Mobil";"69,85";"77,61";"1.059";"1.059,45";"Torgau";""
+"65,300";"61,2";"Mobil";"70,10";"77,60";"1.059";"1.059,45";"Torgau";""
+"65,400";"62,6";"Mobil";"70,15";"77,59";"1.059";"1.059,45";"Torgau";""
+"65,500";"64,9";"Mobil";"69,99";"77,56";"1.059";"1.059,45";"Torgau";""
+"65,600";"64,6";"Mobil";"69,96";"77,52";"1.059";"1.059,45";"Torgau";""
+"65,700";"56,7";"Mobil";"70,14";"77,50";"1.059";"1.059,45";"Torgau";""
+"65,800";"51,2";"Mobil";"70,11";"77,47";"1.059";"1.059,45";"Torgau";""
+"65,900";"47,0";"Mobil";"69,92";"77,44";"1.059";"1.059,45";"Torgau";""
+"66,000";"42,5";"Mobil";"69,95";"77,41";"1.059";"1.059,45";"Torgau";""
+"66,100";"38,9";"Mobil";"69,92";"77,38";"1.059";"1.059,45";"Torgau";""
+"66,200";"34,8";"Mobil";"69,93";"77,35";"1.059";"1.059,45";"Torgau";""
+"66,300";"31,6";"Mobil";"69,83";"77,32";"1.059";"1.059,45";"Torgau";""
+"66,400";"24,1";"Starr";"69,83";"77,29";"1.059";"1.059,45";"Torgau";""
+"66,500";"15,6";"Starr";"69,78";"77,27";"1.059";"1.059,45";"Torgau";""
+"66,600";"10,6";"Starr";"69,89";"77,25";"1.059";"1.059,45";"Torgau";""
+"66,700";"16,1";"Starr";"69,93";"77,23";"1.059";"1.059,45";"Torgau";""
+"66,800";"21,8";"Starr";"69,93";"77,20";"1.059";"1.059,45";"Torgau";""
+"66,900";"27,8";"Mobil";"69,78";"77,17";"1.059";"1.059,45";"Torgau";""
+"67,000";"33,2";"Mobil";"69,69";"77,14";"1.059";"1.059,45";"Torgau";""
+"67,100";"38,0";"Mobil";"69,69";"77,11";"1.059";"1.059,45";"Torgau";""
+"67,200";"43,7";"Mobil";"69,57";"77,08";"1.059";"1.059,45";"Torgau";""
+"67,300";"47,8";"Mobil";"69,65";"77,05";"1.059";"1.059,45";"Torgau";""
+"67,400";"51,4";"Mobil";"69,65";"77,02";"1.059";"1.059,45";"Torgau";""
+"67,500";"56,7";"Mobil";"69,52";"77,01";"1.059";"1.059,45";"Torgau";""
+"67,600";"55,9";"Mobil";"69,45";"76,99";"1.059";"1.059,45";"Torgau";""
+"67,700";"53,9";"Mobil";"69,63";"76,97";"1.059";"1.059,45";"Torgau";""
+"67,800";"57,0";"Mobil";"69,32";"76,95";"1.059";"1.059,45";"Torgau";""
+"67,900";"60,6";"Mobil";"68,97";"76,93";"1.059";"1.059,45";"Torgau";""
+"68,000";"60,8";"Mobil";"69,00";"76,90";"1.059";"1.059,45";"Torgau";""
+"68,100";"60,3";"Mobil";"69,07";"76,86";"1.059";"1.059,45";"Torgau";""
+"68,200";"59,0";"Mobil";"69,20";"76,82";"1.059";"1.059,45";"Torgau";""
+"68,300";"57,4";"Mobil";"69,37";"76,79";"1.059";"1.059,45";"Torgau";""
+"68,400";"57,7";"Mobil";"69,26";"76,76";"1.059";"1.059,45";"Torgau";""
+"68,500";"56,1";"Mobil";"69,39";"76,75";"1.059";"1.059,45";"Torgau";""
+"68,600";"55,4";"Mobil";"69,45";"76,73";"1.059";"1.059,45";"Torgau";""
+"68,700";"56,0";"Mobil";"69,37";"76,72";"1.059";"1.059,45";"Torgau";""
+"68,800";"53,7";"Mobil";"69,49";"76,70";"1.059";"1.059,45";"Torgau";""
+"68,900";"53,9";"Mobil";"69,23";"76,68";"1.059";"1.059,45";"Torgau";""
+"69,000";"56,5";"Mobil";"69,05";"76,66";"1.059";"1.059,45";"Torgau";""
+"69,100";"59,2";"Mobil";"68,84";"76,64";"1.059";"1.059,45";"Torgau";""
+"69,200";"58,7";"Mobil";"68,90";"76,61";"1.059";"1.059,45";"Torgau";""
+"69,300";"58,4";"Mobil";"68,94";"76,59";"1.059";"1.059,45";"Torgau";""
+"69,400";"56,6";"Mobil";"69,09";"76,57";"1.059";"1.059,45";"Torgau";""
+"69,500";"58,1";"Mobil";"68,85";"76,56";"1.059";"1.059,45";"Torgau";""
+"69,600";"59,2";"Mobil";"68,82";"76,54";"1.059";"1.059,45";"Torgau";""
+"69,700";"60,4";"Mobil";"68,77";"76,52";"1.059";"1.059,45";"Torgau";""
+"69,800";"59,4";"Mobil";"68,74";"76,50";"1.059";"1.059,45";"Torgau";""
+"69,900";"56,3";"Mobil";"68,94";"76,49";"1.059";"1.059,45";"Torgau";""
+"70,000";"59,4";"Mobil";"68,84";"76,47";"1.059";"1.059,45";"Torgau";""
+"70,100";"59,9";"Mobil";"68,92";"76,43";"1.059";"1.059,45";"Torgau";""
+"70,200";"58,5";"Mobil";"69,00";"76,39";"1.059";"1.059,45";"Torgau";""
+"70,300";"59,5";"Mobil";"68,82";"76,38";"1.059";"1.059,45";"Torgau";""
+"70,400";"58,5";"Mobil";"68,96";"76,36";"1.059";"1.059,45";"Torgau";""
+"70,500";"59,3";"Mobil";"68,88";"76,34";"1.059";"1.059,45";"Torgau";""
+"70,600";"59,9";"Mobil";"68,80";"76,32";"1.059";"1.059,45";"Torgau";""
+"70,700";"60,3";"Mobil";"68,74";"76,31";"1.059";"1.059,45";"Torgau";""
+"70,800";"59,4";"Mobil";"68,80";"76,29";"1.059";"1.059,45";"Torgau";""
+"70,900";"58,6";"Mobil";"68,84";"76,27";"1.059";"1.059,45";"Torgau";""
+"71,000";"57,9";"Mobil";"68,97";"76,25";"1.059";"1.059,45";"Torgau";""
+"71,100";"58,8";"Mobil";"68,92";"76,23";"1.059";"1.059,45";"Torgau";""
+"71,200";"60,2";"Mobil";"68,73";"76,20";"1.059";"1.059,45";"Torgau";""
+"71,300";"57,3";"Mobil";"69,01";"76,18";"1.059";"1.059,45";"Torgau";""
+"71,400";"59,6";"Mobil";"68,78";"76,15";"1.059";"1.059,45";"Torgau";""
+"71,500";"61,1";"Mobil";"68,65";"76,14";"1.059";"1.059,45";"Torgau";""
+"71,600";"60,0";"Mobil";"68,80";"76,12";"1.059";"1.059,45";"Torgau";"Bundesland: Sachsen-Anhalt"
+"71,700";"61,2";"Mobil";"68,68";"76,10";"1.059";"1.059,45";"Torgau";""
+"71,800";"59,4";"Mobil";"68,80";"76,08";"1.059";"1.059,45";"Torgau";""
+"71,900";"60,2";"Mobil";"68,59";"76,06";"1.059";"1.059,45";"Torgau";""
+"72,000";"63,3";"Mobil";"68,30";"76,04";"1.059";"1.059,45";"Torgau";""
+"72,100";"62,9";"Mobil";"68,37";"76,01";"1.059";"1.059,45";"Torgau";""
+"72,200";"61,7";"Mobil";"68,52";"75,98";"1.059";"1.059,45";"Torgau";""
+"72,300";"60,9";"Mobil";"68,60";"75,95";"1.059";"1.059,45";"Torgau";""
+"72,400";"62,6";"Mobil";"68,35";"75,91";"1.059";"1.059,45";"Torgau";""
+"72,500";"58,2";"Mobil";"68,73";"75,89";"1.059";"1.059,45";"Torgau";"HW-Schutz: Maukener-Deich"
+"72,600";"61,8";"Mobil";"68,21";"75,87";"1.059";"1.059,45";"Torgau";""
+"72,700";"57,6";"Mobil";"68,54";"75,86";"1.059";"1.059,45";"Torgau";""
+"72,800";"57,3";"Mobil";"68,58";"75,85";"1.059";"1.059,45";"Torgau";""
+"72,900";"57,0";"Mobil";"68,64";"75,84";"1.059";"1.059,45";"Torgau";""
+"73,000";"57,4";"Mobil";"68,66";"75,82";"1.059";"1.059,45";"Torgau";""
+"73,100";"59,2";"Mobil";"68,51";"75,79";"1.059";"1.059,45";"Torgau";""
+"73,200";"61,7";"Mobil";"68,16";"75,76";"1.059";"1.059,45";"Torgau";""
+"73,300";"60,9";"Mobil";"68,17";"75,75";"1.059";"1.059,45";"Torgau";""
+"73,400";"60,9";"Mobil";"68,23";"75,73";"1.059";"1.059,45";"Torgau";""
+"73,500";"60,0";"Mobil";"68,35";"75,70";"1.059";"1.059,45";"Torgau";""
+"73,600";"60,4";"Mobil";"68,28";"75,67";"1.059";"1.059,45";"Torgau";""
+"73,700";"58,8";"Mobil";"68,44";"75,65";"1.059";"1.059,45";"Torgau";""
+"73,800";"60,6";"Mobil";"68,23";"75,63";"1.059";"1.059,45";"Torgau";""
+"73,900";"58,7";"Mobil";"68,43";"75,61";"1.059";"1.059,45";"Torgau";""
+"74,000";"59,9";"Mobil";"68,27";"75,58";"1.059";"1.059,45";"Torgau";""
+"74,100";"62,3";"Mobil";"68,00";"75,56";"1.059";"1.059,45";"Torgau";""
+"74,200";"61,3";"Mobil";"68,11";"75,53";"1.059";"1.059,45";"Torgau";""
+"74,300";"62,1";"Mobil";"68,02";"75,50";"1.059";"1.059,45";"Torgau";""
+"74,400";"63,7";"Mobil";"67,80";"75,46";"1.059";"1.059,45";"Torgau";""
+"74,500";"63,0";"Mobil";"67,83";"75,43";"1.059";"1.059,45";"Torgau";""
+"74,600";"60,6";"Mobil";"68,06";"75,40";"1.059";"1.059,45";"Torgau";""
+"74,700";"62,4";"Mobil";"67,85";"75,37";"1.059";"1.059,45";"Torgau";""
+"74,800";"62,4";"Mobil";"67,81";"75,34";"1.059";"1.059,45";"Torgau";""
+"74,900";"59,4";"Mobil";"68,07";"75,33";"1.059";"1.059,45";"Torgau";""
+"75,000";"60,2";"Mobil";"67,97";"75,32";"1.059";"1.059,45";"Torgau";""
+"75,100";"59,1";"Mobil";"68,05";"75,30";"1.059";"1.059,45";"Torgau";""
+"75,200";"56,8";"Mobil";"68,27";"75,27";"1.059";"1.059,45";"Torgau";""
+"75,300";"55,4";"Mobil";"68,41";"75,26";"1.059";"1.059,45";"Torgau";""
+"75,400";"57,3";"Mobil";"68,20";"75,24";"1.059";"1.059,45";"Torgau";""
+"75,500";"58,3";"Mobil";"68,06";"75,22";"1.059";"1.059,45";"Torgau";""
+"75,600";"61,2";"Mobil";"67,76";"75,19";"1.059";"1.059,45";"Torgau";""
+"75,700";"60,6";"Mobil";"67,81";"75,16";"1.059";"1.059,45";"Torgau";""
+"75,800";"59,7";"Mobil";"67,87";"75,12";"1.059";"1.059,45";"Torgau";""
+"75,900";"60,5";"Mobil";"67,76";"75,10";"1.059";"1.059,45";"Torgau";""
+"76,000";"59,7";"Mobil";"67,84";"75,08";"1.059";"1.059,45";"Torgau";""
+"76,100";"59,9";"Mobil";"67,80";"75,06";"1.059";"1.059,45";"Torgau";""
+"76,200";"58,9";"Mobil";"67,86";"75,03";"1.059";"1.059,45";"Torgau";""
+"76,300";"54,5";"Mobil";"68,27";"75,01";"1.059";"1.059,45";"Torgau";""
+"76,400";"54,2";"Mobil";"68,22";"74,99";"1.059";"1.059,45";"Torgau";"HW-Schutz: Kloedener-Deich"
+"76,500";"59,7";"Mobil";"67,46";"74,98";"1.059";"1.059,45";"Torgau";""
+"76,600";"62,3";"Mobil";"67,38";"74,96";"1.059";"1.059,45";"Torgau";"Geschiebemessstelle: Pretsch-Mauken"
+"76,700";"62,6";"Mobil";"67,43";"74,93";"1.059";"1.059,45";"Torgau";""
+"76,800";"61,4";"Mobil";"67,54";"74,90";"1.059";"1.059,45";"Torgau";""
+"76,900";"61,9";"Mobil";"67,46";"74,88";"1.059";"1.059,45";"Torgau";""
+"77,000";"63,0";"Mobil";"67,32";"74,85";"1.059";"1.059,45";"Torgau";""
+"77,100";"62,1";"Mobil";"67,40";"74,84";"1.059";"1.059,45";"Torgau";""
+"77,200";"56,8";"Mobil";"68,02";"74,82";"1.059";"1.059,45";"Torgau";""
+"77,300";"60,0";"Mobil";"67,71";"74,79";"1.059";"1.059,45";"Torgau";""
+"77,400";"57,3";"Mobil";"67,97";"74,76";"1.059";"1.059,45";"Torgau";""
+"77,500";"58,2";"Mobil";"67,86";"74,73";"1.059";"1.059,45";"Torgau";""
+"77,600";"59,5";"Mobil";"67,71";"74,69";"1.059";"1.059,45";"Torgau";""
+"77,700";"59,4";"Mobil";"67,72";"74,68";"1.059";"1.059,45";"Torgau";""
+"77,800";"60,5";"Mobil";"67,62";"74,66";"1.059";"1.059,45";"Torgau";""
+"77,900";"60,6";"Mobil";"67,61";"74,65";"1.059";"1.059,45";"Torgau";""
+"78,000";"60,3";"Mobil";"67,64";"74,63";"1.059";"1.059,45";"Torgau";""
+"78,100";"57,7";"Mobil";"67,90";"74,62";"1.059";"1.059,45";"Torgau";""
+"78,200";"59,6";"Mobil";"67,74";"74,60";"1.059";"1.059,45";"Torgau";""
+"78,300";"59,1";"Mobil";"67,79";"74,58";"1.059";"1.059,45";"Torgau";""
+"78,400";"59,1";"Mobil";"67,79";"74,55";"1.059";"1.059,45";"Torgau";""
+"78,500";"61,5";"Mobil";"67,55";"74,52";"1.059";"1.059,45";"Torgau";""
+"78,600";"61,4";"Mobil";"67,54";"74,49";"1.059";"1.059,45";"Torgau";""
+"78,700";"59,9";"Mobil";"67,67";"74,47";"1.059";"1.059,45";"Torgau";""
+"78,800";"59,0";"Mobil";"67,76";"74,44";"1.059";"1.059,45";"Torgau";""
+"78,900";"62,8";"Mobil";"67,42";"74,42";"1.059";"1.059,45";"Torgau";""
+"79,000";"62,1";"Mobil";"67,46";"74,39";"1.059";"1.059,45";"Torgau";""
+"79,100";"63,9";"Mobil";"67,26";"74,37";"1.059";"1.059,45";"Torgau";""
+"79,200";"60,8";"Mobil";"67,56";"74,34";"1.059";"1.059,45";"Torgau";""
+"79,300";"60,4";"Mobil";"67,61";"74,31";"1.059";"1.059,45";"Torgau";""
+"79,400";"61,7";"Mobil";"67,50";"74,28";"1.059";"1.059,45";"Torgau";""
+"79,500";"60,9";"Mobil";"67,58";"74,27";"1.059";"1.059,45";"Torgau";""
+"79,600";"61,1";"Mobil";"67,59";"74,25";"1.059";"1.059,45";"Torgau";""
+"79,700";"62,5";"Mobil";"67,45";"74,24";"1.059";"1.059,45";"Torgau";""
+"79,800";"61,7";"Mobil";"67,54";"74,22";"1.059";"1.059,45";"Torgau";""
+"79,900";"63,6";"Mobil";"67,29";"74,19";"1.059";"1.059,45";"Torgau";""
+"80,000";"63,7";"Mobil";"67,30";"74,16";"1.059";"1.059,45";"Torgau";""
+"80,100";"63,9";"Mobil";"67,30";"74,14";"1.059";"1.059,45";"Torgau";""
+"80,200";"62,7";"Mobil";"67,39";"74,11";"1.059";"1.059,45";"Torgau";""
+"80,300";"64,0";"Mobil";"67,24";"74,09";"1.059";"1.059,45";"Torgau";""
+"80,400";"64,5";"Mobil";"67,18";"74,06";"1.059";"1.059,45";"Torgau";""
+"80,500";"64,1";"Mobil";"67,20";"74,04";"1.059";"1.059,45";"Torgau";""
+"80,600";"60,4";"Mobil";"67,43";"74,01";"1.059";"1.059,45";"Torgau";""
+"80,700";"59,9";"Mobil";"67,33";"73,98";"1.059";"1.059,45";"Torgau";""
+"80,800";"61,5";"Mobil";"67,19";"73,94";"1.059";"1.059,45";"Torgau";""
+"80,900";"61,7";"Mobil";"67,17";"73,91";"1.059";"1.059,45";"Torgau";""
+"81,000";"61,5";"Mobil";"67,11";"73,87";"1.055";"1.059,45";"Torgau";""
+"81,100";"60,1";"Mobil";"67,15";"73,84";"1.055";"1.059,45";"Torgau";""
+"81,200";"59,4";"Mobil";"67,18";"73,80";"1.055";"1.059,45";"Torgau";""
+"81,300";"58,9";"Mobil";"67,18";"73,77";"1.055";"1.059,45";"Torgau";""
+"81,400";"60,1";"Mobil";"67,05";"73,73";"1.055";"1.059,45";"Torgau";""
+"81,500";"59,0";"Mobil";"67,12";"73,70";"1.055";"1.059,45";"Torgau";""
+"81,600";"59,6";"Mobil";"67,04";"73,66";"1.055";"1.059,45";"Torgau";""
+"81,700";"59,3";"Mobil";"67,04";"73,63";"1.055";"1.059,45";"Torgau";""
+"81,800";"59,6";"Mobil";"67,12";"73,59";"1.055";"1.059,45";"Torgau";""
+"81,900";"59,1";"Mobil";"67,27";"73,57";"1.055";"1.059,45";"Torgau";""
+"82,000";"64,4";"Mobil";"66,79";"73,54";"1.055";"1.059,45";"Torgau";""
+"82,100";"64,7";"Mobil";"66,74";"73,51";"1.055";"1.059,45";"Torgau";""
+"82,200";"65,2";"Mobil";"66,65";"73,48";"1.055";"1.059,45";"Torgau";""
+"82,300";"66,9";"Mobil";"66,45";"73,45";"1.055";"1.059,45";"Torgau";""
+"82,400";"66,0";"Mobil";"66,59";"73,41";"1.055";"1.059,45";"Torgau";""
+"82,500";"66,9";"Mobil";"66,58";"73,40";"1.055";"1.059,45";"Torgau";""
+"82,600";"67,4";"Mobil";"66,56";"73,38";"1.055";"1.059,45";"Torgau";""
+"82,700";"68,8";"Mobil";"66,45";"73,36";"1.055";"1.059,45";"Torgau";""
+"82,800";"66,8";"Mobil";"66,50";"73,33";"1.055";"1.059,45";"Torgau";""
+"82,900";"65,3";"Mobil";"66,50";"73,30";"1.055";"1.059,45";"Torgau";""
+"83,000";"67,1";"Mobil";"66,32";"73,27";"1.055";"1.059,45";"Torgau";""
+"83,100";"66,0";"Mobil";"66,40";"73,25";"1.055";"1.059,45";"Torgau";""
+"83,200";"67,2";"Mobil";"66,36";"73,22";"1.055";"1.059,45";"Torgau";""
+"83,300";"66,0";"Mobil";"66,52";"73,21";"1.055";"1.059,45";"Torgau";""
+"83,400";"66,8";"Mobil";"66,37";"73,19";"1.055";"1.059,45";"Torgau";""
+"83,500";"66,8";"Mobil";"66,25";"73,16";"1.055";"1.059,45";"Torgau";""
+"83,600";"63,8";"Mobil";"66,48";"73,12";"1.055";"1.059,45";"Torgau";""
+"83,700";"63,3";"Mobil";"66,48";"73,09";"1.055";"1.059,45";"Torgau";""
+"83,800";"62,6";"Mobil";"66,53";"73,06";"1.055";"1.059,45";"Torgau";""
+"83,900";"61,4";"Mobil";"66,64";"73,04";"1.055";"1.059,45";"Torgau";""
+"84,000";"63,3";"Mobil";"66,47";"73,02";"1.055";"1.059,45";"Torgau";""
+"84,100";"64,7";"Mobil";"66,33";"73,00";"1.055";"1.059,45";"Torgau";""
+"84,200";"64,5";"Mobil";"66,28";"72,97";"1.055";"1.059,45";"Torgau";""
+"84,300";"65,6";"Mobil";"66,11";"72,95";"1.055";"1.059,45";"Torgau";""
+"84,400";"66,7";"Mobil";"66,04";"72,92";"1.055";"1.059,45";"Torgau";""
+"84,500";"68,3";"Mobil";"65,91";"72,90";"1.055";"1.059,45";"Torgau";""
+"84,600";"69,0";"Mobil";"65,83";"72,88";"1.055";"1.059,45";"Torgau";"HW-Schutz: Schuetzberger-Deich"
+"84,700";"65,7";"Mobil";"66,10";"72,86";"1.055";"1.059,45";"Torgau";""
+"84,800";"65,7";"Mobil";"66,07";"72,84";"1.055";"1.059,45";"Torgau";""
+"84,900";"64,8";"Mobil";"66,12";"72,82";"1.055";"1.059,45";"Torgau";""
+"85,000";"65,4";"Mobil";"66,05";"72,80";"1.055";"1.059,45";"Torgau";""
+"85,100";"66,0";"Mobil";"65,99";"72,79";"1.055";"1.059,45";"Torgau";""
+"85,200";"67,3";"Mobil";"65,85";"72,77";"1.055";"1.059,45";"Torgau";""
+"85,300";"66,2";"Mobil";"65,93";"72,75";"1.055";"1.059,45";"Torgau";""
+"85,400";"64,8";"Mobil";"66,02";"72,73";"1.055";"1.059,45";"Torgau";""
+"85,500";"64,2";"Mobil";"66,03";"72,71";"1.055";"1.059,45";"Torgau";""
+"85,600";"62,6";"Mobil";"66,12";"72,68";"1.050";"1.059,45";"Torgau";""
+"85,700";"60,4";"Mobil";"66,26";"72,66";"1.050";"1.059,45";"Torgau";""
+"85,800";"59,1";"Mobil";"66,33";"72,63";"1.050";"1.059,45";"Torgau";""
+"85,900";"62,6";"Mobil";"65,98";"72,61";"1.050";"1.059,45";"Torgau";""
+"86,000";"60,3";"Mobil";"66,17";"72,58";"1.050";"1.059,45";"Torgau";""
+"86,100";"60,5";"Mobil";"66,15";"72,56";"1.050";"1.059,45";"Torgau";""
+"86,200";"60,3";"Mobil";"66,15";"72,53";"1.050";"1.059,45";"Torgau";""
+"86,300";"62,4";"Mobil";"65,95";"72,51";"1.050";"1.059,45";"Torgau";""
+"86,400";"61,8";"Mobil";"66,00";"72,49";"1.050";"1.059,45";"Torgau";""
+"86,500";"61,5";"Mobil";"66,00";"72,48";"1.050";"1.059,45";"Torgau";""
+"86,600";"62,0";"Mobil";"65,94";"72,46";"1.050";"1.059,45";"Torgau";""
+"86,700";"62,3";"Mobil";"65,88";"72,45";"1.050";"1.059,45";"Torgau";""
+"86,800";"62,7";"Mobil";"65,81";"72,43";"1.050";"1.059,45";"Torgau";""
+"86,900";"62,7";"Mobil";"65,77";"72,42";"1.050";"1.059,45";"Torgau";""
+"87,000";"62,5";"Mobil";"65,77";"72,40";"1.050";"1.059,45";"Torgau";""
+"87,100";"61,7";"Mobil";"65,82";"72,39";"1.050";"1.059,45";"Torgau";""
+"87,200";"63,9";"Mobil";"65,61";"72,37";"1.050";"1.059,45";"Torgau";""
+"87,300";"64,3";"Mobil";"65,53";"72,35";"1.050";"1.059,45";"Torgau";""
+"87,400";"64,4";"Mobil";"65,50";"72,32";"1.050";"1.059,45";"Torgau";""
+"87,500";"64,7";"Mobil";"65,43";"72,32";"1.050";"1.059,45";"Torgau";""
+"87,600";"63,5";"Mobil";"65,53";"72,31";"1.050";"1.059,45";"Torgau";""
+"87,700";"62,6";"Mobil";"65,59";"72,30";"1.050";"1.059,45";"Torgau";""
+"87,800";"62,2";"Mobil";"65,59";"72,28";"1.050";"1.059,45";"Torgau";""
+"87,900";"63,2";"Mobil";"65,47";"72,27";"1.050";"1.059,45";"Torgau";""
+"88,000";"62,5";"Mobil";"65,53";"72,25";"1.050";"1.059,45";"Torgau";""
+"88,100";"62,4";"Mobil";"65,53";"72,24";"1.050";"1.059,45";"Torgau";""
+"88,200";"62,8";"Mobil";"65,43";"72,22";"1.050";"1.059,45";"Torgau";""
+"88,300";"62,8";"Mobil";"65,36";"72,21";"1.050";"1.059,45";"Torgau";""
+"88,400";"60,7";"Mobil";"65,50";"72,20";"1.050";"1.059,45";"Torgau";""
+"88,500";"60,4";"Mobil";"65,45";"72,19";"1.050";"1.059,45";"Torgau";""
+"88,600";"62,5";"Mobil";"65,36";"72,17";"1.050";"1.059,45";"Torgau";""
+"88,700";"62,3";"Mobil";"65,41";"72,15";"1.050";"1.059,45";"Torgau";""
+"88,800";"63,3";"Mobil";"65,28";"72,12";"1.050";"1.059,45";"Torgau";""
+"88,900";"63,3";"Mobil";"65,26";"72,11";"1.050";"1.059,45";"Torgau";""
+"89,000";"61,7";"Mobil";"65,36";"72,09";"1.050";"1.059,45";"Torgau";""
+"89,100";"61,0";"Mobil";"65,32";"72,08";"1.050";"1.059,45";"Torgau";""
+"89,200";"61,4";"Mobil";"65,28";"72,06";"1.050";"1.059,45";"Torgau";""
+"89,300";"62,1";"Mobil";"65,20";"72,05";"1.050";"1.059,45";"Torgau";""
+"89,400";"63,1";"Mobil";"65,05";"72,03";"1.050";"1.059,45";"Torgau";""
+"89,500";"61,9";"Mobil";"65,12";"72,02";"1.050";"1.059,45";"Torgau";""
+"89,600";"63,9";"Mobil";"65,02";"72,01";"1.050";"1.059,45";"Torgau";""
+"89,700";"63,8";"Mobil";"65,05";"71,98";"1.050";"1.059,45";"Torgau";""
+"89,800";"64,6";"Mobil";"64,95";"71,95";"1.050";"1.059,45";"Torgau";""
+"89,900";"63,2";"Mobil";"65,05";"71,92";"1.050";"1.059,45";"Torgau";""
+"90,000";"63,6";"Mobil";"64,98";"71,89";"1.050";"1.059,45";"Torgau";""
+"90,100";"66,4";"Mobil";"64,95";"71,85";"1.050";"1.059,45";"Torgau";""
+"90,200";"69,4";"Mobil";"64,94";"71,81";"1.050";"1.059,45";"Torgau";"Zufluss: Schwarze Elster"
+"90,300";"71,0";"Mobil";"64,79";"71,80";"1.050";"1.059,45";"außerh. d. Bez.pegels";""
+"90,400";"69,9";"Mobil";"64,79";"71,78";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,500";"68,3";"Mobil";"64,85";"71,76";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,600";"68,4";"Mobil";"64,74";"71,73";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,700";"66,9";"Mobil";"64,78";"71,71";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,800";"66,6";"Mobil";"64,69";"71,68";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"90,900";"64,6";"Mobil";"64,76";"71,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,000";"63,9";"Mobil";"64,71";"71,60";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,100";"63,5";"Mobil";"64,67";"71,58";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,200";"60,1";"Mobil";"64,92";"71,55";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,300";"60,5";"Mobil";"64,80";"71,54";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,400";"60,7";"Mobil";"64,69";"71,52";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,500";"57,6";"Starr";"64,88";"71,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,600";"55,6";"Starr";"64,99";"71,45";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,700";"54,4";"Starr";"65,02";"71,44";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,800";"53,3";"Starr";"65,06";"71,42";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"91,900";"53,3";"Starr";"64,97";"71,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,000";"53,0";"Starr";"64,90";"71,36";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,100";"52,5";"Starr";"64,86";"71,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,200";"52,2";"Starr";"64,81";"71,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,300";"50,9";"Mobil";"64,84";"71,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,400";"51,0";"Mobil";"64,73";"71,27";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,500";"50,9";"Mobil";"64,64";"71,25";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,600";"51,3";"Mobil";"64,48";"71,23";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,700";"50,7";"Mobil";"64,46";"71,22";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,800";"49,4";"Mobil";"64,53";"71,20";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"92,900";"48,8";"Mobil";"64,54";"71,18";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,000";"47,4";"Mobil";"64,56";"71,16";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,100";"47,3";"Mobil";"64,42";"71,14";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,200";"46,0";"Mobil";"64,51";"71,11";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,300";"45,5";"Mobil";"64,51";"71,09";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,400";"41,9";"Mobil";"64,79";"71,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,500";"41,9";"Mobil";"64,62";"71,05";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,600";"39,8";"Mobil";"64,71";"71,03";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,700";"37,8";"Mobil";"64,80";"71,01";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,800";"38,5";"Mobil";"64,69";"70,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"93,900";"37,7";"Mobil";"64,77";"70,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,000";"38,8";"Mobil";"64,55";"70,95";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Zugbach"
+"94,100";"38,6";"Mobil";"64,52";"70,93";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,200";"38,1";"Mobil";"64,51";"70,91";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,300";"37,9";"Mobil";"64,46";"70,89";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,400";"36,6";"Mobil";"64,55";"70,86";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,500";"35,8";"Mobil";"64,56";"70,84";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,600";"34,0";"Mobil";"64,60";"70,82";"1.119";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Galliner-Deich"
+"94,700";"32,8";"Mobil";"64,64";"70,81";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,800";"33,2";"Mobil";"64,59";"70,79";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"94,900";"34,0";"Mobil";"64,45";"70,77";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,000";"33,0";"Mobil";"64,47";"70,74";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,100";"33,2";"Mobil";"64,26";"70,73";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,200";"32,4";"Mobil";"64,35";"70,71";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,300";"32,0";"Mobil";"64,36";"70,69";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,400";"27,8";"Mobil";"64,51";"70,67";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,500";"23,6";"Mobil";"64,50";"70,66";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,600";"22,3";"Mobil";"64,48";"70,65";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,700";"21,2";"Mobil";"64,39";"70,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,800";"31,3";"Mobil";"64,22";"70,63";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"95,900";"36,6";"Mobil";"64,21";"70,59";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,000";"42,2";"Mobil";"64,01";"70,55";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,100";"44,8";"Mobil";"63,91";"70,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,200";"44,9";"Mobil";"63,81";"70,43";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,300";"43,2";"Mobil";"63,95";"70,41";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,400";"42,4";"Mobil";"64,09";"70,38";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,500";"42,9";"Mobil";"64,06";"70,35";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,600";"43,7";"Mobil";"63,87";"70,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,700";"42,3";"Mobil";"63,92";"70,31";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,800";"37,7";"Mobil";"63,90";"70,29";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"96,900";"26,3";"Mobil";"63,92";"70,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,000";"39,5";"Mobil";"64,12";"70,31";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,100";"42,6";"Mobil";"64,17";"70,25";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Alte Elbe"
+"97,200";"42,8";"Mobil";"64,02";"70,18";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,300";"44,7";"Mobil";"63,66";"70,17";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,400";"45,5";"Mobil";"63,55";"70,15";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,500";"46,1";"Mobil";"63,47";"70,13";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,600";"44,4";"Mobil";"63,45";"70,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,700";"40,9";"Mobil";"63,56";"70,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,800";"44,1";"Mobil";"63,48";"70,09";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"97,900";"46,5";"Mobil";"63,39";"70,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,000";"46,1";"Mobil";"63,40";"70,03";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,100";"44,5";"Mobil";"63,57";"70,01";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,200";"44,9";"Mobil";"63,54";"69,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,300";"43,8";"Mobil";"63,70";"69,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,400";"41,4";"Mobil";"63,86";"69,95";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,500";"40,2";"Mobil";"63,83";"69,94";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,600";"41,2";"Mobil";"63,90";"69,92";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,700";"44,3";"Mobil";"63,64";"69,90";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,800";"47,2";"Mobil";"63,43";"69,87";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"98,900";"49,8";"Mobil";"63,21";"69,84";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,000";"52,5";"Mobil";"62,85";"69,81";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,100";"51,1";"Mobil";"62,95";"69,79";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,200";"51,8";"Mobil";"62,94";"69,76";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,300";"51,6";"Mobil";"63,03";"69,74";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,400";"49,1";"Mobil";"63,25";"69,72";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,500";"48,1";"Mobil";"63,32";"69,71";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,600";"46,0";"Mobil";"63,45";"69,69";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,700";"44,5";"Mobil";"63,46";"69,68";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,800";"45,9";"Mobil";"63,40";"69,66";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"99,900";"47,1";"Mobil";"63,35";"69,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,000";"48,6";"Mobil";"63,40";"69,62";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,100";"49,9";"Mobil";"63,32";"69,58";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,200";"50,1";"Mobil";"63,26";"69,54";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,300";"52,4";"Mobil";"62,98";"69,52";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,400";"51,6";"Mobil";"62,93";"69,50";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,500";"50,7";"Mobil";"62,79";"69,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,600";"48,1";"Mobil";"62,81";"69,48";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,700";"43,7";"Mobil";"62,89";"69,48";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,800";"46,5";"Mobil";"62,84";"69,47";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"100,900";"48,7";"Mobil";"62,81";"69,45";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,000";"49,6";"Mobil";"62,94";"69,43";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,100";"51,9";"Mobil";"62,82";"69,41";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,200";"53,4";"Mobil";"62,73";"69,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,300";"53,4";"Mobil";"62,77";"69,37";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,400";"53,3";"Mobil";"62,77";"69,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,500";"53,0";"Mobil";"62,80";"69,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,600";"51,2";"Mobil";"63,01";"69,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,700";"49,9";"Mobil";"63,16";"69,28";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,800";"49,6";"Mobil";"63,05";"69,26";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"101,900";"47,1";"Mobil";"63,10";"69,25";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,000";"45,8";"Mobil";"63,11";"69,23";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,100";"44,7";"Mobil";"63,08";"69,22";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,200";"45,9";"Mobil";"62,90";"69,20";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,300";"47,1";"Mobil";"62,75";"69,19";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,400";"51,9";"Mobil";"62,67";"69,18";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,500";"54,3";"Mobil";"62,63";"69,16";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,600";"52,8";"Mobil";"62,71";"69,13";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,700";"51,3";"Mobil";"62,78";"69,12";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,800";"51,8";"Mobil";"62,75";"69,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"102,900";"52,6";"Mobil";"62,68";"69,08";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,000";"50,8";"Mobil";"62,85";"69,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,100";"51,0";"Mobil";"62,80";"69,05";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,200";"51,0";"Mobil";"62,83";"69,03";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,300";"51,0";"Mobil";"62,84";"69,01";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,400";"51,1";"Mobil";"62,92";"68,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,500";"51,4";"Mobil";"62,94";"68,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,600";"55,0";"Mobil";"62,62";"68,95";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,700";"58,5";"Mobil";"62,28";"68,92";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,800";"56,6";"Mobil";"62,44";"68,88";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"103,900";"55,6";"Mobil";"62,53";"68,86";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,000";"56,2";"Mobil";"62,44";"68,83";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,100";"58,4";"Mobil";"62,21";"68,82";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,200";"56,5";"Mobil";"62,41";"68,80";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,300";"55,1";"Mobil";"62,53";"68,78";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,400";"54,5";"Mobil";"62,59";"68,75";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,500";"54,5";"Mobil";"62,59";"68,73";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,600";"55,9";"Mobil";"62,43";"68,70";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,700";"54,6";"Mobil";"62,54";"68,69";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,800";"55,6";"Mobil";"62,46";"68,67";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"104,900";"56,4";"Mobil";"62,37";"68,64";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,000";"58,2";"Mobil";"62,19";"68,61";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,100";"60,1";"Mobil";"61,98";"68,59";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,200";"61,7";"Mobil";"61,82";"68,57";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,300";"62,1";"Mobil";"61,77";"68,55";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,400";"60,8";"Mobil";"61,90";"68,53";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,500";"61,8";"Mobil";"61,80";"68,51";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,600";"63,9";"Mobil";"61,59";"68,48";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,700";"60,9";"Mobil";"61,77";"68,44";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,800";"62,2";"Mobil";"61,61";"68,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"105,900";"61,4";"Mobil";"61,66";"68,37";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,000";"61,7";"Mobil";"61,66";"68,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,100";"60,3";"Mobil";"61,83";"68,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,200";"59,1";"Mobil";"61,95";"68,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,300";"57,8";"Mobil";"62,08";"68,28";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,400";"58,1";"Mobil";"62,05";"68,26";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Schwebstoffmessstelle: Wittenberg"
+"106,500";"59,0";"Mobil";"61,94";"68,24";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,600";"60,1";"Mobil";"61,80";"68,22";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,700";"60,4";"Mobil";"61,74";"68,20";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,800";"60,4";"Mobil";"61,70";"68,17";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"106,900";"58,3";"Mobil";"61,85";"68,15";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,000";"57,4";"Mobil";"61,91";"68,12";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,100";"59,4";"Mobil";"61,70";"68,10";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,200";"59,4";"Mobil";"61,65";"68,08";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,300";"57,8";"Starr";"61,76";"68,06";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,400";"57,7";"Starr";"61,75";"68,04";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,500";"57,9";"Starr";"61,70";"68,02";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,600";"57,9";"Starr";"61,64";"67,99";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,700";"56,4";"Starr";"61,72";"67,97";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,800";"58,4";"Starr";"61,52";"67,94";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"107,900";"57,3";"Starr";"61,61";"67,92";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,000";"55,5";"Starr";"61,76";"67,90";"1.119";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Wittenberg -Schutz- und Sicherheitshafen"
+"108,100";"54,0";"Starr";"61,87";"67,88";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,200";"55,8";"Starr";"61,67";"67,85";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,300";"56,0";"Starr";"61,62";"67,83";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,400";"54,2";"Mobil";"61,78";"67,81";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,500";"53,5";"Mobil";"61,82";"67,79";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,600";"53,8";"Mobil";"61,76";"67,77";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,700";"52,2";"Mobil";"61,88";"67,75";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,800";"51,3";"Mobil";"61,93";"67,72";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"108,900";"49,6";"Mobil";"62,06";"67,70";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,000";"48,8";"Mobil";"62,11";"67,67";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,100";"51,4";"Mobil";"61,82";"67,65";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,200";"52,2";"Mobil";"61,70";"67,62";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,300";"51,0";"Mobil";"61,76";"67,59";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,400";"48,8";"Mobil";"61,91";"67,56";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,500";"51,7";"Mobil";"61,56";"67,53";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,600";"56,0";"Mobil";"61,20";"67,49";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,700";"56,4";"Mobil";"61,17";"67,47";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,800";"58,6";"Mobil";"60,92";"67,45";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"109,900";"59,2";"Mobil";"60,82";"67,44";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,000";"59,3";"Mobil";"60,86";"67,42";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,100";"60,0";"Mobil";"60,78";"67,39";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,200";"57,9";"Mobil";"60,95";"67,35";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,300";"58,3";"Mobil";"60,87";"67,34";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,400";"59,2";"Mobil";"60,77";"67,32";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,500";"60,2";"Mobil";"60,65";"67,30";"1.119";"1.059,45";"außerh. d. Bez.pegels";""
+"110,600";"59,6";"Mobil";"60,68";"67,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"110,700";"57,8";"Mobil";"60,83";"67,27";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"110,800";"55,5";"Mobil";"61,07";"67,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"110,900";"54,1";"Mobil";"61,21";"67,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,000";"52,6";"Mobil";"61,34";"67,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,100";"52,5";"Mobil";"61,34";"67,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,200";"58,6";"Mobil";"60,72";"67,17";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,300";"62,1";"Mobil";"60,37";"67,16";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,400";"61,0";"Mobil";"60,50";"67,14";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,500";"58,4";"Mobil";"60,74";"67,12";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,600";"59,3";"Mobil";"60,64";"67,09";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,700";"59,1";"Mobil";"60,65";"67,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,800";"59,5";"Mobil";"60,59";"67,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"111,900";"58,8";"Mobil";"60,64";"67,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,000";"57,3";"Mobil";"60,79";"67,03";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,100";"56,8";"Mobil";"60,83";"67,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,200";"55,3";"Mobil";"60,95";"66,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,300";"55,5";"Mobil";"60,91";"66,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,400";"54,1";"Mobil";"61,06";"66,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,500";"53,3";"Mobil";"61,15";"66,94";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,600";"52,7";"Mobil";"61,20";"66,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,700";"52,4";"Mobil";"61,21";"66,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,800";"51,9";"Mobil";"61,26";"66,88";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"112,900";"54,2";"Mobil";"61,03";"66,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,000";"53,7";"Mobil";"61,06";"66,84";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,100";"53,1";"Mobil";"61,11";"66,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,200";"52,7";"Mobil";"61,11";"66,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,300";"52,8";"Mobil";"61,07";"66,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,400";"51,5";"Mobil";"61,18";"66,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,500";"51,6";"Mobil";"61,15";"66,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,600";"54,2";"Mobil";"60,82";"66,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,700";"55,3";"Mobil";"60,59";"66,74";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,800";"58,3";"Mobil";"60,35";"66,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"113,900";"61,4";"Mobil";"60,08";"66,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,000";"62,3";"Mobil";"60,01";"66,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,100";"61,3";"Mobil";"60,11";"66,69";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,200";"58,7";"Mobil";"60,24";"66,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,300";"54,3";"Mobil";"60,44";"66,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,400";"54,8";"Mobil";"60,44";"66,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,500";"55,3";"Mobil";"60,42";"66,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,600";"50,3";"Mobil";"60,50";"66,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,700";"40,5";"Mobil";"60,59";"66,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,800";"52,3";"Mobil";"60,32";"66,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"114,900";"56,2";"Mobil";"60,32";"66,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,000";"56,6";"Mobil";"60,28";"66,61";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,100";"56,9";"Mobil";"60,26";"66,61";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,200";"58,7";"Mobil";"60,13";"66,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,300";"62,1";"Mobil";"59,81";"66,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,400";"63,0";"Mobil";"59,79";"66,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,500";"61,4";"Mobil";"59,99";"66,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,600";"59,2";"Mobil";"60,21";"66,55";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,700";"57,9";"Mobil";"60,34";"66,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,800";"60,1";"Mobil";"60,11";"66,53";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"115,900";"63,1";"Mobil";"59,78";"66,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,000";"61,5";"Mobil";"59,92";"66,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,100";"57,7";"Mobil";"60,28";"66,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,200";"54,4";"Mobil";"60,54";"66,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,300";"52,5";"Mobil";"60,62";"66,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,400";"55,4";"Mobil";"60,41";"66,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,500";"59,1";"Mobil";"60,11";"66,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,600";"57,5";"Mobil";"60,29";"66,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,700";"57,8";"Mobil";"60,28";"66,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,800";"56,7";"Mobil";"60,36";"66,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"116,900";"56,8";"Mobil";"60,33";"66,43";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,000";"57,7";"Mobil";"60,29";"66,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,100";"57,5";"Mobil";"60,27";"66,40";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,200";"60,6";"Mobil";"59,98";"66,38";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,300";"59,5";"Mobil";"60,06";"66,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,400";"60,6";"Mobil";"59,92";"66,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,500";"63,9";"Mobil";"59,60";"66,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,600";"69,4";"Mobil";"59,08";"66,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,700";"70,3";"Mobil";"58,95";"66,27";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,800";"72,4";"Mobil";"58,76";"66,24";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"117,900";"69,9";"Mobil";"58,98";"66,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,000";"68,7";"Mobil";"59,06";"66,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,100";"70,3";"Mobil";"58,89";"66,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,200";"68,9";"Mobil";"58,99";"66,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,300";"64,8";"Mobil";"59,34";"66,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,400";"63,3";"Mobil";"59,44";"66,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,500";"63,4";"Mobil";"59,38";"66,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,600";"64,3";"Mobil";"59,28";"66,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,700";"63,2";"Mobil";"59,38";"66,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,800";"62,4";"Mobil";"59,44";"66,03";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"118,900";"61,9";"Mobil";"59,45";"66,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,000";"62,0";"Mobil";"59,41";"65,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,100";"60,9";"Mobil";"59,47";"65,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,200";"60,9";"Mobil";"59,43";"65,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,300";"61,8";"Mobil";"59,33";"65,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,400";"60,5";"Mobil";"59,44";"65,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,500";"60,0";"Mobil";"59,49";"65,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,600";"62,7";"Mobil";"59,25";"65,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,700";"63,4";"Mobil";"59,15";"65,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,800";"64,6";"Mobil";"58,99";"65,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"119,900";"65,6";"Mobil";"58,84";"65,81";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,000";"67,7";"Mobil";"58,56";"65,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,100";"65,7";"Mobil";"58,66";"65,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,200";"66,1";"Mobil";"58,59";"65,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,300";"62,5";"Mobil";"58,92";"65,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,400";"64,9";"Mobil";"58,60";"65,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,500";"60,8";"Mobil";"58,93";"65,71";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,600";"59,4";"Mobil";"59,02";"65,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,700";"58,3";"Mobil";"59,09";"65,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,800";"61,1";"Mobil";"58,76";"65,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"120,900";"62,9";"Mobil";"58,51";"65,61";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,000";"60,8";"Mobil";"58,69";"65,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,100";"57,1";"Mobil";"59,01";"65,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,200";"56,3";"Mobil";"59,01";"65,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,300";"55,4";"Mobil";"59,03";"65,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,400";"54,5";"Mobil";"59,07";"65,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,500";"54,5";"Mobil";"59,00";"65,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,600";"56,0";"Mobil";"58,82";"65,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,700";"58,2";"Mobil";"58,55";"65,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,800";"56,5";"Mobil";"58,67";"65,38";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"121,900";"53,4";"Mobil";"58,94";"65,36";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,000";"51,2";"Mobil";"59,13";"65,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,100";"49,9";"Mobil";"59,22";"65,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,200";"50,1";"Mobil";"59,15";"65,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,300";"53,4";"Mobil";"58,77";"65,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,400";"53,1";"Mobil";"58,70";"65,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,500";"50,0";"Mobil";"58,93";"65,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,600";"50,4";"Mobil";"58,80";"65,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,700";"49,8";"Mobil";"58,74";"65,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,800";"47,5";"Mobil";"58,94";"65,17";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"122,900";"49,2";"Mobil";"58,67";"65,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,000";"49,3";"Mobil";"58,69";"65,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,100";"49,2";"Mobil";"58,71";"65,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,200";"47,7";"Mobil";"58,84";"65,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,300";"48,4";"Mobil";"58,71";"65,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,400";"48,7";"Mobil";"58,61";"65,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,500";"49,4";"Mobil";"58,46";"65,00";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,600";"51,5";"Mobil";"58,11";"64,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,700";"49,8";"Mobil";"58,18";"64,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,800";"49,8";"Mobil";"58,09";"64,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"123,900";"47,7";"Mobil";"58,26";"64,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,000";"50,6";"Mobil";"57,92";"64,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,100";"54,2";"Mobil";"57,49";"64,88";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,200";"52,7";"Mobil";"57,58";"64,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,300";"50,7";"Mobil";"57,74";"64,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,400";"48,1";"Mobil";"58,04";"64,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,500";"45,5";"Mobil";"58,34";"64,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,600";"40,9";"Mobil";"58,78";"64,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,700";"40,9";"Mobil";"58,69";"64,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,800";"41,6";"Mobil";"58,53";"64,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"124,900";"42,1";"Mobil";"58,37";"64,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,000";"43,4";"Mobil";"58,25";"64,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,100";"43,2";"Mobil";"58,32";"64,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,200";"42,3";"Mobil";"58,47";"64,62";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,300";"42,3";"Mobil";"58,50";"64,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,400";"41,2";"Mobil";"58,56";"64,58";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,500";"40,7";"Mobil";"58,53";"64,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,600";"40,2";"Mobil";"58,51";"64,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,700";"40,6";"Mobil";"58,37";"64,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,800";"43,2";"Mobil";"58,24";"64,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"125,900";"44,5";"Mobil";"58,24";"64,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,000";"44,9";"Mobil";"58,21";"64,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,100";"44,5";"Mobil";"58,27";"64,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,200";"43,9";"Mobil";"58,28";"64,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,300";"42,6";"Mobil";"58,37";"64,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,400";"44,3";"Mobil";"58,18";"64,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,500";"43,9";"Mobil";"58,26";"64,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,600";"41,0";"Mobil";"58,44";"64,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,700";"40,1";"Mobil";"58,32";"64,32";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,800";"41,0";"Mobil";"58,23";"64,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"126,900";"41,0";"Mobil";"58,25";"64,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,000";"43,1";"Mobil";"58,02";"64,27";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,100";"42,7";"Mobil";"58,12";"64,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,200";"43,4";"Mobil";"58,12";"64,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,300";"45,8";"Mobil";"57,90";"64,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,400";"46,8";"Mobil";"57,74";"64,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,500";"45,2";"Mobil";"57,92";"64,17";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,600";"46,3";"Mobil";"57,90";"64,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,700";"49,3";"Mobil";"57,62";"64,12";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,800";"49,7";"Mobil";"57,59";"64,08";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"127,900";"50,0";"Mobil";"57,58";"64,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Fähre: Coswig -Gierseilfähre"
+"128,000";"51,5";"Mobil";"57,47";"64,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,100";"51,5";"Mobil";"57,49";"63,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,200";"53,1";"Mobil";"57,30";"63,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,300";"54,0";"Mobil";"57,18";"63,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,400";"54,2";"Mobil";"57,17";"63,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,500";"53,2";"Mobil";"57,27";"63,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,600";"53,1";"Mobil";"57,24";"63,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,700";"51,7";"Mobil";"57,35";"63,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,800";"52,8";"Mobil";"57,24";"63,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"128,900";"53,2";"Mobil";"57,19";"63,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,000";"53,8";"Mobil";"57,11";"63,69";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,100";"52,9";"Mobil";"57,19";"63,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,200";"53,9";"Mobil";"57,07";"63,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,300";"54,6";"Mobil";"56,99";"63,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,400";"50,4";"Mobil";"57,39";"63,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,500";"52,9";"Mobil";"57,10";"63,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,600";"54,0";"Mobil";"56,98";"63,58";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,700";"54,2";"Mobil";"56,96";"63,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,800";"54,8";"Mobil";"56,89";"63,55";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"129,900";"54,4";"Mobil";"56,91";"63,53";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,000";"55,1";"Mobil";"56,83";"63,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,100";"54,0";"Mobil";"56,92";"63,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,200";"53,3";"Mobil";"56,97";"63,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,300";"53,0";"Mobil";"56,98";"63,46";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,400";"51,0";"Mobil";"57,20";"63,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Buroer-Deich"
+"130,500";"51,4";"Mobil";"57,14";"63,43";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,600";"52,2";"Mobil";"57,05";"63,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,700";"51,7";"Mobil";"57,08";"63,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,800";"51,9";"Mobil";"57,12";"63,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"130,900";"52,4";"Mobil";"57,12";"63,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,000";"52,5";"Mobil";"57,12";"63,34";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,100";"52,6";"Mobil";"57,11";"63,32";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,200";"53,6";"Mobil";"56,98";"63,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,300";"53,1";"Mobil";"57,00";"63,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,400";"52,8";"Mobil";"57,04";"63,26";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,500";"54,6";"Mobil";"56,86";"63,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,600";"57,9";"Mobil";"56,53";"63,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,700";"57,7";"Mobil";"56,57";"63,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,800";"57,2";"Mobil";"56,65";"63,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"131,900";"59,1";"Mobil";"56,48";"63,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,000";"60,0";"Mobil";"56,43";"63,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,100";"61,2";"Mobil";"56,31";"63,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,200";"61,4";"Mobil";"56,28";"63,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,300";"63,9";"Mobil";"56,04";"63,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,400";"65,0";"Mobil";"55,94";"63,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,500";"62,8";"Mobil";"56,14";"62,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,600";"59,6";"Mobil";"56,41";"62,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,700";"56,0";"Mobil";"56,64";"62,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,800";"58,7";"Mobil";"56,43";"62,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"132,900";"63,2";"Mobil";"56,06";"62,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,000";"62,5";"Mobil";"56,15";"62,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,100";"59,6";"Mobil";"56,44";"62,84";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,200";"57,6";"Mobil";"56,63";"62,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,300";"57,0";"Mobil";"56,70";"62,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,400";"58,3";"Mobil";"56,58";"62,81";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,500";"60,0";"Mobil";"56,43";"62,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,600";"59,8";"Mobil";"56,46";"62,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,700";"61,6";"Mobil";"56,29";"62,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,800";"65,4";"Mobil";"55,95";"62,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"133,900";"67,8";"Mobil";"55,73";"62,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,000";"69,8";"Mobil";"55,56";"62,71";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,100";"69,6";"Mobil";"55,59";"62,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,200";"67,3";"Mobil";"55,76";"62,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,300";"63,7";"Mobil";"55,99";"62,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,400";"61,9";"Mobil";"56,24";"62,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,500";"61,0";"Mobil";"56,39";"62,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,600";"62,7";"Mobil";"56,31";"62,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,700";"61,7";"Mobil";"56,39";"62,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,800";"62,7";"Mobil";"56,28";"62,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"134,900";"64,5";"Mobil";"56,10";"62,58";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,000";"66,3";"Mobil";"55,92";"62,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,100";"64,9";"Mobil";"56,04";"62,55";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,200";"69,4";"Mobil";"55,63";"62,53";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,300";"72,1";"Mobil";"55,40";"62,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,400";"72,8";"Mobil";"55,31";"62,50";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,500";"74,1";"Mobil";"55,12";"62,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,600";"71,4";"Mobil";"55,36";"62,43";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,700";"70,4";"Mobil";"55,47";"62,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,800";"69,6";"Mobil";"55,48";"62,40";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"135,900";"66,6";"Mobil";"55,67";"62,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,000";"64,3";"Mobil";"55,84";"62,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,100";"62,0";"Mobil";"56,04";"62,32";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,200";"62,5";"Mobil";"56,00";"62,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,300";"62,3";"Mobil";"56,00";"62,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,400";"63,8";"Mobil";"55,83";"62,26";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,500";"62,4";"Mobil";"55,91";"62,24";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,600";"60,6";"Mobil";"56,07";"62,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,700";"64,1";"Mobil";"55,77";"62,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,800";"64,0";"Mobil";"55,77";"62,16";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"136,900";"63,6";"Mobil";"55,79";"62,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,000";"65,8";"Mobil";"55,55";"62,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,100";"67,2";"Mobil";"55,33";"62,09";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,200";"67,0";"Mobil";"55,30";"62,05";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Vockerode"
+"137,300";"63,3";"Mobil";"55,57";"62,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,400";"60,4";"Mobil";"55,86";"61,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,500";"61,0";"Mobil";"55,85";"61,98";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,600";"61,1";"Mobil";"55,85";"61,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,700";"62,9";"Mobil";"55,70";"61,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,800";"64,5";"Mobil";"55,55";"61,94";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"137,900";"65,8";"Mobil";"55,42";"61,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,000";"64,6";"Mobil";"55,51";"61,91";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,100";"64,8";"Mobil";"55,46";"61,89";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,200";"65,4";"Mobil";"55,38";"61,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,300";"66,5";"Mobil";"55,24";"61,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Kliekener-Deich"
+"138,400";"63,8";"Mobil";"55,44";"61,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,500";"69,1";"Mobil";"54,96";"61,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,600";"67,3";"Mobil";"55,12";"61,78";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,700";"63,4";"Mobil";"55,45";"61,76";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,800";"66,2";"Mobil";"55,19";"61,73";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"138,900";"62,8";"Mobil";"55,48";"61,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,000";"63,7";"Mobil";"55,38";"61,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,100";"62,1";"Mobil";"55,50";"61,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,200";"63,3";"Mobil";"55,38";"61,66";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,300";"63,1";"Mobil";"55,40";"61,64";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,400";"61,2";"Mobil";"55,52";"61,62";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,500";"60,6";"Mobil";"55,50";"61,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,600";"62,9";"Mobil";"55,27";"61,56";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,700";"61,8";"Mobil";"55,33";"61,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,800";"60,3";"Mobil";"55,45";"61,51";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"139,900";"62,9";"Mobil";"55,21";"61,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,000";"64,0";"Mobil";"55,07";"61,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,100";"63,8";"Mobil";"55,04";"61,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,200";"62,0";"Mobil";"55,16";"61,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,300";"62,1";"Mobil";"55,11";"61,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,400";"64,2";"Mobil";"54,94";"61,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,500";"66,8";"Mobil";"54,72";"61,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,600";"67,4";"Mobil";"54,59";"61,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,700";"66,2";"Mobil";"54,58";"61,29";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,800";"63,1";"Mobil";"54,80";"61,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"140,900";"61,4";"Mobil";"54,90";"61,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,000";"61,1";"Mobil";"54,89";"61,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,100";"60,9";"Mobil";"54,88";"61,16";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,200";"61,1";"Mobil";"54,80";"61,13";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,300";"60,4";"Mobil";"54,80";"61,10";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,400";"61,8";"Mobil";"54,67";"61,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,500";"62,4";"Mobil";"54,62";"61,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"141,600";"63,9";"Mobil";"54,47";"61,01";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"143,700";"65,5";"Mobil";"54,24";"60,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"143,800";"65,7";"Mobil";"54,22";"60,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"143,900";"63,8";"Mobil";"54,34";"60,80";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,000";"62,6";"Mobil";"54,39";"60,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,100";"64,1";"Mobil";"54,24";"60,74";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,200";"65,7";"Mobil";"54,08";"60,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,300";"66,6";"Mobil";"53,99";"60,68";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,400";"67,7";"Mobil";"53,89";"60,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,500";"67,4";"Mobil";"53,90";"60,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,600";"64,0";"Mobil";"54,18";"60,60";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,700";"62,0";"Mobil";"54,30";"60,57";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,800";"61,9";"Mobil";"54,25";"60,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"144,900";"59,2";"Mobil";"54,41";"60,52";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,000";"60,0";"Mobil";"54,28";"60,49";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,100";"61,2";"Mobil";"54,15";"60,47";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,200";"62,4";"Mobil";"54,03";"60,44";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,300";"62,4";"Mobil";"54,06";"60,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,400";"62,1";"Mobil";"54,11";"60,40";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,500";"61,3";"Mobil";"54,11";"60,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,600";"59,6";"Mobil";"54,16";"60,34";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,700";"63,8";"Mobil";"53,91";"60,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,800";"63,8";"Mobil";"53,96";"60,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"145,900";"61,6";"Mobil";"54,14";"60,25";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,000";"60,7";"Mobil";"54,19";"60,22";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,100";"64,8";"Mobil";"53,79";"60,20";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,200";"66,1";"Mobil";"53,64";"60,18";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,300";"66,2";"Mobil";"53,60";"60,15";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,400";"66,3";"Mobil";"53,56";"60,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,500";"64,0";"Mobil";"53,76";"60,11";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,600";"63,1";"Mobil";"53,84";"60,10";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,700";"64,4";"Mobil";"53,70";"60,09";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,800";"62,4";"Mobil";"53,84";"60,07";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"146,900";"61,2";"Mobil";"53,92";"60,06";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,000";"61,6";"Mobil";"53,85";"60,04";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,100";"62,6";"Mobil";"53,77";"60,02";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,200";"63,1";"Mobil";"53,71";"60,00";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,300";"62,6";"Mobil";"53,73";"59,99";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,400";"61,5";"Mobil";"53,78";"59,97";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,500";"60,1";"Mobil";"53,89";"59,96";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,600";"59,5";"Mobil";"53,93";"59,95";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,700";"58,0";"Mobil";"53,78";"59,94";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,800";"56,7";"Starr";"53,61";"59,93";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"147,900";"53,3";"Starr";"53,47";"59,92";"1.118";"1.059,45";"außerh. d. Bez.pegels";"HW-Schutz: Rosslau-Deich"
+"148,000";"47,7";"Starr";"53,49";"59,90";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,100";"47,7";"Starr";"53,51";"59,89";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,200";"46,9";"Starr";"53,59";"59,88";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,300";"46,2";"Starr";"53,57";"59,87";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,400";"45,4";"Starr";"53,57";"59,86";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,500";"45,7";"Starr";"53,49";"59,85";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,600";"45,2";"Starr";"53,49";"59,83";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,700";"38,6";"Starr";"53,52";"59,82";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,800";"26,4";"Starr";"53,51";"59,81";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"148,900";"37,9";"Starr";"53,37";"59,79";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,000";"42,6";"Starr";"53,27";"59,77";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,100";"45,7";"Starr";"53,18";"59,75";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,200";"46,3";"Starr";"53,12";"59,72";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,300";"43,5";"Starr";"53,16";"59,70";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,400";"38,0";"Starr";"53,19";"59,67";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Rossel"
+"149,500";"37,3";"Starr";"53,26";"59,65";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,600";"37,9";"Starr";"53,14";"59,63";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,700";"39,7";"Starr";"53,07";"59,59";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,800";"38,8";"Starr";"53,36";"59,54";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"149,900";"43,8";"Starr";"52,78";"59,48";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Werfthafen"
+"150,000";"44,9";"Starr";"52,73";"59,42";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,100";"45,0";"Starr";"52,87";"59,41";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,200";"45,4";"Starr";"52,97";"59,39";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,300";"47,4";"Starr";"52,98";"59,37";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,400";"48,8";"Starr";"53,06";"59,35";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,500";"50,8";"Starr";"53,01";"59,33";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,600";"52,8";"Starr";"52,96";"59,31";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,700";"54,4";"Starr";"53,01";"59,30";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,800";"56,4";"Starr";"53,01";"59,28";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"150,900";"57,7";"Starr";"53,05";"59,26";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"151,000";"60,0";"Mobil";"53,00";"59,24";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Dessau 259 (oberhalb Muldemündung)"
+"151,100";"62,7";"Mobil";"52,92";"59,23";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"151,200";"68,4";"Mobil";"52,54";"59,21";"1.118";"1.059,45";"außerh. d. Bez.pegels";"Zufluss: Mulde"
+"151,300";"74,9";"Mobil";"51,99";"59,19";"1.118";"1.059,45";"außerh. d. Bez.pegels";""
+"151,400";"70,2";"Mobil";"52,39";"59,17";"1.298";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Dessau 260 (unterhalb Muldemündung)"
+"151,500";"72,2";"Mobil";"52,14";"59,15";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,600";"69,4";"Mobil";"52,30";"59,12";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,700";"66,7";"Mobil";"52,54";"59,11";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,800";"67,2";"Mobil";"52,49";"59,10";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"151,900";"65,6";"Mobil";"52,63";"59,08";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,000";"70,1";"Mobil";"52,22";"59,05";"1.298";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Dessau-Wallwitz"
+"152,100";"74,7";"Mobil";"51,79";"59,04";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,200";"73,5";"Mobil";"51,88";"59,03";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,300";"70,8";"Mobil";"52,09";"59,01";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,400";"65,8";"Mobil";"52,51";"58,98";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,500";"62,8";"Mobil";"52,74";"58,96";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,600";"62,0";"Mobil";"52,79";"58,94";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,700";"64,8";"Mobil";"52,51";"58,93";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,800";"67,4";"Mobil";"52,26";"58,91";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"152,900";"68,2";"Mobil";"52,16";"58,89";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,000";"70,1";"Mobil";"51,96";"58,87";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,100";"69,0";"Mobil";"52,05";"58,85";"1.298";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Leopoldhafen"
+"153,200";"68,6";"Mobil";"52,06";"58,83";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,300";"67,3";"Mobil";"52,15";"58,82";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,400";"68,9";"Mobil";"52,00";"58,80";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,500";"67,8";"Mobil";"52,07";"58,78";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,600";"70,0";"Mobil";"51,83";"58,76";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,700";"70,4";"Mobil";"51,76";"58,74";"1.298";"1.059,45";"außerh. d. Bez.pegels";""
+"153,800";"70,3";"Mobil";"51,74";"58,72";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"153,900";"68,3";"Mobil";"51,90";"58,71";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,000";"67,0";"Mobil";"52,00";"58,70";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,100";"67,1";"Mobil";"51,97";"58,69";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,200";"66,8";"Mobil";"51,98";"58,67";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,300";"66,6";"Mobil";"51,96";"58,66";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,400";"66,9";"Mobil";"51,91";"58,64";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,500";"64,8";"Mobil";"52,07";"58,62";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,600";"66,0";"Mobil";"51,93";"58,60";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,700";"65,5";"Mobil";"51,96";"58,59";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,800";"64,5";"Mobil";"52,01";"58,57";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"154,900";"64,0";"Mobil";"52,02";"58,56";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,000";"67,9";"Mobil";"51,64";"58,54";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,100";"67,3";"Mobil";"51,64";"58,52";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,200";"67,5";"Mobil";"51,57";"58,49";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,300";"67,7";"Mobil";"51,56";"58,47";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,400";"67,0";"Mobil";"51,62";"58,45";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,500";"66,6";"Mobil";"51,56";"58,43";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,600";"66,8";"Mobil";"51,42";"58,40";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,700";"68,9";"Mobil";"51,22";"58,37";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"155,800";"67,3";"Mobil";"51,36";"58,34";"1.294";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Roßlau Industriehafen"
+"155,900";"67,8";"Mobil";"51,29";"58,30";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,000";"71,5";"Mobil";"50,92";"58,25";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,100";"69,6";"Mobil";"51,10";"58,25";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,200";"70,0";"Mobil";"51,06";"58,24";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,300";"68,1";"Mobil";"51,19";"58,18";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,400";"65,9";"Mobil";"51,34";"58,12";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,500";"63,9";"Mobil";"51,50";"58,10";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,600";"62,3";"Mobil";"51,62";"58,08";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,700";"60,2";"Mobil";"51,81";"58,07";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,800";"60,3";"Mobil";"51,80";"58,05";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"156,900";"59,2";"Mobil";"51,87";"58,04";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,000";"59,5";"Mobil";"51,83";"58,02";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,100";"59,1";"Mobil";"51,83";"58,00";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,200";"59,0";"Mobil";"51,79";"57,98";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,300";"59,5";"Mobil";"51,72";"57,96";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,400";"60,3";"Mobil";"51,62";"57,94";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,500";"61,0";"Mobil";"51,56";"57,92";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,600";"62,5";"Mobil";"51,43";"57,90";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,700";"62,6";"Mobil";"51,41";"57,88";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,800";"62,5";"Mobil";"51,40";"57,86";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"157,900";"63,3";"Mobil";"51,30";"57,83";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,000";"62,7";"Mobil";"51,33";"57,80";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,100";"62,1";"Mobil";"51,37";"57,78";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,200";"61,7";"Mobil";"51,39";"57,76";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,300";"62,1";"Mobil";"51,34";"57,75";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,400";"60,4";"Mobil";"51,47";"57,73";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,500";"60,8";"Mobil";"51,43";"57,71";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,600";"61,4";"Mobil";"51,35";"57,69";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,700";"60,8";"Mobil";"51,39";"57,67";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,800";"61,3";"Mobil";"51,33";"57,65";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"158,900";"60,6";"Mobil";"51,38";"57,63";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,000";"61,0";"Mobil";"51,32";"57,61";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,100";"61,8";"Mobil";"51,20";"57,59";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,200";"62,7";"Mobil";"51,09";"57,56";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,300";"61,1";"Mobil";"51,26";"57,55";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,400";"60,7";"Mobil";"51,28";"57,53";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,500";"61,2";"Mobil";"51,22";"57,51";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,600";"62,3";"Mobil";"51,10";"57,49";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,700";"64,6";"Mobil";"50,87";"57,47";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,800";"65,3";"Mobil";"50,79";"57,45";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"159,900";"62,1";"Mobil";"51,05";"57,43";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,000";"59,8";"Mobil";"51,24";"57,40";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,100";"59,4";"Mobil";"51,27";"57,39";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,200";"63,1";"Mobil";"50,93";"57,38";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,300";"66,1";"Mobil";"50,64";"57,37";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,400";"65,9";"Mobil";"50,64";"57,35";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,500";"65,7";"Mobil";"50,65";"57,33";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,600";"65,7";"Mobil";"50,63";"57,31";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,700";"62,5";"Mobil";"50,92";"57,29";"1.294";"1.059,45";"außerh. d. Bez.pegels";""
+"160,800";"61,8";"Mobil";"50,95";"57,27";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"160,900";"62,2";"Mobil";"50,90";"57,25";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,000";"61,9";"Mobil";"50,91";"57,23";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,100";"62,4";"Mobil";"50,85";"57,22";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,200";"61,2";"Mobil";"50,96";"57,20";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,300";"60,3";"Mobil";"51,03";"57,19";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,400";"60,4";"Mobil";"51,00";"57,17";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,500";"62,6";"Mobil";"50,79";"57,16";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,600";"63,6";"Mobil";"50,66";"57,14";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,700";"63,4";"Mobil";"50,68";"57,13";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,800";"64,9";"Mobil";"50,53";"57,11";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"161,900";"61,4";"Mobil";"50,84";"57,10";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,000";"60,8";"Mobil";"50,89";"57,08";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,100";"62,1";"Mobil";"50,74";"57,06";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,200";"61,9";"Mobil";"50,72";"57,04";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,300";"60,0";"Mobil";"50,86";"57,03";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,400";"62,4";"Mobil";"50,60";"57,02";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,500";"63,6";"Mobil";"50,52";"57,00";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,600";"63,2";"Mobil";"50,57";"56,98";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,700";"63,4";"Mobil";"50,54";"56,97";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,800";"67,9";"Mobil";"50,13";"56,95";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"162,900";"67,8";"Mobil";"50,12";"56,93";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,000";"66,9";"Mobil";"50,18";"56,90";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,100";"63,8";"Mobil";"50,42";"56,87";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,200";"62,9";"Mobil";"50,47";"56,84";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,300";"63,0";"Mobil";"50,45";"56,83";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,400";"62,2";"Mobil";"50,53";"56,82";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,500";"61,9";"Mobil";"50,55";"56,80";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,600";"60,9";"Mobil";"50,62";"56,78";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,700";"63,0";"Mobil";"50,40";"56,77";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,800";"64,4";"Mobil";"50,24";"56,75";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"163,900";"63,9";"Mobil";"50,28";"56,73";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,000";"63,9";"Mobil";"50,26";"56,71";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,100";"62,9";"Mobil";"50,36";"56,70";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,200";"64,0";"Mobil";"50,25";"56,68";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,300";"66,4";"Mobil";"50,01";"56,67";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,400";"65,6";"Mobil";"50,07";"56,65";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,500";"65,6";"Mobil";"50,05";"56,63";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,600";"65,8";"Mobil";"50,00";"56,60";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,700";"65,7";"Mobil";"50,00";"56,59";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,800";"66,1";"Mobil";"49,96";"56,57";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"164,900";"64,8";"Mobil";"50,05";"56,56";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,000";"62,6";"Mobil";"50,21";"56,54";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,100";"62,7";"Mobil";"50,18";"56,52";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,200";"63,3";"Mobil";"50,10";"56,49";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,300";"64,2";"Mobil";"50,02";"56,47";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,400";"65,1";"Mobil";"49,93";"56,45";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,500";"63,8";"Mobil";"50,02";"56,44";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,600";"63,6";"Mobil";"50,01";"56,42";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,700";"63,8";"Mobil";"50,00";"56,40";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,800";"65,7";"Mobil";"49,82";"56,37";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"165,900";"67,3";"Mobil";"49,67";"56,35";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,000";"68,6";"Mobil";"49,54";"56,33";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,100";"68,6";"Mobil";"49,53";"56,32";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,200";"69,5";"Mobil";"49,43";"56,30";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,300";"68,2";"Mobil";"49,53";"56,28";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,400";"65,4";"Mobil";"49,76";"56,26";"1.290";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Hornhafen Aken"
+"166,500";"67,5";"Mobil";"49,56";"56,25";"1.290";"1.059,45";"außerh. d. Bez.pegels";"Fähre: Aken -Gierseilfähre"
+"166,600";"65,6";"Mobil";"49,72";"56,23";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,700";"66,9";"Mobil";"49,60";"56,22";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,800";"67,2";"Mobil";"49,57";"56,20";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"166,900";"68,7";"Mobil";"49,40";"56,19";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,000";"69,0";"Mobil";"49,34";"56,17";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,100";"67,8";"Mobil";"49,43";"56,15";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,200";"67,5";"Mobil";"49,45";"56,13";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,300";"69,5";"Mobil";"49,24";"56,11";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,400";"68,1";"Mobil";"49,33";"56,09";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,500";"65,7";"Mobil";"49,55";"56,08";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,600";"63,6";"Mobil";"49,74";"56,06";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,700";"64,9";"Mobil";"49,61";"56,04";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,800";"67,5";"Mobil";"49,36";"56,02";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"167,900";"68,4";"Mobil";"49,23";"56,00";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,000";"67,5";"Mobil";"49,25";"55,98";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,100";"66,6";"Mobil";"49,32";"55,96";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,200";"65,7";"Mobil";"49,38";"55,94";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,300";"63,6";"Mobil";"49,54";"55,93";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,400";"63,0";"Mobil";"49,58";"55,91";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,500";"63,7";"Mobil";"49,51";"55,89";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,600";"65,6";"Mobil";"49,33";"55,87";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,700";"68,1";"Mobil";"49,10";"55,85";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,800";"70,8";"Mobil";"48,85";"55,83";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"168,900";"71,4";"Mobil";"48,79";"55,81";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,000";"67,0";"Mobil";"49,16";"55,79";"1.290";"1.059,45";"außerh. d. Bez.pegels";"Hafen: Verkehrshafen Aken"
+"169,100";"71,1";"Mobil";"48,80";"55,77";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,200";"74,1";"Mobil";"48,52";"55,75";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,300";"74,5";"Mobil";"48,47";"55,74";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,400";"74,5";"Mobil";"48,46";"55,72";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,500";"73,3";"Mobil";"48,54";"55,70";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,600";"72,6";"Mobil";"48,57";"55,68";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,700";"72,7";"Mobil";"48,55";"55,67";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,800";"72,4";"Mobil";"48,57";"55,65";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"169,900";"72,0";"Mobil";"48,59";"55,64";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,000";"70,9";"Mobil";"48,68";"55,62";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,100";"69,2";"Mobil";"48,84";"55,61";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,200";"67,9";"Mobil";"48,95";"55,59";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,300";"67,7";"Mobil";"48,95";"55,57";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,400";"69,7";"Mobil";"48,75";"55,55";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,500";"74,3";"Mobil";"48,31";"55,53";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,600";"70,8";"Mobil";"48,60";"55,51";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,700";"68,4";"Mobil";"48,80";"55,50";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,800";"68,3";"Mobil";"48,79";"55,48";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"170,900";"70,5";"Mobil";"48,56";"55,47";"1.290";"1.059,45";"außerh. d. Bez.pegels";""
+"171,000";"70,4";"Mobil";"48,53";"55,46";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,100";"71,3";"Mobil";"48,44";"55,44";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,200";"69,4";"Mobil";"48,60";"55,42";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,300";"69,0";"Mobil";"48,63";"55,40";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,400";"67,5";"Mobil";"48,74";"55,38";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,500";"69,4";"Mobil";"48,56";"55,37";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,600";"69,7";"Mobil";"48,51";"55,35";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,700";"68,0";"Mobil";"48,63";"55,33";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,800";"67,7";"Mobil";"48,62";"55,30";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"171,900";"70,4";"Mobil";"48,38";"55,29";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,000";"71,0";"Mobil";"48,33";"55,27";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,100";"71,4";"Mobil";"48,27";"55,26";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,200";"70,0";"Mobil";"48,37";"55,24";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,300";"69,0";"Mobil";"48,43";"55,22";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,400";"67,2";"Mobil";"48,56";"55,19";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,500";"66,1";"Mobil";"48,61";"55,17";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,600";"65,5";"Mobil";"48,62";"55,15";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,700";"67,6";"Mobil";"48,44";"55,13";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,800";"68,2";"Mobil";"48,38";"55,11";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"172,900";"66,3";"Mobil";"48,47";"55,09";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,000";"64,8";"Mobil";"48,52";"55,07";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,100";"65,9";"Mobil";"48,45";"55,05";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,200";"67,8";"Mobil";"48,30";"55,02";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,300";"68,4";"Mobil";"48,26";"55,00";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,400";"67,4";"Mobil";"48,36";"54,97";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,500";"68,7";"Mobil";"48,23";"54,95";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,600";"68,5";"Mobil";"48,24";"54,93";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,700";"67,1";"Mobil";"48,29";"54,89";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"173,800";"67,5";"Mobil";"48,20";"54,84";"1.288";"1.059,45";"außerh. d. Bez.pegels";"Geschiebemessstelle: Aken"
+"173,900";"68,9";"Mobil";"48,08";"54,83";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,000";"69,7";"Mobil";"48,00";"54,82";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,100";"68,6";"Mobil";"48,09";"54,81";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,200";"67,7";"Mobil";"48,16";"54,80";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,300";"71,6";"Mobil";"47,80";"54,79";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,400";"71,4";"Mobil";"47,80";"54,77";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,500";"72,2";"Mobil";"47,68";"54,75";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,600";"69,9";"Mobil";"47,83";"54,72";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,700";"67,4";"Mobil";"48,06";"54,71";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,800";"66,8";"Mobil";"48,11";"54,69";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"174,900";"66,9";"Mobil";"48,07";"54,67";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,000";"68,4";"Mobil";"47,90";"54,65";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,100";"69,4";"Mobil";"47,80";"54,64";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,200";"69,2";"Mobil";"47,81";"54,62";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,300";"68,3";"Mobil";"47,86";"54,60";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,400";"69,3";"Mobil";"47,73";"54,57";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,500";"70,9";"Mobil";"47,58";"54,56";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,600";"75,0";"Mobil";"47,20";"54,55";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,700";"71,5";"Mobil";"47,47";"54,53";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,800";"70,3";"Mobil";"47,54";"54,51";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"175,900";"70,6";"Mobil";"47,52";"54,50";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,000";"68,7";"Mobil";"47,69";"54,48";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,100";"68,3";"Mobil";"47,69";"54,46";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,200";"68,8";"Mobil";"47,61";"54,43";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,300";"70,3";"Mobil";"47,46";"54,42";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,400";"70,4";"Mobil";"47,44";"54,40";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,500";"68,4";"Mobil";"47,58";"54,38";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,600";"67,9";"Mobil";"47,59";"54,35";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,700";"66,8";"Mobil";"47,65";"54,34";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,800";"66,1";"Mobil";"47,66";"54,32";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"176,900";"65,5";"Mobil";"47,67";"54,30";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,000";"70,8";"Mobil";"47,14";"54,27";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,100";"69,7";"Mobil";"47,24";"54,26";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,200";"68,2";"Mobil";"47,36";"54,24";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,300";"67,8";"Mobil";"47,39";"54,22";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,400";"71,5";"Mobil";"47,04";"54,19";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,500";"76,7";"Mobil";"46,57";"54,16";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,600";"76,0";"Mobil";"46,61";"54,13";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,700";"73,8";"Mobil";"46,75";"54,10";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,800";"69,6";"Mobil";"47,07";"54,06";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"177,900";"67,3";"Mobil";"47,25";"54,04";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,000";"66,4";"Mobil";"47,32";"54,02";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,100";"66,7";"Mobil";"47,31";"54,01";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,200";"65,8";"Mobil";"47,40";"53,99";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,300";"66,9";"Mobil";"47,24";"53,97";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,400";"66,3";"Mobil";"47,21";"53,95";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,500";"64,8";"Mobil";"47,33";"53,93";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,600";"65,4";"Mobil";"47,26";"53,91";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,700";"68,1";"Mobil";"47,03";"53,89";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"178,800";"69,8";"Mobil";"46,88";"53,87";"1.288";"1.059,45";"außerh. d. Bez.pegels";"Fähre: Breitenhagen -Gierseilfähre"
+"178,900";"70,8";"Mobil";"46,75";"53,86";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,000";"71,5";"Mobil";"46,66";"53,84";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,100";"68,9";"Mobil";"46,86";"53,80";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,200";"68,1";"Mobil";"46,89";"53,76";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,300";"66,2";"Mobil";"47,06";"53,74";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,400";"67,0";"Mobil";"46,99";"53,72";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,500";"68,0";"Mobil";"46,88";"53,71";"1.288";"1.059,45";"außerh. d. Bez.pegels";""
+"179,600";"67,3";"Mobil";"46,92";"53,69";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"179,700";"68,3";"Mobil";"46,82";"53,67";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"179,800";"67,0";"Mobil";"46,91";"53,64";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"179,900";"66,9";"Mobil";"46,89";"53,63";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,000";"66,8";"Mobil";"46,87";"53,61";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,100";"67,8";"Mobil";"46,75";"53,59";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,200";"67,0";"Mobil";"46,79";"53,57";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,300";"66,6";"Mobil";"46,80";"53,55";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,400";"67,9";"Mobil";"46,67";"53,52";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,500";"68,5";"Mobil";"46,59";"53,50";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,600";"69,1";"Mobil";"46,52";"53,48";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,700";"69,4";"Mobil";"46,48";"53,46";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,800";"69,4";"Mobil";"46,47";"53,43";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"180,900";"69,3";"Mobil";"46,46";"53,41";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,000";"68,6";"Mobil";"46,51";"53,39";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,100";"68,0";"Mobil";"46,54";"53,37";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,200";"68,1";"Mobil";"46,50";"53,35";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,300";"67,6";"Mobil";"46,55";"53,33";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,400";"68,4";"Mobil";"46,46";"53,30";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,500";"67,0";"Mobil";"46,56";"53,29";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,600";"66,2";"Mobil";"46,59";"53,27";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,800";"68,0";"Mobil";"46,43";"53,22";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"181,900";"68,8";"Mobil";"46,34";"53,21";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"182,000";"69,9";"Mobil";"46,22";"53,19";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"182,100";"69,2";"Mobil";"46,27";"53,18";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+"182,200";"70,2";"Starr";"46,29";"53,16";"1.286";"1.059,45";"außerh. d. Bez.pegels";""
+""