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; rrenkert@7840: import org.hibernate.Query; rrenkert@7840: import org.hibernate.Session; rrenkert@7840: rrenkert@7840: import org.dive4elements.river.model.River; rrenkert@7840: import org.dive4elements.river.model.Porosity; 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: rrenkert@7840: public ImportPorosity(String description) { rrenkert@7840: this.description = description; rrenkert@7840: this.values = new ArrayList(); rrenkert@7840: } rrenkert@7840: rrenkert@7840: public String getDescription() { rrenkert@7840: return description; rrenkert@7840: } rrenkert@7840: rrenkert@7840: public void setDepth(ImportDepth depth) { rrenkert@7840: this.depth = depth; rrenkert@7840: } rrenkert@7840: rrenkert@7840: public void setTimeInterval(ImportTimeInterval importTimeInterval) { rrenkert@7840: this.timeInterval = importTimeInterval; rrenkert@7840: } rrenkert@7840: rrenkert@7840: public void addValue(ImportPorosityValue value) { rrenkert@7840: values.add(value); rrenkert@7840: } rrenkert@7840: rrenkert@7840: public void storeDependencies(River river) { rrenkert@7840: log.info("store dependencies"); rrenkert@7840: rrenkert@7840: if (depth != null) { rrenkert@7840: depth.storeDependencies(); rrenkert@7840: } rrenkert@7840: rrenkert@7840: Porosity peer = getPeer(river); rrenkert@7840: rrenkert@7840: if (peer != null) { rrenkert@7840: log.info("store porosity values."); rrenkert@7840: for (ImportPorosityValue value : values) { rrenkert@7840: value.storeDependencies(peer); rrenkert@7840: } rrenkert@7840: } rrenkert@7840: } rrenkert@7840: rrenkert@7840: public Porosity getPeer(River river) { rrenkert@7840: log.info("get peer"); rrenkert@7840: rrenkert@7840: if (depth == null) { rrenkert@7840: log.warn("cannot store porosity '" + description rrenkert@7840: + "': no depth"); rrenkert@7840: return null; rrenkert@7840: } rrenkert@7840: rrenkert@7840: if (peer == null) { rrenkert@7840: Session session = ImporterSession.getInstance() rrenkert@7840: .getDatabaseSession(); rrenkert@7840: rrenkert@7840: Query query = session.createQuery("from Porosity where " rrenkert@7862: + " river=:river and " rrenkert@7862: + " depth=:depth and " rrenkert@7862: + " description=:description"); rrenkert@7840: rrenkert@7840: query.setParameter("river", river); rrenkert@7840: query.setParameter("depth", depth.getPeer()); rrenkert@7862: query.setParameter("description", description); rrenkert@7840: rrenkert@7840: List porosity = query.list(); rrenkert@7840: rrenkert@7840: if (porosity.isEmpty()) { rrenkert@7840: log.debug("Create new Porosity DB instance."); rrenkert@7840: rrenkert@7840: peer = new Porosity(river, depth.getPeer(), rrenkert@7840: description, timeInterval.getPeer()); rrenkert@7840: rrenkert@7840: session.save(peer); rrenkert@7840: } rrenkert@7840: else { rrenkert@7840: peer = porosity.get(0); rrenkert@7840: } rrenkert@7840: } rrenkert@7840: rrenkert@7840: return peer; rrenkert@7840: } rrenkert@7840: } rrenkert@7840: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :