rrenkert@7840: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde rrenkert@7840: * Software engineering by Intevation GmbH rrenkert@7840: * rrenkert@7840: * This file is Free Software under the GNU AGPL (>=v3) rrenkert@7840: * and comes with ABSOLUTELY NO WARRANTY! Check out the rrenkert@7840: * documentation coming with Dive4Elements River for details. rrenkert@7840: */ rrenkert@7840: rrenkert@7840: package org.dive4elements.river.importer; rrenkert@7840: rrenkert@7840: import java.util.ArrayList; rrenkert@7840: import java.util.List; rrenkert@7840: rrenkert@7840: import org.apache.log4j.Logger; mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; mschaefer@8986: import org.dive4elements.river.model.Porosity; mschaefer@8986: import org.dive4elements.river.model.River; rrenkert@7840: import org.hibernate.Query; rrenkert@7840: import org.hibernate.Session; rrenkert@7840: rrenkert@7840: rrenkert@7840: public class ImportPorosity { rrenkert@7840: rrenkert@7840: private static Logger log = Logger.getLogger(ImportPorosity.class); rrenkert@7840: rrenkert@7840: protected Porosity peer; rrenkert@7840: rrenkert@7840: protected ImportDepth depth; rrenkert@7840: rrenkert@7840: protected String description; rrenkert@7840: rrenkert@7840: protected ImportTimeInterval timeInterval; rrenkert@7840: rrenkert@7840: protected List values; rrenkert@7840: mschaefer@8986: protected StoreMode storeMode; mschaefer@8986: mschaefer@8986: public ImportPorosity(final String description) { rrenkert@7840: this.description = description; mschaefer@8986: this.values = new ArrayList<>(); mschaefer@8986: this.storeMode = StoreMode.NONE; rrenkert@7840: } rrenkert@7840: rrenkert@7840: public String getDescription() { mschaefer@8986: return this.description; rrenkert@7840: } rrenkert@7840: mschaefer@8986: public void setDepth(final ImportDepth depth) { rrenkert@7840: this.depth = depth; rrenkert@7840: } rrenkert@7840: mschaefer@8986: public void setTimeInterval(final ImportTimeInterval importTimeInterval) { rrenkert@7840: this.timeInterval = importTimeInterval; rrenkert@7840: } rrenkert@7840: mschaefer@8986: public void addValue(final ImportPorosityValue value) { mschaefer@8986: this.values.add(value); rrenkert@7840: } rrenkert@7840: mschaefer@8986: public void storeDependencies(final River river) { mschaefer@8986: log.info("store dependencies for '" + getDescription() + "'"); rrenkert@7840: mschaefer@8986: if (this.depth != null) { mschaefer@8986: this.depth.storeDependencies(); rrenkert@7840: } rrenkert@7840: mschaefer@8986: final Porosity peer = getPeer(river); rrenkert@7840: rrenkert@7840: if (peer != null) { mschaefer@8986: // log.info("store porosity values."); mschaefer@8986: for (final ImportPorosityValue value : this.values) { mschaefer@8986: value.storeDependencies(peer, this.storeMode); rrenkert@7840: } mschaefer@8986: log.info("Porosity values processed: " + this.values.size()); rrenkert@7840: } rrenkert@7840: } rrenkert@7840: mschaefer@8986: public Porosity getPeer(final River river) { mschaefer@8986: // log.info("get peer"); rrenkert@7840: mschaefer@8986: if (this.depth == null) { mschaefer@8986: log.warn("cannot store porosity '" + this.description mschaefer@8986: + "': no depth"); rrenkert@7840: return null; rrenkert@7840: } rrenkert@7840: mschaefer@8986: if (this.peer == null) { mschaefer@8986: final Session session = ImporterSession.getInstance() mschaefer@8986: .getDatabaseSession(); rrenkert@7840: mschaefer@8986: final Query query = session.createQuery("from Porosity where " mschaefer@8986: + " river=:river and " mschaefer@8986: + " depth=:depth and " mschaefer@8986: + " description=:description"); rrenkert@7840: rrenkert@7840: query.setParameter("river", river); mschaefer@8986: query.setParameter("depth", this.depth.getPeer()); mschaefer@8986: query.setParameter("description", this.description); rrenkert@7840: mschaefer@8986: final List porosity = query.list(); rrenkert@7840: rrenkert@7840: if (porosity.isEmpty()) { rrenkert@7840: log.debug("Create new Porosity DB instance."); rrenkert@7840: mschaefer@8986: this.peer = new Porosity(river, this.depth.getPeer(), mschaefer@8986: this.description, this.timeInterval.getPeer()); rrenkert@7840: mschaefer@8986: session.save(this.peer); mschaefer@8986: this.storeMode = StoreMode.INSERT; rrenkert@7840: } rrenkert@7840: else { mschaefer@8986: this.peer = porosity.get(0); mschaefer@8986: this.storeMode = StoreMode.UPDATE; rrenkert@7840: } rrenkert@7840: } rrenkert@7840: mschaefer@8986: return this.peer; rrenkert@7840: } rrenkert@7840: } rrenkert@7840: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :