comparison artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java @ 9000:50cc99579a46

Work on uinfo
author gernotbelger
date Thu, 12 Apr 2018 19:16:10 +0200
parents 7c1611b5a59e
children 7134a4c7d1b6
comparison
equal deleted inserted replaced
8999:e3b3ce32c825 9000:50cc99579a46
8 * documentation coming with Dive4Elements River for details. 8 * documentation coming with Dive4Elements River for details.
9 */ 9 */
10 package org.dive4elements.river.artifacts.sinfo.common; 10 package org.dive4elements.river.artifacts.sinfo.common;
11 11
12 import java.text.NumberFormat; 12 import java.text.NumberFormat;
13 import java.util.HashMap;
14 import java.util.Locale;
15 import java.util.Map;
16 13
17 import org.apache.commons.lang.StringUtils; 14 import org.apache.commons.lang.StringUtils;
18 import org.dive4elements.artifacts.CallContext; 15 import org.dive4elements.artifacts.CallContext;
19 import org.dive4elements.artifacts.CallMeta; 16 import org.dive4elements.river.artifacts.common.AbstractResultType;
17 import org.dive4elements.river.artifacts.common.I18NStrings;
20 import org.dive4elements.river.artifacts.resources.Resources; 18 import org.dive4elements.river.artifacts.resources.Resources;
21 import org.dive4elements.river.artifacts.sinfo.SInfoI18NStrings;
22 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKind; 19 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKind;
23 import org.dive4elements.river.utils.Formatter; 20 import org.dive4elements.river.utils.Formatter;
24 import org.dive4elements.river.utils.RiverUtils; 21 import org.dive4elements.river.utils.RiverUtils;
25 22
26 /** 23 /**
27 * Result type for data that goes into {@link SInfoResultRow}s. 24 * Result type for data that goes into {@link SInfoResultRow}s.
28 * 25 *
29 * @author Gernot Belger 26 * @author Gernot Belger
30 */ 27 */
31 public enum SInfoResultType { 28 public abstract class SInfoResultType extends AbstractResultType {
32 29
33 station(SInfoI18NStrings.UNIT_KM, SInfoI18NStrings.CSV_KM_HEADER) { 30 private SInfoResultType(final String unit, final String csvHeader) {
34 @Override 31 super(unit, csvHeader, csvHeader);
35 public String exportValue(final CallContext context, final Object value) { 32 }
36 final double doubleValue = asDouble(value); 33
37 return exportDoubleValue(context, doubleValue); 34 private SInfoResultType(final String unit, final String csvHeader, final String pdfHeader) {
38 } 35 super(unit, csvHeader, pdfHeader);
39 36 }
40 @Override 37
41 protected NumberFormat createFormatter(final CallContext context) { 38 public static final SInfoResultType waterlevel = new SInfoResultType(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER,
42 return Formatter.getWaterlevelKM(context); 39 "sinfo.export.flow_depth.pdf.header.waterlevel") {
43 }
44 },
45
46 waterlevel(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER,"sinfo.export.flow_depth.pdf.header.waterlevel") {
47 @Override 40 @Override
48 public String exportValue(final CallContext context, final Object value) { 41 public String exportValue(final CallContext context, final Object value) {
49 final double doubleValue = asDouble(value); 42 final double doubleValue = asDouble(value);
50 return exportDoubleValue(context, doubleValue); 43 return exportDoubleValue(context, doubleValue);
51 } 44 }
54 protected NumberFormat createFormatter(final CallContext context) { 47 protected NumberFormat createFormatter(final CallContext context) {
55 // REMARK: other modules use Formatter.getWaterlevelW(context) instead, but that format with a variable number of 48 // REMARK: other modules use Formatter.getWaterlevelW(context) instead, but that format with a variable number of
56 // digits. 49 // digits.
57 return Formatter.getFlowDepth(context); 50 return Formatter.getFlowDepth(context);
58 } 51 }
59 }, 52 };
60 53
61 waterlevelLabel(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LABEL_HEADER) { 54 public static final SInfoResultType waterlevelLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LABEL_HEADER) {
62 @Override 55 @Override
63 public String exportValue(final CallContext context, final Object value) { 56 public String exportValue(final CallContext context, final Object value) {
64 return exportStringValue(value); 57 return exportStringValue(value);
65 } 58 }
66 59
67 @Override 60 @Override
68 protected NumberFormat createFormatter(final CallContext context) { 61 protected NumberFormat createFormatter(final CallContext context) {
69 throw new UnsupportedOperationException(); 62 throw new UnsupportedOperationException();
70 } 63 }
71 }, 64 };
72 65
73 discharge(SInfoI18NStrings.UNIT_CUBIC_M, SInfoI18NStrings.CSV_DISCHARGE_HEADER) { 66 public static final SInfoResultType discharge = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, SInfoI18NStrings.CSV_DISCHARGE_HEADER) {
74 @Override 67 @Override
75 public String exportValue(final CallContext context, final Object value) { 68 public String exportValue(final CallContext context, final Object value) {
76 final double doubleValue = asDouble(value); 69 final double doubleValue = asDouble(value);
77 final double roundedDischarge = RiverUtils.roundQ(doubleValue); 70 final double roundedDischarge = RiverUtils.roundQ(doubleValue);
78 return exportDoubleValue(context, roundedDischarge); 71 return exportDoubleValue(context, roundedDischarge);
80 73
81 @Override 74 @Override
82 protected NumberFormat createFormatter(final CallContext context) { 75 protected NumberFormat createFormatter(final CallContext context) {
83 return Formatter.getWaterlevelQ(context); 76 return Formatter.getWaterlevelQ(context);
84 } 77 }
85 }, 78 };
86 79
87 meanBedHeight(null, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT) { 80 public static final SInfoResultType meanBedHeight = new SInfoResultType(null, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER,
81 SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT) {
88 @Override 82 @Override
89 public String exportValue(final CallContext context, final Object value) { 83 public String exportValue(final CallContext context, final Object value) {
90 final double doubleValue = asDouble(value); 84 final double doubleValue = asDouble(value);
91 return exportDoubleValue(context, doubleValue); 85 return exportDoubleValue(context, doubleValue);
92 } 86 }
93 87
94 @Override 88 @Override
95 protected NumberFormat createFormatter(final CallContext context) { 89 protected NumberFormat createFormatter(final CallContext context) {
96 return Formatter.getMeanBedHeight(context); 90 return Formatter.getMeanBedHeight(context);
97 } 91 }
98 }, 92 };
99 93
100 soundingLabel(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_SOUNDING_HEADER) { 94 public static final SInfoResultType soundingLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_SOUNDING_HEADER) {
101 @Override 95 @Override
102 public String exportValue(final CallContext context, final Object value) { 96 public String exportValue(final CallContext context, final Object value) {
103 return exportStringValue(value); 97 return exportStringValue(value);
104 } 98 }
105 99
106 @Override 100 @Override
107 protected NumberFormat createFormatter(final CallContext context) { 101 protected NumberFormat createFormatter(final CallContext context) {
108 throw new UnsupportedOperationException(); 102 throw new UnsupportedOperationException();
109 } 103 }
110 }, 104 };
111 105 public static final SInfoResultType flowdepthDevelopmentPerYear = new SInfoResultType(I18NStrings.UNIT_CM_A,
112 flowdepthmin(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MIN_HEADER) { 106 SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) {
113 @Override 107 @Override
114 public String exportValue(final CallContext context, final Object value) { 108 public String exportValue(final CallContext context, final Object value) {
115 final double doubleValue = asDouble(value); 109 final double doubleValue = asDouble(value);
116 return exportDoubleValue(context, doubleValue); 110 return exportDoubleValue(context, doubleValue);
117 } 111 }
118 112
119 @Override 113 @Override
120 protected NumberFormat createFormatter(final CallContext context) { 114 protected NumberFormat createFormatter(final CallContext context) {
121 return Formatter.getFlowDepth(context); 115 return Formatter.getFlowDepthDevelopmentPerYear(context);
122 } 116 }
123 }, 117 };
124 118
125 flowdepthmax(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MAX_HEADER) { 119 public static final SInfoResultType flowdepthmin = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MIN_HEADER) {
126 @Override 120 @Override
127 public String exportValue(final CallContext context, final Object value) { 121 public String exportValue(final CallContext context, final Object value) {
128 final double doubleValue = asDouble(value); 122 final double doubleValue = asDouble(value);
129 return exportDoubleValue(context, doubleValue); 123 return exportDoubleValue(context, doubleValue);
130 } 124 }
131 125
132 @Override 126 @Override
133 protected NumberFormat createFormatter(final CallContext context) { 127 protected NumberFormat createFormatter(final CallContext context) {
134 return Formatter.getFlowDepth(context); 128 return Formatter.getFlowDepth(context);
135 } 129 }
136 }, 130 };
137 131
138 gaugeLabel(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_GAUGE_HEADER) { 132 public static final SInfoResultType flowdepthmax = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MAX_HEADER) {
133 @Override
134 public String exportValue(final CallContext context, final Object value) {
135 final double doubleValue = asDouble(value);
136 return exportDoubleValue(context, doubleValue);
137 }
138
139 @Override
140 protected NumberFormat createFormatter(final CallContext context) {
141 return Formatter.getFlowDepth(context);
142 }
143 };
144
145 public static final SInfoResultType gaugeLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_GAUGE_HEADER) {
139 @Override 146 @Override
140 public String exportValue(final CallContext context, final Object value) { 147 public String exportValue(final CallContext context, final Object value) {
141 return exportStringValue(value); 148 return exportStringValue(value);
142 } 149 }
143 150
144 @Override 151 @Override
145 protected NumberFormat createFormatter(final CallContext context) { 152 protected NumberFormat createFormatter(final CallContext context) {
146 throw new UnsupportedOperationException(); 153 throw new UnsupportedOperationException();
147 } 154 }
148 }, 155 };
149 156
150 location(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LOCATION_HEADER) { 157 public static final SInfoResultType location = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LOCATION_HEADER) {
151 @Override 158 @Override
152 public String exportValue(final CallContext context, final Object value) { 159 public String exportValue(final CallContext context, final Object value) {
153 return exportStringValue(value); 160 return exportStringValue(value);
154 } 161 }
155 162
156 @Override 163 @Override
157 protected NumberFormat createFormatter(final CallContext context) { 164 protected NumberFormat createFormatter(final CallContext context) {
158 throw new UnsupportedOperationException(); 165 throw new UnsupportedOperationException();
159 } 166 }
160 }, 167 };
161 168
162 soilkind(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER, "sinfo.export.tkh.pdf.header.tkhkind") { 169 public static final SInfoResultType soilkind = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER,
170 "sinfo.export.tkh.pdf.header.tkhkind") {
163 @Override 171 @Override
164 public String exportValue(final CallContext context, final Object value) { 172 public String exportValue(final CallContext context, final Object value) {
165 173
166 if (value == null) 174 if (value == null)
167 return StringUtils.EMPTY; 175 return StringUtils.EMPTY;
174 182
175 @Override 183 @Override
176 protected NumberFormat createFormatter(final CallContext context) { 184 protected NumberFormat createFormatter(final CallContext context) {
177 throw new UnsupportedOperationException(); 185 throw new UnsupportedOperationException();
178 } 186 }
179 }, 187 };
180 188
181 flowdepth(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HEADER) { 189 public static final SInfoResultType flowdepth = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HEADER) {
182 @Override 190 @Override
183 public String exportValue(final CallContext context, final Object value) { 191 public String exportValue(final CallContext context, final Object value) {
184 final double doubleValue = asDouble(value); 192 final double doubleValue = asDouble(value);
185 return exportDoubleValue(context, doubleValue); 193 return exportDoubleValue(context, doubleValue);
186 } 194 }
187 195
188 @Override 196 @Override
189 protected NumberFormat createFormatter(final CallContext context) { 197 protected NumberFormat createFormatter(final CallContext context) {
190 return Formatter.getFlowDepth(context); 198 return Formatter.getFlowDepth(context);
191 } 199 }
192 }, 200 };
193 201
194 d50(null, null) { 202 public static final SInfoResultType d50 = new SInfoResultType(null, null) {
195 @Override 203 @Override
196 public String exportValue(final CallContext context, final Object value) { 204 public String exportValue(final CallContext context, final Object value) {
197 final double doubleValue = asDouble(value); 205 final double doubleValue = asDouble(value);
198 return exportDoubleValue(context, doubleValue); 206 return exportDoubleValue(context, doubleValue);
199 } 207 }
200 208
201 @Override 209 @Override
202 protected NumberFormat createFormatter(final CallContext context) { 210 protected NumberFormat createFormatter(final CallContext context) {
203 throw new UnsupportedOperationException(); 211 throw new UnsupportedOperationException();
204 } 212 }
205 }, 213 };
206 214
207 velocity(null, null) { 215 public static final SInfoResultType velocity = new SInfoResultType(null, null) {
208 @Override 216 @Override
209 public String exportValue(final CallContext context, final Object value) { 217 public String exportValue(final CallContext context, final Object value) {
210 final double doubleValue = asDouble(value); 218 final double doubleValue = asDouble(value);
211 return exportDoubleValue(context, doubleValue); 219 return exportDoubleValue(context, doubleValue);
212 } 220 }
213 221
214 @Override 222 @Override
215 protected NumberFormat createFormatter(final CallContext context) { 223 protected NumberFormat createFormatter(final CallContext context) {
216 throw new UnsupportedOperationException(); 224 throw new UnsupportedOperationException();
217 } 225 }
218 }, 226 };
219 227
220 tau(null, null) { 228 public static final SInfoResultType tau = new SInfoResultType(null, null) {
221 @Override 229 @Override
222 public String exportValue(final CallContext context, final Object value) { 230 public String exportValue(final CallContext context, final Object value) {
223 final double doubleValue = asDouble(value); 231 final double doubleValue = asDouble(value);
224 return exportDoubleValue(context, doubleValue); 232 return exportDoubleValue(context, doubleValue);
225 } 233 }
226 234
227 @Override 235 @Override
228 protected NumberFormat createFormatter(final CallContext context) { 236 protected NumberFormat createFormatter(final CallContext context) {
229 throw new UnsupportedOperationException(); 237 throw new UnsupportedOperationException();
230 } 238 }
231 }, 239 };
232 240
233 tkh(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_TKH_HEADER, SInfoI18NStrings.CSV_TKH_HEADER_SHORT) { 241 public static final SInfoResultType tkh = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_TKH_HEADER, SInfoI18NStrings.CSV_TKH_HEADER_SHORT) {
234 @Override 242 @Override
235 public String exportValue(final CallContext context, final Object value) { 243 public String exportValue(final CallContext context, final Object value) {
236 final double doubleValue = asDouble(value); 244 final double doubleValue = asDouble(value);
237 return exportDoubleValue(context, doubleValue); 245 return exportDoubleValue(context, doubleValue);
238 } 246 }
239 247
240 @Override 248 @Override
241 protected NumberFormat createFormatter(final CallContext context) { 249 protected NumberFormat createFormatter(final CallContext context) {
242 return Formatter.getTkh(context); 250 return Formatter.getTkh(context);
243 } 251 }
244 }, 252 };
245 253
246 tkhup(SInfoI18NStrings.UNIT_CM, null) { 254 public static final SInfoResultType tkhup = new SInfoResultType(I18NStrings.UNIT_M, null) {
247 @Override 255 @Override
248 public String exportValue(final CallContext context, final Object value) { 256 public String exportValue(final CallContext context, final Object value) {
249 final double doubleValue = asDouble(value); 257 final double doubleValue = asDouble(value);
250 return exportDoubleValue(context, doubleValue); 258 return exportDoubleValue(context, doubleValue);
251 } 259 }
252 260
253 @Override 261 @Override
254 protected NumberFormat createFormatter(final CallContext context) { 262 protected NumberFormat createFormatter(final CallContext context) {
255 throw new UnsupportedOperationException(); 263 throw new UnsupportedOperationException();
256 } 264 }
257 }, 265 };
258 266
259 tkhdown(SInfoI18NStrings.UNIT_CM, null) { 267 public static final SInfoResultType tkhdown = new SInfoResultType(I18NStrings.UNIT_M, null) {
260 @Override 268 @Override
261 public String exportValue(final CallContext context, final Object value) { 269 public String exportValue(final CallContext context, final Object value) {
262 final double doubleValue = asDouble(value); 270 final double doubleValue = asDouble(value);
263 return exportDoubleValue(context, doubleValue); 271 return exportDoubleValue(context, doubleValue);
264 } 272 }
265 273
266 @Override 274 @Override
267 protected NumberFormat createFormatter(final CallContext context) { 275 protected NumberFormat createFormatter(final CallContext context) {
268 throw new UnsupportedOperationException(); 276 throw new UnsupportedOperationException();
269 } 277 }
270 }, 278 };
271 279
272 flowdepthtkh(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTHTKH_HEADER) { 280 public static final SInfoResultType flowdepthtkh = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTHTKH_HEADER) {
273 @Override 281 @Override
274 public String exportValue(final CallContext context, final Object value) { 282 public String exportValue(final CallContext context, final Object value) {
275 final double doubleValue = asDouble(value); 283 final double doubleValue = asDouble(value);
276 return exportDoubleValue(context, doubleValue); 284 return exportDoubleValue(context, doubleValue);
277 } 285 }
278 286
279 @Override 287 @Override
280 protected NumberFormat createFormatter(final CallContext context) { 288 protected NumberFormat createFormatter(final CallContext context) {
281 return Formatter.getFlowDepth(context); 289 return Formatter.getFlowDepth(context);
282 } 290 }
283 }, 291 };
284 292
285 flowdepthDevelopment(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER, SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) { 293 public static final SInfoResultType flowdepthDevelopment = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER,
294 SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) {
286 @Override 295 @Override
287 public String exportValue(final CallContext context, final Object value) { 296 public String exportValue(final CallContext context, final Object value) {
288 final double doubleValue = asDouble(value); 297 final double doubleValue = asDouble(value);
289 return exportDoubleValue(context, doubleValue); 298 return exportDoubleValue(context, doubleValue);
290 } 299 }
291 300
292 @Override 301 @Override
293 protected NumberFormat createFormatter(final CallContext context) { 302 protected NumberFormat createFormatter(final CallContext context) {
294 return Formatter.getTkh(context); 303 return Formatter.getTkh(context);
295 } 304 }
296 }, 305 };
297 flowdepthDevelopmentPerYear(SInfoI18NStrings.UNIT_CM_A, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) { 306
307 public static final SInfoResultType depthDevelopmentPerYear = new SInfoResultType(I18NStrings.UNIT_CM_A,
308 SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) {
298 @Override 309 @Override
299 public String exportValue(final CallContext context, final Object value) { 310 public String exportValue(final CallContext context, final Object value) {
300 final double doubleValue = asDouble(value); 311 final double doubleValue = asDouble(value);
301 return exportDoubleValue(context, doubleValue); 312 return exportDoubleValue(context, doubleValue);
302 } 313 }
303 314
304 @Override 315 @Override
305 protected NumberFormat createFormatter(final CallContext context) { 316 protected NumberFormat createFormatter(final CallContext context) {
306 return Formatter.getFlowDepthDevelopmentPerYear(context); 317 return Formatter.getFlowDepthDevelopmentPerYear(context);
307 } 318 }
308 }, 319 };
309 waterlevelDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER, "sinfo.export.pdf.header.waterlevel.difference") { 320 public static final SInfoResultType waterlevelDifference = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER,
321 "sinfo.export.pdf.header.waterlevel.difference") {
310 @Override 322 @Override
311 public String exportValue(final CallContext context, final Object value) { 323 public String exportValue(final CallContext context, final Object value) {
312 final double doubleValue = asDouble(value); 324 final double doubleValue = asDouble(value);
313 return exportDoubleValue(context, doubleValue); 325 return exportDoubleValue(context, doubleValue);
314 } 326 }
315 327
316 @Override 328 @Override
317 protected NumberFormat createFormatter(final CallContext context) { 329 protected NumberFormat createFormatter(final CallContext context) {
318 return Formatter.getTkh(context); 330 return Formatter.getTkh(context);
319 } 331 }
320 }, 332 };
321 bedHeightDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER, "sinfo.export.pdf.header.mean_bed_height.difference") { 333 public static final SInfoResultType bedHeightDifference = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER,
334 "sinfo.export.pdf.header.mean_bed_height.difference") {
322 @Override 335 @Override
323 public String exportValue(final CallContext context, final Object value) { 336 public String exportValue(final CallContext context, final Object value) {
324 final double doubleValue = asDouble(value); 337 final double doubleValue = asDouble(value);
325 return exportDoubleValue(context, doubleValue); 338 return exportDoubleValue(context, doubleValue);
326 } 339 }
327 340
328 @Override 341 @Override
329 protected NumberFormat createFormatter(final CallContext context) { 342 protected NumberFormat createFormatter(final CallContext context) {
330 return Formatter.getTkh(context); 343 return Formatter.getTkh(context);
331 } 344 }
332 }, 345 };
333 flowdepthCurrent(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_CURRENT_HEADER) { 346 public static final SInfoResultType flowdepthCurrent = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_CURRENT_HEADER) {
334 @Override 347 @Override
335 public String exportValue(final CallContext context, final Object value) { 348 public String exportValue(final CallContext context, final Object value) {
336 final double doubleValue = asDouble(value); 349 final double doubleValue = asDouble(value);
337 return exportDoubleValue(context, doubleValue); 350 return exportDoubleValue(context, doubleValue);
338 } 351 }
339 352
340 @Override 353 @Override
341 protected NumberFormat createFormatter(final CallContext context) { 354 protected NumberFormat createFormatter(final CallContext context) {
342 return Formatter.getFlowDepth(context); 355 return Formatter.getFlowDepth(context);
343 } 356 }
344 }, 357 };
345 flowdepthHistorical(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HISTORICAL_HEADER) { 358 public static final SInfoResultType flowdepthHistorical = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HISTORICAL_HEADER) {
346 @Override 359 @Override
347 public String exportValue(final CallContext context, final Object value) { 360 public String exportValue(final CallContext context, final Object value) {
348 final double doubleValue = asDouble(value); 361 final double doubleValue = asDouble(value);
349 return exportDoubleValue(context, doubleValue); 362 return exportDoubleValue(context, doubleValue);
350 } 363 }
351 364
352 @Override 365 @Override
353 protected NumberFormat createFormatter(final CallContext context) { 366 protected NumberFormat createFormatter(final CallContext context) {
354 return Formatter.getFlowDepth(context); 367 return Formatter.getFlowDepth(context);
355 } 368 }
356 }; 369 };
357 370
358 /* Cache for formatters because Formatter will always create new formats (which is very expensive) */
359 private final Map<Locale, NumberFormat> formatters = new HashMap<>();
360
361 private final String unit;
362
363 private final String csvHeader;
364
365 private final String pdfHeader;
366
367 private SInfoResultType(final String unit, final String csvAndPdfHeader) {
368 this(unit, csvAndPdfHeader, csvAndPdfHeader);
369 }
370
371 private SInfoResultType(final String unit, final String csvHeader, final String pdfHeader) {
372 this.unit = unit;
373 this.csvHeader = csvHeader;
374 this.pdfHeader = pdfHeader;
375 }
376
377 public abstract String exportValue(final CallContext context, final Object value);
378
379 protected final String exportStringValue(final Object value) {
380
381 if (value == null)
382 return StringUtils.EMPTY;
383
384 if (!(value instanceof String))
385 throw new IllegalStateException();
386
387 return (String) value;
388 }
389
390 protected final double asDouble(final Object value) {
391 if (value == null)
392 return Double.NaN;
393
394 if (!(value instanceof Number))
395 throw new IllegalStateException();
396
397 final Number number = (Number) value;
398 return number.doubleValue();
399 }
400
401 protected final String exportDoubleValue(final CallContext context, final double value) {
402 if (Double.isNaN(value))
403 return StringUtils.EMPTY;
404
405 final NumberFormat formatter = getFormatter(context);
406 return formatter.format(value);
407 }
408
409 private NumberFormat getFormatter(final CallContext context) {
410 final CallMeta meta = context.getMeta();
411 final Locale locale = Resources.getLocale(meta);
412
413 if (!this.formatters.containsKey(locale))
414 this.formatters.put(locale, createFormatter(context));
415
416 return this.formatters.get(locale);
417 }
418
419 protected abstract NumberFormat createFormatter(CallContext context);
420
421 public final String getCsvHeader() {
422 return this.csvHeader;
423 }
424
425 public final String getCsvHeader(final CallMeta meta) {
426 return Resources.getMsg(meta, this.csvHeader, this.csvHeader);
427 }
428
429 public final String getPdfHeader(final CallMeta meta) {
430 return Resources.getMsg(meta, this.pdfHeader, this.pdfHeader);
431 }
432
433 public final String getUnit() {
434 return this.unit;
435 }
436 } 371 }

http://dive4elements.wald.intevation.org