annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/SalixLineCalculationRegionalResult.java @ 9316:72b3270e1568

U-Info salix line with regional and supraregional scenario calculation and chart display
author mschaefer
date Thu, 26 Jul 2018 17:28:32 +0200
parents 9a9f076d5716
children c36befc9011c
rev   line source
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
2 * Software engineering by
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
5 *
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
9 */
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.uinfo.salix;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
11
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
12 import java.text.NumberFormat;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
13 import java.util.Collection;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
14 import java.util.List;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
15
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.common.ExportContextCSV;
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
17 import org.dive4elements.river.artifacts.common.GeneralResultType;
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.common.IExportContext;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.common.ResultRow;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.uinfo.commons.UInfoResultType;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
22
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
23 import gnu.trove.TDoubleArrayList;
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
24
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
25 /**
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
26 * @author Domenico Nardi Tironi
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
27 */
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
28 final class SalixLineCalculationRegionalResult extends SalixLineCalculationNoScenarioResult {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
29
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
30 private static final long serialVersionUID = 1L;
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
31
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
32 private final String[] scenarioLabels;
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
33
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
34 public SalixLineCalculationRegionalResult(final String label, final String[] scenarioLabels, final Collection<ResultRow> rows) {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
35 super(label, rows);
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
36 this.scenarioLabels = scenarioLabels;
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
37 }
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
38
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
39 public final int getScenarioCount() {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
40 return (this.scenarioLabels != null) ? this.scenarioLabels.length : 0;
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
41 }
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
42
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
43 public String getScenarioLabel(final int i) {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
44 if ((this.scenarioLabels != null) && (i < this.scenarioLabels.length))
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
45 return this.scenarioLabels[i];
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
46 else
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
47 return "";
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
48 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
49
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
50 @Override
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
51 public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
52
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
53 final Collection<String> header = super.writeNoScenarioHeader(exportContextCSV);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
54
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
55 for (int i = 1; i <= getScenarioCount(); i++) {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
56 header.add(exportContextCSV.msg(SalixScenario.getScenarioValueHeader()));
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
57 header.add(exportContextCSV.msg(SalixScenario.getDwsplHeader()));
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
58 }
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
59 exportContextCSV.writeCSVLine(header.toArray(new String[header.size()]));
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
60 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
61
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
62 @Override
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
63 protected void writeCSVResultMetadata(final ExportContextCSV exportContextCSV) {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
64 writeRegionalEffectsCSVMetadata(exportContextCSV);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
65 exportContextCSV.writeBlankLine();
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
66
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
67 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
68
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
69 @Override
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
70 protected String[] formatRow(final IExportContext context, final ResultRow row) {
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
71
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
72 final Collection<String> lines = super.getNoScenarioFormat(row, context);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
73
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
74 if (context instanceof ExportContextCSV) { // enum gespart - pdf-export hat ja nur die drei spalten
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
75 final NumberFormat formatter = ((ExportContextCSV) context).getSalixScenFormatter();
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
76 final List<SalixScenario> scenList = (List<SalixScenario>) row.getValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
77
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
78 for (final SalixScenario scenario : scenList) {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
79 // scenario unused; index wurde ja verworfen, stattdessen 2 spalten
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
80 lines.add(scenario.getSalixValueFormatted(formatter));
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
81 lines.add(scenario.getDwsplFormatted());
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
82 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
83 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
84 return lines.toArray(new String[lines.size()]);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
85 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
86
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
87 private void writeRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
88 final String main = "uinfo.export.csv.meta.header.salix.regional";
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
89 // "##Regional wirkende Eingriffe"
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
90 exportContextCSV.writeCSVMetaEntry(main);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
91 writeRegionalCommonCSVMeta(exportContextCSV);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
92 }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
93
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
94 /**
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
95 * Gets a longitudinal section of W, Q, or flood duration of one of the waterlevels
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
96 */
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
97 public final double[][] getScenarioPoints(final int dataIndex) {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
98
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
99 final Collection<ResultRow> rows = getRows();
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
100
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
101 final TDoubleArrayList xPoints = new TDoubleArrayList(rows.size());
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
102 final TDoubleArrayList yPoints = new TDoubleArrayList(rows.size());
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
103
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
104 for (final ResultRow row : rows) {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
105
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
106 final double station = row.getDoubleValue(GeneralResultType.station);
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
107
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
108 final List<SalixScenario> scenarios = (List<SalixScenario>) row.getValue(UInfoResultType.customMultiRowColSalixRegionalValue_Dwspl);
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
109 if (dataIndex <= scenarios.size() - 1) {
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
110 final double value = scenarios.get(dataIndex).getSalixValue();
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
111 xPoints.add(station);
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
112 yPoints.add(value);
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
113 }
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
114 }
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
115
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
116 return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() };
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
117 }
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9309
diff changeset
118
9243
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
119 // TODO: move to SupraRegionalEffectsResult-Class; remove here
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
120 // private void writeExtendedRegionalEffectsCSVMetadata(final ExportContextCSV exportContextCSV) {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
121 // final String main = "uinfo.export.csv.meta.header.salix.regionalextended";
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
122 // // "##Überregional wirkende Eingriffe"
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
123 // exportContextCSV.writeCSVMetaEntry(main);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
124 //
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
125 // writeRegionalCommonCSVMeta(exportContextCSV);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
126 // }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
127
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
128 // TODO: move to historical class and delete here
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
129 // private void writeHistoricalViewCSVMetadata(final ExportContextCSV exportContextCSV) {
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
130 // final String main = "uinfo.export.csv.meta.header.salix.historical";
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
131 // // "##Historische Betrachtung"
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
132 // exportContextCSV.writeCSVMetaEntry(main);
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
133 //
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
134 // final String mainSub = "uinfo.export.csv.meta.header.salix";
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
135 // // "# Szenariotyp: "
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
136 // exportContextCSV.writeCSVMetaEntry(mainSub + ".szenariotyp");
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
137 // // "# Teilabschnitt: "
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
138 // exportContextCSV.writeCSVMetaEntry(mainSub + ".teilabschnitt");
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
139 //
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
140 // // "# Art des Zeitraums: "
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
141 // exportContextCSV.writeCSVMetaEntry(main + ".zeitart");
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
142 // // "# Historischer Zeitpunkt: "
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
143 // exportContextCSV.writeCSVMetaEntry(main + ".zeitpunkt");
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
144 // }
da0bdbcd6f09 salix.supraRegional+Regional results
gernotbelger
parents:
diff changeset
145 }

http://dive4elements.wald.intevation.org