comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugeFinder.java @ 3142:9aed2e4de3ca

FixA: Moved GaugeFinder into top level class. flys-artifacts/trunk@4750 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 21 Jun 2012 15:50:58 +0000
parents
children 29022c93027d
comparison
equal deleted inserted replaced
3141:3582e87e9171 3142:9aed2e4de3ca
1 package de.intevation.flys.artifacts.model;
2
3 import java.io.Serializable;
4
5 import java.util.List;
6
7 import org.apache.log4j.Logger;
8
9 import org.hibernate.SQLQuery;
10 import org.hibernate.Session;
11
12 import org.hibernate.type.StandardBasicTypes;
13
14 public class GaugeFinder
15 implements Serializable
16 {
17 private static Logger log = Logger.getLogger(GaugeFinder.class);
18
19 public static final String SQL_DISCHARGE_SECTORS =
20 "SELECT" +
21 " g.id AS gauge_id," +
22 " nmv.name AS name," +
23 " CAST(mv.value AS NUMERIC(38,2)) AS value " +
24 "FROM gauges g" +
25 " JOIN main_values mv ON g.id = mv.gauge_id" +
26 " JOIN named_main_values nmv ON nmv.id = mv.named_value_id" +
27 " JOIN main_value_types mvt ON nmv.type_id = mvt.id " +
28 "WHERE" +
29 " mvt.name = 'Q' AND (" +
30 " nmv.name = 'MNQ' OR" +
31 " nmv.name LIKE 'MNQ(%' OR" +
32 " nmv.name = 'MQ' OR" +
33 " nmv.name LIKE 'MQ(%' OR" +
34 " nmv.name = 'MHQ' OR" +
35 " nmv.name LIKE 'MHQ(%' OR" +
36 " nmv.name = 'HQ5' OR" +
37 " nmv.name LIKE 'HQ5(%') AND" +
38 " g.river_id = :river_id " +
39 "ORDER BY" +
40 " g.id";
41
42 protected List<GaugeRange> gauges;
43 protected boolean isKmUp;
44
45 public GaugeFinder(List<GaugeRange> gauges) {
46 this(gauges, true);
47 }
48
49 public GaugeFinder(
50 List<GaugeRange> gauges,
51 boolean isKmUp
52 ) {
53 this.gauges = gauges;
54 this.isKmUp = isKmUp;
55 }
56
57 public boolean getIsKmUp() {
58 return isKmUp;
59 }
60
61 public void setIsKmUp(boolean isKmUp) {
62 this.isKmUp = isKmUp;
63 }
64
65 public GaugeRange find(Range range) {
66 double km = isKmUp ? range.start : range.end;
67 for (GaugeRange gauge: gauges) {
68 if (gauge.inside(km)) {
69 return gauge;
70 }
71 }
72 return null;
73 }
74
75 public GaugeRange find(int gaugeId) {
76 for (GaugeRange gauge: gauges) {
77 if (gauge.gaugeId == gaugeId) {
78 return gauge;
79 }
80 }
81 return null;
82 }
83
84 public boolean loadDischargeSectors(Session session, int riverId) {
85
86 SQLQuery query = session.createSQLQuery(SQL_DISCHARGE_SECTORS)
87 .addScalar("gauge_id", StandardBasicTypes.INTEGER)
88 .addScalar("name", StandardBasicTypes.STRING)
89 .addScalar("value", StandardBasicTypes.DOUBLE);
90
91 query.setInteger("river_id", riverId);
92
93 List<Object []> list = query.list();
94
95 if (list.isEmpty()) {
96 log.warn("River " + riverId + " has no discharge sectors.");
97 return false;
98 }
99
100 GaugeRange gauge = null;
101
102 for (Object [] row: list) {
103 int gaugeId = (Integer)row[0];
104 String label = (String) row[1];
105 Double value = (Double) row[2];
106
107 if (gauge == null || gauge.gaugeId != gaugeId) {
108 if ((gauge = find(gaugeId)) == null) {
109 log.warn("Cannot find gauge for id " + gaugeId + ".");
110 continue;
111 }
112 }
113
114 gauge.addMainValue(label, value);
115 }
116
117 for (GaugeRange g: gauges) {
118 g.buildClasses();
119 }
120
121 return true;
122 }
123 }
124 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org