diff backend/src/main/java/org/dive4elements/river/importer/ImportHYKEntry.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 4c3ccf2b0304
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportHYKEntry.java	Fri Apr 06 14:13:14 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportHYKEntry.java	Sun Apr 08 18:07:06 2018 +0200
@@ -8,17 +8,16 @@
 
 package org.dive4elements.river.importer;
 
-import org.dive4elements.river.model.HYKEntry;
-import org.dive4elements.river.model.HYK;
-
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
-import java.util.ArrayList;
 
-import java.math.BigDecimal;
-
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.HYK;
+import org.dive4elements.river.model.HYKEntry;
+import org.hibernate.Query;
 import org.hibernate.Session;
-import org.hibernate.Query;
 
 public class ImportHYKEntry
 {
@@ -28,17 +27,20 @@
 
     protected List<ImportHYKFormation> formations;
 
+    protected StoreMode storeMode;
+
     protected HYKEntry peer;
 
     public ImportHYKEntry() {
-        formations = new ArrayList<ImportHYKFormation>();
+        this.formations = new ArrayList<>();
+        this.storeMode = StoreMode.NONE;
     }
 
     public ImportHYKEntry(
-        ImportHYK  hyk,
-        BigDecimal km,
-        Date       measure
-    ) {
+            final ImportHYK  hyk,
+            final BigDecimal km,
+            final Date       measure
+            ) {
         this();
         this.hyk     = hyk;
         this.km      = km;
@@ -46,56 +48,63 @@
     }
 
     public ImportHYK getHYK() {
-        return hyk;
+        return this.hyk;
     }
 
-    public void setHYK(ImportHYK hyk) {
+    public void setHYK(final ImportHYK hyk) {
         this.hyk = hyk;
     }
 
     public BigDecimal getKm() {
-        return km;
+        return this.km;
     }
 
-    public void setKm(BigDecimal km) {
+    public void setKm(final BigDecimal km) {
         this.km = km;
     }
 
-    public void addFormation(ImportHYKFormation formation) {
-        int numFormation = formations.size();
-        formations.add(formation);
+    public void addFormation(final ImportHYKFormation formation) {
+        final int numFormation = this.formations.size();
+        this.formations.add(formation);
         formation.setFormationNum(numFormation);
         formation.setEntry(this);
     }
 
     public void storeDependencies() {
         getPeer();
-        for (ImportHYKFormation formation: formations) {
+        for (final ImportHYKFormation formation: this.formations) {
             formation.storeDependencies();
         }
     }
 
     public HYKEntry getPeer() {
-        if (peer == null) {
-            HYK h = hyk.getPeer();
-            Session session = ImporterSession.getInstance()
-                .getDatabaseSession();
-            Query query = session.createQuery(
-                "from HYKEntry where HYK=:hyk " +
-                "and km=:km and measure=:measure");
-            query.setParameter("hyk", h);
-            query.setParameter("km", km);
-            query.setParameter("measure", measure);
-            List<HYKEntry> entries = query.list();
-            if (entries.isEmpty()) {
-                peer = new HYKEntry(h, km, measure);
-                session.save(peer);
+        if (this.peer == null) {
+            final HYK h = this.hyk.getPeer();
+            final Session session = ImporterSession.getInstance()
+                    .getDatabaseSession();
+            List<HYKEntry> entries;
+            if (this.hyk.storeMode == StoreMode.INSERT)
+                entries = null;
+            else {
+                final Query query = session.createQuery(
+                        "from HYKEntry where HYK=:hyk " +
+                        "and km=:km and measure=:measure");
+                query.setParameter("hyk", h);
+                query.setParameter("km", this.km);
+                query.setParameter("measure", this.measure);
+                entries = query.list();
+            }
+            if ((entries == null) || entries.isEmpty()) {
+                this.peer = new HYKEntry(h, this.km, this.measure);
+                session.save(this.peer);
+                this.storeMode = StoreMode.INSERT;
             }
             else {
-                peer = entries.get(0);
+                this.peer = entries.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