annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/HYKFactory.java @ 7300:83bb52fa0c32

(issue1529) Be more tolerant in the fitting. The invalid value warning is removed because invalid data is expected there when datapoints are not valid for this KM
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 11 Oct 2013 18:40:33 +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 :

http://dive4elements.wald.intevation.org