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; mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; teichmann@5829: import org.dive4elements.river.model.DischargeZone; teichmann@5829: import org.dive4elements.river.model.FlowVelocityModel; teichmann@5829: import org.dive4elements.river.model.River; mschaefer@8986: import org.hibernate.Query; mschaefer@8986: import org.hibernate.Session; ingo@2827: ingo@2827: ingo@2827: public class ImportFlowVelocityModel { ingo@2827: ingo@3943: private static final Logger log = Logger mschaefer@8986: .getLogger(ImportFlowVelocityModel.class); ingo@2827: ingo@2827: private String description; ingo@2827: ingo@2827: private ImportDischargeZone dischargeZone; ingo@2827: mschaefer@8986: private final List values; mschaefer@8986: mschaefer@8986: protected StoreMode storeMode; ingo@2827: ingo@2827: private FlowVelocityModel peer; ingo@2827: ingo@2828: public ImportFlowVelocityModel() { mschaefer@8986: this.values = new ArrayList<>(); mschaefer@8986: this.storeMode = StoreMode.NONE; ingo@2828: } ingo@2828: mschaefer@8986: public ImportFlowVelocityModel(final String description) { tom@5689: this(); tom@5689: this.description = description; tom@5689: } tom@5689: mschaefer@8986: public ImportFlowVelocityModel(final ImportDischargeZone dischargeZone, mschaefer@8986: final String description) { ingo@2828: this(); ingo@2827: this.dischargeZone = dischargeZone; ingo@3943: this.description = description; ingo@2827: } ingo@2827: mschaefer@8986: public void setDischargeZone(final ImportDischargeZone dischargeZone) { ingo@2828: this.dischargeZone = dischargeZone; ingo@2828: } ingo@2828: mschaefer@8986: public void setDescription(final String description) { ingo@2828: this.description = description; ingo@2828: } ingo@2828: mschaefer@8986: public void addValue(final ImportFlowVelocityModelValue value) { ingo@2828: this.values.add(value); ingo@2828: } ingo@2828: mschaefer@8986: public void storeDependencies(final River river) { ingo@2827: log.debug("store dependencies"); ingo@2827: mschaefer@8986: if (this.dischargeZone == null) { ingo@2828: log.warn("skip flow velocity model: No discharge zone specified."); ingo@2828: return; ingo@2828: } ingo@2828: mschaefer@8986: this.dischargeZone.storeDependencies(river); ingo@2827: mschaefer@8986: final FlowVelocityModel peer = getPeer(river); ingo@2827: ingo@3943: if (peer != null) { ingo@3943: int i = 0; ingo@2833: mschaefer@8986: for (final ImportFlowVelocityModelValue value : this.values) { mschaefer@8986: value.storeDependencies(peer, this.storeMode); ingo@3943: i++; ingo@3943: } ingo@3943: ingo@3943: log.info("stored " + i + " flow velocity model values."); ingo@2827: } ingo@2827: } ingo@2827: mschaefer@8986: public FlowVelocityModel getPeer(final River river) { mschaefer@8986: if (this.peer == null) { mschaefer@8986: final Session session = ImporterSession.getInstance() mschaefer@8986: .getDatabaseSession(); ingo@2827: mschaefer@8986: final DischargeZone zone = this.dischargeZone.getPeer(river); ingo@2827: mschaefer@8986: final Query query = session.createQuery("from FlowVelocityModel where " mschaefer@8986: + " dischargeZone=:dischargeZone"); ingo@2827: ingo@2827: query.setParameter("dischargeZone", zone); ingo@2827: mschaefer@8986: final List model = query.list(); ingo@2827: ingo@2827: if (model.isEmpty()) { mschaefer@8986: this.peer = new FlowVelocityModel(zone, this.description); mschaefer@8986: session.save(this.peer); mschaefer@8986: this.storeMode = StoreMode.INSERT; ingo@2827: } ingo@2827: else { mschaefer@8986: this.peer = model.get(0); mschaefer@8986: this.storeMode = StoreMode.UPDATE; ingo@2827: } ingo@2827: } ingo@2827: mschaefer@8986: return this.peer; ingo@2827: } ingo@2827: } ingo@2827: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :