view backend/src/main/java/org/dive4elements/river/importer/ImportBedHeightSingleValue.java @ 6328:53d08f33d094

Backend: Moved guessing of main values and there time intervals out of the STA parser. Same come will be useful to extend the WST parser to better handle official lines.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 13 Jun 2013 17:15:34 +0200
parents dc166b225775
children a3fb76cf79b6
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.importer;

import java.util.List;

import java.math.BigDecimal;

import org.apache.log4j.Logger;

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

import org.dive4elements.river.model.BedHeightSingle;
import org.dive4elements.river.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