annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java @ 9362:392745cccede

Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
author gernotbelger
date Wed, 01 Aug 2018 18:40:57 +0200
parents 45f1ad66560e
children ba1e2e8f05d1
rev   line source
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
2 * Software engineering by
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
5 *
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
9 */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.states;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
11
8964
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
12 import org.apache.commons.lang.math.DoubleRange;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
13 import org.dive4elements.river.artifacts.model.WKms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
14
8964
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
15 import gnu.trove.TDoubleArrayList;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
16
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
17 /**
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
18 * Represents a waterlevel fetched with the {@link WaterlevelFetcher}.
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
19 *
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
20 * @author Gernot Belger
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
21 */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
22 public class WaterlevelData {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
23 private final WKms wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
24
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
25 private final String name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
26
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
27 private final int year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
28
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
29 /** If <code>true</code>, tabular export will show gauges for every station, else only for the first gauge */
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
30 private final boolean showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
31
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
32 private boolean showRefGauges;
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
33
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
34 public WaterlevelData(final WKms wkms, final int year, final boolean showAllGauges, boolean showRefGauges) {
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
35 this(wkms.getName(), wkms, year, showAllGauges, showRefGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
36 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
37
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
38 private WaterlevelData(final String name, final WKms wkms, final int year, final boolean showAllGauges, boolean showRefGauges) {
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
39 this.name = name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
40 this.wkms = wkms;
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
41 this.year = year;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
42 this.showAllGauges = showAllGauges;
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
43 this.showRefGauges = showRefGauges;
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
44 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
45
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
46 public WaterlevelData filterByRange(final double from, final double to) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
47 if (Double.isNaN(from) || Double.isNaN(to)) {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
48 return this;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
49 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
50
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
51 final WKms filteredWkms = this.wkms.filteredKms(from, to);
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
52 return new WaterlevelData(this.name, filteredWkms, this.year, this.showAllGauges ,showRefGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
53 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
54
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
55 public WaterlevelData withName(final String nameToSet) {
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
56 return new WaterlevelData(nameToSet, this.wkms, this.year, this.showAllGauges, showRefGauges);
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
57 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
58
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
59 public String getName() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
60 return this.name;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
61 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
62
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
63 public WKms getWkms() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
64 return this.wkms;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
65 }
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
66
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
67 public boolean isShowAllGauges() {
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
68 return this.showAllGauges;
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
69 }
9362
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
70
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
71 public boolean isShowRefGauges() {
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
72 return this.showRefGauges;
392745cccede Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents: 8964
diff changeset
73 }
8881
6b93a2498e06 Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff changeset
74
8883
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
75 public int getYear() {
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
76 return this.year;
a536e1aacf0f Further work on SINFO-FlowDepth
gernotbelger
parents: 8881
diff changeset
77 }
8964
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
78
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
79 public boolean covers(final DoubleRange simulationRange) {
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
80
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
81 final TDoubleArrayList allKms = this.wkms.allKms();
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
82
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
83 if (allKms.isEmpty())
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
84 return false;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
85
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
86 final double min = allKms.min();
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
87 if (min > simulationRange.getMaximumDouble())
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
88 return false;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
89
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
90 final double max = allKms.max();
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
91 if (max < simulationRange.getMinimumDouble())
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
92 return false;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
93
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
94 return true;
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
95 }
45f1ad66560e Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents: 8934
diff changeset
96 }

http://dive4elements.wald.intevation.org