comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/FixingsColumnFactory.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/FixingsColumnFactory.java@bd047b71ab37
children 4897a58c8746
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
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 :

http://dive4elements.wald.intevation.org