Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/SedimentDensityFactory.java @ 4838:ac9a3d9576b4
merged.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Wed, 23 Jan 2013 11:15:35 +0100 |
parents | 71e6fe870c1d |
children | 84e02b3f7a4f |
line wrap: on
line source
package de.intevation.flys.artifacts.model.minfo; import java.util.List; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import org.apache.log4j.Logger; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.type.StandardBasicTypes; import de.intevation.flys.artifacts.cache.CacheFactory; import de.intevation.flys.backend.SessionHolder; public class SedimentDensityFactory { /** Private logger to use here. */ private static Logger log = Logger.getLogger(SedimentDensityFactory.class); private static final String DENSITY_CACHE_NAME = "sedimentdensity"; /**Query to get sediment density values and kms. */ private static final String SQL_SELECT_DENSITY = "SELECT sdv.station AS km, " + " sdv.density AS density," + " sdv.year AS year " + " FROM sediment_density sd" + " JOIN rivers r ON sd.river_id = r.id " + " JOIN sediment_density_values sdv ON sd.id = sdv.sediment_density_id" + " WHERE r.name = :name"; private SedimentDensityFactory() {} public static SedimentDensity getSedimentDensity( String river, double startKm, double endKm, int year ) { log.debug("getSedimentDensity"); Cache cache = CacheFactory.getCache(DENSITY_CACHE_NAME); if (cache == null) { log.debug("Cache not configured."); return getSedimentDensityUncached(river, startKm, endKm, year); } String key = river + startKm + endKm; Element element = cache.get(key); if (element != null) { log.debug("SedimentDensity found in cache!"); return (SedimentDensity)element.getValue(); } SedimentDensity value = getSedimentDensityUncached(river, startKm, endKm, year); if (value != null && key != null) { log.debug("Store sediment density values in cache."); element = new Element(key, value); cache.put(element); } return value; } private static SedimentDensity getSedimentDensityUncached( String river, double startKm, double endKm, int year ) { log.debug("getSedimentDensityUncached"); List<Object[]> results = null; Session session = SessionHolder.HOLDER.get(); SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_DENSITY) .addScalar("km", StandardBasicTypes.DOUBLE) .addScalar("density", StandardBasicTypes.DOUBLE) .addScalar("year", StandardBasicTypes.INTEGER); sqlQuery.setString("name", river); results = sqlQuery.list(); SedimentDensity density = new SedimentDensity(); for (Object[] row : results) { density.addDensity((Double)row[0], (Double)row[1], (Integer)row[2]); } density.cleanUp(); return density; } }