annotate artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepthdev/FlowDepthDevelopmentState.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 3828c7d820ef
rev   line source
8951
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
2 * Software engineering by
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
5 *
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
9 */
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.sinfo.flowdepthdev;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
11
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
12 import java.util.List;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
13
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
14 import org.dive4elements.artifactdatabase.state.Facet;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
15 import org.dive4elements.artifacts.CallContext;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.ChartArtifact;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
17 import org.dive4elements.river.artifacts.D4EArtifact;
8953
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
18 import org.dive4elements.river.artifacts.model.Calculation;
8951
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.model.CalculationResult;
8953
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
20 import org.dive4elements.river.artifacts.model.DataFacet;
8951
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.model.EmptyFacet;
8953
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
22 import org.dive4elements.river.artifacts.model.FacetTypes;
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
23 import org.dive4elements.river.artifacts.model.ReportFacet;
8951
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.artifacts.sinfo.SINFOArtifact;
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8953
diff changeset
25 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentPerYearProcessor;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8953
diff changeset
26 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentProcessor;
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8953
diff changeset
27 import org.dive4elements.river.artifacts.sinfo.common.FlowDepthProcessor;
8951
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
28 import org.dive4elements.river.artifacts.states.DefaultState;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
29
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
30 /**
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
31 * @author Gernot Belger
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
32 */
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
33 public class FlowDepthDevelopmentState extends DefaultState {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
34
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
35 private static final long serialVersionUID = 1L;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
36
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
37 /**
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
38 * From this state can only be continued trivially.
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
39 */
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
40 @Override
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
41 protected String getUIProvider() {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
42 return "continue";
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
43 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
44
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
45 @Override
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
46 public Object computeFeed(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
47 // FIXME: why is this necessary?
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
48 if (artifact instanceof ChartArtifact) {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
49 facets.add(new EmptyFacet());
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
50 return null;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
51 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
52
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
53 return compute((SINFOArtifact) artifact, context, hash, facets, old);
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
54 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
55
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
56 @Override
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
57 public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List<Facet> facets, final Object old) {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
58 if (artifact instanceof ChartArtifact) {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
59 facets.add(new EmptyFacet());
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
60 return null;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
61 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
62 return compute((SINFOArtifact) artifact, context, hash, facets, old);
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
63 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
64
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
65 /**
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
66 * Compute result or returned object from cache, create facets.
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
67 *
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
68 * @param old
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
69 * Object that was cached.
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
70 */
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
71 private Object compute(final SINFOArtifact sinfo, final CallContext context, final String hash, final List<Facet> facets, final Object old) {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
72
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
73 final CalculationResult res = doCompute(sinfo, context, old);
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
74
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
75 if (facets == null)
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
76 return res;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
77
8953
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
78 final FlowDepthDevelopmentCalculationResults results = (FlowDepthDevelopmentCalculationResults) res.getData();
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
79 final FlowDepthDevelopmentCalculationResult result = results.getResult();
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
80 if (result != null) {
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
81 /* add themes for chart, for each result */
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
82 final int index = 0;
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8953
diff changeset
83
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
84 // /* filtered (zoom dependent mean) flow depth development */
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
85 facets.add(FlowDepthDevelopmentProcessor.createFlowDepthDevelopmentFilteredFacet(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
86 facets.add(FlowDepthDevelopmentProcessor.createFlowDepthDevelopmentRawFacet(context, hash, this.id, result, index));
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8953
diff changeset
87
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
88 facets.add(FlowDepthDevelopmentProcessor.createWaterlevelDifferenceFacet(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
89 facets.add(FlowDepthDevelopmentProcessor.createBedHeightDifferenceFacet(context, hash, this.id, result, index));
8956
ee5ce13016ed Work on SINFO-Fließtiefenentwicklung
gernotbelger
parents: 8953
diff changeset
90
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
91 facets.add(FlowDepthDevelopmentPerYearProcessor.createFlowDepthDevelopmentFilteredFacet(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 facets.add(FlowDepthDevelopmentPerYearProcessor.createFlowDepthDevelopmentRawFacet(context, hash, this.id, result, index));
8953
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
93
8980
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
94 facets.add(FlowDepthProcessor.createFlowDepthCurrentFilteredFacet(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
95 facets.add(FlowDepthProcessor.createFlowDepthCurrentRawFacet(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
96 facets.add(FlowDepthProcessor.createFlowDepthHistoricalFilteredFacet(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
97 facets.add(FlowDepthProcessor.createFlowDepthHistoricalRawFacet(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
98
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
99 facets.add(new DataFacet(FacetTypes.CSV, "CSV data", ComputeType.ADVANCE, hash, this.id));
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
100 facets.add(new DataFacet(FacetTypes.PDF, "PDF data", ComputeType.ADVANCE, hash, this.id));
b194fa64506a SINFO - show results themes according to spec, either raw data or floating mean values.
gernotbelger
parents: 8956
diff changeset
101 }
8953
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
102
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
103 final Calculation report = res.getReport();
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
104 if (report.hasProblems())
c40db8e8dcae SINFO - Flow depth development - implemented exporters
gernotbelger
parents: 8951
diff changeset
105 facets.add(new ReportFacet(ComputeType.ADVANCE, hash, this.id));
8951
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
106
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
107 return res;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
108 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
109
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
110 private CalculationResult doCompute(final SINFOArtifact sinfo, final CallContext context, final Object old) {
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
111 if (old instanceof CalculationResult)
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
112 return (CalculationResult) old;
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
113
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
114 return new FlowDepthDevelopmentCalculation(context).calculate(sinfo);
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
115 }
322b0e6298ea Work on SINFO FlowDepth-Development
gernotbelger
parents:
diff changeset
116 }

http://dive4elements.wald.intevation.org