Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensityFactory.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/minfo/SedimentDensityFactory.java@84e02b3f7a4f |
children |
comparison
equal
deleted
inserted
replaced
5830:160f53ee0870 | 5831:bd047b71ab37 |
---|---|
1 package org.dive4elements.river.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 org.dive4elements.river.artifacts.cache.CacheFactory; | |
14 import org.dive4elements.river.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 if (row[0] != null && row[1] != null && row[2] != null) { | |
85 density.addDensity((Double)row[0], (Double)row[1], (Integer)row[2]); | |
86 } | |
87 } | |
88 | |
89 density.cleanUp(); | |
90 return density; | |
91 } | |
92 } |