Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FixingsColumnFactory.java @ 4856:d9ef525bff08
ChartGenerator, ComputedDischargeCurveExporter: Updated to use RangeAccess instead of FLYSUtils.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 23 Jan 2013 13:01:21 +0100 |
parents | a441be7f1589 |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.model; import de.intevation.flys.artifacts.model.FixingsOverview.Fixing; import de.intevation.flys.artifacts.cache.CacheFactory; import de.intevation.flys.backend.SessionHolder; import java.util.List; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import org.hibernate.Session; import org.hibernate.SQLQuery; import org.hibernate.type.StandardBasicTypes; import org.apache.log4j.Logger; public class FixingsColumnFactory { private static Logger log = Logger.getLogger(FixingsColumnFactory.class); public static final String CACHE_NAME = "fixings-columns"; public static final String SQL_COLUMN_WS = "SELECT wcv.position AS km, wcv.w AS w " + "FROM wst_column_values wcv " + "WHERE wst_column_id = :column_id " + "ORDER by wcv.position"; public static final String SQL_COLUMN_QS = "SELECT wqr.q AS q, r.a AS a, r.b AS b " + "FROM wst_column_q_ranges wcqr " + "JOIN wst_q_ranges wqr ON wcqr.wst_q_range_id = wqr.id " + "JOIN ranges r ON wqr.range_id = r.id " + "WHERE wcqr.wst_column_id = :column_id ORDER by r.a"; public static final FixingsColumnFactory INSTANCE = new FixingsColumnFactory(); private FixingsColumnFactory() { } public static FixingsColumnFactory getInstance() { return INSTANCE; } public FixingsColumn getColumnData(Fixing.Column column) { boolean debug = log.isDebugEnabled(); if (debug) { log.debug("FixingsColumnFactory.getColumnData"); } Cache cache = CacheFactory.getCache(CACHE_NAME); if (cache == null) { if (debug) { log.debug("Cache unconfigured."); } return getUncached(column); } Integer cacheKey = Integer.valueOf(column.getId()); Element element = cache.get(cacheKey); if (element != null) { if (debug) { log.debug("Column " + cacheKey + " found in cache."); } return (FixingsColumn)element.getValue(); } else { FixingsColumn result = getUncached(column); if (result != null) { if (debug) { log.debug("Store column " + cacheKey + " into cache."); } cache.put(new Element(cacheKey, result)); } return result; } } protected FixingsColumn getUncached(Fixing.Column column) { Session session = SessionHolder.HOLDER.get(); SQLQuery sqlQuery = session.createSQLQuery(SQL_COLUMN_WS) .addScalar("km", StandardBasicTypes.DOUBLE) .addScalar("w", StandardBasicTypes.DOUBLE); sqlQuery.setInteger("column_id", column.getId()); List<Object []> results = sqlQuery.list(); if (results.isEmpty()) { return null; } double [] kms = new double[results.size()]; double [] ws = new double[kms.length]; for (int i = 0; i < kms.length; ++i) { Object [] row = results.get(i); kms[i] = ((Double)row[0]).doubleValue(); ws [i] = ((Double)row[1]).doubleValue(); } sqlQuery = session.createSQLQuery(SQL_COLUMN_QS) .addScalar("q", StandardBasicTypes.DOUBLE) .addScalar("a", StandardBasicTypes.DOUBLE) .addScalar("b", StandardBasicTypes.DOUBLE); sqlQuery.setInteger("column_id", column.getId()); results = sqlQuery.list(); if (results.isEmpty()) { return null; } QRangeTree qs = new QRangeTree( results, QRangeTree.WITHOUT_COLUMN, 0, results.size()); return new FixingsColumn(kms, ws, qs); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :