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 :

http://dive4elements.wald.intevation.org