annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsColumnFactory.java @ 2619:6ed24efc80de

Loaded columns of fixings from database and store them into the cache. flys-artifacts/trunk@4204 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 05 Apr 2012 15:29:52 +0000
parents b0597a63fe70
children cc0fa1798a3c
rev   line source
2615
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.model;
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import de.intevation.flys.artifacts.model.FixingsOverview.Fixing;
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4
2619
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
5 import de.intevation.flys.artifacts.cache.CacheFactory;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
6
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
7 import de.intevation.flys.backend.SessionHolder;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
8
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
9 import java.util.List;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
10
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
11 import net.sf.ehcache.Cache;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
12 import net.sf.ehcache.Element;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
13
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
14 import org.hibernate.Session;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
15 import org.hibernate.SQLQuery;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
16
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
17 import org.hibernate.type.StandardBasicTypes;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
18
2615
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 public class FixingsColumnFactory
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 {
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 public static final String CACHE_NAME = "fixing-columns";
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22
2619
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
23 public static final String SQL_COLUMN_WS =
2615
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 "SELECT wcv.position AS km, wcv.w AS w " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 "FROM wst_column_values wcv " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 "WHERE wst_column_id = :column_id " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 "ORDER by wcv.position";
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
2619
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
29 public static final String SQL_COLUMN_QS =
2615
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 "SELECT wqr.q AS q, r.a AS a, r.b AS b " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 "FROM wst_column_q_ranges wcqr " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 "JOIN wst_q_ranges wqr ON wcqr.wst_q_range_id = wqr.id " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 "JOIN ranges r ON wqr.range_id = r.id " +
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 "WHERE wcqr.wst_column_id = :column_id ORDER by r.a";
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 public static final FixingsColumnFactory INSTANCE =
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 new FixingsColumnFactory();
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 private FixingsColumnFactory() {
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 }
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 public FixingsColumn getColumnData(Fixing.Column column) {
2619
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
43
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
44 FixingsColumn result;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
45
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
46 Cache cache = CacheFactory.getCache(CACHE_NAME);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
47
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
48 if (cache != null) {
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
49 Integer cacheKey = Integer.valueOf(column.getId());
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
50 Element element = cache.get(cacheKey);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
51
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
52 if (element != null) {
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
53 return (FixingsColumn)element.getValue();
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
54 }
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
55
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
56 result = getUncached(column);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
57 cache.put(new Element(cacheKey, result));
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
58 }
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
59 else {
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
60 result = getUncached(column);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
61 }
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
62
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
63 return result;
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
64 }
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
65
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
66 protected FixingsColumn getUncached(Fixing.Column column) {
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
67 Session session = SessionHolder.HOLDER.get();
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
68
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
69 SQLQuery sqlQuery = session.createSQLQuery(SQL_COLUMN_WS)
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
70 .addScalar("km", StandardBasicTypes.DOUBLE)
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
71 .addScalar("w", StandardBasicTypes.DOUBLE);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
72
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
73 sqlQuery.setInteger("column_id", column.getId());
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
74
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
75 List<Object []> results = sqlQuery.list();
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
76
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
77 double [] kms = new double[results.size()];
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
78 double [] ws = new double[kms.length];
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
79
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
80 for (int i = 0; i < kms.length; ++i) {
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
81 Object [] row = results.get(i);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
82 kms[i] = ((Double)row[0]).doubleValue();
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
83 ws [i] = ((Double)row[1]).doubleValue();
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
84 }
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
85
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
86 sqlQuery = session.createSQLQuery(SQL_COLUMN_QS)
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
87 .addScalar("q", StandardBasicTypes.DOUBLE)
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
88 .addScalar("a", StandardBasicTypes.DOUBLE)
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
89 .addScalar("b", StandardBasicTypes.DOUBLE);
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
90
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
91 sqlQuery.setInteger("column_id", column.getId());
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
92
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
93 results = sqlQuery.list();
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
94
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
95 QRangeTree qs = new QRangeTree(
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
96 results, QRangeTree.WITHOUT_COLUMN, 0, results.size());
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
97
6ed24efc80de Loaded columns of fixings from database and store them into the cache.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2615
diff changeset
98 return new FixingsColumn(kms, ws, qs);
2615
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 }
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100 }
b0597a63fe70 More code for the fixings km chart service.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
101 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org