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