Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java @ 497:67fd63e4ef66
Importer: centralized caching
flys-backend/trunk@1851 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 08 May 2011 15:29:45 +0000 |
parents | |
children | 8ab04de0b879 |
comparison
equal
deleted
inserted
replaced
496:4f2d8980415f | 497:67fd63e4ef66 |
---|---|
1 package de.intevation.flys.importer; | |
2 | |
3 import java.util.Iterator; | |
4 import java.util.Map; | |
5 import java.util.HashMap; | |
6 | |
7 import java.math.BigDecimal; | |
8 | |
9 import org.hibernate.SessionFactory; | |
10 import org.hibernate.Session; | |
11 import org.hibernate.Query; | |
12 | |
13 import de.intevation.flys.backend.SessionFactoryProvider; | |
14 | |
15 import de.intevation.flys.model.WstColumnValue; | |
16 import de.intevation.flys.model.WstColumn; | |
17 | |
18 public class ImporterSession | |
19 { | |
20 private static final ThreadLocal<ImporterSession> SESSION = | |
21 new ThreadLocal<ImporterSession>() { | |
22 @Override | |
23 protected ImporterSession initialValue() { | |
24 return new ImporterSession(); | |
25 } | |
26 }; | |
27 | |
28 protected Session databaseSession; | |
29 | |
30 protected Map<WstColumnValueKey, WstColumnValue> wstColumnValues; | |
31 | |
32 public static ImporterSession getInstance() { | |
33 return SESSION.get(); | |
34 } | |
35 | |
36 public ImporterSession() { | |
37 SessionFactory sessionFactory = | |
38 SessionFactoryProvider.createSessionFactory(); | |
39 databaseSession = sessionFactory.openSession(); | |
40 } | |
41 | |
42 public Session getDatabaseSession() { | |
43 return databaseSession; | |
44 } | |
45 | |
46 public WstColumnValue getWstColumnValue( | |
47 WstColumn column, | |
48 BigDecimal position, | |
49 BigDecimal w | |
50 ) { | |
51 if (wstColumnValues == null) { | |
52 loadWstColumnValues(); | |
53 } | |
54 | |
55 WstColumnValueKey key = new WstColumnValueKey( | |
56 column.getId(), | |
57 position.doubleValue(), | |
58 w.doubleValue()); | |
59 | |
60 WstColumnValue wcv = wstColumnValues.get(key); | |
61 | |
62 if (wcv != null) { | |
63 return wcv; | |
64 } | |
65 | |
66 wcv = new WstColumnValue(column, position, w); | |
67 | |
68 databaseSession.save(wcv); | |
69 | |
70 wstColumnValues.put(key, wcv); | |
71 | |
72 return wcv; | |
73 } | |
74 | |
75 protected void loadWstColumnValues() { | |
76 wstColumnValues = new HashMap<WstColumnValueKey, WstColumnValue>(); | |
77 | |
78 Query query = databaseSession.createQuery("from WstColumnValue"); | |
79 | |
80 for (Iterator iter = query.iterate(); iter.hasNext();) { | |
81 WstColumnValue wcv = (WstColumnValue)iter.next(); | |
82 wstColumnValues.put(new WstColumnValueKey(wcv), wcv); | |
83 } | |
84 } | |
85 } | |
86 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |