Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/QualityMeasurementFactory.java @ 3755:9c555ce5ca50
Data objects and factory for minfo bedquality calculation.
flys-artifacts/trunk@5450 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Thu, 13 Sep 2012 10:34:51 +0000 |
parents | |
children | 912a398968b6 |
line wrap: on
line source
package de.intevation.flys.artifacts.model.minfo; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.transform.BasicTransformerAdapter; import org.hibernate.type.StandardBasicTypes; import de.intevation.flys.backend.SedDBSessionHolder; public class QualityMeasurementFactory { private static final String SQL_MEASUREMENT = "SELECT st.km as km," + " st.datum as date,"+ " sa.d10 as d10," + " sa.d16 as d16," + " sa.d20 as d20," + " sa.d25 as d25," + " sa.d30 as d30," + " sa.d40 as d40," + " sa.d50 as d50," + " sa.d60 as d60," + " sa.d70 as d70," + " sa.d75 as d75," + " sa.d80 as d80," + " sa.d84 as d84," + " sa.d90 as d90," + " sa.dmin as dmin," + " sa.dmax as dmax " + "FROM sohltest st" + " JOIN station sn ON sn.stationid = st.stationid" + " JOIN gewaesser gw ON gw.gewaesserid = sn.gewaesserid" + " JOIN sohlprobe sp ON sp.sohltestid = st.sohltestid" + " JOIN siebanalyse sa ON sa.sohlprobeid = sp.sohlprobeid" + "WHERE gw.name = :name AND " + " st.km IS NOT NULL AND " + " st.km BETWEEN :from - 0.001 AND :to + 0.001 AND" + " st.datum BETWEEN :start AND :end"; public static final class QualityMeasurementResultTransformer extends BasicTransformerAdapter { public static QualityMeasurementResultTransformer INSTANCE = new QualityMeasurementResultTransformer(); public QualityMeasurementResultTransformer() { } @Override public Object transformTuple(Object [] tuple, String [] aliases) { Map<String, Double> map = new HashMap<String, Double>(); double km = 0; Date d = null; for (int i = 0; i < tuple.length; ++i) { if (tuple[i] != null) { if (aliases[i].equals("km")) { km = ((Number)tuple[i]).doubleValue(); } else if (aliases[i].equals("date")) { d = (Date)tuple[i]; } else { map.put(aliases[i], (Double)tuple[i]); } } } return new QualityMeasurement(km, d, map); } } // class BasicTransformerAdapter private QualityMeasurementFactory() { } protected static QualityMeasurements load( Session session, String river, double from, double to, Date start, Date end ) { SQLQuery query = session.createSQLQuery(SQL_MEASUREMENT) .addScalar("km", StandardBasicTypes.DOUBLE) .addScalar("date", StandardBasicTypes.DATE) .addScalar("d10", StandardBasicTypes.DOUBLE) .addScalar("d16", StandardBasicTypes.DOUBLE) .addScalar("d20", StandardBasicTypes.DOUBLE) .addScalar("d25", StandardBasicTypes.DOUBLE) .addScalar("d30", StandardBasicTypes.DOUBLE) .addScalar("d40", StandardBasicTypes.DOUBLE) .addScalar("d50", StandardBasicTypes.DOUBLE) .addScalar("d60", StandardBasicTypes.DOUBLE) .addScalar("d70", StandardBasicTypes.DOUBLE) .addScalar("d75", StandardBasicTypes.DOUBLE) .addScalar("d80", StandardBasicTypes.DOUBLE) .addScalar("d84", StandardBasicTypes.DOUBLE) .addScalar("d90", StandardBasicTypes.DOUBLE) .addScalar("dmin", StandardBasicTypes.DOUBLE) .addScalar("dmax", StandardBasicTypes.DOUBLE); query.setString("name", river); query.setDouble("from", from); query.setDouble("to", to); query.setDate("start", start); query.setDate("end", end); query.setResultTransformer( QualityMeasurementResultTransformer.INSTANCE); return new QualityMeasurements(query.list()); } public static QualityMeasurements getMeasurements( String river, double from, double to, Date start, Date end ) { Session session = SedDBSessionHolder.HOLDER.get(); try { return load(session, river, from, to, start, end); } finally { session.close(); } } }