annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeightFactory.java @ 8587:07c9ac22f611

(issue1755) Generalise BedQuality result handling The bedquality calculation now produces a result for each time period which has BedQualityResultValues for each specific result type. Formally this was split up in density, porosity and diameter classes with some bedload diameter classes mixed in for extra fun. The intent of this commit is to allow more shared code and generic access patterns to the BedQuality results.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 18 Mar 2015 18:42:08 +0100
parents 17a3030bbda2
children 5e38e2924c07
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: 5863
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: 5863
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: 4051
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
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
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 net.sf.ehcache.Cache;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
15 import net.sf.ehcache.Element;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import org.apache.log4j.Logger;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import org.hibernate.SQLQuery;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 import org.hibernate.Session;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20 import org.hibernate.type.StandardBasicTypes;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
21
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4051
diff changeset
22 import org.dive4elements.river.artifacts.cache.CacheFactory;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4051
diff changeset
23 import org.dive4elements.river.backend.SessionHolder;
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24
6765
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6563
diff changeset
25
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6563
diff changeset
26 /** Create BedHeights from database. */
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27 public class BedHeightFactory {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 8153
diff changeset
28 /** Private log to use here. */
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 private static Logger log = Logger.getLogger(BedHeightFactory.class);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31 /** Query to get km and ws for wst_id and column_pos. */
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 public static final String SQL_SELECT_SINGLE =
8554
3a0522f1a532 Morphological width imported and stored with heights is redundant to table morphologic_width.
"Tom Gottfried <tom@intevation.de>"
parents: 8544
diff changeset
33 "SELECT bhsv.height, bhsv.station, bhsv.data_gap," +
3a0522f1a532 Morphological width imported and stored with heights is redundant to table morphologic_width.
"Tom Gottfried <tom@intevation.de>"
parents: 8544
diff changeset
34 " bhsv.sounding_width, bhs.year" +
8582
17a3030bbda2 Update SQL-statements to schema-changes in rev 6d8d7425a6b5.
Tom Gottfried <tom@intevation.de>
parents: 8568
diff changeset
35 " FROM bed_height bhs" +
17a3030bbda2 Update SQL-statements to schema-changes in rev 6d8d7425a6b5.
Tom Gottfried <tom@intevation.de>
parents: 8568
diff changeset
36 " JOIN bed_height_values bhsv on bhsv.bed_height_id = bhs.id";
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
37
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
38 public static final String ID_CLAUSE =
6275
2d495b504c74 Order bed heights by station.
Raimund Renkert <rrenkert@intevation.de>
parents: 5994
diff changeset
39 " WHERE bhs.id = :height_id" +
2d495b504c74 Order bed heights by station.
Raimund Renkert <rrenkert@intevation.de>
parents: 5994
diff changeset
40 " ORDER BY bhsv.station";
2d495b504c74 Order bed heights by station.
Raimund Renkert <rrenkert@intevation.de>
parents: 5994
diff changeset
41
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
42 public static final String ID_STATION_CLAUSE =
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
43 " WHERE bhs.id = :height_id AND" +
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
44 " bhsv.station BETWEEN :fromkm AND :tokm" +
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
45 " ORDER BY bhsv.station";
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 /** Query to get name (description) for wst_id. */
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 public static final String SQL_SELECT_DESCR_SINGLE =
8582
17a3030bbda2 Update SQL-statements to schema-changes in rev 6d8d7425a6b5.
Tom Gottfried <tom@intevation.de>
parents: 8568
diff changeset
49 "SELECT description FROM bed_height "+
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
50 "WHERE id = :height_id";
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 private BedHeightFactory() {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 }
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 /**
7391
9513d1af7d58 Renamed artifacts/**/BedHeight(Single) to BedHeight(Single)Data, to resolve
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
56 * Get BedHeightData for given type and height_id, caring about the cache.
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
57 * If from or to are NaN all values are returned. Otherwise only get
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
58 * values with stations between from and to.
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
59 */
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
60 public static BedHeightData getHeight(String type, int height_id, double from, double to) {
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
61 log.debug("BedHeightFactory.getHeight");
8151
a709e6334c4a IDs can be assumed to be unique.
Tom Gottfried <tom@intevation.de>
parents: 8022
diff changeset
62 Cache cache = CacheFactory.getCache("bedheight-value-table-static");
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
63
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
64 String cacheKey = Integer.toString(height_id) + ":" +
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
65 Double.toString(from) + ":" + Double.toString(to);
3614
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 if (cache != null) {
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
68 /* We could be more intelligent here and reuse cached values for
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
69 * a complete river and filter the other stations out afterwards.
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
70 * It might even be better to cache all values first and filter
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
71 * later. */
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 Element element = cache.get(cacheKey);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73 if (element != null) {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 log.debug("Got static bedheight values from cache");
7391
9513d1af7d58 Renamed artifacts/**/BedHeight(Single) to BedHeight(Single)Data, to resolve
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
75 return (BedHeightData)element.getValue();
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78 else {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 cacheKey = null;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
82 BedHeightData values = getBedHeightUncached(type, height_id, from, to);
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
83
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 if (values != null && cacheKey != null) {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
85 log.debug("Store static bed height values in cache.");
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 Element element = new Element(cacheKey, values);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 cache.put(element);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 return values;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
92 /**
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
93 * Get BedHeightData for given type and height_id, caring about the cache.
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
94 */
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
95 public static BedHeightData getHeight(String type, int height_id) {
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
96 return getHeight(type, height_id, Double.NaN, Double.NaN);
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
97 }
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
98
6563
ec32ccf7a753 More doc fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6562
diff changeset
99 /** Get name for a BedHeight. */
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
100 public static String getHeightName(String type, int height_id) {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
101 log.debug("BedHeightFactory.getHeightName height_id/" + height_id);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
102
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
103 String name = null;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
104 Session session = SessionHolder.HOLDER.get();
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
105
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
106 SQLQuery nameQuery = null;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 if (type.equals("single")) {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 nameQuery = session.createSQLQuery(SQL_SELECT_DESCR_SINGLE)
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
109 .addScalar("description", StandardBasicTypes.STRING);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
110 nameQuery.setInteger("height_id", height_id);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
111 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
112 else {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
113 return "none";
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
114 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
115 List<String> names = nameQuery.list();
4051
58bdf95df5e4 More dead code removal. Minor code clean ups.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 3897
diff changeset
116 if (!names.isEmpty()) {
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
117 name = names.get(0);
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
118 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
119
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
120 return name;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
121 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
122
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 /**
7391
9513d1af7d58 Renamed artifacts/**/BedHeight(Single) to BedHeight(Single)Data, to resolve
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
125 * Get BedHeightData from db.
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
126 *
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
127 * If from or to are negative all stations are returned. Otherwise
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
128 * only the values with a station betweend from and to.
6562
4f67b9ceb9e2 Fix doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6352
diff changeset
129 * @param height_id database id of the bed_height
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
130 * @param from minimum station value or NaN
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
131 * @param to maximum station value or NaN
6562
4f67b9ceb9e2 Fix doc.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 6352
diff changeset
132 * @return according BedHeight.
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
133 */
7391
9513d1af7d58 Renamed artifacts/**/BedHeight(Single) to BedHeight(Single)Data, to resolve
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
134 public static BedHeightData getBedHeightUncached(
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
135 String type,
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
136 int height_id,
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
137 double from,
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
138 double to)
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
139 {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
140 if (log.isDebugEnabled()) {
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
141 log.debug("BedHeightFactory.getBedHeightUncached");
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
142 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
143
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
144 Session session = SessionHolder.HOLDER.get();
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
145 SQLQuery sqlQuery = null;
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
146 if (type.equals("single")) {
8568
078b07a94023 Use updated class name instead of no more existant.
Tom Gottfried <tom@intevation.de>
parents: 8554
diff changeset
147 BedHeightData height =
078b07a94023 Use updated class name instead of no more existant.
Tom Gottfried <tom@intevation.de>
parents: 8554
diff changeset
148 new BedHeightData(getHeightName(type, height_id));
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
149 String queryString = SQL_SELECT_SINGLE;
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
150 if (Double.isNaN(from) || Double.isNaN(to)) {
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
151 queryString += ID_CLAUSE;
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
152 } else {
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
153 queryString += ID_STATION_CLAUSE;
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
154 }
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
155 sqlQuery = session.createSQLQuery(queryString)
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
156 .addScalar("height", StandardBasicTypes.DOUBLE)
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
157 .addScalar("station", StandardBasicTypes.DOUBLE)
3886
633fbb61a0cc Split bed heights into bed height epochs and single bed heights.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3614
diff changeset
158 .addScalar("data_gap", StandardBasicTypes.DOUBLE)
633fbb61a0cc Split bed heights into bed height epochs and single bed heights.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3614
diff changeset
159 .addScalar("sounding_width", StandardBasicTypes.DOUBLE)
633fbb61a0cc Split bed heights into bed height epochs and single bed heights.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3614
diff changeset
160 .addScalar("year", StandardBasicTypes.INTEGER);
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
161 sqlQuery.setInteger("height_id", height_id);
8544
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
162 if (!Double.isNaN(from) && !Double.isNaN(to)) {
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
163 sqlQuery.setDouble("fromkm", from);
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
164 sqlQuery.setDouble("tokm", to);
76113b975829 (Issue1754) Make BedDifference calculation range dependent.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8202
diff changeset
165 }
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
166 List<Object []> results = sqlQuery.list();
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
167
7254
fe32a7f9655e Reduce usage of careless 'for (int i = 0; i < x.size(); i++)' pattern.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 6765
diff changeset
168 for (Object [] row: results) {
3897
bce2dd4310a6 MINFO: Updated data fields to fit the needs of bedheight difference calculation.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3886
diff changeset
169 log.debug("got station: " + (Double)row[1]);
6352
f1a3ea7fb3b6 Insert Double.NaN for missing values in bed height factory.
Raimund Renkert <rrenkert@intevation.de>
parents: 6275
diff changeset
170 Double row0 = row[0] != null ? (Double)row[0] : Double.NaN;
f1a3ea7fb3b6 Insert Double.NaN for missing values in bed height factory.
Raimund Renkert <rrenkert@intevation.de>
parents: 6275
diff changeset
171 Double row1 = row[1] != null ? (Double)row[1] : Double.NaN;
f1a3ea7fb3b6 Insert Double.NaN for missing values in bed height factory.
Raimund Renkert <rrenkert@intevation.de>
parents: 6275
diff changeset
172 Double row2 = row[2] != null ? (Double)row[2] : Double.NaN;
f1a3ea7fb3b6 Insert Double.NaN for missing values in bed height factory.
Raimund Renkert <rrenkert@intevation.de>
parents: 6275
diff changeset
173 Double row3 = row[3] != null ? (Double)row[3] : Double.NaN;
8554
3a0522f1a532 Morphological width imported and stored with heights is redundant to table morphologic_width.
"Tom Gottfried <tom@intevation.de>"
parents: 8544
diff changeset
174 height.add(row0, row1, row2, row3, (Integer) row[4]);
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
175 }
3886
633fbb61a0cc Split bed heights into bed height epochs and single bed heights.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3614
diff changeset
176 return height;
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
177 }
7391
9513d1af7d58 Renamed artifacts/**/BedHeight(Single) to BedHeight(Single)Data, to resolve
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 7254
diff changeset
178 return new BedHeightData();
3614
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
179 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
180 }
68beaa827751 MINFO: Implemented UI and facet/artifact stack for bed height differences.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
181 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org