teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5992: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5992: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.importer; ingo@2827: 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: teichmann@5829: import org.dive4elements.river.model.DischargeZone; teichmann@5829: import org.dive4elements.river.model.FlowVelocityModel; teichmann@5829: import org.dive4elements.river.model.River; ingo@2827: ingo@2827: ingo@2827: public class ImportFlowVelocityModel { ingo@2827: ingo@3943: private static final Logger log = Logger ingo@3943: .getLogger(ImportFlowVelocityModel.class); 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@2828: public ImportFlowVelocityModel() { ingo@2828: values = new ArrayList(); ingo@2828: } ingo@2828: tom@5689: public ImportFlowVelocityModel(String description) { tom@5689: this(); tom@5689: tom@5689: this.description = description; tom@5689: } tom@5689: ingo@3943: public ImportFlowVelocityModel(ImportDischargeZone dischargeZone, ingo@3943: String description) { ingo@2828: this(); ingo@2828: ingo@2827: this.dischargeZone = dischargeZone; ingo@3943: this.description = description; ingo@2827: } ingo@2827: ingo@2828: public void setDischargeZone(ImportDischargeZone dischargeZone) { ingo@2828: this.dischargeZone = dischargeZone; ingo@2828: } ingo@2828: ingo@2828: public void setDescription(String description) { ingo@2828: this.description = description; ingo@2828: } ingo@2828: ingo@2828: public void addValue(ImportFlowVelocityModelValue value) { ingo@2828: this.values.add(value); ingo@2828: } ingo@2828: tom@5416: public void storeDependencies(River river) { 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@3943: if (peer != null) { ingo@3943: int i = 0; ingo@2833: ingo@3943: for (ImportFlowVelocityModelValue value : values) { ingo@3943: value.storeDependencies(peer); ingo@3943: i++; ingo@3943: } ingo@3943: ingo@3943: log.info("stored " + i + " flow velocity model values."); ingo@2827: } ingo@2827: } ingo@2827: ingo@2827: public FlowVelocityModel getPeer(River river) { ingo@2827: if (peer == null) { ingo@3943: Session session = ImporterSession.getInstance() ingo@3943: .getDatabaseSession(); ingo@2827: ingo@2827: DischargeZone zone = dischargeZone.getPeer(river); ingo@2827: ingo@3943: Query query = session.createQuery("from FlowVelocityModel where " teichmann@5323: + " dischargeZone=:dischargeZone"); ingo@2827: ingo@2827: query.setParameter("dischargeZone", zone); ingo@2827: ingo@2827: List model = query.list(); ingo@2827: ingo@2827: if (model.isEmpty()) { tom@5689: peer = new FlowVelocityModel(zone, description); 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 :