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.math.BigDecimal; rrenkert@7840: import java.util.List; rrenkert@7840: rrenkert@7840: import org.apache.log4j.Logger; mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; rrenkert@7840: import org.dive4elements.river.model.Porosity; rrenkert@7840: import org.dive4elements.river.model.PorosityValue; mschaefer@8986: import org.hibernate.Query; mschaefer@8986: import org.hibernate.Session; rrenkert@7840: rrenkert@7840: rrenkert@7840: public class ImportPorosityValue { rrenkert@7840: rrenkert@7840: private static final Logger log = mschaefer@8986: Logger.getLogger(ImportPorosityValue.class); rrenkert@7840: rrenkert@7840: rrenkert@7840: protected PorosityValue peer; rrenkert@7840: rrenkert@7840: protected BigDecimal station; rrenkert@7840: rrenkert@7840: protected BigDecimal shoreOffset; rrenkert@7840: rrenkert@7840: protected BigDecimal porosity; rrenkert@7840: rrenkert@7840: protected String description; rrenkert@7840: rrenkert@7840: rrenkert@7840: public ImportPorosityValue( mschaefer@8986: final BigDecimal station, mschaefer@8986: final BigDecimal shoreOffset, mschaefer@8986: final BigDecimal porosity, mschaefer@8986: final String description mschaefer@8986: ) { rrenkert@7840: this.station = station; rrenkert@7840: this.shoreOffset = shoreOffset; rrenkert@7840: this.porosity = porosity; rrenkert@7840: this.description = description; rrenkert@7840: } rrenkert@7840: rrenkert@7840: mschaefer@8986: public void storeDependencies(final Porosity porosity, final StoreMode parentStoreMode) { mschaefer@8986: // log.info("store dependencies"); rrenkert@7840: mschaefer@8986: getPeer(porosity, parentStoreMode); rrenkert@7840: } rrenkert@7840: rrenkert@7840: mschaefer@8986: public PorosityValue getPeer(final Porosity porosity, final StoreMode parentStoreMode) { rrenkert@7840: log.info("get peer"); rrenkert@7840: mschaefer@8986: if (this.peer == null) { mschaefer@8986: final Session session = ImporterSession.getInstance() mschaefer@8986: .getDatabaseSession(); mschaefer@8986: List values; mschaefer@8986: if (parentStoreMode == StoreMode.INSERT) mschaefer@8986: values = null; mschaefer@8986: else { mschaefer@8986: final Query query = session.createQuery( mschaefer@8986: "from PorosityValue " mschaefer@8986: + "where porosity=:porosity " mschaefer@8986: + "and station between :station - 0.0001f " mschaefer@8986: + " and :station + 0.0001f " mschaefer@8986: + "and porosityValue between :poros -0.0001f " mschaefer@8986: + " and :poros + 0.0001f " mschaefer@8986: + "and description=:description"); rrenkert@7840: mschaefer@8986: query.setParameter("porosity", porosity); mschaefer@8986: query.setParameter("station", this.station.floatValue()); mschaefer@8986: query.setParameter("poros", this.porosity.floatValue()); mschaefer@8986: query.setParameter("description", this.description); rrenkert@7840: mschaefer@8986: values = query.list(); mschaefer@8986: } mschaefer@8986: if ((values == null) || values.isEmpty()) { mschaefer@8986: // log.debug("Create new PorosityValue DB instance."); rrenkert@7840: mschaefer@8986: this.peer = new PorosityValue( mschaefer@8986: porosity, mschaefer@8986: this.station, mschaefer@8986: this.shoreOffset, mschaefer@8986: this.porosity, mschaefer@8986: this.description); rrenkert@7840: mschaefer@8986: session.save(this.peer); rrenkert@7840: } rrenkert@7840: else { mschaefer@8986: this.peer = values.get(0); 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 :