view flys-backend/src/main/java/de/intevation/flys/importer/ImportMeasurementStation.java @ 5451:278d8759c92b

Allow null values in measurement_station columns without 'not null' constraints.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 27 Mar 2013 11:47:56 +0100
parents 4ee97d914501
children 5287440b57b3
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) {
        getPeer(river);

        return peer != null;
    }

    public Object getPeer(River river) {
        if (peer == null) {
            Gauge gauge = null;
            try {
                gauge = getGaugeFromDB();
                if (gauge == null) {
                    log.warn("No gauge found for measurement station '" + name
                        + "'");
                }
            }
            catch (Exception e) {
                log.error("Exception: " + e.getMessage());
            }

            Range range = this.range.getPeer(river);
            if (range == null) {
                log.warn("No range found for measurement station'" + name + "'");
            }

            TimeInterval observationTimerange = this.observationTimerange
                .getPeer();
            if (observationTimerange == null) {
                log.warn("No time range found for measurement station '"
                    + name + "'");
            }

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

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

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

            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