teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5844: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5844: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.importer; ingo@198: ingo@198: import java.util.ArrayList; ingo@198: import java.util.List; ingo@198: ingo@198: import org.hibernate.Session; ingo@198: import org.hibernate.Query; ingo@198: teichmann@5829: import org.dive4elements.river.model.DischargeTable; teichmann@5829: import org.dive4elements.river.model.Gauge; teichmann@5829: import org.dive4elements.river.model.TimeInterval; ingo@198: sascha@499: import org.apache.log4j.Logger; sascha@499: ingo@198: public class ImportDischargeTable ingo@198: { sascha@499: private static Logger log = Logger.getLogger(ImportDischargeTable.class); sascha@499: ingo@198: protected DischargeTable peer; ingo@198: sascha@493: protected String description; sascha@493: sascha@493: protected Integer kind; sascha@467: ingo@198: protected List dischargeTableValues; ingo@198: sascha@486: protected ImportTimeInterval timeInterval; ingo@198: ingo@198: public ImportDischargeTable() { sascha@493: this(0, null); sascha@492: } sascha@492: sascha@493: public ImportDischargeTable(int kind, String description) { sascha@493: this.kind = kind; sascha@493: this.description = description; ingo@198: dischargeTableValues = new ArrayList(); ingo@198: } ingo@198: ingo@198: sascha@493: public String getDescription() { sascha@493: return description; sascha@493: } sascha@493: sascha@493: public void setDescription(String description) { sascha@493: this.description = description; sascha@493: } sascha@493: sascha@493: ingo@198: public void addDischargeTableValue(ImportDischargeTableValue value) { ingo@198: dischargeTableValues.add(value); ingo@198: } ingo@198: ingo@198: ingo@198: public void setDischargeTableValues(List values){ ingo@198: this.dischargeTableValues = values; ingo@198: } ingo@198: ingo@198: ingo@198: public List getDischargeTableValues() { ingo@198: return dischargeTableValues; ingo@198: } ingo@198: sascha@486: public ImportTimeInterval getTimeInterval() { sascha@486: return timeInterval; sascha@486: } sascha@486: sascha@486: public void setTimeInterval(ImportTimeInterval timeInterval) { sascha@486: this.timeInterval = timeInterval; sascha@486: } sascha@486: ingo@198: ingo@198: public DischargeTable getPeer(Gauge gauge) { teichmann@5888: if (peer == null) { teichmann@5888: TimeInterval ti = timeInterval != null teichmann@5888: ? timeInterval.getPeer() teichmann@5888: : null; teichmann@5888: Session session = ImporterSession.getInstance().getDatabaseSession(); teichmann@5888: teichmann@5888: String timeIntervalQuery = ti != null teichmann@5888: ? "timeInterval=:interval" teichmann@5888: : "timeInterval is null"; teichmann@5888: teichmann@5888: Query query = session.createQuery( teichmann@5885: "from DischargeTable where " + teichmann@5885: "gauge.id=:gauge and kind=:kind and " + teichmann@5885: "description=:description and " + timeIntervalQuery); teichmann@5888: query.setParameter("gauge", gauge.getId()); teichmann@5888: query.setParameter("description", description); teichmann@5888: query.setParameter("kind", kind); teichmann@5888: if (ti != null) { teichmann@5888: query.setParameter("interval", ti); teichmann@5888: } teichmann@5888: teichmann@5888: List dischargeTables = query.list(); teichmann@5888: if (dischargeTables.isEmpty()) { teichmann@5888: peer = new DischargeTable(gauge, description, null, kind, ti); teichmann@5888: session.save(peer); teichmann@5888: } teichmann@5888: else { teichmann@5888: peer = dischargeTables.get(0); teichmann@5888: } teichmann@5888: } teichmann@5888: return peer; ingo@198: } ingo@198: ingo@198: ingo@198: public void storeDependencies(Gauge gauge) { sascha@499: log.info("store discharge table '" + description + "'"); ingo@198: storeDischargeTableValues(gauge); ingo@198: } ingo@198: ingo@198: ingo@198: public void storeDischargeTableValues(Gauge gauge) { ingo@198: DischargeTable dischargeTable = getPeer(gauge); ingo@198: ingo@198: for (ImportDischargeTableValue value: dischargeTableValues) { ingo@198: value.getPeer(dischargeTable); ingo@198: } ingo@198: } ingo@198: } ingo@198: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :