view flys-backend/src/main/java/de/intevation/flys/importer/ImportDischargeTable.java @ 4173:7d4480c0e68e

Allow users to select the current relevant discharge table in historical discharge table calculattion. In addition to this, the discharge tables in the helper panel displayed in the client is ordered in time.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 18 Oct 2012 12:13:48 +0200
parents cce054f27dac
children 20b6ebf23916
line wrap: on
line source
package de.intevation.flys.importer;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Query;

import de.intevation.flys.model.DischargeTable;
import de.intevation.flys.model.Gauge;
import de.intevation.flys.model.TimeInterval;

import org.apache.log4j.Logger;

public class ImportDischargeTable
{
    private static Logger log = Logger.getLogger(ImportDischargeTable.class);

    protected DischargeTable peer;

    protected String         description;

    protected Integer        kind;

    protected List<ImportDischargeTableValue> dischargeTableValues;

    protected ImportTimeInterval timeInterval;

    public ImportDischargeTable() {
        this(0, null);
    }

    public ImportDischargeTable(int kind, String description) {
        this.kind            = kind;
        this.description     = description;
        dischargeTableValues = new ArrayList<ImportDischargeTableValue>();
    }


    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }


    public void addDischargeTableValue(ImportDischargeTableValue value) {
        dischargeTableValues.add(value);
    }


    public void setDischargeTableValues(List<ImportDischargeTableValue> values){
        this.dischargeTableValues = values;
    }


    public List<ImportDischargeTableValue> getDischargeTableValues() {
        return dischargeTableValues;
    }

    public ImportTimeInterval getTimeInterval() {
        return timeInterval;
    }

    public void setTimeInterval(ImportTimeInterval timeInterval) {
        this.timeInterval = timeInterval;
    }


    public DischargeTable getPeer(Gauge gauge) {
        if (peer == null) {
            TimeInterval ti = timeInterval != null
                ? timeInterval.getPeer()
                : null;
            Session session = ImporterSession.getInstance().getDatabaseSession();

            Query query = session.createQuery(
                "from DischargeTable where " +
                "gauge.id=:gauge and kind=:kind and " +
                "description=:description and timeInterval=:interval");
            query.setParameter("gauge",       gauge.getId());
            query.setParameter("description", description);
            query.setParameter("kind",        kind);
            query.setParameter("interval",    ti);

            List<DischargeTable> dischargeTables = query.list();
            if (dischargeTables.isEmpty()) {
                peer = new DischargeTable(gauge, description, kind, ti);
                session.save(peer);
            }
            else {
                peer = dischargeTables.get(0);
            }
        }

        return peer;
    }


    public void storeDependencies(Gauge gauge) {
        log.info("store discharge table '" + description + "'");
        storeDischargeTableValues(gauge);
    }


    public void storeDischargeTableValues(Gauge gauge) {
        DischargeTable dischargeTable = getPeer(gauge);

        for (ImportDischargeTableValue value: dischargeTableValues) {
            value.getPeer(dischargeTable);
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org