view flys-backend/src/main/java/de/intevation/flys/importer/ImportBedHeightSingleValue.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 ffb2aac9a5b6
children
line wrap: on
line source
package de.intevation.flys.importer;

import java.util.List;

import java.math.BigDecimal;

import org.apache.log4j.Logger;

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

import de.intevation.flys.model.BedHeightSingle;
import de.intevation.flys.model.BedHeightSingleValue;


public class ImportBedHeightSingleValue implements ImportBedHeightValue {

    private static final Logger log =
        Logger.getLogger(ImportBedHeightSingleValue.class);


    protected ImportBedHeightSingle bedHeight;

    protected BigDecimal station;
    protected BigDecimal height;
    protected BigDecimal uncertainty;
    protected BigDecimal dataGap;
    protected BigDecimal soundingWidth;
    protected BigDecimal width;

    protected BedHeightSingleValue peer;


    public ImportBedHeightSingleValue(
        ImportBedHeightSingle bedHeight,
        BigDecimal station,
        BigDecimal height,
        BigDecimal uncertainty,
        BigDecimal dataGap,
        BigDecimal soundingWidth,
        BigDecimal width
    ) {
        this.bedHeight     = bedHeight;
        this.station       = station;
        this.height        = height;
        this.uncertainty   = uncertainty;
        this.dataGap       = dataGap;
        this.soundingWidth = soundingWidth;
        this.width         = width;
    }


    public void storeDependencies(BedHeightSingle bedHeight) {
        getPeer(bedHeight);
    }


    /**
     * Add this value to database or return database bound Value, assuring
     * that the BedHeightSingle exists in db already.
     */
    public BedHeightSingleValue getPeer(BedHeightSingle bedHeight) {
        if (peer == null) {
            Session session = ImporterSession.getInstance().getDatabaseSession();

            Query query = session.createQuery(
                "from BedHeightSingleValue where " +
                "   bedHeight=:bedHeight and " +
                "   station=:station and " +
                "   height=:height and " +
                "   uncertainty=:uncertainty and " +
                "   dataGap=:dataGap and " +
                "   soundingWidth=:soundingWidth and " +
                "   width=:width");

            query.setParameter("bedHeight", bedHeight);
            query.setParameter("station", station);
            query.setParameter("height", height);
            query.setParameter("uncertainty", uncertainty);
            query.setParameter("dataGap", dataGap);
            query.setParameter("soundingWidth", soundingWidth);
            query.setParameter("width", width);

            List<BedHeightSingleValue> values = query.list();
            if (values.isEmpty()) {
                peer = new BedHeightSingleValue(
                    bedHeight,
                    station,
                    height,
                    uncertainty,
                    dataGap,
                    soundingWidth,
                    width
                );
                session.save(peer);
            }
            else {
                peer = values.get(0);
            }
        }

        return peer;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org