Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/DischargeTables.java @ 146:e8dfe6ba2000
Fetch w/q values of discharge tables for given gauges.
flys-artifacts/trunk@1562 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 24 Mar 2011 17:29:08 +0000 |
parents | |
children | c904d52cdfd0 |
comparison
equal
deleted
inserted
replaced
145:d9e4b7e8905a | 146:e8dfe6ba2000 |
---|---|
1 package de.intevation.flys.artifacts.model; | |
2 | |
3 import java.util.List; | |
4 import java.util.Map; | |
5 import java.util.HashMap; | |
6 import java.util.Arrays; | |
7 | |
8 import java.io.Serializable; | |
9 | |
10 import org.hibernate.SessionFactory; | |
11 import org.hibernate.Session; | |
12 import org.hibernate.Query; | |
13 | |
14 import org.apache.log4j.Logger; | |
15 | |
16 import de.intevation.flys.backend.SessionFactoryProvider; | |
17 | |
18 import de.intevation.flys.model.Gauge; | |
19 import de.intevation.flys.model.DischargeTable; | |
20 import de.intevation.flys.model.DischargeTableValue; | |
21 | |
22 public class DischargeTables | |
23 implements Serializable | |
24 { | |
25 private static Logger log = Logger.getLogger(DischargeTables.class); | |
26 | |
27 protected List<String> gaugeNames; | |
28 | |
29 protected String riverName; | |
30 | |
31 protected Map<String, double []> values; | |
32 | |
33 public DischargeTables() { | |
34 } | |
35 | |
36 public DischargeTables(String riverName, String [] gaugeNames) { | |
37 this(riverName, Arrays.asList(gaugeNames)); | |
38 } | |
39 | |
40 public DischargeTables(String riverName, List<String> gaugeNames) { | |
41 this.riverName = riverName; | |
42 this.gaugeNames = gaugeNames; | |
43 } | |
44 | |
45 public Map<String, double []> getValues() { | |
46 if (values == null) { | |
47 values = loadValues(); | |
48 } | |
49 return values; | |
50 } | |
51 | |
52 protected Map<String, double []> loadValues() { | |
53 Map<String, double []> values = new HashMap<String, double []>(); | |
54 | |
55 SessionFactory sf = SessionFactoryProvider.getSessionFactory(); | |
56 Session session = sf.openSession(); | |
57 | |
58 try { | |
59 Query gaugeQuery = session.createQuery( | |
60 "from Gauge where name=:gauge and river.name=:river"); | |
61 gaugeQuery.setParameter("river", riverName); | |
62 | |
63 for (String gaugeName: gaugeNames) { | |
64 gaugeQuery.setParameter("gauge", gaugeName); | |
65 List<Gauge> gauges = gaugeQuery.list(); | |
66 if (gauges.isEmpty()) { | |
67 log.warn( | |
68 "no gauge '"+gaugeName+"' at river '"+riverName+"'"); | |
69 continue; | |
70 } | |
71 Gauge gauge = gauges.get(0); | |
72 | |
73 List<DischargeTable> tables = gauge.getDischargeTables(); | |
74 | |
75 if (tables.isEmpty()) { | |
76 log.warn( | |
77 "no discharge table for gauge '" + gaugeName + "'"); | |
78 continue; | |
79 } | |
80 | |
81 // TODO: Filter by time interval | |
82 DischargeTable table = tables.get(0); | |
83 | |
84 List<DischargeTableValue> dtvs = | |
85 table.getDischargeTableValues(); | |
86 | |
87 double [] vs = new double[dtvs.size() << 1]; | |
88 | |
89 int idx = 0; | |
90 for (DischargeTableValue dtv: dtvs) { | |
91 vs[idx++] = dtv.getW().doubleValue(); | |
92 vs[idx++] = dtv.getQ().doubleValue(); | |
93 } | |
94 | |
95 values.put(gaugeName, vs); | |
96 } | |
97 | |
98 return values; | |
99 } | |
100 finally { | |
101 session.close(); | |
102 } | |
103 } | |
104 } | |
105 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |