diff flys-backend/src/main/java/de/intevation/flys/importer/ImportWst.java @ 478:db430bd9e0e0

Implemented a WstColumnValue cache to speed up inserting WST files into database. flys-backend/trunk@1734 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 20 Apr 2011 07:21:03 +0000
parents 5d920695a7f0
children 3a99d0295006
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/importer/ImportWst.java	Mon Apr 18 17:01:00 2011 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/importer/ImportWst.java	Wed Apr 20 07:21:03 2011 +0000
@@ -1,17 +1,26 @@
 package de.intevation.flys.importer;
 
 import de.intevation.flys.model.Wst;
+import de.intevation.flys.model.WstColumnValue;
 import de.intevation.flys.model.River;
 
+import de.intevation.flys.backend.SessionFactoryProvider;
+
+import org.apache.log4j.Logger;
+
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
 import org.hibernate.Query;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.ArrayList;
 
 public class ImportWst
 {
+    private static Logger logger = Logger.getLogger(ImportWst.class);
+
     protected String description;
 
     protected Integer kind;
@@ -19,11 +28,16 @@
     //protected Map<String, ImportWstColumn> columns;
     protected List<ImportWstColumn> columns;
 
+    protected Map<WstColumnValueKey, WstColumnValue> wstCache;
+
     protected Wst peer;
 
     public ImportWst() {
         kind = 0;
         columns = new ArrayList<ImportWstColumn>();
+
+        // This cache is used to avoid db queries for each WstColumnValue later
+        wstCache = getWstColumnValueCache();
     }
 
     public ImportWst(String description) {
@@ -41,7 +55,7 @@
 
     public void setNumberColumns(int numColumns) {
         for (int i = 0; i < numColumns; ++i) {
-            columns.add(new ImportWstColumn(this, null, null, i));
+            columns.add(new ImportWstColumn(this, null, null, i, wstCache));
         }
     }
 
@@ -61,6 +75,40 @@
         }
     }
 
+
+    public Map<WstColumnValueKey, WstColumnValue> getWstColumnValueCache() {
+        SessionFactory sessionFactory =
+            SessionFactoryProvider.createSessionFactory();
+
+        Session session = sessionFactory.openSession();
+
+        Importer.sessionHolder.set(session);
+
+        try {
+            Query query = session.createQuery("from WstColumnValue");
+
+            List<WstColumnValue> values = query.list();
+            Map<WstColumnValueKey, WstColumnValue> cache =
+                new HashMap<WstColumnValueKey, WstColumnValue>();
+
+            for (WstColumnValue value: values) {
+                cache.put(
+                    new WstColumnValueKey(value),
+                    value);
+            }
+
+            logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++");
+            logger.info(cache.size() + " WstColumnValue objects in WST cache.");
+            logger.info("++++++++++++++++++++++++++++++++++++++++++++++++++++");
+
+            return cache;
+        }
+        finally {
+            session.close();
+            Importer.sessionHolder.remove();
+        }
+    }
+
     public Wst getPeer(River river) {
         if (peer == null) {
             Session session = Importer.sessionHolder.get();

http://dive4elements.wald.intevation.org