Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/minfo/MorphologicWidthFactory.java @ 5788:b5d20b3dab4e
Doc.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 23 Apr 2013 10:47:29 +0200 |
parents | 7ac111db8a07 |
children |
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.artifacts.model.StaticMorphoWidthCacheKey; import de.intevation.flys.backend.SessionHolder; public class MorphologicWidthFactory { /** Private logger to use here. */ private static Logger log = Logger.getLogger(MorphologicWidthFactory.class); public static final String SQL_SELECT = "SELECT mwv.station AS station, mwv.width AS width " + " FROM morphologic_width mw" + " JOIN morphologic_width_values mwv on mwv.morphologic_width_id = mw.id" + " WHERE mw.id = :width_id"; private MorphologicWidthFactory() { } /** * Get WKms for given column and wst_id, caring about the cache. */ public static MorphologicWidth getWidth(int width_id) { log.debug("MorphologicWidthFactory.getWidth"); Cache cache = CacheFactory.getCache(StaticMorphoWidthCacheKey.CACHE_NAME); StaticMorphoWidthCacheKey cacheKey; if (cache != null) { cacheKey = new StaticMorphoWidthCacheKey(width_id); Element element = cache.get(cacheKey); if (element != null) { log.debug("Got static bedheight values from cache"); return (MorphologicWidth)element.getValue(); } } else { cacheKey = null; } MorphologicWidth values = getWidthUncached(width_id); if (values != null && cacheKey != null) { log.debug("Store static morphologic width values in cache."); Element element = new Element(cacheKey, values); cache.put(element); } return values; } private static MorphologicWidth getWidthUncached(int width_id) { if (log.isDebugEnabled()) { log.debug("MorphologicWidthFactory.getWidthUncached"); } Session session = SessionHolder.HOLDER.get(); SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT) .addScalar("station", StandardBasicTypes.DOUBLE) .addScalar("width", StandardBasicTypes.DOUBLE); sqlQuery.setInteger("width_id", width_id); List<Object []> results = sqlQuery.list(); MorphologicWidth widths = new MorphologicWidth(); for (int i = 0; i < results.size(); i++) { Object[] row = results.get(i); log.debug("got station: " + (Double)row[0]); widths.add( (Double) row[0], (Double) row[1]); } return widths; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :