diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java	Sun May 08 15:29:45 2011 +0000
@@ -0,0 +1,86 @@
+package de.intevation.flys.importer;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.math.BigDecimal;
+
+import org.hibernate.SessionFactory;
+import org.hibernate.Session;
+import org.hibernate.Query;
+
+import de.intevation.flys.backend.SessionFactoryProvider;
+
+import de.intevation.flys.model.WstColumnValue;
+import de.intevation.flys.model.WstColumn;
+
+public class ImporterSession
+{
+    private static final ThreadLocal<ImporterSession> SESSION =
+        new ThreadLocal<ImporterSession>() {
+            @Override
+            protected ImporterSession initialValue() {
+                return new ImporterSession();
+            }
+        };
+
+    protected Session databaseSession;
+
+    protected Map<WstColumnValueKey, WstColumnValue> wstColumnValues;
+
+    public static ImporterSession getInstance() {
+        return SESSION.get();
+    }
+
+    public ImporterSession() {
+        SessionFactory sessionFactory =
+            SessionFactoryProvider.createSessionFactory();
+        databaseSession = sessionFactory.openSession();
+    }
+
+    public Session getDatabaseSession() {
+        return databaseSession;
+    }
+
+    public WstColumnValue getWstColumnValue(
+        WstColumn  column,
+        BigDecimal position,
+        BigDecimal w
+    ) {
+        if (wstColumnValues == null) {
+            loadWstColumnValues();
+        }
+
+        WstColumnValueKey key = new WstColumnValueKey(
+            column.getId(),
+            position.doubleValue(),
+            w.doubleValue());
+
+        WstColumnValue wcv = wstColumnValues.get(key);
+
+        if (wcv != null) {
+            return wcv;
+        }
+
+        wcv = new WstColumnValue(column, position, w);
+
+        databaseSession.save(wcv);
+
+        wstColumnValues.put(key, wcv);
+
+        return wcv;
+    }
+
+    protected void loadWstColumnValues() {
+        wstColumnValues = new HashMap<WstColumnValueKey, 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);
+        }
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org