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.util.ArrayList; mschaefer@8986: import java.util.List; mschaefer@8986: mschaefer@8986: import org.apache.log4j.Logger; mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; teichmann@5829: import org.dive4elements.river.model.HYK; teichmann@5829: import org.dive4elements.river.model.River; mschaefer@8986: import org.hibernate.Query; sascha@1218: import org.hibernate.Session; sascha@1224: sascha@1218: public class ImportHYK sascha@1218: { sascha@1224: private static Logger log = Logger.getLogger(ImportHYK.class); sascha@1224: sascha@1218: protected ImportRiver river; sascha@1218: protected String description; sascha@1218: sascha@1218: protected List entries; sascha@1218: mschaefer@8986: protected StoreMode storeMode; mschaefer@8986: sascha@1218: protected HYK peer; sascha@1218: sascha@1218: public ImportHYK() { mschaefer@8986: this.entries = new ArrayList<>(); mschaefer@8986: this.storeMode = StoreMode.NONE; sascha@1218: } sascha@1218: mschaefer@8986: public ImportHYK(final ImportRiver river, final String description) { sascha@1218: this(); sascha@1218: this.river = river; sascha@1218: this.description = description; sascha@1218: } sascha@1218: sascha@1219: public ImportRiver getRiver() { mschaefer@8986: return this.river; sascha@1219: } sascha@1219: mschaefer@8986: public void setRiver(final ImportRiver river) { sascha@1219: this.river = river; sascha@1219: } sascha@1219: mschaefer@8986: public void addEntry(final ImportHYKEntry entry) { mschaefer@8986: this.entries.add(entry); sascha@1218: entry.setHYK(this); sascha@1218: } sascha@1218: sascha@1221: public void storeDependencies() { mschaefer@8986: log.info("store HYK '" + this.description + "'"); sascha@1221: getPeer(); mschaefer@8986: for (int i = 0, N = this.entries.size(); i < N; ++i) { mschaefer@8986: final ImportHYKEntry entry = this.entries.get(i); sascha@1224: log.info(" store km " + entry.getKm() + mschaefer@8986: " (" + (i+1) + " of " + N + ")"); sascha@1221: entry.storeDependencies(); sascha@1221: } sascha@1221: } sascha@1221: sascha@1218: public HYK getPeer() { mschaefer@8986: if (this.peer == null) { mschaefer@8986: final River r = this.river.getPeer(); mschaefer@8986: final Session session = ImporterSession.getInstance() mschaefer@8986: .getDatabaseSession(); mschaefer@8986: final Query query = session.createQuery( mschaefer@8986: "from HYK where river=:river and description=:description"); sascha@1218: query.setParameter("river", r); mschaefer@8986: query.setParameter("description", this.description); mschaefer@8986: final List hyks = query.list(); sascha@1218: if (hyks.isEmpty()) { mschaefer@8986: this.peer = new HYK(r, this.description); mschaefer@8986: session.save(this.peer); mschaefer@8986: this.storeMode = StoreMode.INSERT; sascha@1218: } sascha@1218: else { mschaefer@8986: this.peer = hyks.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 :