comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/GaugeFinder.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-artifacts/src/main/java/org/dive4elements/river/artifacts/model/GaugeFinder.java@bd047b71ab37
children 4897a58c8746
comparison
equal deleted inserted replaced
5837:d9901a08d0a6 5838:5aa05a7a34b7
1 package org.dive4elements.river.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 /** Find Gauges and respective Q main values. */
15 public class GaugeFinder
16 implements Serializable
17 {
18 private static Logger log = Logger.getLogger(GaugeFinder.class);
19
20 public static final String SQL_DISCHARGE_SECTORS =
21 "SELECT" +
22 " g.id AS gauge_id," +
23 " nmv.name AS name," +
24 " CAST(mv.value AS NUMERIC(38,2)) AS value " +
25 "FROM gauges g" +
26 " JOIN main_values mv ON g.id = mv.gauge_id" +
27 " JOIN named_main_values nmv ON nmv.id = mv.named_value_id" +
28 " JOIN main_value_types mvt ON nmv.type_id = mvt.id " +
29 "WHERE" +
30 " mvt.name = 'Q' AND (" +
31 " nmv.name = 'MNQ' OR" +
32 " nmv.name LIKE 'MNQ(%' OR" +
33 " nmv.name = 'MQ' OR" +
34 " nmv.name LIKE 'MQ(%' OR" +
35 " nmv.name = 'MHQ' OR" +
36 " nmv.name LIKE 'MHQ(%' OR" +
37 " nmv.name = 'HQ5' OR" +
38 " nmv.name LIKE 'HQ5(%') AND" +
39 " g.river_id = :river_id " +
40 "ORDER BY" +
41 " g.id";
42
43 protected List<GaugeRange> gauges;
44 protected boolean isKmUp;
45
46 public GaugeFinder(List<GaugeRange> gauges) {
47 this(gauges, true);
48 }
49
50 public GaugeFinder(
51 List<GaugeRange> gauges,
52 boolean isKmUp
53 ) {
54 this.gauges = gauges;
55 this.isKmUp = isKmUp;
56 }
57
58 public boolean getIsKmUp() {
59 return isKmUp;
60 }
61
62 public void setIsKmUp(boolean isKmUp) {
63 this.isKmUp = isKmUp;
64 }
65
66
67 /** Find GaugeRange at kilometer. */
68 public GaugeRange find(double km) {
69 for (GaugeRange gauge: gauges) {
70 if (gauge.inside(km)) {
71 return gauge;
72 }
73 }
74 return null;
75 }
76
77 public GaugeRange find(Range range) {
78 return find(isKmUp ? range.start : range.end);
79 }
80
81 public GaugeRange find(int gaugeId) {
82 for (GaugeRange gauge: gauges) {
83 if (gauge.gaugeId == gaugeId) {
84 return gauge;
85 }
86 }
87 return null;
88 }
89
90 public List<GaugeRange> getGauges() {
91 return gauges;
92 }
93
94 public boolean loadDischargeSectors(Session session, int riverId) {
95
96 SQLQuery query = session.createSQLQuery(SQL_DISCHARGE_SECTORS)
97 .addScalar("gauge_id", StandardBasicTypes.INTEGER)
98 .addScalar("name", StandardBasicTypes.STRING)
99 .addScalar("value", StandardBasicTypes.DOUBLE);
100
101 query.setInteger("river_id", riverId);
102
103 List<Object []> list = query.list();
104
105 if (list.isEmpty()) {
106 log.warn("River " + riverId + " has no discharge sectors.");
107 return false;
108 }
109
110 GaugeRange gauge = null;
111
112 for (Object [] row: list) {
113 int gaugeId = (Integer)row[0];
114 String label = (String) row[1];
115 Double value = (Double) row[2];
116
117 if (gauge == null || gauge.gaugeId != gaugeId) {
118 if ((gauge = find(gaugeId)) == null) {
119 log.warn("Cannot find gauge for id " + gaugeId + ".");
120 continue;
121 }
122 }
123
124 gauge.addMainValue(label, value);
125 }
126
127 for (GaugeRange g: gauges) {
128 g.buildClasses();
129 }
130
131 return true;
132 }
133 }
134 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org