annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightMinMaxFacet.java @ 8961:8a1c6e2ad48b

Implemented datacage for min/max bedheights. Allow to add min/max bed heights as themes to charts.
author gernotbelger
date Wed, 28 Mar 2018 14:35:01 +0200
parents
children 45f1ad66560e
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;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
22
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
23 import gnu.trove.TDoubleArrayList;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
24
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
25 /**
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
26 * 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
27 * serialization.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
28 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
29 * @author Gernot Belger
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
30 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
31 public class BedHeightMinMaxFacet extends BlackboardDataFacet implements FacetTypes {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
32
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
33 private static final long serialVersionUID = 1L;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
34
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
35 public static enum BedHeightValueType {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
36 min {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
37 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
38 public Double getValue(final BedHeightValue bedheightValue) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
39 return bedheightValue.getMinHeight();
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
40 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
41 },
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
42 max {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
43 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
44 public Double getValue(final BedHeightValue bedheightValue) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
45 return bedheightValue.getMaxHeight();
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 value {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
49 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
50 public Double getValue(final BedHeightValue bedheightValue) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
51 return bedheightValue.getHeight();
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
52 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
53 };
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
54
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
55 public abstract Double getValue(final BedHeightValue bedheightValue);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
56 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
57
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
58 private final BedHeightValueType valueType;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
59
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
60 public BedHeightMinMaxFacet(final String name, final String description, final BedHeightValueType valueType) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
61 super(0, name, description);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
62
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
63 this.valueType = valueType;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
64
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
65 this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
66 this.metaData.put("Y", "chart.bedheight_middle.section.yaxis.label");
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
67 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
68
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
69 /**
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
70 * Returns the data this facet requires.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
71 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
72 * @param artifact
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
73 * the owner artifact.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
74 * @param context
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
75 * the CallContext (ignored).
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
76 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
77 * @return the data.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
78 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
79 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
80 public Object getData(final Artifact artifact, final CallContext context) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
81
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
82 final BedHeightAccess access = new BedHeightAccess((D4EArtifact) artifact);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
83
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
84 final BedHeight single = BedHeight.getBedHeightById(access.getHeightId());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
85
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
86 final List<BedHeightValue> bedheightValues = BedHeightValue.getBedHeightValues(single, access.getFrom(true), access.getTo(true));
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
87
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
88 final TDoubleArrayList stations = new TDoubleArrayList(bedheightValues.size());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
89 final TDoubleArrayList values = new TDoubleArrayList(bedheightValues.size());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
90
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
91 for (final BedHeightValue bedheightValue : bedheightValues) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
92
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
93 final Double station = bedheightValue.getStation();
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
94 final Double value = this.valueType.getValue(bedheightValue);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
95
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
96 if (station != null && value != null) {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
97 stations.add(station);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
98 values.add(value);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
99 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
100 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
101
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
102 this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.cur.elevation"), single.getCurElevationModel().getName());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
103
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
104 if (single.getOldElevationModel() != null)
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
105 this.addMetaData(Resources.getMsg(context.getMeta(), "meta.bedheight.old.elevation"), single.getOldElevationModel().getName());
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
106
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
107 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
108
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
109 return new double[][] { stations.toNativeArray(), values.toNativeArray() };
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
110 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
111
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
112 /**
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
113 * Create a deep copy of this Facet.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
114 *
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
115 * @return a deep copy.
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
116 */
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
117 @Override
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
118 public BedHeightMinMaxFacet deepCopy() {
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
119 final BedHeightMinMaxFacet copy = new BedHeightMinMaxFacet(this.name, this.description, this.valueType);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
120 copy.set(this);
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
121 return copy;
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
122 }
8a1c6e2ad48b Implemented datacage for min/max bedheights.
gernotbelger
parents:
diff changeset
123 }

http://dive4elements.wald.intevation.org