ingo@2827: package de.intevation.flys.importer; ingo@2827: ingo@2827: import java.sql.SQLException; ingo@2827: import java.util.List; ingo@2827: ingo@2827: import org.apache.log4j.Logger; ingo@2827: ingo@2827: import org.hibernate.Session; ingo@2827: import org.hibernate.Query; ingo@2827: import org.hibernate.exception.ConstraintViolationException; ingo@2827: ingo@2827: import de.intevation.flys.model.DischargeZone; ingo@2827: import de.intevation.flys.model.FlowVelocityModel; ingo@2827: import de.intevation.flys.model.River; ingo@2827: ingo@2827: ingo@2827: public class ImportFlowVelocityModel { ingo@2827: ingo@2827: private static final Logger log = ingo@2827: Logger.getLogger(ImportFlowVelocityModel.class); ingo@2827: ingo@2827: ingo@2827: private String description; ingo@2827: ingo@2827: private ImportDischargeZone dischargeZone; ingo@2827: ingo@2827: private List values; ingo@2827: ingo@2827: private FlowVelocityModel peer; ingo@2827: ingo@2827: ingo@2827: public ImportFlowVelocityModel( ingo@2827: ImportDischargeZone dischargeZone, ingo@2827: String description ingo@2827: ) { ingo@2827: this.dischargeZone = dischargeZone; ingo@2827: this.description = description; ingo@2827: } ingo@2827: ingo@2827: ingo@2827: public void storeDependencies(River river) ingo@2827: throws SQLException, ConstraintViolationException ingo@2827: { ingo@2827: log.debug("store dependencies"); ingo@2827: ingo@2827: dischargeZone.storeDependencies(river); ingo@2827: ingo@2827: FlowVelocityModel peer = getPeer(river); ingo@2827: ingo@2827: for (ImportFlowVelocityModelValue value: values) { ingo@2827: value.storeDependencies(peer); ingo@2827: } ingo@2827: } ingo@2827: ingo@2827: ingo@2827: public FlowVelocityModel getPeer(River river) { ingo@2827: if (peer == null) { ingo@2827: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@2827: ingo@2827: DischargeZone zone = dischargeZone.getPeer(river); ingo@2827: ingo@2827: Query query = session.createQuery( ingo@2827: "from FlowVelocityModel where " + ingo@2827: " river:=river and " + ingo@2827: " dischargeZone=:dischargeZone" ingo@2827: ); ingo@2827: ingo@2827: query.setParameter("river", river); ingo@2827: query.setParameter("dischargeZone", zone); ingo@2827: ingo@2827: List model = query.list(); ingo@2827: ingo@2827: if (model.isEmpty()) { ingo@2827: peer = new FlowVelocityModel(river, zone); ingo@2827: session.save(peer); ingo@2827: } ingo@2827: else { ingo@2827: peer = model.get(0); ingo@2827: } ingo@2827: } ingo@2827: ingo@2827: return peer; ingo@2827: } ingo@2827: } ingo@2827: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :