Mercurial > dive4elements > river
comparison backend/src/main/java/org/dive4elements/river/importer/ImporterSession.java @ 8029:cdb9f6d97f6a
Added method to importer session to fetch the measurement station for given (river, km).
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 10 Jul 2014 18:02:08 +0200 |
parents | 1e327d86c898 |
children | 8c14588d1f78 |
comparison
equal
deleted
inserted
replaced
8028:aa054f72e887 | 8029:cdb9f6d97f6a |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.importer; | 9 package org.dive4elements.river.importer; |
10 | 10 |
11 import java.util.ArrayList; | |
11 import java.util.HashMap; | 12 import java.util.HashMap; |
12 import java.util.Iterator; | 13 import java.util.Iterator; |
14 import java.util.List; | |
13 import java.util.Map; | 15 import java.util.Map; |
14 import java.util.TreeMap; | 16 import java.util.TreeMap; |
15 import java.math.BigDecimal; | 17 import java.math.BigDecimal; |
16 | 18 |
17 import org.hibernate.SessionFactory; | 19 import org.hibernate.SessionFactory; |
18 import org.hibernate.Session; | 20 import org.hibernate.Session; |
19 import org.hibernate.Query; | 21 import org.hibernate.Query; |
20 import org.hibernate.FlushMode; | |
21 import org.dive4elements.river.backend.SessionFactoryProvider; | 22 import org.dive4elements.river.backend.SessionFactoryProvider; |
22 import org.dive4elements.river.model.GrainFraction; | 23 import org.dive4elements.river.model.GrainFraction; |
24 import org.dive4elements.river.model.MeasurementStation; | |
23 import org.dive4elements.river.model.WstColumnValue; | 25 import org.dive4elements.river.model.WstColumnValue; |
24 import org.dive4elements.river.model.WstColumn; | 26 import org.dive4elements.river.model.WstColumn; |
25 import org.dive4elements.river.model.DischargeTableValue; | 27 import org.dive4elements.river.model.DischargeTableValue; |
26 import org.dive4elements.river.model.DischargeTable; | 28 import org.dive4elements.river.model.DischargeTable; |
27 import org.dive4elements.river.model.Range; | 29 import org.dive4elements.river.model.Range; |
28 import org.dive4elements.river.model.River; | 30 import org.dive4elements.river.model.River; |
29 import org.apache.log4j.Logger; | 31 import org.dive4elements.river.utils.EpsilonComparator; |
30 import org.dive4elements.artifacts.common.utils.LRUCache; | 32 import org.dive4elements.artifacts.common.utils.LRUCache; |
31 | 33 |
32 public class ImporterSession | 34 public class ImporterSession |
33 { | 35 { |
34 private static Logger log = Logger.getLogger(ImporterSession.class); | |
35 | |
36 private static final ThreadLocal<ImporterSession> SESSION = | 36 private static final ThreadLocal<ImporterSession> SESSION = |
37 new ThreadLocal<ImporterSession>() { | 37 new ThreadLocal<ImporterSession>() { |
38 @Override | 38 @Override |
39 protected ImporterSession initialValue() { | 39 protected ImporterSession initialValue() { |
40 return new ImporterSession(); | 40 return new ImporterSession(); |
41 } | 41 } |
42 }; | 42 }; |
43 | 43 |
44 protected Session databaseSession; | 44 protected Session databaseSession; |
45 | 45 |
46 protected LRUCache<Integer, Map<ValueKey, WstColumnValue>> | 46 private LRUCache<Integer, Map<ValueKey, WstColumnValue>> |
47 wstColumnValues; | 47 wstColumnValues; |
48 | 48 |
49 protected LRUCache<Integer, Map<ValueKey, DischargeTableValue>> | 49 private LRUCache<Integer, Map<ValueKey, DischargeTableValue>> |
50 dischargeTableValues; | 50 dischargeTableValues; |
51 | 51 |
52 protected LRUCache<Integer, Map<ValueKey, Range>> | 52 private LRUCache<Integer, Map<ValueKey, Range>> |
53 ranges; | 53 ranges; |
54 | 54 |
55 private Map<String, GrainFraction> grainFractions; | 55 private Map<String, GrainFraction> grainFractions; |
56 | |
57 private Map<String, Map<Double, List<MeasurementStation>>> | |
58 riversToMeasurementStations; | |
56 | 59 |
57 public static ImporterSession getInstance() { | 60 public static ImporterSession getInstance() { |
58 return SESSION.get(); | 61 return SESSION.get(); |
59 } | 62 } |
60 | 63 |
200 | 203 |
201 map.put(key, range); | 204 map.put(key, range); |
202 | 205 |
203 return range; | 206 return range; |
204 } | 207 } |
208 | |
209 public List<MeasurementStation> getMeasurementStations(String river, double station) { | |
210 if (riversToMeasurementStations == null) { | |
211 riversToMeasurementStations = | |
212 new HashMap<String, Map<Double, List<MeasurementStation>>>(); | |
213 } | |
214 | |
215 Map<Double, List<MeasurementStation>> km2Stations = | |
216 riversToMeasurementStations.get(river); | |
217 if (km2Stations == null) { | |
218 km2Stations = | |
219 new TreeMap<Double, List<MeasurementStation>>(EpsilonComparator.CMP); | |
220 riversToMeasurementStations.put(river, km2Stations); | |
221 Query query = databaseSession.createQuery( | |
222 "from MeasurementStation where river.name = :name"); | |
223 query.setParameter("name", river); | |
224 for (Iterator iter = query.iterate(); iter.hasNext();) { | |
225 MeasurementStation st = (MeasurementStation)iter.next(); | |
226 List<MeasurementStation> ms = km2Stations.get(st.getStation()); | |
227 if (ms == null) { | |
228 ms = new ArrayList<MeasurementStation>(2); | |
229 km2Stations.put(st.getStation(), ms); | |
230 } | |
231 ms.add(st); | |
232 } | |
233 | |
234 } | |
235 return km2Stations.get(station); | |
236 } | |
205 } | 237 } |
206 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 238 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |