ingo@3328: package de.intevation.flys.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: ingo@3328: import de.intevation.flys.model.River; ingo@3328: import de.intevation.flys.model.SQRelation; ingo@3329: import de.intevation.flys.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: 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: ingo@3328: public ImportSQRelation() { ingo@3328: this.values = new ArrayList(); ingo@3328: } ingo@3328: ingo@3328: ingo@3328: public void storeDependencies(River river) ingo@3328: throws SQLException, ConstraintViolationException ingo@3328: { ingo@3328: log.info("store dependencies"); ingo@3329: ingo@3329: SQRelation peer = getPeer(river); ingo@3329: ingo@3329: timeInterval.getPeer(); ingo@3329: ingo@3329: int count = 0; ingo@3329: ingo@3329: for (ImportSQRelationValue value: values) { ingo@3329: try { ingo@3329: value.storeDependencies(peer); ingo@3329: count++; ingo@3329: } ingo@3329: catch (SQLException sqle) { ingo@3329: log.warn("Unable to store sq relation value.", sqle); ingo@3329: } ingo@3329: catch (ConstraintViolationException cve) { ingo@3329: log.warn("Unable to store sq relation value.", cve); ingo@3329: } ingo@3329: } ingo@3329: ingo@3329: log.info("stored " + count + " sq relation values."); ingo@3328: } 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) { ingo@3329: log.warn("Cannot determine sq relation without time interval"); ingo@3329: return null; ingo@3329: } ingo@3329: ingo@3329: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@3329: ingo@3329: Query query = session.createQuery( ingo@3329: "FROM SQRelation WHERE river=:river AND timeInterval=:timeInter" ingo@3329: ); 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@3329: peer = new SQRelation( ingo@3329: river, ingo@3329: timeInter, ingo@3329: description ingo@3329: ); 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@3328: ingo@3329: public void setDescription(String description) { ingo@3329: this.description = description; ingo@3329: } ingo@3329: ingo@3329: ingo@3328: public void setTimeInterval(ImportTimeInterval timeInterval) { ingo@3328: this.timeInterval = timeInterval; ingo@3328: } 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 :