diff backend/src/main/java/org/dive4elements/river/importer/ImportWst.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 5e38e2924c07
children
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/importer/ImportWst.java	Fri Apr 06 14:13:14 2018 +0200
+++ b/backend/src/main/java/org/dive4elements/river/importer/ImportWst.java	Sun Apr 08 18:07:06 2018 +0200
@@ -8,16 +8,15 @@
 
 package org.dive4elements.river.importer;
 
-import org.dive4elements.river.model.Wst;
-import org.dive4elements.river.model.River;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.log4j.Logger;
-
-import org.hibernate.Session;
+import org.dive4elements.river.importer.common.StoreMode;
+import org.dive4elements.river.model.River;
+import org.dive4elements.river.model.Wst;
 import org.hibernate.Query;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.hibernate.Session;
 
 /** Not (yet) db-mapped WST object. */
 public class ImportWst
@@ -29,12 +28,12 @@
     }
 
     public static final ImportWstColumnFactory COLUMN_FACTORY =
-        new ImportWstColumnFactory() {
-            @Override
-            public ImportWstColumn create(ImportWst importWst, int position) {
-                return new ImportWstColumn(importWst, null, null, position);
-            }
-        };
+            new ImportWstColumnFactory() {
+        @Override
+        public ImportWstColumn create(final ImportWst importWst, final int position) {
+            return new ImportWstColumn(importWst, null, null, position);
+        }
+    };
 
     protected String description;
 
@@ -48,6 +47,8 @@
 
     protected boolean kmUp;
 
+    protected StoreMode storeMode;
+
     /** Wst as in db. */
     protected Wst peer;
 
@@ -55,123 +56,126 @@
         this(COLUMN_FACTORY);
     }
 
-    public ImportWst(ImportWstColumnFactory columnFactory) {
+    public ImportWst(final ImportWstColumnFactory columnFactory) {
         this.columnFactory = columnFactory;
-        kind = 0;
-        columns = new ArrayList<ImportWstColumn>();
+        this.kind = 0;
+        this.columns = new ArrayList<>();
+        this.storeMode = StoreMode.NONE;
     }
 
-    public ImportWst(String description) {
+    public ImportWst(final String description) {
         this(description, COLUMN_FACTORY);
     }
 
     public ImportWst(
-        String description,
-        ImportWstColumnFactory columnFactory
-    ) {
+            final String description,
+            final ImportWstColumnFactory columnFactory
+            ) {
         this(columnFactory);
         this.description = description;
     }
 
     public String getDescription() {
-        return description;
+        return this.description;
     }
 
     public Integer getKind() {
-        return kind;
+        return this.kind;
     }
 
-    public void setKind(Integer kind) {
+    public void setKind(final Integer kind) {
         this.kind = kind;
     }
 
     public boolean getKmUp() {
-        return kmUp;
+        return this.kmUp;
     }
 
-    public void setKmUp(boolean kmUp) {
+    public void setKmUp(final boolean kmUp) {
         this.kmUp = kmUp;
     }
 
-    public void setDescription(String description) {
+    public void setDescription(final String description) {
         this.description = description;
     }
 
     /** Create columns that can be accessed with getColumn. */
-    public void setNumberColumns(int numColumns) {
+    public void setNumberColumns(final int numColumns) {
         for (int i = 0; i < numColumns; ++i) {
-            columns.add(columnFactory.create(this, i));
+            this.columns.add(this.columnFactory.create(this, i));
         }
     }
 
     public int getNumberColumns() {
-        return columns.size();
+        return this.columns.size();
     }
 
-    public ImportWstColumn getColumn(int index) {
-        return columns.get(index);
+    public ImportWstColumn getColumn(final int index) {
+        return this.columns.get(index);
     }
 
     public List<ImportWstColumn> getColumns() {
-        return columns;
+        return this.columns;
     }
 
     /** Adds a column. Assumes that columns wst is this instance. */
-    public void addColumn(ImportWstColumn column) {
-        columns.add(column);
+    public void addColumn(final ImportWstColumn column) {
+        this.columns.add(column);
     }
 
     public ImportUnit getUnit() {
-        return unit;
+        return this.unit;
     }
 
-    public void setUnit(ImportUnit unit) {
+    public void setUnit(final ImportUnit unit) {
         this.unit = unit;
     }
 
-    public void storeDependencies(River river) {
+    public void storeDependencies(final River river) {
 
-        log.info("store '" + description + "'");
+        log.info("store '" + this.description + "'");
         getPeer(river);
 
-        for (ImportWstColumn column: columns) {
+        for (final ImportWstColumn column: this.columns) {
             column.storeDependencies(river);
         }
 
-        Session session = ImporterSession.getInstance().getDatabaseSession();
+        final Session session = ImporterSession.getInstance().getDatabaseSession();
         session.flush();
     }
 
     public boolean guessWaterLevelIncreasing() {
         int up = 0;
-        for (ImportWstColumn column: columns) {
+        for (final ImportWstColumn column: this.columns) {
             if (column.guessWaterLevelIncreasing()) ++up;
         }
-        return up > columns.size() - up;
+        return up > this.columns.size() - up;
     }
 
     /** Get corresponding mapped wst (from database). */
-    public Wst getPeer(River river) {
-        if (peer == null) {
-            Session session = ImporterSession.getInstance()
-                .getDatabaseSession();
-            Query query = session.createQuery(
-                "from Wst where " +
-                "river=:river and description=:description and kind=:kind");
+    public Wst getPeer(final River river) {
+        if (this.peer == null) {
+            final Session session = ImporterSession.getInstance()
+                    .getDatabaseSession();
+            final Query query = session.createQuery(
+                    "from Wst where " +
+                    "river=:river and description=:description and kind=:kind");
             query.setParameter("river",       river);
-            query.setParameter("description", description);
-            query.setParameter("kind",        kind);
-            List<Wst> wsts = query.list();
+            query.setParameter("description", this.description);
+            query.setParameter("kind",        this.kind);
+            final List<Wst> wsts = query.list();
             if (wsts.isEmpty()) {
-                peer = new Wst(river, description, kind);
-                session.save(peer);
+                this.peer = new Wst(river, this.description, this.kind);
+                session.save(this.peer);
+                this.storeMode = StoreMode.INSERT;
             }
             else {
-                peer = wsts.get(0);
+                this.peer = wsts.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