Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java Sun May 08 15:29:45 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java Sun May 08 17:55:49 2011 +0000 @@ -14,6 +14,8 @@ import de.intevation.flys.model.WstColumnValue; import de.intevation.flys.model.WstColumn; +import de.intevation.flys.model.DischargeTableValue; +import de.intevation.flys.model.DischargeTable; public class ImporterSession { @@ -27,7 +29,9 @@ protected Session databaseSession; - protected Map<WstColumnValueKey, WstColumnValue> wstColumnValues; + protected Map<IdValueKey, WstColumnValue> wstColumnValues; + + protected Map<IdValueKey, DischargeTableValue> dischargeTableValues; public static ImporterSession getInstance() { return SESSION.get(); @@ -52,7 +56,7 @@ loadWstColumnValues(); } - WstColumnValueKey key = new WstColumnValueKey( + IdValueKey key = new IdValueKey( column.getId(), position.doubleValue(), w.doubleValue()); @@ -73,13 +77,53 @@ } protected void loadWstColumnValues() { - wstColumnValues = new HashMap<WstColumnValueKey, WstColumnValue>(); + wstColumnValues = new HashMap<IdValueKey, WstColumnValue>(); Query query = databaseSession.createQuery("from WstColumnValue"); for (Iterator iter = query.iterate(); iter.hasNext();) { WstColumnValue wcv = (WstColumnValue)iter.next(); - wstColumnValues.put(new WstColumnValueKey(wcv), wcv); + wstColumnValues.put(new IdValueKey(wcv), wcv); + } + } + + public DischargeTableValue getDischargeTableValue( + DischargeTable table, + BigDecimal q, + BigDecimal w + ) { + if (dischargeTableValues == null) { + loadDischargeTableValues(); + } + + IdValueKey key = new IdValueKey( + table.getId(), + q.doubleValue(), + w.doubleValue()); + + DischargeTableValue dtv = dischargeTableValues.get(key); + + if (dtv != null) { + return dtv; + } + + dtv = new DischargeTableValue(table, q, w); + + databaseSession.save(dtv); + + dischargeTableValues.put(key, dtv); + + return dtv; + } + + protected void loadDischargeTableValues() { + dischargeTableValues = new HashMap<IdValueKey, DischargeTableValue>(); + + Query query = databaseSession.createQuery("from DischargeTableValue"); + + for (Iterator iter = query.iterate(); iter.hasNext();) { + DischargeTableValue dtv = (DischargeTableValue)iter.next(); + dischargeTableValues.put(new IdValueKey(dtv), dtv); } } }