view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugesFactory.java @ 4655:cd44d28d0fbc

Move the access to artifact data to the Access object Use BedHeightAccess class to receive the data from the artifact. This abstracts the data access from the actual artifact.
author Björn Ricks <bjoern.ricks@intevation.de>
date Tue, 11 Dec 2012 09:44:04 +0100
parents 7e19449d7826
children
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import java.util.List;
import java.util.ArrayList;

import de.intevation.flys.backend.SessionHolder;
import de.intevation.flys.model.River;
import de.intevation.flys.model.Gauge;
import de.intevation.flys.model.Range;

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

public class GaugesFactory
{
    public static List<Gauge> getGauges(River river) {
        return getGauges(river.getName());
    }


    public static Gauge getGauge(String gaugeName) {
        Session session = SessionHolder.HOLDER.get();
        Query query = session.createQuery(
            "from Gauge where name=:name");
        query.setParameter("name", gaugeName);

        List<Gauge> res = query.list();

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


    public static List<Gauge> getGauges(String river) {
        Session session = SessionHolder.HOLDER.get();
        Query query = session.createQuery(
            "from Gauge where river.name=:name");
        query.setParameter("name", river);
        return query.list();
    }

    public static List<Gauge> filterRanges(
        List<Gauge>     gauges,
        List<double []> ranges
    ) {
        // XXX: Inefficent!
        ArrayList<Range> rs = new ArrayList<Range>();
        for (double [] range: ranges) {
            double a = range[0];
            double b = range[1];
            rs.add(new Range(Math.min(a, b), Math.max(a, b), null));
        }
        return filter(gauges, rs);
    }

    public static List<Gauge> filter(List<Gauge> gauges, List<Range> ranges) {
        // TODO: Make it an HQL filter!
        ArrayList<Gauge> out = new ArrayList<Gauge>();
        for (Gauge gauge: gauges) {
            Range range = gauge.getRange();
            for (Range cmp: ranges) {
                if (range.intersects(cmp)) {
                    out.add(gauge);
                    break;
                }
            }
        }
        return out;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org