teichmann@5829: package org.dive4elements.river.importer; ingo@4193: ingo@4193: import java.util.List; ingo@4193: ingo@4193: import org.apache.log4j.Logger; ingo@4193: import org.hibernate.Session; ingo@4193: teichmann@5829: import org.dive4elements.river.model.Gauge; teichmann@5829: import org.dive4elements.river.model.MeasurementStation; teichmann@5829: import org.dive4elements.river.model.Range; teichmann@5829: import org.dive4elements.river.model.River; teichmann@5829: import org.dive4elements.river.model.TimeInterval; ingo@4193: ingo@4193: ingo@4193: public class ImportMeasurementStation { ingo@4193: ingo@4193: private static final Logger log = Logger ingo@4193: .getLogger(ImportMeasurementStation.class); ingo@4193: ingo@4193: private MeasurementStation peer; ingo@4193: ingo@4193: public String name; ingo@4193: public Double station; ingo@4193: public ImportRange range; ingo@4193: public String measurementType; ingo@4193: public String riverside; ingo@4193: public String gauge; ingo@4193: public ImportTimeInterval observationTimerange; ingo@4193: public String operator; rrenkert@5471: public String description; ingo@4193: ingo@4193: public ImportMeasurementStation() { ingo@4193: } ingo@4193: ingo@4193: private Gauge getGaugeFromDB() { ingo@4193: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@4193: ingo@4193: org.hibernate.Query query = session ingo@4193: .createQuery("FROM Gauge WHERE name=:name"); ingo@4193: ingo@4193: query.setParameter("name", gauge); ingo@4193: List gauges = query.list(); ingo@4193: ingo@4193: return gauges.isEmpty() ? null : gauges.get(0); ingo@4193: } ingo@4193: tom@5416: public boolean storeDependencies(River river) { ingo@4193: getPeer(river); ingo@4193: ingo@4193: return peer != null; ingo@4193: } ingo@4193: ingo@4193: public Object getPeer(River river) { ingo@4193: if (peer == null) { ingo@4193: Gauge gauge = null; ingo@4193: try { ingo@4193: gauge = getGaugeFromDB(); ingo@4193: if (gauge == null) { rrenkert@5451: log.warn("No gauge found for measurement station '" + name ingo@4193: + "'"); ingo@4193: } ingo@4193: } ingo@4193: catch (Exception e) { ingo@4193: log.error("Exception: " + e.getMessage()); ingo@4193: } ingo@4193: aheinecke@5476: Range range = null; aheinecke@5476: aheinecke@5476: if (this.range != null) { aheinecke@5476: range = this.range.getPeer(river); aheinecke@5476: } aheinecke@5476: ingo@4193: if (range == null) { tom@5521: log.warn("No range found for measurement station '" + name + "'"); ingo@4193: } ingo@4193: ingo@4193: TimeInterval observationTimerange = this.observationTimerange ingo@4193: .getPeer(); ingo@4193: if (observationTimerange == null) { rrenkert@5451: log.warn("No time range found for measurement station '" rrenkert@5451: + name + "'"); ingo@4193: } ingo@4193: ingo@4193: Session session = ImporterSession.getInstance() ingo@4193: .getDatabaseSession(); ingo@4193: ingo@4193: org.hibernate.Query query = session rrenkert@5451: .createQuery( rrenkert@5451: "FROM MeasurementStation " + rrenkert@5451: "WHERE river=:river" + rrenkert@5451: " AND station=:station " + rrenkert@5451: " AND measurement_type=:measurement_type "); ingo@4193: ingo@4193: query.setParameter("river", river); ingo@4193: query.setParameter("station", station); rrenkert@5451: query.setParameter("measurement_type", measurementType); ingo@4193: ingo@4193: List stations = query.list(); ingo@4193: ingo@4193: if (stations.isEmpty()) { ingo@4193: log.info("create new measurement station '" + name + "'"); ingo@4193: ingo@4193: peer = new MeasurementStation(river, name, measurementType, rrenkert@5457: riverside, station, range, gauge, this.gauge, rrenkert@5471: observationTimerange, operator, description); ingo@4193: ingo@4193: session.save(peer); ingo@4193: } ingo@4193: } ingo@4193: ingo@4193: return peer; ingo@4193: } ingo@4193: }