view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java @ 3291:b52c4b34ec1b

SQ relation: Do not store null values from database. flys-artifacts/trunk@4959 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 12 Jul 2012 20:29:05 +0000
parents 36f3b53d5cfc
children e06036fdf0c7
line wrap: on
line source
package de.intevation.flys.artifacts.model.sq;

import de.intevation.flys.artifacts.model.DateRange;

import de.intevation.flys.backend.SedDBSessionHolder;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;

import org.hibernate.SQLQuery;
import org.hibernate.Session;

import org.hibernate.transform.BasicTransformerAdapter;

import org.hibernate.type.StandardBasicTypes;

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

    public static final String SQL_MEASSURE =
        "SELECT " +
            "m.TSAND   AS TSAND,"   +
            "m.TSCHWEB AS TSCHWEB," +
            "m.CSCHWEB AS CSCHWEB " +
            "m.Q       AS Q " +
            /* TODO: Select more */
        "FROM messung m " +
            "JOIN station   s ON m.stationid   = s.stationid " +
            "JOIN gewaesser g ON s.gewaesserid = g.gewaesserid " +
            "WHERE " +
                "g.name = :river_name AND " +
                "s.km BETWEEN :location - 0.001 AND :location + 0.001 AND " +
                "m.datum BETWEEN :from AND :to AND " +
                "m.Q IS NOT NULL";

    public static final class MeasurementResultTransformer
    extends                   BasicTransformerAdapter
    {
        public static MeasurementResultTransformer INSTANCE =
            new MeasurementResultTransformer();

        public MeasurementResultTransformer() {
        }

        @Override
        public Object transformTuple(Object [] tuple, String [] aliases) {
            Map<String, Object> map = new HashMap<String, Object>();
            for (int i = 0; i < tuple.length; ++i) {
                if (tuple[i] != null) {
                    map.put(aliases[i], tuple[i]);
                }
            }
            return new Measurement(map);
        }
    } // class BasicTransformerAdapter

    private MeasurementFactory() {
    }

    protected static Measurements load(
        Session   session,
        String    river,
        double    location,
        DateRange dateRange
    ) {
        SQLQuery query = session.createSQLQuery(SQL_MEASSURE)
            .addScalar("TSAND",   StandardBasicTypes.DOUBLE)
            .addScalar("TSCHWEB", StandardBasicTypes.DOUBLE)
            .addScalar("CSCHWEB", StandardBasicTypes.DOUBLE)
            .addScalar("Q",       StandardBasicTypes.DOUBLE);

        query.setString("river_name", river);
        query.setDouble("location", location);
        query.setDate("from", dateRange.getFrom());
        query.setDate("to", dateRange.getTo());

        query.setResultTransformer(MeasurementResultTransformer.INSTANCE);

        return new Measurements(query.list());
    }

    public static Measurements getMeasurements(
        String    river,
        double    location,
        DateRange dateRange
    ) {
        Session session = SedDBSessionHolder.HOLDER.get();
        try {
            return load(session, river, location, dateRange);
        }
        finally {
            session.close();
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org