ingo@2838: package de.intevation.flys.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: ingo@2838: import de.intevation.flys.model.GrainFraction; ingo@2838: import de.intevation.flys.model.River; ingo@2838: import de.intevation.flys.model.SedimentYield; ingo@2838: import de.intevation.flys.model.TimeInterval; ingo@2838: import de.intevation.flys.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: 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: 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); 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 :