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 :

http://dive4elements.wald.intevation.org