annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/HYKFactory.java @ 4187:21f4e4b79121

Refactor GaugeDischargeCurveFacet to be able to set a facet name For adding another output of the GaugeDischargeCurveArtifact it is necessary to provide to facet instances with different names. Therefore the GaugeDischargeCurveFacet is extended to set the facet name in the constructor.
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 19 Oct 2012 13:25:49 +0200
parents c27c4e06dd87
children
rev   line source
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.model;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
2
3278
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
3 import de.intevation.flys.artifacts.cache.CacheFactory;
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
4 import de.intevation.flys.backend.SessionHolder;
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
5 import de.intevation.flys.model.HYK;
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
6 import de.intevation.flys.model.HYKFlowZone;
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
7 import de.intevation.flys.model.HYKFormation;
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
8
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
9 import java.io.Serializable;
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
10 import java.util.ArrayList;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
11 import java.util.List;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
12
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
13 import net.sf.ehcache.Cache;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
14 import net.sf.ehcache.Element;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
15
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
16 import org.apache.log4j.Logger;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
17 import org.hibernate.Query;
3278
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
18 import org.hibernate.SQLQuery;
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
19 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
20 import org.hibernate.type.StandardBasicTypes;
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
21
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
22
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 * Factory to access HYKs (hydrographic values).
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
25 */
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
26 public class HYKFactory
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
27 {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
28 private static Logger logger = Logger.getLogger(HYKFactory.class);
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 public static String HYK_CACHE_NAME = "hykache";
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
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
33 /** Do not instantiate a HYKFactory. */
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
34 private 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
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 /**
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
39 * Get List of Zones for given river and km.
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
40 */
2139
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
41 public static Object getHYKs(int hykid, double km) {
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
42 logger.debug("HYKFactory.getHYKs");
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 Cache cache = CacheFactory.getCache(HYK_CACHE_NAME);
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 String cacheKey;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
47
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
48 if (cache != null) {
2139
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
49 cacheKey = "" + hykid + "_" + km;
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
50 Element element = cache.get(cacheKey);
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
51 if (element != null) {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
52 logger.debug("Got hyk from cache");
3278
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
53 return element.getValue();
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
54 }
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 else {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
57 cacheKey = null;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
58 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
59
2139
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
60 List<Zone> zones = getZonesUncached(hykid, km);
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
61
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
62 if (zones != null && cacheKey != null) {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
63 logger.debug("Store hykzones in cache.");
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
64 Element element = new Element(cacheKey, zones);
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
65 cache.put(element);
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
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
68 return zones;
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
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
71
2155
8c9c40459d8f Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2148
diff changeset
72 /** 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
73 public static String getHykName(int hykid) {
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
74 logger.debug("HYKFactory.getHykName " + hykid);
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
75
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
76 Session session = SessionHolder.HOLDER.get();
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
77
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
78 Query query = session.createQuery(
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
79 "select description from HYK where id = :hykid ");
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
80 query.setParameter("hykid", hykid);
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
81
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
82 return (String) query.uniqueResult();
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
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
85
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
86 /**
2155
8c9c40459d8f Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2148
diff changeset
87 * 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
88 * @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
89 * @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
90 * @return according zones.
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
91 */
2139
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
92 public static List<Zone> getZonesUncached(int hykid, double km) {
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
93 if (logger.isDebugEnabled()) {
2139
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
94 logger.debug("HYKFactory.getZoneUncached " + hykid + " km " + km);
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
95 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
96
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
97 Session session = SessionHolder.HOLDER.get();
2137
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
98
2155
8c9c40459d8f Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2148
diff changeset
99 // 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
100 // 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
101 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
102 rQuery.setParameter("hykid", hykid);
8c9c40459d8f Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2148
diff changeset
103 rQuery.setMaxResults(1);
8c9c40459d8f Respect rivers flow direction when looking for hyk-formations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2148
diff changeset
104 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
105
2419
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
106 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
107
2419
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
108 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
109 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
110
2139
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
111 // Take the first one.
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
112 if (forms.size() >= 1) {
923256599afe Somewhat improved hyk handling and rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2137
diff changeset
113 HYKFormation form = forms.get(0);
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
114 // Create respective zones.
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
115 for (HYKFlowZone flowZone: form.getZones()) {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
116 Zone z = new Zone(flowZone.getA().doubleValue(),
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
117 flowZone.getB().doubleValue(),
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
118 flowZone.getType().getName());
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
119 zones.add(z);
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
120 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
121 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
122
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
123 return zones;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
124 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
125
2419
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
126
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
127 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
128 int hykid,
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
129 double km,
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
130 double flowDir
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
131 ) {
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
132 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
133
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
134 String SQL = "SELECT " +
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
135 " f.id AS FID, " +
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
136 " 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
137 " 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
138 " e.km AS KM " +
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
139 " 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
140 " 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
141 " 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
142 " AND :km between " +
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
143 " 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
144 " AND " +
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
145 " 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
146
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
147 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
148 .addScalar("FID", StandardBasicTypes.INTEGER)
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
149 .addScalar("DIST", StandardBasicTypes.DOUBLE)
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
150 .addScalar("HID", StandardBasicTypes.INTEGER)
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
151 .addScalar("KM", StandardBasicTypes.DOUBLE);
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
152
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
153 sqlQuery.setInteger("hykid", hykid);
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
154 sqlQuery.setDouble("flowDir", flowDir);
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
155 sqlQuery.setDouble("km", km);
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
156
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
157 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
158
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
159 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
160
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
161 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
162
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
163 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
164 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
165 return new ArrayList<HYKFormation>();
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
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
168 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
169 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
170
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
171 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
172 query.setParameter("id", hykFormationId);
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
173 query.setMaxResults(1);
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 return query.list();
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
176 }
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
177
98a350bb91a9 Fixed broken HYKs in crosssection charts for river Mosel.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 2155
diff changeset
178
3278
c27c4e06dd87 Re-add HYK rendering code to CrossSectionGenerator
Christian Lins <christian.lins@intevation.de>
parents: 2557
diff changeset
179 /** Labeled section. */
2148
345a236f7075 Made HYKFactory.Zone Serializable (and thus cachable).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2139
diff changeset
180 public static class Zone implements Serializable {
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
181 /** Lower end of segment. */
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
182 protected double from;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
183 /** Upper end of segment. */
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
184 protected double to;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
185 /** The label. */
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
186 protected String name;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
187
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
188 /** Constructor for labelled section. */
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
189 public Zone (double from, double to, String name) {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
190 this.from = from;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
191 this.to = to;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
192 this.name = name;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
193 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
194
2137
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
195 /** Get upper value. */
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
196 public double getTo() {
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
197 return to;
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
198 }
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
199
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
200 /** Get lower value. */
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
201 public double getFrom() {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
202 return from;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
203 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
204
2137
04b6b6a4564d Prepare improved hyk-handling.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2131
diff changeset
205 /** Get name (type). */
2131
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
206 public String getName() {
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
207 return name;
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
208 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
209 } // public static class Zone
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
210 }
e50a928187cd Added stubby hyk infrastructure.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
211 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org