comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugesFactory.java @ 151:4eddbb219866

Add factory to fetch gauges from database and filter them for their ranges. XXX: Coded inefficent. flys-artifacts/trunk@1581 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 28 Mar 2011 09:17:25 +0000
parents
children ea3a438a7021
comparison
equal deleted inserted replaced
150:c904d52cdfd0 151:4eddbb219866
1 package de.intevation.flys.artifacts.model;
2
3 import java.util.List;
4 import java.util.ArrayList;
5
6 import de.intevation.flys.backend.SessionFactoryProvider;
7
8 import de.intevation.flys.model.River;
9 import de.intevation.flys.model.Gauge;
10 import de.intevation.flys.model.Range;
11
12 import org.hibernate.SessionFactory;
13 import org.hibernate.Session;
14 import org.hibernate.Query;
15
16 public class GaugesFactory
17 {
18 public static List<Gauge> getGauges(River river) {
19 return getGauges(river.getName());
20 }
21
22 public static List<Gauge> getGauges(String river) {
23 SessionFactory sf = SessionFactoryProvider.getSessionFactory();
24 Session session = sf.openSession();
25 try {
26 Query query = session.createQuery(
27 "from Gauge where river.name=:name");
28 query.setParameter("name", river);
29 return query.list();
30 }
31 finally {
32 session.close();
33 }
34 }
35
36 public static List<Gauge> filterRanges(
37 List<Gauge> gauges,
38 List<double []> ranges
39 ) {
40 // XXX: Inefficent!
41 ArrayList<Range> rs = new ArrayList<Range>();
42 for (double [] range: ranges) {
43 double a = range[0];
44 double b = range[1];
45 rs.add(new Range(Math.min(a, b), Math.max(a, b), null));
46 }
47 return filter(gauges, rs);
48 }
49
50 public static List<Gauge> filter(List<Gauge> gauges, List<Range> ranges) {
51 // TODO: Make it an HQL filter!
52 ArrayList<Gauge> out = new ArrayList<Gauge>();
53 for (Gauge gauge: gauges) {
54 Range range = gauge.getRange();
55 for (Range cmp: ranges) {
56 if (range.intersects(cmp)) {
57 out.add(gauge);
58 break;
59 }
60 }
61 }
62 return out;
63 }
64 }
65 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org