annotate artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/PorosityFactory.java @ 8587:07c9ac22f611

(issue1755) Generalise BedQuality result handling The bedquality calculation now produces a result for each time period which has BedQualityResultValues for each specific result type. Formally this was split up in density, porosity and diameter classes with some bedload diameter classes mixed in for extra fun. The intent of this commit is to allow more shared code and generic access patterns to the BedQuality results.
author Andre Heinecke <andre.heinecke@intevation.de>
date Wed, 18 Mar 2015 18:42:08 +0100
parents e4606eae8ea5
children 0a5239a1e46e
rev   line source
7846
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 *
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 */
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.artifacts.model.minfo;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import java.util.List;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13 import net.sf.ehcache.Cache;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import net.sf.ehcache.Element;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16 import org.apache.log4j.Logger;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
17 import org.hibernate.SQLQuery;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 import org.hibernate.Session;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 import org.hibernate.type.StandardBasicTypes;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 import org.dive4elements.river.artifacts.cache.CacheFactory;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 import org.dive4elements.river.artifacts.model.StaticPorosityCacheKey;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 import org.dive4elements.river.backend.SessionHolder;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 public class PorosityFactory
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7864
diff changeset
28 /** Private log to use here. */
7846
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 private static Logger log = Logger.getLogger(PorosityFactory.class);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 public static final String SQL_SELECT =
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 "SELECT pv.station AS station, pv.porosity AS porosity " +
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 " FROM porosity p" +
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 " JOIN porosity_values pv on pv.porosity_id = p.id" +
7860
f4dffc7d1d60 Order porosities by station.
Raimund Renkert <rrenkert@intevation.de>
parents: 7846
diff changeset
35 " WHERE p.id = :porosity_id" +
f4dffc7d1d60 Order porosities by station.
Raimund Renkert <rrenkert@intevation.de>
parents: 7846
diff changeset
36 " ORDER BY station";
7846
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 private PorosityFactory() {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42 /**
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 * Get WKms for given column and wst_id, caring about the cache.
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 */
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 public static Porosity getPorosity(int porosity_id) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 log.debug("PorosityFactory.getPorosity");
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 Cache cache = CacheFactory.getCache(StaticPorosityCacheKey.CACHE_NAME);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 StaticPorosityCacheKey cacheKey;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 if (cache != null) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 cacheKey = new StaticPorosityCacheKey(porosity_id);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 Element element = cache.get(cacheKey);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 if (element != null) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 log.debug("Got static porosity values from cache");
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 return (Porosity)element.getValue();
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 else {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 cacheKey = null;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 Porosity values = getPorosityUncached(porosity_id);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
64
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
65 if (values != null && cacheKey != null) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
66 log.debug("Store static porosity values in cache.");
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
67 Element element = new Element(cacheKey, values);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
68 cache.put(element);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
69 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
70 return values;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 private static Porosity getPorosityUncached(int porosity_id) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 if (log.isDebugEnabled()) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 log.debug("PorosityFactory.getPorosityUncached");
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 Session session = SessionHolder.HOLDER.get();
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT)
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 .addScalar("station", StandardBasicTypes.DOUBLE)
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 .addScalar("porosity", StandardBasicTypes.DOUBLE);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82 sqlQuery.setInteger("porosity_id", porosity_id);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
83 List<Object []> results = sqlQuery.list();
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
84
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 Porosity porosities = new Porosity();
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
86 for (Object [] row: results) {
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
87 log.debug("got station: " + (Double)row[0]);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
88 porosities.add(
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 (Double) row[0],
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90 (Double) row[1]);
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
91 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
92 return porosities;
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
93 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
94 }
e84726b48484 New Facet, datatype and data factory for porosities.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
95 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org