annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightMinMaxFacet.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
8961
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
3 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
7 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
8
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
10
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
11 import java.util.List;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
12
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
13 import org.dive4elements.artifacts.Artifact;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
14 import org.dive4elements.artifacts.CallContext;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
15 import org.dive4elements.river.artifacts.D4EArtifact;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
16 import org.dive4elements.river.artifacts.access.BedHeightAccess;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
17 import org.dive4elements.river.artifacts.model.BlackboardDataFacet;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
18 import org.dive4elements.river.artifacts.model.FacetTypes;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
19 import org.dive4elements.river.artifacts.resources.Resources;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
20 import org.dive4elements.river.model.BedHeight;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.model.BedHeightValue;
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
22 import org.dive4elements.river.model.BedHeightValueType;
8961
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
23
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
24 import gnu.trove.TDoubleArrayList;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
25
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
26 /**
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
27 * More or less the same as {@link BedHeightFacet}, but was necessary to copy because else we break the old
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
28 * serialization.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
29 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
30 * @author Gernot Belger
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
31 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
32 public class BedHeightMinMaxFacet extends BlackboardDataFacet implements FacetTypes {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
33
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
34 private static final long serialVersionUID = 1L;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
35
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
36 private final BedHeightValueType valueType;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
37
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
38 public BedHeightMinMaxFacet(final String name, final String description, final BedHeightValueType valueType) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
39 super(0, name, description);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
40
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
41 this.valueType = valueType;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
42
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
43 this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
44 this.metaData.put("Y", "chart.bedheight_middle.section.yaxis.label");
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
45 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
46
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
47 /**
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
48 * Returns the data this facet requires.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
49 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
50 * @param artifact
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
51 * the owner artifact.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
52 * @param context
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
53 * the CallContext (ignored).
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
54 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
55 * @return the data.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
56 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
57 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
58 public Object getData(final Artifact artifact, final CallContext context) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
59
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
60 final BedHeightAccess access = new BedHeightAccess((D4EArtifact) artifact);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
61
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
62 final BedHeight single = BedHeight.getBedHeightById(access.getHeightId());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
63
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
64 final List<BedHeightValue> bedheightValues = BedHeightValue.getBedHeightValues(single, access.getFrom(true), access.getTo(true));
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
65
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
66 final TDoubleArrayList stations = new TDoubleArrayList(bedheightValues.size());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
67 final TDoubleArrayList values = new TDoubleArrayList(bedheightValues.size());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
68
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
69 for (final BedHeightValue bedheightValue : bedheightValues) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
70
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
71 final Double station = bedheightValue.getStation();
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
72 final Double value = this.valueType.getValue(bedheightValue);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
73
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
74 if (station != null && value != null) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
75 stations.add(station);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
76 values.add(value);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
77 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
78 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
79
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
80 this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.cur.elevation"), single.getCurElevationModel().getName());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
81
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
82 if (single.getOldElevationModel() != null)
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
83 this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.old.elevation"), single.getOldElevationModel().getName());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
84
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
85 this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.river.elevation"), access.getRiver().getWstUnit().getName());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
86
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
87 return new double[][] { stations.toNativeArray(), values.toNativeArray() };
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
88 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
89
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
90 /**
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
91 * Create a deep copy of this Facet.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
92 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
93 * @return a deep copy.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
94 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
95 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
96 public BedHeightMinMaxFacet deepCopy() {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
97 final BedHeightMinMaxFacet copy = new BedHeightMinMaxFacet(this.name, this.description, this.valueType);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
98 copy.set(this);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
99 return copy;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
100 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
101 }

http://dive4elements.wald.intevation.org