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; sascha@195: sascha@195: import java.util.List; sascha@195: sascha@195: import java.math.BigDecimal; sascha@195: teichmann@5829: import org.dive4elements.river.model.MainValue; teichmann@5829: import org.dive4elements.river.model.Gauge; teichmann@5829: import org.dive4elements.river.model.River; teichmann@5829: import org.dive4elements.river.model.NamedMainValue; teichmann@5829: import org.dive4elements.river.model.TimeInterval; sascha@195: sascha@195: import org.hibernate.Session; sascha@195: import org.hibernate.Query; sascha@195: sascha@195: public class ImportMainValue sascha@195: { sascha@195: protected ImportGauge gauge; sascha@195: protected ImportNamedMainValue mainValue; sascha@195: protected BigDecimal value; teichmann@5735: protected ImportTimeInterval timeInterval; sascha@195: sascha@195: protected MainValue peer; sascha@195: sascha@195: public ImportMainValue() { sascha@195: } sascha@195: sascha@195: public ImportMainValue( sascha@195: ImportGauge gauge, sascha@195: ImportNamedMainValue mainValue, teichmann@5735: BigDecimal value, teichmann@5735: ImportTimeInterval timeInterval sascha@195: ) { teichmann@5735: this.gauge = gauge; teichmann@5735: this.mainValue = mainValue; teichmann@5735: this.value = value; teichmann@5735: this.timeInterval = timeInterval; sascha@195: } sascha@195: sascha@195: public ImportGauge getGauge() { sascha@195: return gauge; sascha@195: } sascha@195: sascha@195: public void setGauge(ImportGauge gauge) { sascha@195: this.gauge = gauge; sascha@195: } sascha@195: sascha@195: public ImportNamedMainValue getMainValue() { sascha@195: return mainValue; sascha@195: } sascha@195: sascha@195: public void setMainValue(ImportNamedMainValue mainValue) { sascha@195: this.mainValue = mainValue; sascha@195: } sascha@195: sascha@195: public BigDecimal getValue() { sascha@195: return value; sascha@195: } sascha@195: sascha@195: public void setValue(BigDecimal value) { sascha@195: this.value = value; sascha@195: } sascha@195: sascha@195: public MainValue getPeer(River river) { sascha@195: if (peer == null) { tom@8856: Session session = ImporterSession.getInstance() tom@8856: .getDatabaseSession(); teichmann@5907: teichmann@5907: Query query; teichmann@5907: teichmann@5907: TimeInterval t = timeInterval != null teichmann@5907: ? timeInterval.getPeer() teichmann@5907: : null; teichmann@5907: teichmann@5907: if (t != null) { teichmann@5907: query = session.createQuery("from MainValue where " teichmann@5907: + "gauge.id=:gauge_id and mainValue.id=:name_id " teichmann@5907: + "and timeInterval = :time " teichmann@5907: + "and value=:value"); teichmann@5907: query.setParameter("time", t); teichmann@5907: } teichmann@5907: else { teichmann@5907: query = session.createQuery("from MainValue where " teichmann@5907: + "gauge.id=:gauge_id and mainValue.id=:name_id " teichmann@5907: + "and timeInterval is null " teichmann@5907: + "and value=:value"); teichmann@5907: } teichmann@5907: sascha@195: Gauge g = gauge.getPeer(river); sascha@195: NamedMainValue n = mainValue.getPeer(); sascha@195: query.setParameter("gauge_id", g.getId()); sascha@195: query.setParameter("name_id", n.getId()); sascha@195: query.setParameter("value", value); teichmann@5907: sascha@195: List values = query.list(); sascha@195: if (values.isEmpty()) { teichmann@5907: peer = new MainValue(g, n, value, t); sascha@195: session.save(peer); sascha@195: } sascha@195: else { sascha@195: peer = values.get(0); sascha@195: } sascha@195: } sascha@195: return peer; sascha@195: } sascha@195: } sascha@195: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :