ingo@2850: package de.intevation.flys.importer; ingo@2850: ingo@2850: import java.sql.SQLException; ingo@2850: import java.util.ArrayList; ingo@2850: import java.util.List; ingo@2850: ingo@2850: import org.apache.log4j.Logger; ingo@2850: ingo@2850: import org.hibernate.Session; ingo@2850: import org.hibernate.Query; ingo@2850: import org.hibernate.exception.ConstraintViolationException; ingo@2850: ingo@2850: import de.intevation.flys.model.River; ingo@2850: import de.intevation.flys.model.Unit; ingo@2850: import de.intevation.flys.model.WaterlevelDifference; ingo@2850: ingo@2850: ingo@2850: public class ImportWaterlevelDifference { ingo@2850: ingo@2850: private static final Logger log = ingo@2850: Logger.getLogger(ImportWaterlevelDifference.class); ingo@2850: ingo@2850: ingo@2850: private ImportUnit unit; ingo@2850: ingo@2850: private String description; ingo@2850: ingo@2850: private List columns; ingo@2850: ingo@2850: private WaterlevelDifference peer; ingo@2850: ingo@2850: ingo@2850: public ImportWaterlevelDifference(String description) { ingo@2850: this.columns = new ArrayList(); ingo@2850: ingo@2850: this.description = description; ingo@2850: } ingo@2850: ingo@2850: ingo@2850: public void setUnit(ImportUnit unit) { ingo@2850: this.unit = unit; ingo@2850: } ingo@2850: ingo@2850: ingo@2850: public void addValue(ImportWaterlevelDifferenceColumn column) { ingo@2850: this.columns.add(column); ingo@2850: } ingo@2850: ingo@2850: ingo@2850: public void storeDependencies(River river) ingo@2850: throws SQLException, ConstraintViolationException ingo@2850: { ingo@2850: log.info("store dependencies"); ingo@2850: ingo@2850: WaterlevelDifference peer = getPeer(river); ingo@2850: ingo@2850: int i = 0; ingo@2850: ingo@2850: for (ImportWaterlevelDifferenceColumn column: columns) { ingo@2850: column.storeDependencies(peer); ingo@2850: i++; ingo@2850: } ingo@2850: ingo@2850: log.info("stored " + i + " waterlevel difference columns"); ingo@2850: } ingo@2850: ingo@2850: ingo@2850: public WaterlevelDifference getPeer(River river) { ingo@2850: Unit u = unit != null ? unit.getPeer() : null; ingo@2850: if (u == null) { sascha@3662: log.warn("IWD: skip invalid waterlevel difference - no unit set!"); ingo@2850: return null; ingo@2850: } ingo@2850: ingo@2850: if (peer == null) { ingo@2850: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@2850: Query query = session.createQuery( ingo@2850: "from WaterlevelDifference where " + ingo@2850: " river=:river and " + ingo@2850: " unit=:unit and " + ingo@2850: " description=:description" ingo@2850: ); ingo@2850: ingo@2850: query.setParameter("river", river); ingo@2850: query.setParameter("unit", u); ingo@2850: query.setParameter("description", description); ingo@2850: ingo@2850: List diffs = query.list(); ingo@2850: if (diffs.isEmpty()) { ingo@2850: peer = new WaterlevelDifference(river, u, description); ingo@2850: session.save(peer); ingo@2850: } ingo@2850: else { ingo@2850: peer = diffs.get(0); ingo@2850: } ingo@2850: } ingo@2850: ingo@2850: return peer; ingo@2850: } ingo@2850: } ingo@2850: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :