annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java @ 9506:8b7bf26b8782

Predefined artifact for standard vegetation zones. Some minor adaptions.
author gernotbelger
date Fri, 28 Sep 2018 13:44:12 +0200
parents b6e595f1696f
children ee6508687e3f
rev   line source
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
2 * Software engineering by
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
5 *
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
9 */
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.uinfo;
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
11
9426
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
12 import java.io.Serializable;
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
13
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
14 import org.apache.commons.lang.StringUtils;
9039
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
15 import org.dive4elements.artifactdatabase.state.Facet;
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
16 import org.dive4elements.artifactdatabase.state.FacetActivity;
9039
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
17 import org.dive4elements.artifacts.Artifact;
9426
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
18 import org.dive4elements.artifacts.CallContext;
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.D4EArtifact;
9426
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
20 import org.dive4elements.river.artifacts.WaterLineArtifact;
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
21 import org.dive4elements.river.artifacts.model.CalculationResult;
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
22 import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
23 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineCalculationResults;
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
24 import org.dive4elements.river.artifacts.uinfo.salix.SalixLineProcessor;
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
25
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
26 /**
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
27 * The default UINFO artifact.
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
28 *
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
29 * @author Gernot Belger
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
30 */
9426
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
31 public class UINFOArtifact extends D4EArtifact implements WaterLineArtifact {
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
32
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
33 private static final long serialVersionUID = 1L;
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
34
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
35 /** Error message that is thrown if no mode has been chosen. */
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
36 private static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode";
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
37
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
38 /**
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
39 * Error message that is thrown if an invalid calculation mode has been chosen.
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
40 */
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
41 private static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode";
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
42
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
43 /** The name of the artifact. */
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
44 private static final String ARTIFACT_NAME = "uinfo";
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
45
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
46 private static final String FIELD_RIVER = "river";
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
47
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
48 private static final String FIELD_MODE = "calculation_mode";
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
49
9506
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9426
diff changeset
50 public static final String FIELD_VEGZONES = "vegzones";
8b7bf26b8782 Predefined artifact for standard vegetation zones.
gernotbelger
parents: 9426
diff changeset
51
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
52 static {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
53 // Active/deactivate facets.
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
54 // BEWARE: we can only define one activity for "uinfo", so we use the artifact
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
55 // as place for this
9039
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
56 FacetActivity.Registry.getInstance().register(ARTIFACT_NAME, new FacetActivity() {
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
57 @Override
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
58 public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) {
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
59
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
60 final String name = facet.getName();
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
61
9368
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
62 if (SalixLineProcessor.FACET_SALIX_LINE_RAW.equals(name))
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
63 return Boolean.FALSE;
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
64 if (SalixLineProcessor.FACET_SALIX_MNWMW_RAW.equals(name))
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
65 return Boolean.FALSE;
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
66 if (SalixLineProcessor.FACET_SALIX_RANK.equals(name))
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
67 return Boolean.FALSE;
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
68 if (SalixLineProcessor.FACET_SALIX_SCENARIO_FILTERED.equals(name))
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
69 return Boolean.FALSE;
6f7e92c16050 Fixed U-Info salix mw calculation, added filtered themes, own y axis, warning report
mschaefer
parents: 9316
diff changeset
70 if (SalixLineProcessor.FACET_SALIX_SCENARIO_RAW.equals(name))
9316
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
71 return Boolean.FALSE;
72b3270e1568 U-Info salix line with regional and supraregional scenario calculation and chart display
mschaefer
parents: 9039
diff changeset
72
9039
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
73 return null;
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
74 }
13b5b515c61f Cant use lambda in java 7 code
gernotbelger
parents: 9036
diff changeset
75 });
9036
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
76 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
77
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
78 /**
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
79 * Default constructor, because it's serializable.
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
80 */
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
81 public UINFOArtifact() {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
82 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
83
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
84 /**
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
85 * Returns the name of the concrete artifact.
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
86 *
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
87 * @return the name of the concrete artifact.
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
88 */
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
89 @Override
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
90 public String getName() {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
91 return ARTIFACT_NAME;
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
92 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
93
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
94 public UinfoCalcMode getCalculationMode() {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
95
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
96 final String calc = getDataAsString(FIELD_MODE);
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
97 if (calc == null) {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
98 throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE);
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
99 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
100
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
101 try {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
102 return UinfoCalcMode.valueOf(StringUtils.trimToEmpty(calc).toLowerCase());
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
103 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
104 catch (final Exception e) {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
105 throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE, e);
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
106 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
107 }
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
108
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
109 public String getRiver() {
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
110 return getDataAsString(FIELD_RIVER);
c265c9fc915c work on u-info/s-info states
gernotbelger
parents: 8996
diff changeset
111 }
9426
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
112
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
113 @Override
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
114 public double getWaterLevel(final ComputeType type, final String hash, final String stateId, final double currentKm, final Serializable waterLineIndex,
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
115 final double nextKm,
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
116 final double prevKm,
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
117 final CallContext context) {
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
118
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
119 final CalculationResult res = (CalculationResult) this.compute(context, hash, stateId, type, false);
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
120 final Object data = res.getData();
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
121 if (data instanceof SalixLineCalculationResults)
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
122 return ((SalixLineCalculationResults) data).getCrossSectionLine(currentKm, waterLineIndex, nextKm, prevKm, context);
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
123
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
124 throw new IllegalStateException("Cross section stuff should only happen for salix line");
b6e595f1696f Activated cross section output mode for salix line and implemented some themes preliminary.
gernotbelger
parents: 9368
diff changeset
125 }
8996
fb9430250899 Work on uinfo
gernotbelger
parents:
diff changeset
126 }

http://dive4elements.wald.intevation.org