annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/TkhState.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 23945061daec
rev   line source
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
3 *
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
7 */
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
8
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
9 package org.dive4elements.river.artifacts.sinfo.tkhstate;
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
10
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
11 import java.util.List;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
12
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
13 import org.dive4elements.artifactdatabase.state.Facet;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
14 import org.dive4elements.artifacts.CallContext;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
15 import org.dive4elements.river.artifacts.ChartArtifact;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.D4EArtifact;
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
17 import org.dive4elements.river.artifacts.model.Calculation;
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.model.CalculationResult;
8938
9c02733a1b3c Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
gernotbelger
parents: 8916
diff changeset
19 import org.dive4elements.river.artifacts.model.DataFacet;
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.artifacts.model.EmptyFacet;
8938
9c02733a1b3c Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
gernotbelger
parents: 8916
diff changeset
21 import org.dive4elements.river.artifacts.model.FacetTypes;
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
22 import org.dive4elements.river.artifacts.model.ReportFacet;
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
8941
a9950a3a71e5 SINFO - tkh, configured result facets and themes
gernotbelger
parents: 8940
diff changeset
24 import org.dive4elements.river.artifacts.sinfo.common.D50Processor;
8940
82998242ba84 Preparing for additional outputs of SINFO-Tkh
gernotbelger
parents: 8938
diff changeset
25 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthProcessor;
8941
a9950a3a71e5 SINFO - tkh, configured result facets and themes
gernotbelger
parents: 8940
diff changeset
26 import org.dive4elements.river.artifacts.sinfo.common.TauProcessor;
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
27 import org.dive4elements.river.artifacts.sinfo.common.TkhProcessor;
8941
a9950a3a71e5 SINFO - tkh, configured result facets and themes
gernotbelger
parents: 8940
diff changeset
28 import org.dive4elements.river.artifacts.sinfo.common.VelocityProcessor;
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
29 import org.dive4elements.river.artifacts.states.DefaultState;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
30
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
31 /** State in which a waterlevel has been calculated. */
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
32 public class TkhState extends DefaultState {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
33
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
34 /// ** The log that is used in this state. */
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
35 // private static Logger log = Logger.getLogger(FlowDepthState.class);
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
36
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
37 private static final long serialVersionUID = 1L;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
38
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
39 /**
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
40 * From this state can only be continued trivially.
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
41 */
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
42 @Override
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
43 protected String getUIProvider() {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
44 return "continue";
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
45 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
46
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
47 @Override
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
48 public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
49 // FIXME: why is this necessary?
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
50 if (artifact instanceof ChartArtifact) {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
51 facets.add(new EmptyFacet());
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
52 return null;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
53 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
54
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
55 return compute((SINFOArtifact) artifact, context, hash, facets, old);
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
56 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
57
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
58 @Override
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
59 public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
60 if (artifact instanceof ChartArtifact) {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
61 facets.add(new EmptyFacet());
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
62 return null;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
63 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
64 return compute((SINFOArtifact) artifact, context, hash, facets, old);
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
65 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
66
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
67 /**
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
68 * Compute result or returned object from cache, create facets.
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
69 *
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
70 * @param old
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
71 * Object that was cached.
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
72 */
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
73 private Object compute(final SINFOArtifact sinfo, final CallContext context, final String hash, final List<Facet> facets, final Object old) {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
74
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
75 final CalculationResult res = doCompute(sinfo, context, old);
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
76
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
77 if (facets == null)
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
78 return res;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
79
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
80 final TkhCalculationResults results = (TkhCalculationResults) res.getData();
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
81
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
82 /* add themes for chart, for each result */
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
83 final List<TkhCalculationResult> resultList = results.getResults();
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
84 for (int index = 0; index < resultList.size(); index++) {
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
85
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
86 final TkhCalculationResult result = resultList.get(index);
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
87
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
88 facets.add(TkhProcessor.createTkhFacet(context, hash, this.id, result, index));
8940
82998242ba84 Preparing for additional outputs of SINFO-Tkh
gernotbelger
parents: 8938
diff changeset
89
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
90 facets.add(FlowDepthProcessor.createFlowDepthFilteredFacet(context, hash, this.id, result, index));
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
91 facets.add(FlowDepthProcessor.createFlowDepthRawFacet(context, hash, this.id, result, index));
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
92
8941
a9950a3a71e5 SINFO - tkh, configured result facets and themes
gernotbelger
parents: 8940
diff changeset
93 facets.add(VelocityProcessor.createVelocityFacet(context, hash, this.id, result, index));
a9950a3a71e5 SINFO - tkh, configured result facets and themes
gernotbelger
parents: 8940
diff changeset
94 facets.add(D50Processor.createD50Facet(context, hash, this.id, result, index));
a9950a3a71e5 SINFO - tkh, configured result facets and themes
gernotbelger
parents: 8940
diff changeset
95 facets.add(TauProcessor.createTauFacet(context, hash, this.id, result, index));
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
96 }
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
97
8938
9c02733a1b3c Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
gernotbelger
parents: 8916
diff changeset
98 if (!resultList.isEmpty()) {
9c02733a1b3c Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
gernotbelger
parents: 8916
diff changeset
99 facets.add(new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id));
9c02733a1b3c Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
gernotbelger
parents: 8916
diff changeset
100 facets.add(new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id));
9c02733a1b3c Work on Sinfo-tkh - exports; using same logic for wst-description as winfo
gernotbelger
parents: 8916
diff changeset
101 }
8916
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
102
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
103 final Calculation report = res.getReport();
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
104
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
105 if (report.hasProblems())
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
106 facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id));
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
107
5d5d0051723f Working on outputmodes of tkh calculation
gernotbelger
parents: 8915
diff changeset
108 return res;
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
109 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
110
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
111 private CalculationResult doCompute(final SINFOArtifact sinfo, final CallContext context, final Object old) {
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
112 if (old instanceof CalculationResult)
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
113 return (CalculationResult) old;
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
114
8915
d9dbf0b74bc2 Refaktoring of flow depth calculation, extracting tkh part. First implementation of tkh calculation.
gernotbelger
parents: 8914
diff changeset
115 return new TkhCalculation(context).calculate(sinfo);
8914
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
116 }
e3519c3e7a0a Workflow for SINFO-Transport bodies heights inclduing winfo calculation
gernotbelger
parents:
diff changeset
117 }

http://dive4elements.wald.intevation.org