Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/states/WaterlevelFetcher.java @ 8962:708f210ff242
Fetching year informations for waterlevels used in sinfo
author | gernotbelger |
---|---|
date | Wed, 28 Mar 2018 17:03:11 +0200 |
parents | 86650594f051 |
children | 45f1ad66560e |
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 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
16 import org.apache.log4j.Logger; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
17 import org.dive4elements.artifacts.CallContext; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
18 import org.dive4elements.river.artifacts.D4EArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
19 import org.dive4elements.river.artifacts.FixationArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
20 import org.dive4elements.river.artifacts.StaticWKmsArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
21 import org.dive4elements.river.artifacts.StaticWQKmsArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
22 import org.dive4elements.river.artifacts.WINFOArtifact; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
23 import org.dive4elements.river.artifacts.access.FixRealizingAccess; |
8946
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
24 import org.dive4elements.river.artifacts.model.Calculation; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
25 import org.dive4elements.river.artifacts.model.CalculationResult; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
26 import org.dive4elements.river.artifacts.model.Segment; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
27 import org.dive4elements.river.artifacts.model.WKms; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
28 import org.dive4elements.river.artifacts.model.WQKms; |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
29 import org.dive4elements.river.artifacts.model.WstColumnFactory; |
8883 | 30 import org.dive4elements.river.artifacts.model.fixings.FixRealizingCalculationExtended; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
31 import org.dive4elements.river.artifacts.model.fixings.FixRealizingResult; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
32 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
33 import org.dive4elements.river.model.TimeInterval; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
34 import org.dive4elements.river.model.WstColumn; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
35 import org.dive4elements.river.utils.RiverUtils; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
36 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
37 /** |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
38 * 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
|
39 * 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
|
40 * CallContext, double, double), adding more infos to the fetched water levels. |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
41 * |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
42 * @author Gernot Belger |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
43 */ |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
44 public class WaterlevelFetcher { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
45 private static Logger log = Logger.getLogger(WaterlevelFetcher.class); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
46 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
47 public WaterlevelData findWaterlevel(final CallContext context, final String mingle, final double from, |
8946
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
48 final double to, final Calculation problems) { |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
49 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
50 final String[] def = mingle.split(";"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
51 final String uuid = def[0]; |
8947 | 52 // final String factory = def[1]; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
53 final int idx = Integer.parseInt(def[2]); |
8947 | 54 final String name = def[3]; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
55 final D4EArtifact d4eArtifact = RiverUtils.getArtifact(uuid, context); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
56 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
57 final WaterlevelData data = fetchWaterlevelFromArtifact(context, d4eArtifact, idx, from, to); |
8946
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
58 if (data != null) |
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
59 return data.withName(name); |
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
60 |
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
61 problems.addProblem("waterlevelfetcher.missing'", mingle); |
5d5d482da3e9
Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents:
8883
diff
changeset
|
62 return null; |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
63 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
64 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
65 private WaterlevelData fetchWaterlevelFromArtifact(final CallContext context, final D4EArtifact d4eArtifact, |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
66 final int idx, final double from, final double to) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
67 if (d4eArtifact == null) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
68 log.warn("One of the artifacts (1) for diff calculation " + "could not be loaded"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
69 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
70 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
71 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
72 if (d4eArtifact instanceof StaticWKmsArtifact) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
73 return fetchStaticWKmsArtifactWaterlevel((StaticWKmsArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
74 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
75 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
76 if (d4eArtifact instanceof StaticWQKmsArtifact) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
77 return fetchStaticWQKmsArtifactWaterlevel((StaticWQKmsArtifact) d4eArtifact, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
78 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
79 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
80 if (d4eArtifact instanceof WINFOArtifact) |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
81 return fetchWINFOArtifactWaterlevel(context, (WINFOArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
82 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
83 if (d4eArtifact instanceof FixationArtifact) |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
84 return fetchFixationArtifactWaterlevel(context, (FixationArtifact) d4eArtifact, idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
85 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
86 log.warn(String.format("Get Waterlevel from %s not implemented! )", d4eArtifact.getClass().getSimpleName())); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
87 return null; |
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 |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
90 // 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
|
91 // 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
|
92 // artifact-serialization |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
93 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
94 private WaterlevelData fetchStaticWKmsArtifactWaterlevel(final StaticWKmsArtifact staticWKms, final int idx, |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
95 final double from, final double to) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
96 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
97 log.debug("WDifferencesState obtain data from StaticWKms"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
98 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
99 final WKms wkms = staticWKms.getWKms(idx, from, to); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
100 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
101 if (wkms != null) |
8883 | 102 { |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
103 final int year = fetchStaticWKmsYear(staticWKms); |
8883 | 104 return new WaterlevelData(wkms, year); |
105 } | |
8881
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 log.error("No WKms from Static artifact for this range."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
108 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
109 } |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
110 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
111 private WaterlevelData fetchStaticWQKmsArtifactWaterlevel(final StaticWQKmsArtifact staticWKms, final double from, |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
112 final double to) { |
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.debug("WDifferencesState obtain data from StaticWQKms"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
115 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
116 final WQKms wkms = staticWKms.getWQKms(from, to); |
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 if (wkms != null) |
8883 | 119 { |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
120 final int year = fetchStaticWKmsYear(staticWKms); |
8883 | 121 return new WaterlevelData(wkms, year); |
122 } | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
123 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
124 log.error("No WKms from Static artifact for this range."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
125 return null; |
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 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
128 private WaterlevelData fetchWINFOArtifactWaterlevel(final CallContext context, final WINFOArtifact flys, |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
129 final int idx, final double from, final double to) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
130 log.debug("Get WKms from WINFOArtifact"); |
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 final WKms[] wkms = (WKms[]) flys.getWaterlevelData(context).getData(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
133 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
134 if (wkms == null || wkms.length == 0) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
135 log.warn("no waterlevels in artifact"); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
136 return null; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
137 } |
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.length < idx + 1) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
140 log.warn("Not enough 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 |
8883 | 144 // REAMRK: W_INFO results does not know any 'year' |
145 final int year = -1; | |
146 return new WaterlevelData(wkms[idx], year).filterByRange(from, to); | |
8881
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 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
149 private WaterlevelData fetchFixationArtifactWaterlevel(final CallContext context, |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
150 final FixationArtifact fixation, final int idx, final double from, final double to) { |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
151 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
152 log.debug("Get WKms from FixationArtifact."); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
153 |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
154 final CalculationResult r = (CalculationResult) fixation.compute(context, ComputeType.ADVANCE, false); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
155 final FixRealizingResult frR = (FixRealizingResult) r.getData(); |
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 // Get W/Q input per gauge for this case. |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
158 final FixRealizingAccess fixAccess = new FixRealizingAccess(fixation); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
159 final List<Segment> segments = fixAccess.getSegments(); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
160 final boolean isFixRealize = (segments != null && !segments.isEmpty()); |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
161 |
8883 | 162 /* ugly but necessary to keep this logic at least a bit inside the FixRealizing stuff */ |
163 final FixRealizingCalculationExtended calculation = new FixRealizingCalculationExtended(fixAccess); | |
164 final int year = calculation.determineMeanYear(); | |
165 | |
8881
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
166 // REMARK: same logic as in WaterlevelExporter |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
167 final boolean showAllGauges = isFixRealize; |
6b93a2498e06
Slightly better abstraction for extraction waterlevels via datacage
gernotbelger
parents:
diff
changeset
|
168 |
8883 | 169 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
|
170 } |
8962
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
171 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
172 /** |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
173 * Fetches the 'year' for a staticXXX-artifact. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
174 * 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
|
175 * 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
|
176 */ |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
177 private int fetchStaticWKmsYear(final D4EArtifact staticWKms) { |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
178 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
179 final int colPos = Integer.parseInt(staticWKms.getDataAsString("col_pos")); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
180 final int wstId = Integer.parseInt(staticWKms.getDataAsString("wst_id")); |
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 WstColumn wstColumn = WstColumnFactory.getWstColumn(wstId, colPos); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
183 final TimeInterval timeInterval = wstColumn.getTimeInterval(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
184 if (timeInterval == null) |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
185 return -1; |
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 Date startTime = timeInterval.getStartTime(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
188 if (startTime == null) |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
189 return -1; |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
190 |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
191 // 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
|
192 // 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
|
193 // 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
|
194 // no change anything regarding the year. |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
195 final Calendar cal = Calendar.getInstance(); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
196 cal.setTime(startTime); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
197 return cal.get(Calendar.YEAR); |
708f210ff242
Fetching year informations for waterlevels used in sinfo
gernotbelger
parents:
8947
diff
changeset
|
198 } |
8883 | 199 } |