Mercurial > dive4elements > river
annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/HYKFactory.java @ 6152:0587819960c3
Waterlevel differences & bed height differences: Add new model LinearInterpolated intented to unify the two very similiar calculations. The focus of the current implementation is correctness and not speed! The fact that the data sets more mostly sorted by station is not exploited. Doing so would improve performance significantly.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Sun, 02 Jun 2013 17:52:53 +0200 |
parents | af13ceeba52a |
children | fac1aa67931b |
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:
3278
diff
changeset
|
9 package org.dive4elements.river.artifacts.model; |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
10 |
5831
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3278
diff
changeset
|
11 import org.dive4elements.river.artifacts.cache.CacheFactory; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3278
diff
changeset
|
12 import org.dive4elements.river.backend.SessionHolder; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3278
diff
changeset
|
13 import org.dive4elements.river.model.HYK; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3278
diff
changeset
|
14 import org.dive4elements.river.model.HYKFlowZone; |
bd047b71ab37
Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents:
3278
diff
changeset
|
15 import org.dive4elements.river.model.HYKFormation; |
3278
c27c4e06dd87
Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents:
2423
diff
changeset
|
16 |
c27c4e06dd87
Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents:
2423
diff
changeset
|
17 import java.io.Serializable; |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
18 import java.util.ArrayList; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
19 import java.util.List; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
20 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
21 import net.sf.ehcache.Cache; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
22 import net.sf.ehcache.Element; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
23 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
24 import org.apache.log4j.Logger; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
25 import org.hibernate.Query; |
3278
c27c4e06dd87
Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents:
2423
diff
changeset
|
26 import org.hibernate.SQLQuery; |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
27 import org.hibernate.Session; |
2419
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
28 import org.hibernate.type.StandardBasicTypes; |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
29 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
30 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
31 /** |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
32 * Factory to access HYKs (hydrographic values). |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
33 */ |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
34 public class HYKFactory |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
35 { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
36 private static Logger logger = Logger.getLogger(HYKFactory.class); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
37 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
38 public static String HYK_CACHE_NAME = "hykache"; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
39 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
40 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
41 /** Do not instantiate a HYKFactory. */ |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
42 private HYKFactory() { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
43 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
44 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
45 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
46 /** |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
47 * Get List of Zones for given river and km. |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
48 */ |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
49 public static Object getHYKs(int hykid, double km) { |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
50 logger.debug("HYKFactory.getHYKs"); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
51 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
52 Cache cache = CacheFactory.getCache(HYK_CACHE_NAME); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
53 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
54 String cacheKey; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
55 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
56 if (cache != null) { |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
57 cacheKey = "" + hykid + "_" + km; |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
58 Element element = cache.get(cacheKey); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
59 if (element != null) { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
60 logger.debug("Got hyk from cache"); |
3278
c27c4e06dd87
Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents:
2423
diff
changeset
|
61 return element.getValue(); |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
62 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
63 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
64 else { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
65 cacheKey = null; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
66 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
67 |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
68 List<Zone> zones = getZonesUncached(hykid, km); |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
69 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
70 if (zones != null && cacheKey != null) { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
71 logger.debug("Store hykzones in cache."); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
72 Element element = new Element(cacheKey, zones); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
73 cache.put(element); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
74 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
75 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
76 return zones; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
77 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
78 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
79 |
2155
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
80 /** Return name for hyk with given id. */ |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
81 public static String getHykName(int hykid) { |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
82 logger.debug("HYKFactory.getHykName " + hykid); |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
83 |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
84 Session session = SessionHolder.HOLDER.get(); |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
85 |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
86 Query query = session.createQuery( |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
87 "select description from HYK where id = :hykid "); |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
88 query.setParameter("hykid", hykid); |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
89 |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
90 return (String) query.uniqueResult(); |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
91 } |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
92 |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
93 |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
94 /** |
2155
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
95 * Ask DB for hyk zones. |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
96 * @param hykid ID of the 'main' HYK to query. |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
97 * @param km for which to get the hyk-zones. |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
98 * @return according zones. |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
99 */ |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
100 public static List<Zone> getZonesUncached(int hykid, double km) { |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
101 if (logger.isDebugEnabled()) { |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
102 logger.debug("HYKFactory.getZoneUncached " + hykid + " km " + km); |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
103 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
104 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
105 Session session = SessionHolder.HOLDER.get(); |
2137
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
106 |
2155
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
107 // Find out flow-direction of river. |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
108 // OPTIMIZE: 1) query kmUp directly 2) merge queries. |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
109 Query rQuery = session.createQuery("from HYK where id = :hykid"); |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
110 rQuery.setParameter("hykid", hykid); |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
111 rQuery.setMaxResults(1); |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
112 HYK hyk = (HYK) rQuery.uniqueResult(); |
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
113 |
2419
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
114 double flowDir = hyk.getRiver().getKmUp() ? 1 : -1; |
2148
345a236f7075
Made HYKFactory.Zone Serializable (and thus cachable).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2139
diff
changeset
|
115 |
2419
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
116 List<HYKFormation> forms = getHYKFormations(hykid, km, flowDir); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
117 List<Zone> zones = new ArrayList<Zone>(); |
2155
8c9c40459d8f
Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2148
diff
changeset
|
118 |
2139
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
119 // Take the first one. |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
120 if (forms.size() >= 1) { |
923256599afe
Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2137
diff
changeset
|
121 HYKFormation form = forms.get(0); |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
122 // Create respective zones. |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
123 for (HYKFlowZone flowZone: form.getZones()) { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
124 Zone z = new Zone(flowZone.getA().doubleValue(), |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
125 flowZone.getB().doubleValue(), |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
126 flowZone.getType().getName()); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
127 zones.add(z); |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
128 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
129 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
130 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
131 return zones; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
132 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
133 |
2419
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
134 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
135 protected static List<HYKFormation> getHYKFormations( |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
136 int hykid, |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
137 double km, |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
138 double flowDir |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
139 ) { |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
140 Session session = SessionHolder.HOLDER.get(); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
141 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
142 String SQL = "SELECT " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
143 " f.id AS FID, " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
144 " f.distance_vl AS DIST, " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
145 " e.hyk_id AS HID, " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
146 " e.km AS KM " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
147 " FROM hyk_formations f INNER JOIN hyk_entries e " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
148 " ON e.id = f.hyk_entry_id " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
149 " WHERE e.hyk_id = :hykid " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
150 " AND :km between " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
151 " LEAST(e.km, e.km + :flowDir*(f.distance_vl/1000.0+0.001)) " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
152 " AND " + |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
153 " GREATEST(e.km, e.km + :flowDir*(f.distance_vl/1000.0+0.001))"; |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
154 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
155 SQLQuery sqlQuery = session.createSQLQuery(SQL) |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
156 .addScalar("FID", StandardBasicTypes.INTEGER) |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
157 .addScalar("DIST", StandardBasicTypes.DOUBLE) |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
158 .addScalar("HID", StandardBasicTypes.INTEGER) |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
159 .addScalar("KM", StandardBasicTypes.DOUBLE); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
160 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
161 sqlQuery.setInteger("hykid", hykid); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
162 sqlQuery.setDouble("flowDir", flowDir); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
163 sqlQuery.setDouble("km", km); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
164 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
165 logger.debug("HYK SQL: " + sqlQuery.getQueryString()); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
166 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
167 List<Object[]> results = sqlQuery.list(); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
168 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
169 logger.debug("Found " + results.size() + " HYKFormation IDs in DB."); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
170 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
171 if (results == null || results.isEmpty()) { |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
172 logger.debug("No HYK found for ID " + hykid + " at km " + km); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
173 return new ArrayList<HYKFormation>(); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
174 } |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
175 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
176 Object[] resultSet = results.get(0); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
177 Integer hykFormationId = (Integer) resultSet[0]; |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
178 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
179 Query query = session.createQuery("from HYKFormation where id = :id"); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
180 query.setParameter("id", hykFormationId); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
181 query.setMaxResults(1); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
182 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
183 return query.list(); |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
184 } |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
185 |
98a350bb91a9
Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2155
diff
changeset
|
186 |
3278
c27c4e06dd87
Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents:
2423
diff
changeset
|
187 /** Labeled section. */ |
2148
345a236f7075
Made HYKFactory.Zone Serializable (and thus cachable).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2139
diff
changeset
|
188 public static class Zone implements Serializable { |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
189 /** Lower end of segment. */ |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
190 protected double from; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
191 /** Upper end of segment. */ |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
192 protected double to; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
193 /** The label. */ |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
194 protected String name; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
195 |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
196 /** Constructor for labelled section. */ |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
197 public Zone (double from, double to, String name) { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
198 this.from = from; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
199 this.to = to; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
200 this.name = name; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
201 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
202 |
2137
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
203 /** Get upper value. */ |
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
204 public double getTo() { |
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
205 return to; |
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
206 } |
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
207 |
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
208 /** Get lower value. */ |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
209 public double getFrom() { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
210 return from; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
211 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
212 |
2137
04b6b6a4564d
Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
2131
diff
changeset
|
213 /** Get name (type). */ |
2131
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
214 public String getName() { |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
215 return name; |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
216 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
217 } // public static class Zone |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
218 } |
e50a928187cd
Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff
changeset
|
219 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |