Mercurial > dive4elements > river
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 :