rrenkert@7846: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde rrenkert@7846: * Software engineering by Intevation GmbH rrenkert@7846: * rrenkert@7846: * This file is Free Software under the GNU AGPL (>=v3) rrenkert@7846: * and comes with ABSOLUTELY NO WARRANTY! Check out the rrenkert@7846: * documentation coming with Dive4Elements River for details. rrenkert@7846: */ rrenkert@7846: rrenkert@7846: package org.dive4elements.river.artifacts.model.minfo; rrenkert@7846: rrenkert@7846: import java.util.List; rrenkert@7846: rrenkert@7846: import net.sf.ehcache.Cache; rrenkert@7846: import net.sf.ehcache.Element; rrenkert@7846: rrenkert@7846: import org.apache.log4j.Logger; rrenkert@7846: import org.hibernate.SQLQuery; rrenkert@7846: import org.hibernate.Session; rrenkert@7846: import org.hibernate.type.StandardBasicTypes; rrenkert@7846: rrenkert@7846: import org.dive4elements.river.artifacts.cache.CacheFactory; rrenkert@7846: import org.dive4elements.river.artifacts.model.StaticPorosityCacheKey; rrenkert@7846: import org.dive4elements.river.backend.SessionHolder; rrenkert@7846: rrenkert@7846: rrenkert@7846: public class PorosityFactory rrenkert@7846: { teichmann@8202: /** Private log to use here. */ rrenkert@7846: private static Logger log = Logger.getLogger(PorosityFactory.class); rrenkert@7846: rrenkert@7846: public static final String SQL_SELECT = rrenkert@7846: "SELECT pv.station AS station, pv.porosity AS porosity " + rrenkert@7846: " FROM porosity p" + rrenkert@7846: " JOIN porosity_values pv on pv.porosity_id = p.id" + rrenkert@7860: " WHERE p.id = :porosity_id" + rrenkert@7860: " ORDER BY station"; rrenkert@7846: rrenkert@7846: private PorosityFactory() { rrenkert@7846: } rrenkert@7846: rrenkert@7846: rrenkert@7846: /** rrenkert@7846: * Get WKms for given column and wst_id, caring about the cache. rrenkert@7846: */ rrenkert@7846: public static Porosity getPorosity(int porosity_id) { rrenkert@7846: log.debug("PorosityFactory.getPorosity"); rrenkert@7846: Cache cache = CacheFactory.getCache(StaticPorosityCacheKey.CACHE_NAME); rrenkert@7846: rrenkert@7846: StaticPorosityCacheKey cacheKey; rrenkert@7846: rrenkert@7846: if (cache != null) { rrenkert@7846: cacheKey = new StaticPorosityCacheKey(porosity_id); rrenkert@7846: Element element = cache.get(cacheKey); rrenkert@7846: if (element != null) { rrenkert@7846: log.debug("Got static porosity values from cache"); rrenkert@7846: return (Porosity)element.getValue(); rrenkert@7846: } rrenkert@7846: } rrenkert@7846: else { rrenkert@7846: cacheKey = null; rrenkert@7846: } rrenkert@7846: rrenkert@7846: Porosity values = getPorosityUncached(porosity_id); rrenkert@7846: rrenkert@7846: if (values != null && cacheKey != null) { rrenkert@7846: log.debug("Store static porosity values in cache."); rrenkert@7846: Element element = new Element(cacheKey, values); rrenkert@7846: cache.put(element); rrenkert@7846: } rrenkert@7846: return values; rrenkert@7846: } rrenkert@7846: rrenkert@7846: private static Porosity getPorosityUncached(int porosity_id) { rrenkert@7846: if (log.isDebugEnabled()) { rrenkert@7846: log.debug("PorosityFactory.getPorosityUncached"); rrenkert@7846: } rrenkert@7846: rrenkert@7846: Session session = SessionHolder.HOLDER.get(); rrenkert@7846: SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT) rrenkert@7846: .addScalar("station", StandardBasicTypes.DOUBLE) rrenkert@7846: .addScalar("porosity", StandardBasicTypes.DOUBLE); rrenkert@7846: sqlQuery.setInteger("porosity_id", porosity_id); rrenkert@7846: List results = sqlQuery.list(); rrenkert@7846: rrenkert@7846: Porosity porosities = new Porosity(); rrenkert@7846: for (Object [] row: results) { rrenkert@7846: log.debug("got station: " + (Double)row[0]); rrenkert@7846: porosities.add( rrenkert@7846: (Double) row[0], rrenkert@7846: (Double) row[1]); rrenkert@7846: } rrenkert@7846: return porosities; rrenkert@7846: } rrenkert@7846: } rrenkert@7846: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :