Mercurial > dive4elements > river
diff flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java @ 500:d50cd3a632e0
Importer: Use BigDecimals in hashing to prevent numerical problems. Cache ranges globally, too.
flys-backend/trunk@1854 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 08 May 2011 22:41:07 +0000 |
parents | cce054f27dac |
children | 04d449f7f0c9 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java Sun May 08 21:34:43 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java Sun May 08 22:41:07 2011 +0000 @@ -17,9 +17,15 @@ import de.intevation.flys.model.WstColumn; import de.intevation.flys.model.DischargeTableValue; import de.intevation.flys.model.DischargeTable; +import de.intevation.flys.model.Range; +import de.intevation.flys.model.River; + +import org.apache.log4j.Logger; public class ImporterSession { + private static Logger log = Logger.getLogger(ImporterSession.class); + private static final ThreadLocal<ImporterSession> SESSION = new ThreadLocal<ImporterSession>() { @Override @@ -34,6 +40,8 @@ protected Map<IdValueKey, DischargeTableValue> dischargeTableValues; + protected Map<IdValueKey, Range> ranges; + public static ImporterSession getInstance() { return SESSION.get(); } @@ -58,10 +66,7 @@ loadWstColumnValues(); } - IdValueKey key = new IdValueKey( - column.getId(), - position.doubleValue(), - w.doubleValue()); + IdValueKey key = new IdValueKey(column.getId(), position, w); WstColumnValue wcv = wstColumnValues.get(key); @@ -79,6 +84,7 @@ } protected void loadWstColumnValues() { + log.info("load wst column values"); wstColumnValues = new HashMap<IdValueKey, WstColumnValue>(); Query query = databaseSession.createQuery("from WstColumnValue"); @@ -87,6 +93,7 @@ WstColumnValue wcv = (WstColumnValue)iter.next(); wstColumnValues.put(new IdValueKey(wcv), wcv); } + log.info(wstColumnValues.size() + " values loaded"); } public DischargeTableValue getDischargeTableValue( @@ -98,10 +105,7 @@ loadDischargeTableValues(); } - IdValueKey key = new IdValueKey( - table.getId(), - q.doubleValue(), - w.doubleValue()); + IdValueKey key = new IdValueKey(table.getId(), q, w); DischargeTableValue dtv = dischargeTableValues.get(key); @@ -119,6 +123,8 @@ } protected void loadDischargeTableValues() { + log.info("load discharge table values"); + dischargeTableValues = new HashMap<IdValueKey, DischargeTableValue>(); Query query = databaseSession.createQuery("from DischargeTableValue"); @@ -127,6 +133,43 @@ DischargeTableValue dtv = (DischargeTableValue)iter.next(); dischargeTableValues.put(new IdValueKey(dtv), dtv); } + log.info(dischargeTableValues.size() + " values loaded"); + } + + public Range getRange(River river, BigDecimal a, BigDecimal b) { + + if (ranges == null) { + loadRanges(); + } + + IdValueKey key = new IdValueKey(river.getId(), a, b); + + Range range = ranges.get(key); + + if (ranges != null) { + return range; + } + + range = new Range(a, b, river); + + databaseSession.save(range); + + ranges.put(key, range); + + return range; + } + + protected void loadRanges() { + log.info("load ranges"); + ranges = new HashMap<IdValueKey, Range>(); + + Query query = databaseSession.createQuery("from Range"); + + for (Iterator iter = query.iterate(); iter.hasNext();) { + Range range = (Range)iter.next(); + ranges.put(new IdValueKey(range), range); + } + log.info(ranges.size() + " values loaded"); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :