comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensityFactory.java @ 4521:71e6fe870c1d

Added objects and factory for sediment densities.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 14 Nov 2012 17:17:02 +0100
parents
children 84e02b3f7a4f
comparison
equal deleted inserted replaced
4520:0b330ed218f6 4521:71e6fe870c1d
1 package de.intevation.flys.artifacts.model.minfo;
2
3 import java.util.List;
4
5 import net.sf.ehcache.Cache;
6 import net.sf.ehcache.Element;
7
8 import org.apache.log4j.Logger;
9 import org.hibernate.SQLQuery;
10 import org.hibernate.Session;
11 import org.hibernate.type.StandardBasicTypes;
12
13 import de.intevation.flys.artifacts.cache.CacheFactory;
14 import de.intevation.flys.backend.SessionHolder;
15
16
17 public class SedimentDensityFactory
18 {
19 /** Private logger to use here. */
20 private static Logger log = Logger.getLogger(SedimentDensityFactory.class);
21
22 private static final String DENSITY_CACHE_NAME = "sedimentdensity";
23
24 /**Query to get sediment density values and kms. */
25 private static final String SQL_SELECT_DENSITY =
26 "SELECT sdv.station AS km, " +
27 " sdv.density AS density," +
28 " sdv.year AS year " +
29 " FROM sediment_density sd" +
30 " JOIN rivers r ON sd.river_id = r.id " +
31 " JOIN sediment_density_values sdv ON sd.id = sdv.sediment_density_id" +
32 " WHERE r.name = :name";
33
34 private SedimentDensityFactory() {}
35
36 public static SedimentDensity getSedimentDensity(
37 String river,
38 double startKm,
39 double endKm,
40 int year
41 ) {
42 log.debug("getSedimentDensity");
43 Cache cache = CacheFactory.getCache(DENSITY_CACHE_NAME);
44
45 if (cache == null) {
46 log.debug("Cache not configured.");
47 return getSedimentDensityUncached(river, startKm, endKm, year);
48 }
49
50 String key = river + startKm + endKm;
51 Element element = cache.get(key);
52 if (element != null) {
53 log.debug("SedimentDensity found in cache!");
54 return (SedimentDensity)element.getValue();
55 }
56 SedimentDensity value =
57 getSedimentDensityUncached(river, startKm, endKm, year);
58
59 if (value != null && key != null) {
60 log.debug("Store sediment density values in cache.");
61 element = new Element(key, value);
62 cache.put(element);
63 }
64 return value;
65 }
66
67 private static SedimentDensity getSedimentDensityUncached(
68 String river,
69 double startKm,
70 double endKm,
71 int year
72 ) {
73 log.debug("getSedimentDensityUncached");
74 List<Object[]> results = null;
75 Session session = SessionHolder.HOLDER.get();
76 SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_DENSITY)
77 .addScalar("km", StandardBasicTypes.DOUBLE)
78 .addScalar("density", StandardBasicTypes.DOUBLE)
79 .addScalar("year", StandardBasicTypes.INTEGER);
80 sqlQuery.setString("name", river);
81 results = sqlQuery.list();
82 SedimentDensity density = new SedimentDensity();
83 for (Object[] row : results) {
84 density.addDensity((Double)row[0], (Double)row[1], (Integer)row[2]);
85 }
86
87 density.cleanUp();
88 return density;
89 }
90 }

http://dive4elements.wald.intevation.org