ingo@2843: package de.intevation.flys.importer; ingo@2843: ingo@2843: import java.util.ArrayList; ingo@2843: import java.util.List; ingo@2843: ingo@2843: import org.apache.log4j.Logger; ingo@2843: ingo@2843: import org.hibernate.Session; ingo@2843: import org.hibernate.Query; ingo@2843: ingo@2843: import de.intevation.flys.model.River; ingo@2843: import de.intevation.flys.model.Unit; ingo@2843: import de.intevation.flys.model.Waterlevel; ingo@2843: ingo@2843: ingo@2843: public class ImportWaterlevel { ingo@2843: ingo@2843: private static final Logger log = Logger.getLogger(ImportWaterlevel.class); ingo@2843: ingo@2843: private ImportUnit unit; ingo@2843: ingo@2843: private String description; ingo@2843: ingo@2843: private List qRanges; ingo@2843: ingo@2843: private Waterlevel peer; ingo@2843: ingo@2845: public ImportWaterlevel(String description) { ingo@2843: this.qRanges = new ArrayList(); ingo@2843: ingo@2843: this.description = description; ingo@2843: } ingo@2843: ingo@2845: public void setUnit(ImportUnit unit) { ingo@2845: this.unit = unit; ingo@2845: } ingo@2845: ingo@2845: public void addValue(ImportWaterlevelQRange qRange) { ingo@2845: this.qRanges.add(qRange); ingo@2845: } ingo@2845: ingo@2843: public void storeDependencies(River river) { ingo@2845: log.info("store dependencies"); ingo@2845: ingo@2843: Waterlevel peer = getPeer(river); ingo@2843: ingo@3943: if (peer != null) { ingo@3943: int i = 0; ingo@2843: ingo@3943: for (ImportWaterlevelQRange qRange : qRanges) { ingo@3943: qRange.storeDependencies(peer); ingo@3943: i++; ingo@3943: } ingo@3943: ingo@3943: log.info("stored " + i + " waterlevel q ranges"); ingo@2843: } ingo@2843: } ingo@2843: ingo@2843: public Waterlevel getPeer(River river) { ingo@2843: Unit u = unit != null ? unit.getPeer() : null; ingo@2843: if (u == null) { ingo@2843: log.warn("skip invalid waterlevel - no unit set!"); ingo@2843: return null; ingo@2843: } ingo@2843: ingo@2843: if (peer == null) { ingo@3943: Session session = ImporterSession.getInstance() ingo@3943: .getDatabaseSession(); ingo@3943: Query query = session.createQuery("from Waterlevel where " ingo@3943: + " river=:river and " + " unit=:unit and " ingo@3943: + " description=:description"); ingo@2843: ingo@2843: query.setParameter("river", river); ingo@2843: query.setParameter("unit", u); ingo@2843: query.setParameter("description", description); ingo@2843: ingo@2843: List wsts = query.list(); ingo@2843: if (wsts.isEmpty()) { ingo@2843: peer = new Waterlevel(river, u, description); ingo@2843: session.save(peer); ingo@2843: } ingo@2843: else { ingo@2843: peer = wsts.get(0); ingo@2843: } ingo@2843: } ingo@2843: ingo@2843: return peer; ingo@2843: } ingo@2843: } ingo@2843: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :