teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model; sascha@151: sascha@151: import java.util.List; sascha@151: import java.util.ArrayList; sascha@151: teichmann@5831: import org.dive4elements.river.backend.SessionHolder; teichmann@5831: import org.dive4elements.river.model.River; teichmann@5831: import org.dive4elements.river.model.Gauge; teichmann@5831: import org.dive4elements.river.model.Range; sascha@151: sascha@151: import org.hibernate.Session; sascha@151: import org.hibernate.Query; sascha@151: sascha@151: public class GaugesFactory sascha@151: { sascha@151: public static List getGauges(River river) { sascha@151: return getGauges(river.getName()); sascha@151: } sascha@151: ingo@1712: ingo@1712: public static Gauge getGauge(String gaugeName) { ingo@1712: Session session = SessionHolder.HOLDER.get(); ingo@1712: Query query = session.createQuery( ingo@1712: "from Gauge where name=:name"); ingo@1712: query.setParameter("name", gaugeName); ingo@1712: ingo@1712: List res = query.list(); ingo@1712: ingo@1712: return res.isEmpty() ? null : res.get(0); ingo@1712: } ingo@1712: ingo@1712: sascha@151: public static List getGauges(String river) { sascha@311: Session session = SessionHolder.HOLDER.get(); sascha@311: Query query = session.createQuery( sascha@311: "from Gauge where river.name=:name"); sascha@311: query.setParameter("name", river); sascha@311: return query.list(); sascha@151: } sascha@151: sascha@151: public static List filterRanges( sascha@151: List gauges, sascha@151: List ranges sascha@151: ) { sascha@151: // XXX: Inefficent! sascha@151: ArrayList rs = new ArrayList(); sascha@151: for (double [] range: ranges) { sascha@151: double a = range[0]; sascha@151: double b = range[1]; sascha@151: rs.add(new Range(Math.min(a, b), Math.max(a, b), null)); sascha@151: } sascha@151: return filter(gauges, rs); sascha@151: } sascha@151: sascha@151: public static List filter(List gauges, List ranges) { sascha@151: // TODO: Make it an HQL filter! sascha@151: ArrayList out = new ArrayList(); sascha@151: for (Gauge gauge: gauges) { sascha@151: Range range = gauge.getRange(); sascha@151: for (Range cmp: ranges) { sascha@151: if (range.intersects(cmp)) { sascha@151: out.add(gauge); sascha@151: break; sascha@151: } sascha@151: } sascha@151: } sascha@151: return out; sascha@151: } sascha@151: } sascha@151: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :