Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java @ 3289:ec9aab93f292
SQ: First peek into fetching relevant data from SedDB
flys-artifacts/trunk@4957 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 12 Jul 2012 16:15:30 +0000 |
parents | |
children | 36f3b53d5cfc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/MeasurementFactory.java Thu Jul 12 16:15:30 2012 +0000 @@ -0,0 +1,96 @@ +package de.intevation.flys.artifacts.model.sq; + +import de.intevation.flys.artifacts.model.DateRange; + +import de.intevation.flys.backend.SedDBSessionHolder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; + +import org.hibernate.SQLQuery; +import org.hibernate.Session; + +import org.hibernate.transform.BasicTransformerAdapter; + +import org.hibernate.type.StandardBasicTypes; + +public class MeasurementFactory +{ + private static final Logger log = + Logger.getLogger(MeasurementFactory.class); + + public static final String SQL_MEASSURE = + "SELECT " + + "m.TSAND AS TSAND," + + "m.TSCHWEB AS TSCHWEB," + + "m.CSCHWEB AS CSCHWEB " + + /* TODO: Select more */ + "FROM messung m " + + "JOIN station s ON m.stationid = s.stationid " + + "JOIN gewaesser g ON s.gewaesserid = g.gewaesserid " + + "WHERE " + + "g.name = :river_name AND " + + "s.km BETWEEN :location - 0.001 AND :location + 0.001 AND " + + "m.datum BETWEEN :from AND :to"; + + public static final class MeasurementResultTransformer + extends BasicTransformerAdapter + { + public static MeasurementResultTransformer INSTANCE = + new MeasurementResultTransformer(); + + public MeasurementResultTransformer() { + } + + @Override + public Object transformTuple(Object [] tuple, String [] aliases) { + Map<String, Object> map = new HashMap<String, Object>(); + for (int i = 0; i < tuple.length; ++i) { + map.put(aliases[i], tuple[i]); + } + return new Measurement(map); + } + } // class BasicTransformerAdapter + + private MeasurementFactory() { + } + + protected static List<Measurement> load( + Session session, + String river, + double location, + DateRange dateRange + ) { + SQLQuery query = session.createSQLQuery(SQL_MEASSURE) + .addScalar("TSAND", StandardBasicTypes.DOUBLE) + .addScalar("TSCHWEB", StandardBasicTypes.DOUBLE) + .addScalar("CSCHWEB", StandardBasicTypes.DOUBLE); + + query.setString("river_name", river); + query.setDouble("location", location); + query.setDate("from", dateRange.getFrom()); + query.setDate("to", dateRange.getTo()); + + query.setResultTransformer(MeasurementResultTransformer.INSTANCE); + + return query.list(); + } + + public static List<Measurement> getMeasurements( + String river, + double location, + DateRange dateRange + ) { + Session session = SedDBSessionHolder.HOLDER.get(); + try { + return load(session, river, location, dateRange); + } + finally { + session.close(); + } + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :