comparison flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java @ 498:8ab04de0b879

Importer: Cache the discharge table values, too. flys-backend/trunk@1852 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 08 May 2011 17:55:49 +0000
parents 67fd63e4ef66
children cce054f27dac
comparison
equal deleted inserted replaced
497:67fd63e4ef66 498:8ab04de0b879
12 12
13 import de.intevation.flys.backend.SessionFactoryProvider; 13 import de.intevation.flys.backend.SessionFactoryProvider;
14 14
15 import de.intevation.flys.model.WstColumnValue; 15 import de.intevation.flys.model.WstColumnValue;
16 import de.intevation.flys.model.WstColumn; 16 import de.intevation.flys.model.WstColumn;
17 import de.intevation.flys.model.DischargeTableValue;
18 import de.intevation.flys.model.DischargeTable;
17 19
18 public class ImporterSession 20 public class ImporterSession
19 { 21 {
20 private static final ThreadLocal<ImporterSession> SESSION = 22 private static final ThreadLocal<ImporterSession> SESSION =
21 new ThreadLocal<ImporterSession>() { 23 new ThreadLocal<ImporterSession>() {
25 } 27 }
26 }; 28 };
27 29
28 protected Session databaseSession; 30 protected Session databaseSession;
29 31
30 protected Map<WstColumnValueKey, WstColumnValue> wstColumnValues; 32 protected Map<IdValueKey, WstColumnValue> wstColumnValues;
33
34 protected Map<IdValueKey, DischargeTableValue> dischargeTableValues;
31 35
32 public static ImporterSession getInstance() { 36 public static ImporterSession getInstance() {
33 return SESSION.get(); 37 return SESSION.get();
34 } 38 }
35 39
50 ) { 54 ) {
51 if (wstColumnValues == null) { 55 if (wstColumnValues == null) {
52 loadWstColumnValues(); 56 loadWstColumnValues();
53 } 57 }
54 58
55 WstColumnValueKey key = new WstColumnValueKey( 59 IdValueKey key = new IdValueKey(
56 column.getId(), 60 column.getId(),
57 position.doubleValue(), 61 position.doubleValue(),
58 w.doubleValue()); 62 w.doubleValue());
59 63
60 WstColumnValue wcv = wstColumnValues.get(key); 64 WstColumnValue wcv = wstColumnValues.get(key);
71 75
72 return wcv; 76 return wcv;
73 } 77 }
74 78
75 protected void loadWstColumnValues() { 79 protected void loadWstColumnValues() {
76 wstColumnValues = new HashMap<WstColumnValueKey, WstColumnValue>(); 80 wstColumnValues = new HashMap<IdValueKey, WstColumnValue>();
77 81
78 Query query = databaseSession.createQuery("from WstColumnValue"); 82 Query query = databaseSession.createQuery("from WstColumnValue");
79 83
80 for (Iterator iter = query.iterate(); iter.hasNext();) { 84 for (Iterator iter = query.iterate(); iter.hasNext();) {
81 WstColumnValue wcv = (WstColumnValue)iter.next(); 85 WstColumnValue wcv = (WstColumnValue)iter.next();
82 wstColumnValues.put(new WstColumnValueKey(wcv), wcv); 86 wstColumnValues.put(new IdValueKey(wcv), wcv);
87 }
88 }
89
90 public DischargeTableValue getDischargeTableValue(
91 DischargeTable table,
92 BigDecimal q,
93 BigDecimal w
94 ) {
95 if (dischargeTableValues == null) {
96 loadDischargeTableValues();
97 }
98
99 IdValueKey key = new IdValueKey(
100 table.getId(),
101 q.doubleValue(),
102 w.doubleValue());
103
104 DischargeTableValue dtv = dischargeTableValues.get(key);
105
106 if (dtv != null) {
107 return dtv;
108 }
109
110 dtv = new DischargeTableValue(table, q, w);
111
112 databaseSession.save(dtv);
113
114 dischargeTableValues.put(key, dtv);
115
116 return dtv;
117 }
118
119 protected void loadDischargeTableValues() {
120 dischargeTableValues = new HashMap<IdValueKey, DischargeTableValue>();
121
122 Query query = databaseSession.createQuery("from DischargeTableValue");
123
124 for (Iterator iter = query.iterate(); iter.hasNext();) {
125 DischargeTableValue dtv = (DischargeTableValue)iter.next();
126 dischargeTableValues.put(new IdValueKey(dtv), dtv);
83 } 127 }
84 } 128 }
85 } 129 }
86 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 130 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org