Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelFetcher.java @ 8964:45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
author | gernotbelger |
---|---|
date | Thu, 29 Mar 2018 15:48:17 +0200 |
parents | 708f210ff242 |
children | 392745cccede |
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 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
81 if (d4eArtifact instanceof StaticWKmsArtifact) { |
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 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
84 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
85 if (d4eArtifact instanceof StaticWQKmsArtifact) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
86 return fetchStaticWQKmsArtifactWaterlevel((StaticWQKmsArtifact) d4eArtifact, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
87 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
88 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
89 if (d4eArtifact instanceof WINFOArtifact) |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
90 return fetchWINFOArtifactWaterlevel(context, (WINFOArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
91 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
92 if (d4eArtifact instanceof FixationArtifact) |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
93 return fetchFixationArtifactWaterlevel(context, (FixationArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
94 |
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
|
95 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
|
96 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
97 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
98 |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
99 // 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
|
100 // 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
|
101 // artifact-serialization |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
102 |
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
|
103 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
|
104 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
105 log.debug("WDifferencesState obtain data from StaticWKms"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
106 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
107 final WKms wkms = staticWKms.getWKms(idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
108 |
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
|
109 if (wkms != null) { |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
110 final int year = fetchStaticWKmsYear(staticWKms); |
8883 | 111 return new WaterlevelData(wkms, year); |
112 } | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
113 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
114 log.error("No WKms from Static artifact for this range."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
115 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
116 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
117 |
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
|
118 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
|
119 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
120 log.debug("WDifferencesState obtain data from StaticWQKms"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
121 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
122 final WQKms wkms = staticWKms.getWQKms(from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
123 |
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
|
124 if (wkms != null) { |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
125 final int year = fetchStaticWKmsYear(staticWKms); |
8883 | 126 return new WaterlevelData(wkms, year); |
127 } | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
128 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
129 log.error("No WKms from Static artifact for this range."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
130 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
131 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
132 |
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
|
133 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
|
134 final double to) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
135 log.debug("Get WKms from WINFOArtifact"); |
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 final WKms[] wkms = (WKms[]) flys.getWaterlevelData(context).getData(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
138 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
139 if (wkms == null || wkms.length == 0) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
140 log.warn("no waterlevels in artifact"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
141 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
142 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
143 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
144 if (wkms.length < idx + 1) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
145 log.warn("Not enough waterlevels in artifact."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
146 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
147 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
148 |
8883 | 149 // REAMRK: W_INFO results does not know any 'year' |
150 final int year = -1; | |
151 return new WaterlevelData(wkms[idx], year).filterByRange(from, to); | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
152 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
153 |
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
|
154 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
|
155 final double to) { |
8881
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 log.debug("Get WKms from FixationArtifact."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
158 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
159 final CalculationResult r = (CalculationResult) fixation.compute(context, ComputeType.ADVANCE, false); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
160 final FixRealizingResult frR = (FixRealizingResult) r.getData(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
161 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
162 // Get W/Q input per gauge for this case. |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
163 final FixRealizingAccess fixAccess = new FixRealizingAccess(fixation); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
164 final List<Segment> segments = fixAccess.getSegments(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
165 final boolean isFixRealize = (segments != null && !segments.isEmpty()); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
166 |
8883 | 167 /* ugly but necessary to keep this logic at least a bit inside the FixRealizing stuff */ |
168 final FixRealizingCalculationExtended calculation = new FixRealizingCalculationExtended(fixAccess); | |
169 final int year = calculation.determineMeanYear(); | |
170 | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
171 // REMARK: same logic as in WaterlevelExporter |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
172 final boolean showAllGauges = isFixRealize; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
173 |
8883 | 174 return new WaterlevelData(frR.getWQKms()[idx], year, showAllGauges).filterByRange(from, to); |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
175 } |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
176 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
177 /** |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
178 * Fetches the 'year' for a staticXXX-artifact. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
179 * 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
|
180 * 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
|
181 */ |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
182 private int fetchStaticWKmsYear(final D4EArtifact staticWKms) { |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
183 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
184 final int colPos = Integer.parseInt(staticWKms.getDataAsString("col_pos")); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
185 final int wstId = Integer.parseInt(staticWKms.getDataAsString("wst_id")); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
186 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
187 final WstColumn wstColumn = WstColumnFactory.getWstColumn(wstId, colPos); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
188 final TimeInterval timeInterval = wstColumn.getTimeInterval(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
189 if (timeInterval == null) |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
190 return -1; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
191 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
192 final Date startTime = timeInterval.getStartTime(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
193 if (startTime == null) |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
194 return -1; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
195 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
196 // 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
|
197 // 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
|
198 // 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
|
199 // no change anything regarding the year. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
200 final Calendar cal = Calendar.getInstance(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
201 cal.setTime(startTime); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
202 return cal.get(Calendar.YEAR); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
203 } |
8883 | 204 } |