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