Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelFetcher.java @ 9372:e014eca211a3
distance_only_part_validation bugfix
author | gernotbelger |
---|---|
date | Thu, 02 Aug 2018 19:20:38 +0200 |
parents | 392745cccede |
children | 3f49835a00c3 |
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 |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
12 import java.util.Calendar; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
13 import java.util.Date; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
14 import java.util.List; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
15 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
16 import org.apache.commons.lang.math.DoubleRange; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
17 import org.apache.log4j.Logger; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
18 import org.dive4elements.artifacts.CallContext; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
19 import org.dive4elements.river.artifacts.D4EArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
20 import org.dive4elements.river.artifacts.FixationArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
21 import org.dive4elements.river.artifacts.StaticWKmsArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
22 import org.dive4elements.river.artifacts.StaticWQKmsArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
23 import org.dive4elements.river.artifacts.WINFOArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
24 import org.dive4elements.river.artifacts.access.FixRealizingAccess; |
8946
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
25 import org.dive4elements.river.artifacts.model.Calculation; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
26 import org.dive4elements.river.artifacts.model.CalculationResult; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
27 import org.dive4elements.river.artifacts.model.Segment; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
28 import org.dive4elements.river.artifacts.model.WKms; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
29 import org.dive4elements.river.artifacts.model.WQKms; |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
30 import org.dive4elements.river.artifacts.model.WstColumnFactory; |
8883 | 31 import org.dive4elements.river.artifacts.model.fixings.FixRealizingCalculationExtended; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
32 import org.dive4elements.river.artifacts.model.fixings.FixRealizingResult; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
33 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
34 import org.dive4elements.river.model.TimeInterval; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
35 import org.dive4elements.river.model.WstColumn; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
36 import org.dive4elements.river.utils.RiverUtils; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
37 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
38 /** |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
39 * Helper class that accesses existing waterlevels (in most cases) from the data-cage. |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
40 * This is mainly a refaktoring of org.dive4elements.river.artifacts.states.WDifferencesState.getWKms(String, |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
41 * CallContext, double, double), adding more infos to the fetched water levels. |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
42 * |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
43 * @author Gernot Belger |
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 public class WaterlevelFetcher { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
46 private static Logger log = Logger.getLogger(WaterlevelFetcher.class); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
47 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
48 /** |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
49 * @param simulationRange |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
50 * This range is used to check if the found waterlevel covers it. It is NOT used to reduce the fetched data, |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
51 * because in case of waterlevels we always need to full set in order to determine the relevant gauge. |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
52 */ |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
53 public WaterlevelData findWaterlevel(final CallContext context, final String mingle, final DoubleRange simulationRange, final Calculation problems) { |
8881
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 final String[] def = mingle.split(";"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
56 final String uuid = def[0]; |
8947 | 57 // final String factory = def[1]; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
58 final int idx = Integer.parseInt(def[2]); |
8947 | 59 final String name = def[3]; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
60 final D4EArtifact d4eArtifact = RiverUtils.getArtifact(uuid, context); |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
61 if (d4eArtifact == null) |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
62 return null; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
63 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
64 final WaterlevelData data = fetchWaterlevelFromArtifact(context, d4eArtifact, idx, Double.NaN, Double.NaN); |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
65 if (data == null) { |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
66 problems.addProblem("waterlevelfetcher.missing", mingle); |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
67 return null; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
68 } |
8946
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
69 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
70 if (!data.covers(simulationRange)) { |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
71 problems.addProblem("waterlevelfetcher.empty", data.getName()); |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
72 return null; |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
73 } |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
74 |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
75 return data.withName(name); |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
76 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
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:
8962
diff
changeset
|
78 private WaterlevelData fetchWaterlevelFromArtifact(final CallContext context, final D4EArtifact d4eArtifact, final int idx, final double from, |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
79 final double to) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
80 |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
81 if (d4eArtifact instanceof StaticWKmsArtifact) |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
82 return fetchStaticWKmsArtifactWaterlevel((StaticWKmsArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
83 |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
84 if (d4eArtifact instanceof StaticWQKmsArtifact) |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
85 return fetchStaticWQKmsArtifactWaterlevel((StaticWQKmsArtifact) d4eArtifact, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
86 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
87 if (d4eArtifact instanceof WINFOArtifact) |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
88 return fetchWINFOArtifactWaterlevel(context, (WINFOArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
89 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
90 if (d4eArtifact instanceof FixationArtifact) |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
91 return fetchFixationArtifactWaterlevel(context, (FixationArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
92 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
93 log.warn(String.format("Get Waterlevel from %s not implemented!", d4eArtifact.getClass().getSimpleName())); |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
94 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
95 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
96 |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
97 // REMARK: instead of several helper methods here this would be a good place for abstraction, in order to push |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
98 // this logic back to the corresponding artifacts. However this will most certainly break existing |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
99 // artifact-serialization |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
100 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
101 private WaterlevelData fetchStaticWKmsArtifactWaterlevel(final StaticWKmsArtifact staticWKms, final int idx, final double from, final double to) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
102 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
103 log.debug("WDifferencesState obtain data from StaticWKms"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
104 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
105 final WKms wkms = staticWKms.getWKms(idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
106 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
107 if (wkms != null) { |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
108 final int year = fetchStaticWKmsYear(staticWKms); |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
109 return new WaterlevelData(wkms, year, false, false); |
8883 | 110 } |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
111 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
112 log.error("No WKms from Static artifact for this range."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
113 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
114 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
115 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
116 private WaterlevelData fetchStaticWQKmsArtifactWaterlevel(final StaticWQKmsArtifact staticWKms, final double from, final double to) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
117 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
118 log.debug("WDifferencesState obtain data from StaticWQKms"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
119 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
120 final WQKms wkms = staticWKms.getWQKms(from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
121 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
122 if (wkms != null) { |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
123 final int year = fetchStaticWKmsYear(staticWKms); |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
124 return new WaterlevelData(wkms, year, false, false); |
8883 | 125 } |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
126 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
127 log.error("No WKms from Static artifact for this range."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
128 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
129 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
130 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
131 private WaterlevelData fetchWINFOArtifactWaterlevel(final CallContext context, final WINFOArtifact flys, final int idx, final double from, |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
132 final double to) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
133 log.debug("Get WKms from WINFOArtifact"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
134 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
135 final WKms[] wkms = (WKms[]) flys.getWaterlevelData(context).getData(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
136 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
137 if (wkms == null || wkms.length == 0) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
138 log.warn("no waterlevels in artifact"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
139 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
140 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
141 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
142 if (wkms.length < idx + 1) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
143 log.warn("Not enough waterlevels in artifact."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
144 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
145 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
146 |
8883 | 147 // REAMRK: W_INFO results does not know any 'year' |
148 final int year = -1; | |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
149 return new WaterlevelData(wkms[idx], year, false, true).filterByRange(from, to); |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
150 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
151 |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
152 private WaterlevelData fetchFixationArtifactWaterlevel(final CallContext context, final FixationArtifact fixation, final int idx, final double from, |
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8962
diff
changeset
|
153 final double to) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
154 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
155 log.debug("Get WKms from FixationArtifact."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
156 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
157 final CalculationResult r = (CalculationResult) fixation.compute(context, ComputeType.ADVANCE, false); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
158 final FixRealizingResult frR = (FixRealizingResult) r.getData(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
159 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
160 // Get W/Q input per gauge for this case. |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
161 final FixRealizingAccess fixAccess = new FixRealizingAccess(fixation); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
162 final List<Segment> segments = fixAccess.getSegments(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
163 final boolean isFixRealize = (segments != null && !segments.isEmpty()); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
164 |
8883 | 165 /* ugly but necessary to keep this logic at least a bit inside the FixRealizing stuff */ |
166 final FixRealizingCalculationExtended calculation = new FixRealizingCalculationExtended(fixAccess); | |
167 final int year = calculation.determineMeanYear(); | |
168 | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
169 // REMARK: same logic as in WaterlevelExporter |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
170 final boolean showAllGauges = isFixRealize; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
171 |
9362
392745cccede
Fixed: waterlevels from database should not get the "Bezugspegel" column in the result output.
gernotbelger
parents:
8964
diff
changeset
|
172 return new WaterlevelData(frR.getWQKms()[idx], year, showAllGauges, true).filterByRange(from, to); |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
173 } |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
174 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
175 /** |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
176 * Fetches the 'year' for a staticXXX-artifact. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
177 * REMARK: actually this should happen inside the staticWKms artifact and eventually in the WKmsFactory, but the code |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
178 * there is already awful and it will also break the old artifact-serialization... |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
179 */ |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
180 private int fetchStaticWKmsYear(final D4EArtifact staticWKms) { |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
181 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
182 final int colPos = Integer.parseInt(staticWKms.getDataAsString("col_pos")); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
183 final int wstId = Integer.parseInt(staticWKms.getDataAsString("wst_id")); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
184 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
185 final WstColumn wstColumn = WstColumnFactory.getWstColumn(wstId, colPos); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
186 final TimeInterval timeInterval = wstColumn.getTimeInterval(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
187 if (timeInterval == null) |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
188 return -1; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
189 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
190 final Date startTime = timeInterval.getStartTime(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
191 if (startTime == null) |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
192 return -1; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
193 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
194 // REMARK: the times are stored without timezone in the DB, so it is unclear what hibernate makes of it. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
195 // We simply use the default timezone here and hope we never get problems... |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
196 // Actually we always have 12:00 as time in the db data, so a smal timeshift due to winter/sommertime or UTC/GMT+1 will |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
197 // no change anything regarding the year. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
198 final Calendar cal = Calendar.getInstance(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
199 cal.setTime(startTime); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
200 return cal.get(Calendar.YEAR); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
201 } |
8883 | 202 } |