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 :

http://dive4elements.wald.intevation.org