Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelData.java @ 9425:3f49835a00c3
Extended CrossSectionFacet so it may fetch different data from within the artifact result.
Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author | gernotbelger |
---|---|
date | Fri, 17 Aug 2018 15:31:02 +0200 |
parents | ba1e2e8f05d1 |
children |
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 | 27 private final int year; |
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 |
9365
ba1e2e8f05d1
sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents:
9362
diff
changeset
|
32 private final boolean showRefGauges; |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
33 |
9365
ba1e2e8f05d1
sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents:
9362
diff
changeset
|
34 public WaterlevelData(final WKms wkms, final int year, final boolean showAllGauges, final boolean showRefGauges) { |
9362
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 |
9365
ba1e2e8f05d1
sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents:
9362
diff
changeset
|
38 private WaterlevelData(final String name, final WKms wkms, final int year, final boolean showAllGauges, final 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 | 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); |
9365
ba1e2e8f05d1
sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents:
9362
diff
changeset
|
52 return new WaterlevelData(this.name, filteredWkms, this.year, this.showAllGauges, this.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) { |
9365
ba1e2e8f05d1
sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents:
9362
diff
changeset
|
56 return new WaterlevelData(nameToSet, this.wkms, this.year, this.showAllGauges, this.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 } |
9365
ba1e2e8f05d1
sinfo.flowdepth Results.isShowRefGauge==false->spalte ausblenden; result.isShowRefGauge==false&&results.isShowRefGauge==true->result.refGauge=""
gernotbelger
parents:
9362
diff
changeset
|
70 |
9362
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 | 75 public int getYear() { |
76 return this.year; | |
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 } |