view flys-backend/src/main/java/de/intevation/flys/importer/ImportMeasurementStation.java @ 4193:f63b39799d2d

Adapted DB schema (added relation measurement_station); improved importer to read files from filesystem with measurement stations.
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Mon, 22 Oct 2012 09:02:26 +0200
parents
children 4ee97d914501
line wrap: on
line source
package de.intevation.flys.importer;

import java.sql.SQLException;
import java.util.List;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.exception.ConstraintViolationException;

import de.intevation.flys.model.Gauge;
import de.intevation.flys.model.MeasurementStation;
import de.intevation.flys.model.Range;
import de.intevation.flys.model.River;
import de.intevation.flys.model.TimeInterval;


public class ImportMeasurementStation {

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

    private MeasurementStation peer;

    public String name;
    public Double station;
    public ImportRange range;
    public String measurementType;
    public String riverside;
    public String gauge;
    public ImportTimeInterval observationTimerange;
    public String operator;
    public String comment;

    public ImportMeasurementStation() {
    }

    private Gauge getGaugeFromDB() {
        Session session = ImporterSession.getInstance().getDatabaseSession();

        org.hibernate.Query query = session
            .createQuery("FROM Gauge WHERE name=:name");

        query.setParameter("name", gauge);
        List<Gauge> gauges = query.list();

        return gauges.isEmpty() ? null : gauges.get(0);
    }

    public boolean storeDependencies(River river) throws SQLException,
        ConstraintViolationException {
        getPeer(river);

        return peer != null;
    }

    public Object getPeer(River river) {
        if (peer == null) {
            Gauge gauge = null;
            try {
                gauge = getGaugeFromDB();
                if (gauge == null) {
                    log.warn("Skip measurement station '" + name
                        + "': unable to find gauge with name '" + this.gauge
                        + "'");
                    return null;
                }
            }
            catch (Exception e) {
                log.error("Exception: " + e.getMessage());
            }

            Range range = this.range.getPeer(river);
            if (range == null) {
                log.warn("Skip measurement station '" + name
                    + "': unable to get range");
                return null;
            }

            TimeInterval observationTimerange = this.observationTimerange
                .getPeer();
            if (observationTimerange == null) {
                log.warn("Skip measurement station '" + name
                    + "': unable to get time interval for observation time");
                return null;
            }

            Session session = ImporterSession.getInstance()
                .getDatabaseSession();

            org.hibernate.Query query = session
                .createQuery("FROM MeasurementStation "
                    + "   WHERE river=:river AND station=:station");

            query.setParameter("river", river);
            query.setParameter("station", station);

            List<MeasurementStation> stations = query.list();

            if (stations.isEmpty()) {
                log.info("create new measurement station '" + name + "'");

                peer = new MeasurementStation(river, name, measurementType,
                    riverside, station, range, gauge, observationTimerange,
                    operator, comment);

                session.save(peer);
            }
        }

        return peer;
    }
}

http://dive4elements.wald.intevation.org