ingo@2827: package de.intevation.flys.importer; ingo@2827: ingo@2827: import java.sql.SQLException; ingo@2828: import java.util.ArrayList; 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@2828: public ImportFlowVelocityModel() { ingo@2828: values = new ArrayList(); ingo@2828: } ingo@2828: ingo@2828: ingo@2827: public ImportFlowVelocityModel( ingo@2827: ImportDischargeZone dischargeZone, ingo@2827: String description ingo@2827: ) { ingo@2828: this(); ingo@2828: ingo@2827: this.dischargeZone = dischargeZone; ingo@2827: this.description = description; ingo@2827: } ingo@2827: ingo@2827: ingo@2828: public void setDischargeZone(ImportDischargeZone dischargeZone) { ingo@2828: this.dischargeZone = dischargeZone; ingo@2828: } ingo@2828: ingo@2828: ingo@2828: public void setDescription(String description) { ingo@2828: this.description = description; ingo@2828: } ingo@2828: ingo@2828: ingo@2828: public void addValue(ImportFlowVelocityModelValue value) { ingo@2828: this.values.add(value); ingo@2828: } ingo@2828: ingo@2828: ingo@2827: public void storeDependencies(River river) ingo@2827: throws SQLException, ConstraintViolationException ingo@2827: { ingo@2827: log.debug("store dependencies"); ingo@2827: ingo@2828: if (dischargeZone == null) { ingo@2828: log.warn("skip flow velocity model: No discharge zone specified."); ingo@2828: return; ingo@2828: } ingo@2828: 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 :