Mercurial > dive4elements > river
view backend/src/main/java/org/dive4elements/river/importer/ImportSedimentLoad.java @ 9709:b74f817435fe
comment removed
author | dnt_bjoernsen <d.tironi@bjoernsen.de> |
---|---|
date | Wed, 27 Jan 2021 11:47:38 +0100 |
parents | 392bbcd8a88b |
children |
line wrap: on
line source
/* Copyright (C) 2014 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.importer; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.river.importer.common.StoreMode; import org.dive4elements.river.model.GrainFraction; import org.dive4elements.river.model.SedimentLoad; import org.dive4elements.river.model.TimeInterval; import org.hibernate.Query; import org.hibernate.Session; public class ImportSedimentLoad { private static Logger log = Logger.getLogger(ImportSedimentLoad.class); private SedimentLoad peer; private ImportGrainFraction grainFraction; private ImportTimeInterval timeInterval; private ImportTimeInterval sqTimeInterval; private String description; private Integer kind; private final List<ImportSedimentLoadValue> values; protected StoreMode storeMode; public ImportSedimentLoad() { this.values = new ArrayList<>(); } public ImportSedimentLoad( final ImportGrainFraction grainFraction, final ImportTimeInterval timeInterval, final ImportTimeInterval sqTimeInterval, final String description, final Integer kind ) { this.grainFraction = grainFraction; this.timeInterval = timeInterval; this.sqTimeInterval = sqTimeInterval; this.description = description; this.kind = kind; this.values = new ArrayList<>(); this.storeMode = StoreMode.NONE; } public void addValue(final ImportSedimentLoadValue value) { this.values.add(value); } public void storeDependencies() { log.info("store dependencies for '" + this.description + "'"); this.grainFraction.getPeer(); this.timeInterval.getPeer(); if (this.sqTimeInterval != null) { this.sqTimeInterval.getPeer(); } getPeer(); for (final ImportSedimentLoadValue value : this.values) { value.storeDependencies(this.peer, this.storeMode); } log.info("Values processed: " + this.values.size()); } public SedimentLoad getPeer() { if (this.peer == null) { final Session session = ImporterSession.getInstance() .getDatabaseSession(); final String sqtquery = this.sqTimeInterval == null ? "sq_time_interval_id is null" : "sqTimeInterval = :sqTimeInterval"; final Query query = session.createQuery( "from SedimentLoad where " + " grainFraction = :grainFraction and " + " timeInterval = :timeInterval and " + " description = :description and " + " kind = :kind and " + sqtquery); final GrainFraction gf = this.grainFraction.getPeer(); final TimeInterval ti = this.timeInterval.getPeer(); final TimeInterval sqti = this.sqTimeInterval != null ? this.sqTimeInterval.getPeer() : null; query.setParameter("grainFraction", gf); query.setParameter("timeInterval", ti); if (sqti != null) { query.setParameter("sqTimeInterval", sqti); } query.setParameter("description", this.description); query.setParameter("kind", this.kind); final List<SedimentLoad> loads = query.list(); if (loads.isEmpty()) { this.peer = new SedimentLoad(gf, ti, sqti, this.description, this.kind); session.save(this.peer); this.storeMode = StoreMode.INSERT; } else { this.peer = loads.get(0); this.storeMode = StoreMode.UPDATE; } } return this.peer; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :