sascha@3289: package de.intevation.flys.artifacts.model.sq; sascha@3289: sascha@3289: import de.intevation.flys.artifacts.model.DateRange; sascha@3289: sascha@3289: import de.intevation.flys.backend.SedDBSessionHolder; sascha@3289: sascha@3289: import java.util.HashMap; sascha@3289: import java.util.Map; sascha@3289: sascha@3289: import org.apache.log4j.Logger; sascha@3289: sascha@3289: import org.hibernate.SQLQuery; sascha@3289: import org.hibernate.Session; sascha@3289: sascha@3289: import org.hibernate.transform.BasicTransformerAdapter; sascha@3289: sascha@3289: import org.hibernate.type.StandardBasicTypes; sascha@3289: sascha@3289: public class MeasurementFactory sascha@3289: { sascha@3289: private static final Logger log = sascha@3289: Logger.getLogger(MeasurementFactory.class); sascha@3289: sascha@3289: public static final String SQL_MEASSURE = sascha@3289: "SELECT " + sascha@3289: "m.TSAND AS TSAND," + sascha@3289: "m.TSCHWEB AS TSCHWEB," + sascha@3289: "m.CSCHWEB AS CSCHWEB " + sascha@3290: "m.Q AS Q " + sascha@3289: /* TODO: Select more */ sascha@3289: "FROM messung m " + sascha@3289: "JOIN station s ON m.stationid = s.stationid " + sascha@3289: "JOIN gewaesser g ON s.gewaesserid = g.gewaesserid " + sascha@3289: "WHERE " + sascha@3289: "g.name = :river_name AND " + sascha@3289: "s.km BETWEEN :location - 0.001 AND :location + 0.001 AND " + sascha@3290: "m.datum BETWEEN :from AND :to AND " + sascha@3290: "m.Q IS NOT NULL"; sascha@3289: sascha@3289: public static final class MeasurementResultTransformer sascha@3289: extends BasicTransformerAdapter sascha@3289: { sascha@3289: public static MeasurementResultTransformer INSTANCE = sascha@3289: new MeasurementResultTransformer(); sascha@3289: sascha@3289: public MeasurementResultTransformer() { sascha@3289: } sascha@3289: sascha@3289: @Override sascha@3289: public Object transformTuple(Object [] tuple, String [] aliases) { sascha@3289: Map map = new HashMap(); sascha@3289: for (int i = 0; i < tuple.length; ++i) { sascha@3291: if (tuple[i] != null) { sascha@3291: map.put(aliases[i], tuple[i]); sascha@3291: } sascha@3289: } sascha@3289: return new Measurement(map); sascha@3289: } sascha@3289: } // class BasicTransformerAdapter sascha@3289: sascha@3289: private MeasurementFactory() { sascha@3289: } sascha@3289: sascha@3290: protected static Measurements load( sascha@3289: Session session, sascha@3289: String river, sascha@3289: double location, sascha@3289: DateRange dateRange sascha@3289: ) { sascha@3289: SQLQuery query = session.createSQLQuery(SQL_MEASSURE) sascha@3289: .addScalar("TSAND", StandardBasicTypes.DOUBLE) sascha@3289: .addScalar("TSCHWEB", StandardBasicTypes.DOUBLE) sascha@3290: .addScalar("CSCHWEB", StandardBasicTypes.DOUBLE) sascha@3290: .addScalar("Q", StandardBasicTypes.DOUBLE); sascha@3289: sascha@3289: query.setString("river_name", river); sascha@3289: query.setDouble("location", location); sascha@3289: query.setDate("from", dateRange.getFrom()); sascha@3289: query.setDate("to", dateRange.getTo()); sascha@3289: sascha@3289: query.setResultTransformer(MeasurementResultTransformer.INSTANCE); sascha@3289: sascha@3290: return new Measurements(query.list()); sascha@3289: } sascha@3289: sascha@3290: public static Measurements getMeasurements( sascha@3289: String river, sascha@3289: double location, sascha@3289: DateRange dateRange sascha@3289: ) { sascha@3289: Session session = SedDBSessionHolder.HOLDER.get(); sascha@3289: try { sascha@3289: return load(session, river, location, dateRange); sascha@3289: } sascha@3289: finally { sascha@3289: session.close(); sascha@3289: } sascha@3289: } sascha@3289: } sascha@3289: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :