Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelFetcher.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 | 392745cccede |
children | 93389a05119e |
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) |
9425
3f49835a00c3
Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents:
9362
diff
changeset
|
82 return fetchStaticWKmsArtifactWaterlevel((StaticWKmsArtifact) d4eArtifact, from, to); |
8881
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 |
9425
3f49835a00c3
Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents:
9362
diff
changeset
|
101 private WaterlevelData fetchStaticWKmsArtifactWaterlevel(final StaticWKmsArtifact staticWKms, 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 |
9425
3f49835a00c3
Extended CrossSectionFacet so it may fetch different data from within the artifact result.
gernotbelger
parents:
9362
diff
changeset
|
105 final WKms wkms = staticWKms.getWKms(from, to); |
8881
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 } |