teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5992: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5992: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.importer; sascha@1218: mschaefer@8986: import java.math.BigDecimal; mschaefer@8986: import java.util.ArrayList; sascha@1218: import java.util.Date; sascha@1218: import java.util.List; sascha@1218: mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; mschaefer@8986: import org.dive4elements.river.model.HYK; mschaefer@8986: import org.dive4elements.river.model.HYKEntry; mschaefer@8986: import org.hibernate.Query; sascha@1218: import org.hibernate.Session; sascha@1218: sascha@1218: public class ImportHYKEntry sascha@1218: { sascha@1218: protected ImportHYK hyk; sascha@1218: protected BigDecimal km; sascha@1218: protected Date measure; sascha@1218: sascha@1218: protected List formations; sascha@1218: mschaefer@8986: protected StoreMode storeMode; mschaefer@8986: sascha@1218: protected HYKEntry peer; sascha@1218: sascha@1218: public ImportHYKEntry() { mschaefer@8986: this.formations = new ArrayList<>(); mschaefer@8986: this.storeMode = StoreMode.NONE; sascha@1218: } sascha@1218: sascha@1218: public ImportHYKEntry( mschaefer@8986: final ImportHYK hyk, mschaefer@8986: final BigDecimal km, mschaefer@8986: final Date measure mschaefer@8986: ) { sascha@1224: this(); sascha@1218: this.hyk = hyk; sascha@1218: this.km = km; sascha@1218: this.measure = measure; sascha@1218: } sascha@1218: sascha@1218: public ImportHYK getHYK() { mschaefer@8986: return this.hyk; sascha@1218: } sascha@1218: mschaefer@8986: public void setHYK(final ImportHYK hyk) { sascha@1218: this.hyk = hyk; sascha@1218: } sascha@1218: sascha@1224: public BigDecimal getKm() { mschaefer@8986: return this.km; sascha@1224: } sascha@1224: mschaefer@8986: public void setKm(final BigDecimal km) { sascha@1224: this.km = km; sascha@1224: } sascha@1224: mschaefer@8986: public void addFormation(final ImportHYKFormation formation) { mschaefer@8986: final int numFormation = this.formations.size(); mschaefer@8986: this.formations.add(formation); sascha@1218: formation.setFormationNum(numFormation); sascha@1218: formation.setEntry(this); sascha@1218: } sascha@1218: sascha@1221: public void storeDependencies() { sascha@1221: getPeer(); mschaefer@8986: for (final ImportHYKFormation formation: this.formations) { sascha@1221: formation.storeDependencies(); sascha@1221: } sascha@1221: } sascha@1221: sascha@1218: public HYKEntry getPeer() { mschaefer@8986: if (this.peer == null) { mschaefer@8986: final HYK h = this.hyk.getPeer(); mschaefer@8986: final Session session = ImporterSession.getInstance() mschaefer@8986: .getDatabaseSession(); mschaefer@8986: List entries; mschaefer@8986: if (this.hyk.storeMode == StoreMode.INSERT) mschaefer@8986: entries = null; mschaefer@8986: else { mschaefer@8986: final Query query = session.createQuery( mschaefer@8986: "from HYKEntry where HYK=:hyk " + mschaefer@8986: "and km=:km and measure=:measure"); mschaefer@8986: query.setParameter("hyk", h); mschaefer@8986: query.setParameter("km", this.km); mschaefer@8986: query.setParameter("measure", this.measure); mschaefer@8986: entries = query.list(); mschaefer@8986: } mschaefer@8986: if ((entries == null) || entries.isEmpty()) { mschaefer@8986: this.peer = new HYKEntry(h, this.km, this.measure); mschaefer@8986: session.save(this.peer); mschaefer@8986: this.storeMode = StoreMode.INSERT; sascha@1218: } sascha@1218: else { mschaefer@8986: this.peer = entries.get(0); mschaefer@8986: this.storeMode = StoreMode.UPDATE; sascha@1218: } sascha@1218: } mschaefer@8986: return this.peer; sascha@1218: } sascha@1218: } sascha@1218: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :