comparison flys-artifacts/src/main/java/org/dive4elements/river/artifacts/states/GaugeTimerangeState.java @ 5831:bd047b71ab37

Repaired internal references
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 12:06:39 +0200
parents flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/GaugeTimerangeState.java@12766ab27a36
children
comparison
equal deleted inserted replaced
5830:160f53ee0870 5831:bd047b71ab37
1 package org.dive4elements.river.artifacts.states;
2
3 import java.util.Calendar;
4 import java.util.List;
5
6 import org.apache.log4j.Logger;
7 import org.hibernate.SQLQuery;
8 import org.hibernate.Session;
9 import org.hibernate.type.StandardBasicTypes;
10
11 import org.dive4elements.river.artifacts.FLYSArtifact;
12 import org.dive4elements.river.backend.SessionHolder;
13 import org.dive4elements.river.model.Gauge;
14 import org.dive4elements.river.utils.FLYSUtils;
15
16
17 /**
18 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
19 */
20 public class GaugeTimerangeState extends IntRangeState {
21
22 /** Private logger. */
23 private static final Logger logger =
24 Logger.getLogger(GaugeTimerangeState.class);
25
26
27 /** Get 'min' and 'max'times of gauge time intervals. */
28 protected long[] getLowerUpper(FLYSArtifact flys) {
29 Gauge gauge = FLYSUtils.getReferenceGauge(flys);
30
31 if (gauge == null) {
32 logger.warn("No reference gauge specified!");
33 return new long[] { 0, 0 };
34 }
35
36 Session session = SessionHolder.HOLDER.get();
37
38 SQLQuery query = session.createSQLQuery(
39 "SELECT min(start_time) as min, max(stop_time) as max " +
40 "FROM time_intervals WHERE id in " +
41 "(SELECT time_interval_id FROM discharge_tables " +
42 "WHERE gauge_id =:gid)");
43
44 query.addScalar("min", StandardBasicTypes.CALENDAR);
45 query.addScalar("max", StandardBasicTypes.CALENDAR);
46
47 query.setInteger("gid", gauge.getId());
48
49 List<?> results = query.list();
50
51 if (results != null) {
52 Object[] res = (Object[]) results.get(0);
53
54 Calendar lo = (Calendar) res[0];
55 Calendar up = (Calendar) res[1];
56
57 if (lo != null && up != null) {
58 return new long[] { lo.getTimeInMillis(), up.getTimeInMillis() };
59 }
60 }
61
62 logger.warn("Could not determine time range for gauge: " + gauge);
63
64 return null;
65 }
66
67
68 @Override
69 protected Object getLower(FLYSArtifact flys) {
70 long[] lowerUpper = getLowerUpper(flys);
71
72 return lowerUpper != null ? lowerUpper[0] : 0;
73 }
74
75
76 @Override
77 protected Object getUpper(FLYSArtifact flys) {
78 long[] lowerUpper = getLowerUpper(flys);
79
80 return lowerUpper != null ? lowerUpper[1] : 0;
81 }
82
83
84 @Override
85 protected String getUIProvider() {
86 return "gaugetimerange";
87 }
88
89 @Override
90 protected String getType() {
91 return "longrange";
92 }
93 }
94 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org