Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/states/GaugeTimerangeState.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,94 @@ +package org.dive4elements.river.artifacts.states; + +import java.util.Calendar; +import java.util.List; + +import org.apache.log4j.Logger; +import org.hibernate.SQLQuery; +import org.hibernate.Session; +import org.hibernate.type.StandardBasicTypes; + +import org.dive4elements.river.artifacts.FLYSArtifact; +import org.dive4elements.river.backend.SessionHolder; +import org.dive4elements.river.model.Gauge; +import org.dive4elements.river.utils.FLYSUtils; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class GaugeTimerangeState extends IntRangeState { + + /** Private logger. */ + private static final Logger logger = + Logger.getLogger(GaugeTimerangeState.class); + + + /** Get 'min' and 'max'times of gauge time intervals. */ + protected long[] getLowerUpper(FLYSArtifact flys) { + Gauge gauge = FLYSUtils.getReferenceGauge(flys); + + if (gauge == null) { + logger.warn("No reference gauge specified!"); + return new long[] { 0, 0 }; + } + + Session session = SessionHolder.HOLDER.get(); + + SQLQuery query = session.createSQLQuery( + "SELECT min(start_time) as min, max(stop_time) as max " + + "FROM time_intervals WHERE id in " + + "(SELECT time_interval_id FROM discharge_tables " + + "WHERE gauge_id =:gid)"); + + query.addScalar("min", StandardBasicTypes.CALENDAR); + query.addScalar("max", StandardBasicTypes.CALENDAR); + + query.setInteger("gid", gauge.getId()); + + List<?> results = query.list(); + + if (results != null) { + Object[] res = (Object[]) results.get(0); + + Calendar lo = (Calendar) res[0]; + Calendar up = (Calendar) res[1]; + + if (lo != null && up != null) { + return new long[] { lo.getTimeInMillis(), up.getTimeInMillis() }; + } + } + + logger.warn("Could not determine time range for gauge: " + gauge); + + return null; + } + + + @Override + protected Object getLower(FLYSArtifact flys) { + long[] lowerUpper = getLowerUpper(flys); + + return lowerUpper != null ? lowerUpper[0] : 0; + } + + + @Override + protected Object getUpper(FLYSArtifact flys) { + long[] lowerUpper = getLowerUpper(flys); + + return lowerUpper != null ? lowerUpper[1] : 0; + } + + + @Override + protected String getUIProvider() { + return "gaugetimerange"; + } + + @Override + protected String getType() { + return "longrange"; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :