Mercurial > dive4elements > river
view backend/src/main/java/org/dive4elements/river/importer/ImportWst.java @ 9659:75bd347147ad
Importer (s/u-info) extensions: infrastructures: detecting, logging, cancelling in case of wrong column titles,
detecting, logging and skipping lines with duplicate km+bank
author | mschaefer |
---|---|
date | Mon, 23 Mar 2020 15:37:37 +0100 |
parents | 392bbcd8a88b |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.importer; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.river.importer.common.StoreMode; import org.dive4elements.river.model.River; import org.dive4elements.river.model.Wst; import org.hibernate.Query; import org.hibernate.Session; /** Not (yet) db-mapped WST object. */ public class ImportWst { private static Logger log = Logger.getLogger(ImportWst.class); public interface ImportWstColumnFactory { ImportWstColumn create(ImportWst iw, int position); } public static final ImportWstColumnFactory COLUMN_FACTORY = new ImportWstColumnFactory() { @Override public ImportWstColumn create(final ImportWst importWst, final int position) { return new ImportWstColumn(importWst, null, null, position); } }; protected String description; protected Integer kind; protected List<ImportWstColumn> columns; protected ImportUnit unit; protected ImportWstColumnFactory columnFactory; protected boolean kmUp; protected StoreMode storeMode; /** Wst as in db. */ protected Wst peer; public ImportWst() { this(COLUMN_FACTORY); } public ImportWst(final ImportWstColumnFactory columnFactory) { this.columnFactory = columnFactory; this.kind = 0; this.columns = new ArrayList<>(); this.storeMode = StoreMode.NONE; } public ImportWst(final String description) { this(description, COLUMN_FACTORY); } public ImportWst( final String description, final ImportWstColumnFactory columnFactory ) { this(columnFactory); this.description = description; } public String getDescription() { return this.description; } public Integer getKind() { return this.kind; } public void setKind(final Integer kind) { this.kind = kind; } public boolean getKmUp() { return this.kmUp; } public void setKmUp(final boolean kmUp) { this.kmUp = kmUp; } public void setDescription(final String description) { this.description = description; } /** Create columns that can be accessed with getColumn. */ public void setNumberColumns(final int numColumns) { for (int i = 0; i < numColumns; ++i) { this.columns.add(this.columnFactory.create(this, i)); } } public int getNumberColumns() { return this.columns.size(); } public ImportWstColumn getColumn(final int index) { return this.columns.get(index); } public List<ImportWstColumn> getColumns() { return this.columns; } /** Adds a column. Assumes that columns wst is this instance. */ public void addColumn(final ImportWstColumn column) { this.columns.add(column); } public ImportUnit getUnit() { return this.unit; } public void setUnit(final ImportUnit unit) { this.unit = unit; } public void storeDependencies(final River river) { log.info("store '" + this.description + "'"); getPeer(river); for (final ImportWstColumn column: this.columns) { column.storeDependencies(river); } final Session session = ImporterSession.getInstance().getDatabaseSession(); session.flush(); } public boolean guessWaterLevelIncreasing() { int up = 0; for (final ImportWstColumn column: this.columns) { if (column.guessWaterLevelIncreasing()) ++up; } return up > this.columns.size() - up; } /** Get corresponding mapped wst (from database). */ 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", this.description); query.setParameter("kind", this.kind); final List<Wst> wsts = query.list(); if (wsts.isEmpty()) { this.peer = new Wst(river, this.description, this.kind); session.save(this.peer); this.storeMode = StoreMode.INSERT; } else { this.peer = wsts.get(0); this.storeMode = StoreMode.UPDATE; } } return this.peer; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :