annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flood_duration/FloodDurationAccess.java @ 9067:2ed3824a3d53

sinfo access collision, floodDuration
author gernotbelger
date Mon, 14 May 2018 14:59:10 +0200
parents
children 611a523fc42f
rev   line source
9067
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
2 * Software engineering by
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
5 *
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
9 */
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
10
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
11 package org.dive4elements.river.artifacts.sinfo.flood_duration;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
12
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
13 import org.apache.commons.lang.math.DoubleRange;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
14 import org.apache.log4j.Logger;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
15 import org.dive4elements.river.artifacts.access.RangeAccess;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.common.AccessHelper;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
17 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.sinfo.SinfoCalcMode;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
19
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
20 import gnu.trove.TDoubleArrayList;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
21
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
22 /**
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
23 * Access to the flow depth calculation type specific SInfo artifact data.
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
24 * REMARK: this class is NOT intended to be hold in the results (or anywhere else), in order to avoid a permanent
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
25 * reference to the artifact instance.
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
26 * Hence we do NOT cache any data.
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
27 *
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
28 * @author Gernot Belger
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
29 */
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
30 final class FloodDurationAccess extends RangeAccess {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
31
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
32 private static Logger log = Logger.getLogger(FloodDurationAccess.class);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
33
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
34 private static final String FIELD_DIFFIDS = "diffids"; //$NON-NLS-1$
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
35
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
36 private static final String FIELD_USE_TKH = "use_transport_bodies"; //$NON-NLS-1$
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
37
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
38 private final AccessHelper helper;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
39
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
40 /// Fields from state:
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
41
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
42 // calculation_mode (String), sollte sinfo_calc_flood_duration sein
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
43 // ld_from, ld_to, ld_step
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
44 // riverside, mögliche werte: "state.sinfo.riverside.left" "state.sinfo.riverside.right" "state.sinfo.riverside.both"
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
45 // wspl
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
46 // State.sinfo.WQ:
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
47 // <data name="wq_isq" type="Boolean" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
48 // <data name="wq_isfree" type="Boolean" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
49 // <data name="wq_isrange" type="Boolean" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
50 // <data name="wq_from" type="Double" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
51 // <data name="wq_to" type="Double" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
52 // <data name="wq_step" type="Double" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
53 // <data name="wq_single" type="Double[]" />
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
54 public FloodDurationAccess(final SINFOArtifact artifact) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
55 super(artifact);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
56
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
57 /* assert calculation mode */
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
58 final SinfoCalcMode calculationMode = artifact.getCalculationMode();
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
59 this.helper = new AccessHelper(artifact);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
60 assert (calculationMode == SinfoCalcMode.sinfo_calc_flood_duration);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
61 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
62
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
63 public DoubleRange getRange() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
64 final double from = getFrom();
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
65 final double to = getTo();
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
66 return new DoubleRange(from, to);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
67 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
68
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
69 @Override
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
70 public Double getStep() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
71 return super.getStep();
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
72 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
73
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
74 public String getRiverside() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
75 return super.getString("riverside");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
76 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
77
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
78 public Boolean getWspl() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
79 return super.getBoolean("wspl");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
80 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
81
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
82 public Boolean getWqIsQ() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
83 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
84 return null;//
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
85 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
86 return super.getBoolean("wq_isq");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
87 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
88
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
89 public Boolean getWqIsFree() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
90 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
91 return null;//
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
92 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
93 return super.getBoolean("wq_isfree");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
94 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
95
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
96 public Boolean getWqIsRange() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
97 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
98 return null;//
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
99 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
100 return super.getBoolean("wq_isrange");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
101 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
102
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
103 public Double getWqFrom() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
104 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
105 return null;//
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
106 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
107 if (!getWqIsRange())
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
108 return null;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
109
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
110 return super.getDouble("wq_from");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
111 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
112
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
113 public Double getWqTo() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
114 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
115 return null;//
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
116 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
117 if (!getWqIsRange())
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
118 return null;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
119 return super.getDouble("wq_to");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
120 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
121
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
122 public Double getWqStep() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
123 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
124 return null;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
125 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
126 if (!getWqIsRange())
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
127 return null;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
128
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
129 return super.getDouble("wq_step");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
130 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
131
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
132 public double[] getWqSingle() {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
133 if (!getWspl()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
134 return null;//
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
135 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
136 if (getWqIsRange())
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
137 return null;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
138
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
139 final String wqSingles = super.getString("wq_single");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
140
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
141 if (wqSingles == null || wqSingles.isEmpty()) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
142 log.warn("No wqSingles provided");
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
143 return null;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
144 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
145 final TDoubleArrayList doubles = new gnu.trove.TDoubleArrayList();
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
146 for (final String value : wqSingles.split(" ")) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
147 try {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
148
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
149 doubles.add(Double.parseDouble(value));// Punkt/komma?
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
150 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
151 catch (final NumberFormatException e) {
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
152 /* Client should prevent this */
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
153 log.warn("Invalid wqsingle value: " + value);
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
154 continue;
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
155 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
156 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
157 return doubles.toNativeArray();
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
158 }
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
159
2ed3824a3d53 sinfo access collision, floodDuration
gernotbelger
parents:
diff changeset
160 }

http://dive4elements.wald.intevation.org