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@2838: ingo@2838: import java.util.ArrayList; ingo@2838: import java.util.List; ingo@2838: ingo@2838: import org.apache.log4j.Logger; ingo@2838: ingo@2838: import org.hibernate.Session; ingo@2838: import org.hibernate.Query; ingo@2838: teichmann@5829: import org.dive4elements.river.model.GrainFraction; teichmann@5829: import org.dive4elements.river.model.River; teichmann@5829: import org.dive4elements.river.model.SedimentYield; teichmann@5829: import org.dive4elements.river.model.TimeInterval; teichmann@5829: import org.dive4elements.river.model.Unit; ingo@2838: ingo@2838: ingo@2838: public class ImportSedimentYield { ingo@2838: ingo@2838: private static Logger log = Logger.getLogger(ImportSedimentYield.class); ingo@2838: ingo@2838: private ImportGrainFraction grainFraction; ingo@2838: ingo@2838: private ImportUnit unit; ingo@2838: ingo@2838: private ImportTimeInterval timeInterval; ingo@2838: ingo@2840: private String description; ingo@2840: felix@6722: private Integer kind; felix@6722: ingo@2838: private List values; ingo@2838: ingo@2838: private SedimentYield peer; ingo@2838: ingo@2840: public ImportSedimentYield(String description) { ingo@3943: this.values = new ArrayList(); ingo@2840: this.description = description; ingo@2838: } ingo@2838: ingo@2838: public void setTimeInterval(ImportTimeInterval timeInterval) { ingo@2838: this.timeInterval = timeInterval; ingo@2838: } ingo@2838: ingo@2838: public void setUnit(ImportUnit unit) { ingo@2838: this.unit = unit; ingo@2838: } ingo@2838: ingo@2838: public void setGrainFraction(ImportGrainFraction grainFraction) { ingo@2838: this.grainFraction = grainFraction; ingo@2838: } ingo@2838: felix@6722: public void setKind(Integer kind) { felix@6722: this.kind = kind; felix@6722: } felix@6722: ingo@2838: public void addValue(ImportSedimentYieldValue value) { ingo@2838: this.values.add(value); ingo@2838: } ingo@2838: tom@5416: public void storeDependencies(River river) { ingo@2838: log.debug("store dependencies"); ingo@2838: ingo@2838: if (grainFraction != null) { ingo@2838: grainFraction.storeDependencies(); ingo@2838: } ingo@2838: ingo@2838: SedimentYield peer = getPeer(river); ingo@2838: ingo@3943: if (peer != null) { ingo@3943: int i = 0; ingo@2838: ingo@3943: for (ImportSedimentYieldValue value : values) { ingo@3943: value.storeDependencies(peer); ingo@3943: i++; ingo@3943: } ingo@3943: ingo@3943: log.info("stored " + i + " sediment yield values."); ingo@2838: } ingo@2838: } ingo@2838: ingo@2838: public SedimentYield getPeer(River river) { ingo@2838: log.debug("get peer"); ingo@2838: ingo@3943: GrainFraction gf = grainFraction != null ? grainFraction.getPeer() ingo@2838: : null; ingo@2838: ingo@2838: Unit u = unit != null ? unit.getPeer() : null; ingo@2838: ingo@2838: TimeInterval ti = timeInterval != null ? timeInterval.getPeer() : null; ingo@2838: ingo@2838: if (ti == null || u == null) { ingo@2838: log.warn("Skip invalid SedimentYield: time interval or unit null!"); ingo@2838: return null; ingo@2838: } ingo@2838: ingo@2838: if (peer == null) { ingo@3943: Session session = ImporterSession.getInstance() ingo@3943: .getDatabaseSession(); ingo@3943: Query query = session.createQuery("from SedimentYield where " ingo@3943: + " river=:river and " ingo@3943: + " grainFraction=:grainFraction and " + " unit=:unit and " ingo@3943: + " timeInterval=:timeInterval and " ingo@3943: + " description=:description"); ingo@2838: ingo@2838: query.setParameter("river", river); ingo@2838: query.setParameter("grainFraction", gf); ingo@2838: query.setParameter("unit", u); ingo@2838: query.setParameter("timeInterval", ti); ingo@2840: query.setParameter("description", description); ingo@2838: ingo@2838: List yields = query.list(); ingo@2838: if (yields.isEmpty()) { ingo@2838: log.debug("create new SedimentYield"); ingo@2838: ingo@2840: peer = new SedimentYield(river, u, ti, gf, description); felix@6722: peer.setKind(this.kind); ingo@2838: session.save(peer); ingo@2838: } ingo@2838: else { ingo@2838: peer = yields.get(0); ingo@2838: } ingo@2838: } ingo@2838: ingo@2838: return peer; ingo@2838: } ingo@2838: } ingo@2838: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :