tom@8841: /* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde tom@8841: * Software engineering by Intevation GmbH tom@8841: * tom@8841: * This file is Free Software under the GNU AGPL (>=v3) tom@8841: * and comes with ABSOLUTELY NO WARRANTY! Check out the tom@8841: * documentation coming with Dive4Elements River for details. tom@8841: */ tom@8841: teichmann@8028: package org.dive4elements.river.importer; teichmann@8028: mschaefer@8986: import java.util.ArrayList; teichmann@8028: import java.util.List; teichmann@8028: mschaefer@8986: import org.apache.log4j.Logger; mschaefer@8986: import org.dive4elements.river.importer.common.StoreMode; teichmann@8028: import org.dive4elements.river.model.GrainFraction; teichmann@8028: import org.dive4elements.river.model.SedimentLoad; teichmann@8028: import org.dive4elements.river.model.TimeInterval; teichmann@8028: import org.hibernate.Query; teichmann@8028: import org.hibernate.Session; teichmann@8028: teichmann@8028: public class ImportSedimentLoad teichmann@8028: { mschaefer@8986: private static Logger log = Logger.getLogger(ImportSedimentLoad.class); mschaefer@8986: teichmann@8028: private SedimentLoad peer; teichmann@8028: teichmann@8028: private ImportGrainFraction grainFraction; teichmann@8028: private ImportTimeInterval timeInterval; teichmann@8028: private ImportTimeInterval sqTimeInterval; teichmann@8028: private String description; teichmann@8028: private Integer kind; teichmann@8028: mschaefer@8986: private final List values; mschaefer@8986: mschaefer@8986: protected StoreMode storeMode; tom@8056: teichmann@8028: public ImportSedimentLoad() { mschaefer@8986: this.values = new ArrayList<>(); tom@8056: } tom@8056: tom@8842: public ImportSedimentLoad( mschaefer@8986: final ImportGrainFraction grainFraction, mschaefer@8986: final ImportTimeInterval timeInterval, mschaefer@8986: final ImportTimeInterval sqTimeInterval, mschaefer@8986: final String description, mschaefer@8986: final Integer kind mschaefer@8986: ) { tom@8059: this.grainFraction = grainFraction; tom@8059: this.timeInterval = timeInterval; tom@8059: this.sqTimeInterval = sqTimeInterval; tom@8059: this.description = description; tom@8059: this.kind = kind; tom@8056: mschaefer@8986: this.values = new ArrayList<>(); mschaefer@8986: this.storeMode = StoreMode.NONE; tom@8056: } tom@8056: mschaefer@8986: public void addValue(final ImportSedimentLoadValue value) { mschaefer@8986: this.values.add(value); teichmann@8028: } teichmann@8028: teichmann@8028: public void storeDependencies() { mschaefer@8986: log.info("store dependencies for '" + this.description + "'"); mschaefer@8986: this.grainFraction.getPeer(); mschaefer@8986: this.timeInterval.getPeer(); tom@8056: mschaefer@8986: if (this.sqTimeInterval != null) { mschaefer@8986: this.sqTimeInterval.getPeer(); tom@8056: } teichmann@8028: teichmann@8028: getPeer(); tom@8056: mschaefer@8986: for (final ImportSedimentLoadValue value : this.values) { mschaefer@8986: value.storeDependencies(this.peer, this.storeMode); tom@8056: } mschaefer@8986: log.info("Values processed: " + this.values.size()); teichmann@8028: } teichmann@8028: teichmann@8028: public SedimentLoad getPeer() { teichmann@8028: mschaefer@8986: if (this.peer == null) { mschaefer@8986: final Session session = ImporterSession.getInstance() mschaefer@8986: .getDatabaseSession(); teichmann@8028: mschaefer@8986: final String sqtquery = this.sqTimeInterval == null mschaefer@8986: ? "sq_time_interval_id is null" mschaefer@8986: : "sqTimeInterval = :sqTimeInterval"; mschaefer@8986: final Query query = session.createQuery( mschaefer@8986: "from SedimentLoad where " + mschaefer@8986: " grainFraction = :grainFraction and " + mschaefer@8986: " timeInterval = :timeInterval and " + mschaefer@8986: " description = :description and " + mschaefer@8986: " kind = :kind and " + mschaefer@8986: sqtquery); tom@8056: mschaefer@8986: final GrainFraction gf = this.grainFraction.getPeer(); mschaefer@8986: final TimeInterval ti = this.timeInterval.getPeer(); teichmann@8028: mschaefer@8986: final TimeInterval sqti = this.sqTimeInterval != null mschaefer@8986: ? this.sqTimeInterval.getPeer() mschaefer@8986: : null; mschaefer@8986: mschaefer@8986: query.setParameter("grainFraction", gf); mschaefer@8986: query.setParameter("timeInterval", ti); mschaefer@8986: mschaefer@8986: if (sqti != null) { mschaefer@8986: query.setParameter("sqTimeInterval", sqti); mschaefer@8986: } mschaefer@8986: query.setParameter("description", this.description); mschaefer@8986: query.setParameter("kind", this.kind); mschaefer@8986: mschaefer@8986: final List loads = query.list(); mschaefer@8986: if (loads.isEmpty()) { mschaefer@8986: this.peer = new SedimentLoad(gf, ti, sqti, this.description, this.kind); mschaefer@8986: session.save(this.peer); mschaefer@8986: this.storeMode = StoreMode.INSERT; mschaefer@8986: } mschaefer@8986: else { mschaefer@8986: this.peer = loads.get(0); mschaefer@8986: this.storeMode = StoreMode.UPDATE; mschaefer@8986: } teichmann@8028: } teichmann@8028: mschaefer@8986: return this.peer; teichmann@8028: } teichmann@8028: } teichmann@8028: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :