teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5844: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5844: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.importer; ingo@3328: ingo@3328: import java.sql.SQLException; ingo@3328: import java.util.ArrayList; ingo@3328: import java.util.List; ingo@3328: ingo@3328: import org.apache.log4j.Logger; ingo@3328: ingo@3329: import org.hibernate.Query; ingo@3329: import org.hibernate.Session; ingo@3328: import org.hibernate.exception.ConstraintViolationException; ingo@3328: teichmann@5829: import org.dive4elements.river.model.River; teichmann@5829: import org.dive4elements.river.model.SQRelation; teichmann@5829: import org.dive4elements.river.model.TimeInterval; ingo@3328: ingo@3328: ingo@3328: public class ImportSQRelation { ingo@3328: ingo@3328: private static Logger log = Logger.getLogger(ImportSQRelation.class); ingo@3328: ingo@3328: private ImportTimeInterval timeInterval; ingo@3328: ingo@3329: private String description; ingo@3329: ingo@3328: private List values; ingo@3328: ingo@3328: private SQRelation peer; ingo@3328: ingo@3328: public ImportSQRelation() { ingo@3328: this.values = new ArrayList(); ingo@3328: } ingo@3328: tom@5416: public void storeDependencies(River river) { ingo@3328: log.info("store dependencies"); ingo@3329: ingo@3329: SQRelation peer = getPeer(river); ingo@3329: ingo@3943: if (peer != null) { ingo@3943: int count = 0; ingo@3329: ingo@3943: for (ImportSQRelationValue value : values) { ingo@3943: try { ingo@3943: value.storeDependencies(peer); ingo@3943: count++; ingo@3943: } ingo@3943: catch (SQLException sqle) { ingo@3943: log.warn("ISQ: Unable to store sq relation value.", sqle); ingo@3943: } ingo@3943: catch (ConstraintViolationException cve) { ingo@3943: log.warn("ISQ: Unable to store sq relation value.", cve); ingo@3943: } ingo@3329: } ingo@3943: ingo@3943: log.info("stored " + count + " sq relation values."); ingo@3329: } ingo@3328: } ingo@3328: ingo@3329: public SQRelation getPeer(River river) { ingo@3328: log.debug("getPeer()"); ingo@3328: ingo@3328: if (peer == null) { ingo@3329: TimeInterval timeInter = timeInterval.getPeer(); ingo@3329: ingo@3329: if (timeInter == null) { sascha@3662: log.warn("ISQ: Cannot determine sq relation without time interval"); ingo@3329: return null; ingo@3329: } ingo@3329: ingo@3943: Session session = ImporterSession.getInstance() ingo@3943: .getDatabaseSession(); ingo@3329: ingo@3943: Query query = session ingo@3943: .createQuery("FROM SQRelation WHERE river=:river AND timeInterval=:timeInter"); ingo@3329: ingo@3329: query.setParameter("river", river); ingo@3329: query.setParameter("timeInter", timeInter); ingo@3329: ingo@3329: List sq = query.list(); ingo@3329: ingo@3329: if (sq.isEmpty()) { ingo@3329: log.info("create new SQ relation '" + description + "'"); ingo@3329: ingo@3943: peer = new SQRelation(river, timeInter, description); ingo@3329: session.save(peer); ingo@3329: } ingo@3329: else { ingo@3329: peer = sq.get(0); ingo@3329: } ingo@3328: } ingo@3328: ingo@3328: return peer; ingo@3328: } ingo@3328: ingo@3329: public void setDescription(String description) { ingo@3329: this.description = description; ingo@3329: } ingo@3329: ingo@3328: public void setTimeInterval(ImportTimeInterval timeInterval) { ingo@3328: this.timeInterval = timeInterval; ingo@3328: } ingo@3328: ingo@3328: public void addValue(ImportSQRelationValue value) { ingo@3328: if (value != null) { ingo@3328: this.values.add(value); ingo@3328: } ingo@3328: } ingo@3328: } ingo@3328: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :