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@1204: sascha@1204: import java.util.List; sascha@1204: sascha@1205: import org.apache.log4j.Logger; mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; mschaefer@8986: import org.dive4elements.river.model.CrossSection; mschaefer@8986: import org.dive4elements.river.model.River; mschaefer@8986: import org.dive4elements.river.model.TimeInterval; mschaefer@8986: import org.hibernate.Query; mschaefer@8986: import org.hibernate.Session; sascha@1205: felix@4705: /** CrossSection to be imported, holds list of ImportCrossSectionLines. */ sascha@1204: public class ImportCrossSection sascha@1204: { felix@7540: private static Logger log = Logger.getLogger(ImportCrossSection.class); sascha@1205: sascha@1204: protected ImportRiver river; sascha@1204: protected String description; sascha@1204: protected ImportTimeInterval timeInterval; sascha@1204: protected List lines; mschaefer@8986: protected StoreMode storeMode; sascha@1204: sascha@1204: protected CrossSection peer; sascha@1204: sascha@1204: public ImportCrossSection() { sascha@1204: } sascha@1204: sascha@1204: public ImportCrossSection( mschaefer@8986: final ImportRiver river, mschaefer@8986: final String description, mschaefer@8986: final ImportTimeInterval timeInterval, mschaefer@8986: final List lines mschaefer@8986: ) { sascha@1204: this.river = river; sascha@1204: this.description = description; sascha@1204: this.timeInterval = timeInterval; sascha@1204: this.lines = lines; mschaefer@8986: this.storeMode = StoreMode.NONE; sascha@1204: wireWithLines(); sascha@1204: } sascha@1204: sascha@1204: public void wireWithLines() { mschaefer@8986: for (final ImportCrossSectionLine line: this.lines) { sascha@1204: line.setCrossSection(this); sascha@1204: } sascha@1204: } sascha@1204: sascha@1204: public ImportRiver getRiver() { mschaefer@8986: return this.river; sascha@1204: } sascha@1204: mschaefer@8986: public void setRiver(final ImportRiver river) { sascha@1204: this.river = river; sascha@1204: } sascha@1204: sascha@1204: public String getDescription() { mschaefer@8986: return this.description; sascha@1204: } sascha@1204: mschaefer@8986: public void setDescription(final String description) { sascha@1204: this.description = description; sascha@1204: } sascha@1204: sascha@1204: public ImportTimeInterval getTimeInterval() { mschaefer@8986: return this.timeInterval; sascha@1204: } sascha@1204: mschaefer@8986: public void setTimeInterval(final ImportTimeInterval timeInterval) { sascha@1204: this.timeInterval = timeInterval; sascha@1204: } sascha@1204: sascha@1204: public void storeDependencies() { sascha@1204: mschaefer@8986: log.info("store cross section '" + this.description + "'"); sascha@1205: sascha@1204: getPeer(); sascha@1204: mschaefer@8986: // int i = 1; mschaefer@8986: // final int N = this.lines.size(); sascha@1205: mschaefer@8986: for (final ImportCrossSectionLine line: this.lines) { sascha@1204: line.storeDependencies(); mschaefer@8986: // log.info(" stored " + i + " lines. remaining: " + (N-i)); mschaefer@8986: // ++i; sascha@1204: } mschaefer@8986: log.info(" lines stored: " + this.lines.size()); sascha@1204: } sascha@1204: sascha@1204: public CrossSection getPeer() { sascha@1204: mschaefer@8986: if (this.peer == null) { mschaefer@8986: final River r = this.river.getPeer(); mschaefer@8986: final TimeInterval t = (this.timeInterval != null) ? this.timeInterval.getPeer() : null; sascha@1204: mschaefer@8986: final Session session = mschaefer@8986: ImporterSession.getInstance().getDatabaseSession(); sascha@1204: mschaefer@8986: final Query query = session.createQuery( mschaefer@8986: "from CrossSection where " + mschaefer@8986: "river=:r and " + mschaefer@8986: "timeInterval=:t and " + mschaefer@8986: "description=:d"); sascha@1204: sascha@1204: query.setParameter("r", r); sascha@1204: query.setParameter("t", t); mschaefer@8986: query.setParameter("d", this.description); sascha@1204: mschaefer@8986: final List crossSections = query.list(); sascha@1204: if (crossSections.isEmpty()) { mschaefer@8986: this.peer = new CrossSection(r, t, this.description); mschaefer@8986: session.save(this.peer); mschaefer@8986: this.storeMode = StoreMode.INSERT; sascha@1204: } sascha@1204: else { mschaefer@8986: this.peer = crossSections.get(0); mschaefer@8986: this.storeMode = StoreMode.UPDATE; sascha@1204: } sascha@1204: } mschaefer@8986: return this.peer; sascha@1204: } sascha@1204: } sascha@1204: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :