annotate artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java @ 8999:e3b3ce32c825

Work on uinfo
author gernotbelger
date Thu, 12 Apr 2018 19:15:42 +0200
parents
children 23945061daec
rev   line source
8999
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
2 * Software engineering by
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
5 *
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
9 */
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.common;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
11
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
12 import java.text.NumberFormat;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
13 import java.util.HashMap;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
14 import java.util.Locale;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
15 import java.util.Map;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
16
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
17 import org.apache.commons.lang.StringUtils;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
18 import org.dive4elements.artifacts.CallContext;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
19 import org.dive4elements.artifacts.CallMeta;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.artifacts.resources.Resources;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
21
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
22 /**
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
23 * @author Domenico Nardi Tironi
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
24 */
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
25 public abstract class AbstractResultType implements IResultType {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
26
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
27 /* Cache for formatters because Formatter will always create new formats (which is very expensive) */
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
28 private final Map<Locale, NumberFormat> formatters = new HashMap<>();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
29
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
30 private final String unit;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
31
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
32 private final String csvHeader;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
33
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
34 private final String pdfHeader;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
35
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
36 protected AbstractResultType(final String unit, final String csvHeader, final String pdfHeader) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
37 this.unit = unit;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
38 this.csvHeader = csvHeader;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
39 this.pdfHeader = pdfHeader;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
40
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
41 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
42
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
43 @Override
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
44 public abstract String exportValue(final CallContext context, final Object value);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
45
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
46 protected final String exportStringValue(final Object value) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
47
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
48 if (value == null)
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
49 return StringUtils.EMPTY;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
50
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
51 if (!(value instanceof String))
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
52 throw new IllegalStateException();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
53
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
54 return (String) value;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
55 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
56
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
57 @Override
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
58 public final double asDouble(final Object value) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
59 if (value == null)
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
60 return Double.NaN;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
61
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
62 if (!(value instanceof Number))
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
63 throw new IllegalStateException();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
64
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
65 final Number number = (Number) value;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
66 return number.doubleValue();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
67 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
68
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
69 protected final String exportDoubleValue(final CallContext context, final double value) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
70 if (Double.isNaN(value))
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
71 return StringUtils.EMPTY;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
72
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
73 final NumberFormat formatter = getFormatter(context);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
74 return formatter.format(value);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
75 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
76
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
77 private NumberFormat getFormatter(final CallContext context) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
78 final CallMeta meta = context.getMeta();
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
79 final Locale locale = Resources.getLocale(meta);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
80
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
81 if (!this.formatters.containsKey(locale))
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
82 this.formatters.put(locale, createFormatter(context));
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
83
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
84 return this.formatters.get(locale);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
85 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
86
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
87 protected abstract NumberFormat createFormatter(CallContext context);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
88
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
89 public final String getCsvHeader() {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
90 return this.csvHeader;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
91 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
92
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
93 public final String getCsvHeader(final CallMeta meta) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
94 return Resources.getMsg(meta, this.csvHeader, this.csvHeader);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
95 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
96
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
97 public final String getPdfHeader(final CallMeta meta) {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
98 return Resources.getMsg(meta, this.pdfHeader, this.pdfHeader);
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
99 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
100
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
101 public final String getUnit() {
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
102 return this.unit;
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
103 }
e3b3ce32c825 Work on uinfo
gernotbelger
parents:
diff changeset
104 }

http://dive4elements.wald.intevation.org