Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/FixingsColumnFactory.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsColumnFactory.java@a441be7f1589 |
children |
comparison
equal
deleted
inserted
replaced
5830:160f53ee0870 | 5831:bd047b71ab37 |
---|---|
1 package org.dive4elements.river.artifacts.model; | |
2 | |
3 import org.dive4elements.river.artifacts.model.FixingsOverview.Fixing; | |
4 | |
5 import org.dive4elements.river.artifacts.cache.CacheFactory; | |
6 | |
7 import org.dive4elements.river.backend.SessionHolder; | |
8 | |
9 import java.util.List; | |
10 | |
11 import net.sf.ehcache.Cache; | |
12 import net.sf.ehcache.Element; | |
13 | |
14 import org.hibernate.Session; | |
15 import org.hibernate.SQLQuery; | |
16 | |
17 import org.hibernate.type.StandardBasicTypes; | |
18 | |
19 import org.apache.log4j.Logger; | |
20 | |
21 public class FixingsColumnFactory | |
22 { | |
23 private static Logger log = Logger.getLogger(FixingsColumnFactory.class); | |
24 | |
25 public static final String CACHE_NAME = "fixings-columns"; | |
26 | |
27 public static final String SQL_COLUMN_WS = | |
28 "SELECT wcv.position AS km, wcv.w AS w " + | |
29 "FROM wst_column_values wcv " + | |
30 "WHERE wst_column_id = :column_id " + | |
31 "ORDER by wcv.position"; | |
32 | |
33 public static final String SQL_COLUMN_QS = | |
34 "SELECT wqr.q AS q, r.a AS a, r.b AS b " + | |
35 "FROM wst_column_q_ranges wcqr " + | |
36 "JOIN wst_q_ranges wqr ON wcqr.wst_q_range_id = wqr.id " + | |
37 "JOIN ranges r ON wqr.range_id = r.id " + | |
38 "WHERE wcqr.wst_column_id = :column_id ORDER by r.a"; | |
39 | |
40 public static final FixingsColumnFactory INSTANCE = | |
41 new FixingsColumnFactory(); | |
42 | |
43 private FixingsColumnFactory() { | |
44 } | |
45 | |
46 public static FixingsColumnFactory getInstance() { | |
47 return INSTANCE; | |
48 } | |
49 | |
50 public FixingsColumn getColumnData(Fixing.Column column) { | |
51 | |
52 boolean debug = log.isDebugEnabled(); | |
53 | |
54 if (debug) { | |
55 log.debug("FixingsColumnFactory.getColumnData"); | |
56 } | |
57 | |
58 Cache cache = CacheFactory.getCache(CACHE_NAME); | |
59 | |
60 if (cache == null) { | |
61 if (debug) { | |
62 log.debug("Cache unconfigured."); | |
63 } | |
64 return getUncached(column); | |
65 } | |
66 | |
67 Integer cacheKey = Integer.valueOf(column.getId()); | |
68 Element element = cache.get(cacheKey); | |
69 | |
70 if (element != null) { | |
71 if (debug) { | |
72 log.debug("Column " + cacheKey + " found in cache."); | |
73 } | |
74 return (FixingsColumn)element.getValue(); | |
75 } | |
76 else { | |
77 FixingsColumn result = getUncached(column); | |
78 if (result != null) { | |
79 if (debug) { | |
80 log.debug("Store column " + cacheKey + " into cache."); | |
81 } | |
82 cache.put(new Element(cacheKey, result)); | |
83 } | |
84 return result; | |
85 } | |
86 } | |
87 | |
88 protected FixingsColumn getUncached(Fixing.Column column) { | |
89 Session session = SessionHolder.HOLDER.get(); | |
90 | |
91 SQLQuery sqlQuery = session.createSQLQuery(SQL_COLUMN_WS) | |
92 .addScalar("km", StandardBasicTypes.DOUBLE) | |
93 .addScalar("w", StandardBasicTypes.DOUBLE); | |
94 | |
95 sqlQuery.setInteger("column_id", column.getId()); | |
96 | |
97 List<Object []> results = sqlQuery.list(); | |
98 | |
99 if (results.isEmpty()) { | |
100 return null; | |
101 } | |
102 | |
103 double [] kms = new double[results.size()]; | |
104 double [] ws = new double[kms.length]; | |
105 | |
106 for (int i = 0; i < kms.length; ++i) { | |
107 Object [] row = results.get(i); | |
108 kms[i] = ((Double)row[0]).doubleValue(); | |
109 ws [i] = ((Double)row[1]).doubleValue(); | |
110 } | |
111 | |
112 sqlQuery = session.createSQLQuery(SQL_COLUMN_QS) | |
113 .addScalar("q", StandardBasicTypes.DOUBLE) | |
114 .addScalar("a", StandardBasicTypes.DOUBLE) | |
115 .addScalar("b", StandardBasicTypes.DOUBLE); | |
116 | |
117 sqlQuery.setInteger("column_id", column.getId()); | |
118 | |
119 results = sqlQuery.list(); | |
120 | |
121 if (results.isEmpty()) { | |
122 return null; | |
123 } | |
124 | |
125 QRangeTree qs = new QRangeTree( | |
126 results, QRangeTree.WITHOUT_COLUMN, 0, results.size()); | |
127 | |
128 return new FixingsColumn(kms, ws, qs); | |
129 } | |
130 } | |
131 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |