diff backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java @ 8986:392bbcd8a88b

Database inserts accelerated by suppressing unnecessary database queries for new data series
author mschaefer
date Sun, 08 Apr 2018 18:07:06 +0200
parents d9d2bd78eff6
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java	Fri Apr 06 14:13:14 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportPorosity.java	Sun Apr 08 18:07:06 2018 +0200
@@ -12,12 +12,12 @@
 import java.util.List;
 
 import org.apache.log4j.Logger;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.Porosity;
+import org.dive4elements.river.model.River;
 import org.hibernate.Query;
 import org.hibernate.Session;
 
-import org.dive4elements.river.model.River;
-import org.dive4elements.river.model.Porosity;
-
 
 public class ImportPorosity {
 
@@ -33,82 +33,88 @@
 
     protected List<ImportPorosityValue> values;
 
-    public ImportPorosity(String description) {
+    protected StoreMode storeMode;
+
+    public ImportPorosity(final String description) {
         this.description = description;
-        this.values = new ArrayList<ImportPorosityValue>();
+        this.values = new ArrayList<>();
+        this.storeMode = StoreMode.NONE;
     }
 
     public String getDescription() {
-        return description;
+        return this.description;
     }
 
-    public void setDepth(ImportDepth depth) {
+    public void setDepth(final ImportDepth depth) {
         this.depth = depth;
     }
 
-    public void setTimeInterval(ImportTimeInterval importTimeInterval) {
+    public void setTimeInterval(final ImportTimeInterval importTimeInterval) {
         this.timeInterval = importTimeInterval;
     }
 
-    public void addValue(ImportPorosityValue value) {
-        values.add(value);
+    public void addValue(final ImportPorosityValue value) {
+        this.values.add(value);
     }
 
-    public void storeDependencies(River river) {
-        log.info("store dependencies");
+    public void storeDependencies(final River river) {
+        log.info("store dependencies for '" + getDescription() + "'");
 
-        if (depth != null) {
-            depth.storeDependencies();
+        if (this.depth != null) {
+            this.depth.storeDependencies();
         }
 
-        Porosity peer = getPeer(river);
+        final Porosity peer = getPeer(river);
 
         if (peer != null) {
-            log.info("store porosity values.");
-            for (ImportPorosityValue value : values) {
-                value.storeDependencies(peer);
+            // log.info("store porosity values.");
+            for (final ImportPorosityValue value : this.values) {
+                value.storeDependencies(peer, this.storeMode);
             }
+            log.info("Porosity values processed: " + this.values.size());
         }
     }
 
-    public Porosity getPeer(River river) {
-        log.info("get peer");
+    public Porosity getPeer(final River river) {
+        // log.info("get peer");
 
-        if (depth == null) {
-            log.warn("cannot store porosity '" + description
-                + "': no depth");
+        if (this.depth == null) {
+            log.warn("cannot store porosity '" + this.description
+                    + "': no depth");
             return null;
         }
 
-        if (peer == null) {
-            Session session = ImporterSession.getInstance()
-                .getDatabaseSession();
+        if (this.peer == null) {
+            final Session session = ImporterSession.getInstance()
+                    .getDatabaseSession();
 
-            Query query = session.createQuery("from Porosity where "
-                + "   river=:river and "
-                + "   depth=:depth and "
-                + "   description=:description");
+            final Query query = session.createQuery("from Porosity where "
+                    + "   river=:river and "
+                    + "   depth=:depth and "
+                    + "   description=:description");
 
             query.setParameter("river", river);
-            query.setParameter("depth", depth.getPeer());
-            query.setParameter("description", description);
+            query.setParameter("depth", this.depth.getPeer());
+            query.setParameter("description", this.description);
 
-            List<Porosity> porosity = query.list();
+            final List<Porosity> porosity = query.list();
 
             if (porosity.isEmpty()) {
                 log.debug("Create new Porosity DB instance.");
 
-                peer = new Porosity(river, depth.getPeer(),
-                    description, timeInterval.getPeer());
+                this.peer = new Porosity(river, this.depth.getPeer(),
+                        this.description, this.timeInterval.getPeer());
 
-                session.save(peer);
+                session.save(this.peer);
+                this.storeMode = StoreMode.INSERT;
             }
             else {
-                peer = porosity.get(0);
+                this.peer = porosity.get(0);
+                this.storeMode = StoreMode.UPDATE;
             }
         }
 
-        return peer;
+        return this.peer;
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org