annotate artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/salix/DistanceOnlyPartHistoricalSelect.java @ 9246:c08d5cfa4981

some hibernate queries on bedheigts for salix
author gernotbelger
date Thu, 12 Jul 2018 11:15:42 +0200
parents
children 1ec3b891ab02
rev   line source
9246
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
2 * Software engineering by Intevation GmbH
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
3 *
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
7 */
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
8
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
9 package org.dive4elements.river.artifacts.uinfo.salix;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
10
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
11 import java.util.HashMap;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
12 import java.util.Iterator;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
13 import java.util.List;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
14 import java.util.Map;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
15 import java.util.TreeMap;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
16
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
17 import org.apache.log4j.Logger;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
18 import org.dive4elements.artifacts.Artifact;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
19 import org.dive4elements.artifacts.CallContext;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
20 import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
21 import org.dive4elements.river.artifacts.resources.Resources;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
22 import org.dive4elements.river.artifacts.states.AddTableDataHelper;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
23 import org.dive4elements.river.artifacts.states.DistanceOnlySelect;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
24 import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
25 import org.dive4elements.river.model.BedHeight;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
26 import org.w3c.dom.Element;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
27
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
28 public class DistanceOnlyPartHistoricalSelect extends DistanceOnlySelect {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
29
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
30 private static final long serialVersionUID = 1L;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
31 private static Logger log = Logger.getLogger(DistanceOnlyPartHistoricalSelect.class);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
32
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
33 List<BedHeight> bhs = null;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
34
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
35 @Override
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
36 protected String getUIProvider() {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
37 return "distance_only_part_historical_panel";
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
38 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
39
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
40 @Override
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
41 protected String getTitle(final CallContext context) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
42 // REMARK: that is how it should be: return Resources.getMsg(context.getMeta(), getID());
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
43 return Resources.getMsg(context.getMeta(), "state.title.distance_part_state");
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
44 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
45
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
46 @Override
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
47 protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
48 final String datakey = "bedheights_for_part";
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
49
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
50 try {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
51 if (datakey.equals(name)) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
52 makeDataSourceYearEpoch(artifact, creator, select, context, getBedheights(artifact)); // ist nur n test
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
53 } else if (name.equals("ld_from_part")) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
54
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
55 final SalixLineAccess access = new SalixLineAccess((UINFOArtifact) artifact);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
56 final double lowerSoundings = this.getLowerUpperKmRange(getBedheights(artifact))[0];
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
57 final double lowerKm = access.getLowerKm() > lowerSoundings ? access.getLowerKm() : lowerSoundings;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
58
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
59 creator.addAttr(select, "type", "options", true);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
60
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
61 final Element item = creator.create("item");
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
62 creator.addAttr(item, "label", "from_test", true);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
63 creator.addAttr(item, "value", String.valueOf(lowerKm), true);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
64
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
65 select.appendChild(item);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
66 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
67
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
68 else if (name.equals("ld_to_part")) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
69 final SalixLineAccess access = new SalixLineAccess((UINFOArtifact) artifact);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
70 final double upperSoundings = this.getLowerUpperKmRange(getBedheights(artifact))[1];
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
71 final double upperKm = access.getUpperKm() < upperSoundings ? access.getUpperKm() : upperSoundings;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
72
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
73 creator.addAttr(select, "type", "options", true);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
74
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
75 final Element item = creator.create("item");
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
76 creator.addAttr(item, "label", "to_test", true);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
77 creator.addAttr(item, "value", String.valueOf(upperKm), true);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
78
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
79 select.appendChild(item);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
80
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
81 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
82 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
83 catch (
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
84
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
85 final IllegalArgumentException iae) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
86 iae.printStackTrace();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
87 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
88 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
89
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
90 private List<BedHeight> getBedheights(final Artifact artifact) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
91 if (this.bhs == null) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
92 final SalixLineAccess access = new SalixLineAccess((UINFOArtifact) artifact);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
93 final Integer year = access.getYear();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
94
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
95 final Integer epoch = access.getEpoch();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
96 final boolean isEpoch = epoch == null ? false : true;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
97 this.bhs = BedHeight.getBedHeightYearEpoch(isEpoch, isEpoch ? epoch : year, access.getRiver(), access.getLowerKm(), access.getUpperKm());
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
98 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
99 return this.bhs;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
100
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
101 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
102
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
103 private static final void makeDataSourceYearEpoch(final Artifact artifact, final ElementCreator creator, final Element select, final CallContext context,
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
104 final List<BedHeight> bedheights) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
105
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
106 final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta());
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
107
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
108 helper.addColumn(0, "from_to", "100", "year", "INTEGER", "LEFT", null);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
109 helper.addColumn(1, "description", "500", "uinfo.salix.soundings", "STRING", "LEFT", null);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
110
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
111 final TreeMap<String, String> bedHeightSorted = new TreeMap<>();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
112 final double min = Double.MAX_VALUE;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
113 final double max = -Double.MAX_VALUE;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
114
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
115 for (final BedHeight bh : bedheights) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
116 final org.dive4elements.river.model.Range range = BedHeight.getRangeFromBedHeights(bh);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
117 final Double from = range.getA().doubleValue(); // NullPointer check??
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
118 final Double to = range.getB().doubleValue();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
119
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
120 bedHeightSorted.put(bh.getDescription(), String.valueOf(from) + " - " + String.valueOf(to));
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
121 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
122 final Iterator<String> iterator = bedHeightSorted.keySet().iterator();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
123 while (iterator.hasNext()) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
124 final String descr = iterator.next();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
125 final String fromTo = bedHeightSorted.get(descr);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
126 final Map<String, String> row = new HashMap<>();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
127 row.put("from_to", String.valueOf(fromTo));
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
128 row.put("description", descr);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
129 helper.addRow(row);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
130 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
131
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
132 helper.submitMapToXml();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
133 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
134
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
135 private double[] getLowerUpperKmRange(final List<BedHeight> bedheights) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
136 double min = Double.MAX_VALUE;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
137 double max = -Double.MAX_VALUE;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
138
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
139 for (final BedHeight bh : bedheights) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
140 final org.dive4elements.river.model.Range range = BedHeight.getRangeFromBedHeights(bh);
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
141 try {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
142 final Double from = range.getA().doubleValue(); // NullPointer check?? -> try catch
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
143 final Double to = range.getB().doubleValue();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
144
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
145 final double upper = to > from ? to : from;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
146 final double lower = from < to ? from : to;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
147 if (upper > max)
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
148 max = upper;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
149
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
150 if (lower < min)
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
151 min = lower;
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
152 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
153 catch (final Exception e) {
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
154 e.printStackTrace();
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
155 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
156
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
157 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
158 return new double[] { min, max };
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
159 }
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
160
c08d5cfa4981 some hibernate queries on bedheigts for salix
gernotbelger
parents:
diff changeset
161 }

http://dive4elements.wald.intevation.org