annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/SINFOArtifact.java @ 8980:b194fa64506a

SINFO - show results themes according to spec, either raw data or floating mean values. Some improvements to error handling and handling of empty results.
author gernotbelger
date Thu, 05 Apr 2018 18:30:34 +0200
parents ee5ce13016ed
children 45bbd2c232f8
rev   line source
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
2 * Software engineering by
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
5 *
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
9 */
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
11
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
12 import org.apache.commons.lang.StringUtils;
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
13 import org.dive4elements.artifactdatabase.state.Facet;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
14 import org.dive4elements.artifactdatabase.state.FacetActivity;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
15 import org.dive4elements.artifacts.Artifact;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.D4EArtifact;
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
17 import org.dive4elements.river.artifacts.sinfo.common.D50Processor;
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
18 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentPerYearProcessor;
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
19 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentProcessor;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
20 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthProcessor;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
21 import org.dive4elements.river.artifacts.sinfo.common.TauProcessor;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
22 import org.dive4elements.river.artifacts.sinfo.common.VelocityProcessor;
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
23
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
24 /**
8869
20b85ea3b524 Fixed some typos
gernotbelger
parents: 8854
diff changeset
25 * The default SINFO artifact.
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
26 *
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
27 * @author Gernot Belger
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
28 */
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
29 public class SINFOArtifact extends D4EArtifact {
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
30
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
31 private static final long serialVersionUID = 1L;
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
32
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
33 /** Error message that is thrown if no mode has been chosen. */
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
34 private static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode";
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
35
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
36 /**
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
37 * Error message that is thrown if an invalid calculation mode has been
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
38 * chosen.
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
39 */
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
40 private static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode";
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
41
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
42 /** The name of the artifact. */
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
43 private static final String ARTIFACT_NAME = "sinfo";
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
44
8869
20b85ea3b524 Fixed some typos
gernotbelger
parents: 8854
diff changeset
45 private static final String FIELD_RIVER = "river";
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
46
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
47 private static final String FIELD_MODE = "calculation_mode";
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
48
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
49 static {
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
50 // Active/deactivate facets.
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
51 // BEWARE: we can only define one activity for "sinfo", so we use the artifact as place for this
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
52 FacetActivity.Registry.getInstance().register("sinfo", new FacetActivity() {
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
53 @Override
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
54 public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) {
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
55
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
56 final String name = facet.getName();
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
57
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
58 if ("sinfo_tkk".equals(output)) {
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
59 if (FlowDepthProcessor.FACET_FLOW_DEPTH_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
60 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
61 if (VelocityProcessor.FACET_TKH_VELOCITY_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
62 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
63 if (TauProcessor.FACET_TKH_TAU_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
64 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
65 if (D50Processor.FACET_TKH_D50_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
66 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
67 }
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
68
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
69 if ("sinfo_flow_depth_development".equals(output)) {
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
70 if (FlowDepthProcessor.FACET_FLOW_DEPTH_CURRENT_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
71 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
72 if (FlowDepthProcessor.FACET_FLOW_DEPTH_HISTORICAL_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
73 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
74 if (FlowDepthDevelopmentProcessor.FACET_WATERLEVEL_DIFFERENCE_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
75 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
76 if (FlowDepthDevelopmentProcessor.FACET_BEDHEIGHT_DIFFERENCE_FILTERED.equals(name))
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
77 return Boolean.FALSE;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
78 }
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
79
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
80 if (FlowDepthProcessor.FACET_FLOW_DEPTH_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
81 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
82 if (FlowDepthProcessor.FACET_FLOW_DEPTH_TKH_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
83 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
84 if (FlowDepthProcessor.FACET_FLOW_DEPTH_CURRENT_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
85 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
86 if (FlowDepthProcessor.FACET_FLOW_DEPTH_HISTORICAL_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
87 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
88 if (FlowDepthProcessor.FACET_FLOW_DEPTH_MIN_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
89 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
90 if (FlowDepthProcessor.FACET_FLOW_DEPTH_MAX_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
91 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
92
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
93 if (FlowDepthDevelopmentProcessor.FACET_FLOW_DEPTH_DEVELOPMENT_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
94 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
95 if (FlowDepthDevelopmentPerYearProcessor.FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW.equals(name))
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
96 return Boolean.FALSE;
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
97
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
98 return null;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
99 }
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
100 });
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
101 }
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8946
diff changeset
102
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
103 /**
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
104 * Default constructor, because it's serializable.
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
105 */
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
106 public SINFOArtifact() {
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
107 }
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
108
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
109 /**
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
110 * Returns the name of the concrete artifact.
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
111 *
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
112 * @return the name of the concrete artifact.
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
113 */
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
114 @Override
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
115 public String getName() {
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
116 return ARTIFACT_NAME;
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
117 }
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
118
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
119 public SinfoCalcMode getCalculationMode() {
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
120
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
121 final String calc = getDataAsString(FIELD_MODE);
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
122 if (calc == null) {
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
123 throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE);
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
124 }
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
125
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
126 try {
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
127 return SinfoCalcMode.valueOf(StringUtils.trimToEmpty(calc).toLowerCase());
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
128 }
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
129 catch (final Exception e) {
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
130 throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE, e);
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
131 }
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
132 }
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
133
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
134 public String getRiver() {
8946
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
135 return getDataAsString(FIELD_RIVER);
5d5d482da3e9 Implementing SINFO - FlowDepthMinMax calculation
gernotbelger
parents: 8869
diff changeset
136 }
8854
7bbfb24e6eec SINFO - first prototype of BArt Fließtiefen
gernotbelger
parents:
diff changeset
137 }

http://dive4elements.wald.intevation.org