Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java @ 8964:45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
author | gernotbelger |
---|---|
date | Thu, 29 Mar 2018 15:48:17 +0200 |
parents | 8a1c6e2ad48b |
children |
rev | line source |
---|---|
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
2 * Software engineering by Intevation GmbH |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
3 * |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5867
diff
changeset
|
4 * This file is Free Software under the GNU AGPL (>=v3) |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the |
5994
af13ceeba52a
Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5867
diff
changeset
|
6 * documentation coming with Dive4Elements River for details. |
5863
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
7 */ |
4897a58c8746
River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
5838
diff
changeset
|
8 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
9 package org.dive4elements.river.artifacts; |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
10 |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
11 import java.util.ArrayList; |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
12 import java.util.List; |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
13 |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
14 import org.apache.log4j.Logger; |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
15 import org.dive4elements.artifactdatabase.state.DefaultOutput; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
16 import org.dive4elements.artifactdatabase.state.Facet; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
17 import org.dive4elements.artifactdatabase.state.FacetActivity; |
8961 | 18 import org.dive4elements.artifacts.Artifact; |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
19 import org.dive4elements.artifacts.ArtifactFactory; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
20 import org.dive4elements.artifacts.CallMeta; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
21 import org.dive4elements.artifacts.common.utils.XMLUtils; |
7337
3df290c09c21
BedHeightsArtifact: Use FacetTypes, eliminate local facet type definition.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
7263
diff
changeset
|
22 import org.dive4elements.river.artifacts.model.FacetTypes; |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
23 import org.dive4elements.river.artifacts.model.minfo.BedHeightFacet; |
8961 | 24 import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet; |
7984
cf674b03901a
Bedheight facet now returns double[][]. Removed obsolete processor code.
Raimund Renkert <rrenkert@intevation.de>
parents:
7842
diff
changeset
|
25 import org.dive4elements.river.artifacts.model.minfo.BedHeightSoundingWidthFacet; |
8961 | 26 import org.dive4elements.river.artifacts.resources.Resources; |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
4655
diff
changeset
|
27 import org.dive4elements.river.artifacts.states.StaticState; |
8961 | 28 import org.dive4elements.river.exports.process.BedHeightProcessor; |
8964
45f1ad66560e
Code cleanup concerning calculations: improved error handling; improved interpolation; bed heights are now always used for spatial discretisation
gernotbelger
parents:
8961
diff
changeset
|
29 import org.dive4elements.river.model.BedHeightValueType; |
8961 | 30 import org.w3c.dom.Document; |
7477
bc16d5031b31
issue1657: Spawn BEDHEIGHT_SOUNDING_WIDTH facet if asked to. Twiggly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
7338
diff
changeset
|
31 |
8961 | 32 public class BedHeightsArtifact extends AbstractStaticStateArtifact implements FacetTypes { |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
33 /** The log for this class. */ |
8961 | 34 private static Logger log = Logger.getLogger(BedHeightsArtifact.class); |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
35 |
7337
3df290c09c21
BedHeightsArtifact: Use FacetTypes, eliminate local facet type definition.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
7263
diff
changeset
|
36 /** Artifact name. */ |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
37 private static final String NAME = "bedheights"; |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
38 |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
39 static { |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
40 // TODO: Move to configuration. |
8961 | 41 FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE); |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
42 } |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
43 |
8961 | 44 public static final String STATIC_STATE_NAME = "state.additional_bedheights.static"; |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
45 |
8961 | 46 /** |
47 * Data Item name to know whether we are Heighmarks and receive | |
48 * some data slightly different. | |
49 */ | |
50 public static final String DATA_HEIGHT_TYPE = "height_marks"; | |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
51 |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
52 /** |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
53 * Trivial Constructor. |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
54 */ |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
55 public BedHeightsArtifact() { |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
56 log.debug("BedHeightsArtifact.BedHeightsArtifact"); |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
57 } |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
58 |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
59 @Override |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
60 public String getName() { |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
61 return NAME; |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
62 } |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
63 |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
64 /** |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
65 * Gets called from factory, to set things up. |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
66 */ |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
67 @Override |
8961 | 68 public void setup(final String identifier, final ArtifactFactory factory, final Object context, final CallMeta callMeta, final Document data, |
69 final List<Class> loadFacets) { | |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
70 log.debug("BedHeightsArtifact.setup"); |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
71 |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
72 if (log.isDebugEnabled()) { |
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
73 log.debug(XMLUtils.toString(data)); |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
74 } |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
75 |
8961 | 76 final String code = getDatacageIDValue(data); |
7984
cf674b03901a
Bedheight facet now returns double[][]. Removed obsolete processor code.
Raimund Renkert <rrenkert@intevation.de>
parents:
7842
diff
changeset
|
77 |
8961 | 78 createFacets(callMeta, code); |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
79 |
8961 | 80 super.setup(identifier, factory, context, callMeta, data, loadFacets); |
81 } | |
7477
bc16d5031b31
issue1657: Spawn BEDHEIGHT_SOUNDING_WIDTH facet if asked to. Twiggly.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
7338
diff
changeset
|
82 |
8961 | 83 private void createFacets(final CallMeta callMeta, final String code) { |
84 if (code == null) | |
85 return; | |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
86 |
8961 | 87 final String[] parts = code.split("-", 5); |
88 if (parts.length < 5) { | |
89 log.error("Invalid datacage ID '" + code + "'"); | |
90 return; | |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
91 } |
8961 | 92 |
93 // String name = parts[0]; | |
94 | |
95 // type may only be 'single' or 'soundings' | |
96 final String type = parts[1]; | |
97 | |
98 final String heightId = parts[2]; | |
99 // final int hId = Integer.parseInt(heightId); | |
100 | |
101 // final String year = parts[3]; | |
102 final String bedHName = parts[4]; | |
103 | |
104 addStringData("height_id", heightId); | |
105 if (type.equals("soundings")) | |
106 addStringData("type", "singlevalues"); | |
107 else | |
108 addStringData("type", type); | |
109 | |
110 final ArrayList<Facet> facets = new ArrayList<>(1); | |
111 | |
112 if ("soundings".equals(type)) { | |
113 final String description = Resources.getMsg(callMeta, "facet.bedheight.sounding_width", new Object[] { bedHName }); | |
114 facets.add(new BedHeightSoundingWidthFacet(BEDHEIGHT_SOUNDING_WIDTH, description)); | |
115 } else if ("single".equals(type)) | |
116 facets.add(new BedHeightFacet(BEDHEIGHT, bedHName)); | |
117 else if ("singleMin".equals(type)) | |
118 facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MIN, bedHName, BedHeightValueType.min)); | |
119 else if ("singleMax".equals(type)) | |
120 facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MAX, bedHName, BedHeightValueType.max)); | |
121 | |
122 addFacets(STATIC_STATE_NAME, facets); | |
3614
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
123 } |
68beaa827751
MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff
changeset
|
124 |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
125 @Override |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
126 protected void initStaticState() { |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
127 |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
128 log.debug("initStaticState " + getName() + " " + identifier()); |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
129 |
8961 | 130 final StaticState state = new StaticState(STATIC_STATE_NAME); |
131 final DefaultOutput output = new DefaultOutput("general", "general", "image/png", "chart"); | |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
132 |
8961 | 133 final List<Facet> facets = getFacets(STATIC_STATE_NAME); |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
134 output.addFacets(facets); |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
135 state.addOutput(output); |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
136 |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
137 setStaticState(state); |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
138 } |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
139 |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
140 @Override |
8961 | 141 protected void initialize(final Artifact artifact, final Object context, final CallMeta meta) { |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
142 // do not clone facets, etc. from master artifact |
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
143 |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
144 log.debug("initialize"); |
8961 | 145 importData((D4EArtifact) artifact, "river"); |
146 importData((D4EArtifact) artifact, "ld_from"); | |
147 importData((D4EArtifact) artifact, "ld_to"); | |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
148 |
8202
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
149 log.debug("ld_from " + getDataAsString("ld_from")); |
e4606eae8ea5
sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents:
8169
diff
changeset
|
150 log.debug("ld_to " + getDataAsString("ld_to")); |
4535
b838d16c629e
Refactor BedHeightArtifacts to provide bed height single values of a range
Björn Ricks <bjoern.ricks@intevation.de>
parents:
4502
diff
changeset
|
151 } |
8961 | 152 } |