ingo@2827: package de.intevation.flys.importer; ingo@2827: ingo@2827: import java.math.BigDecimal; 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.NamedMainValue; ingo@2827: import de.intevation.flys.model.River; ingo@2827: ingo@2827: ingo@2827: public class ImportDischargeZone { ingo@2827: ingo@2827: private static final Logger log = ingo@2827: Logger.getLogger(ImportDischargeZone.class); ingo@2827: ingo@2827: ingo@2827: private String gaugeName; ingo@2827: ingo@2827: private ImportNamedMainValue mainValue; ingo@2827: ingo@2827: private BigDecimal lowerFactor; ingo@2827: ingo@2827: private BigDecimal upperFactor; ingo@2827: ingo@2827: private DischargeZone peer; ingo@2827: ingo@2827: ingo@2827: public ImportDischargeZone( ingo@2827: ImportNamedMainValue mainValue, ingo@2827: String gaugeName, ingo@2827: BigDecimal lowerFactor, ingo@2827: BigDecimal upperFactor ingo@2827: ) { ingo@2827: this.mainValue = mainValue; ingo@2827: this.gaugeName = gaugeName; ingo@2827: this.lowerFactor = lowerFactor; ingo@2827: this.upperFactor = upperFactor; 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: mainValue.getPeer(); ingo@2827: ingo@2827: getPeer(river); ingo@2827: } ingo@2827: ingo@2827: ingo@2827: public DischargeZone getPeer(River river) { ingo@2827: if (peer == null) { ingo@2827: Session session = ImporterSession.getInstance().getDatabaseSession(); ingo@2827: ingo@2827: NamedMainValue namedMainValue = mainValue.getPeer(); ingo@2827: ingo@2827: Query query = session.createQuery( ingo@2827: "from DischargeZone where " + ingo@2827: " river:=river and " + ingo@2827: " gaugeName=:gaugeName and " + ingo@2827: " mainValue=:mainValue" ingo@2827: ); ingo@2827: ingo@2827: query.setParameter("river", river); ingo@2827: query.setParameter("gaugeName", gaugeName); ingo@2827: query.setParameter("mainValue", namedMainValue); ingo@2827: ingo@2827: List zone = query.list(); ingo@2827: ingo@2827: if (zone.isEmpty()) { ingo@2827: peer = new DischargeZone( ingo@2827: gaugeName, ingo@2827: river, ingo@2827: namedMainValue, ingo@2827: lowerFactor, ingo@2827: upperFactor); ingo@2827: ingo@2827: session.save(peer); ingo@2827: } ingo@2827: else { ingo@2827: peer = zone.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 :