teichmann@5831: package org.dive4elements.river.artifacts.model; sascha@2119: teichmann@5831: import org.dive4elements.river.artifacts.cache.CacheFactory; sascha@2119: teichmann@5831: import org.dive4elements.river.model.CrossSection; sascha@2126: teichmann@5831: import org.dive4elements.river.model.FastCrossSectionLine; sascha@2119: sascha@2119: import net.sf.ehcache.Cache; sascha@2119: import net.sf.ehcache.Element; sascha@2119: sascha@2119: import java.util.List; sascha@2119: sascha@2126: import org.apache.log4j.Logger; sascha@2119: sascha@2119: public class FastCrossSectionLineFactory sascha@2119: { sascha@2126: private static Logger log = sascha@2126: Logger.getLogger(FastCrossSectionLineFactory.class); sascha@2126: sascha@2119: public static final String CACHE_NAME = "fast-cross-section-lines"; sascha@2119: sascha@2119: private FastCrossSectionLineFactory() { sascha@2119: } sascha@2119: sascha@2119: public static FastCrossSectionLine getCrossSectionLine( sascha@2119: CrossSection cs, sascha@2119: double km sascha@2119: ) { sascha@2119: Cache cache = CacheFactory.getCache(CACHE_NAME); sascha@2119: sascha@2126: boolean debug = log.isDebugEnabled(); sascha@2126: sascha@2119: if (cache == null) { sascha@2126: if (debug) { sascha@2126: log.debug("No cross section chunk cache configured."); sascha@2126: } sascha@2126: List lines = cs.getFastLines(km, km); sascha@2126: return lines.isEmpty() ? null : lines.get(0); sascha@2119: } sascha@2119: sascha@2119: String cacheKey = FastCrossSectionChunk.createHashKey(cs, km); sascha@2119: sascha@2119: Element element = cache.get(cacheKey); sascha@2119: sascha@2119: FastCrossSectionChunk fcsc; sascha@2119: sascha@2119: if (element != null) { sascha@2126: if (debug) { sascha@2126: log.debug("Found cross section chunk in cache id: " + sascha@2126: cs.getId() + " km: " + km); sascha@2126: } sascha@2126: sascha@2119: fcsc = (FastCrossSectionChunk)element.getValue(); sascha@2119: } sascha@2119: else { sascha@2126: if (debug) { sascha@2126: log.debug("Not found cross section chunk in cache id: " + sascha@2126: cs.getId() + " km: " + km + " -> loading"); sascha@2126: } sascha@2119: fcsc = new FastCrossSectionChunk(cs, km); sascha@2119: element = new Element(cacheKey, fcsc); sascha@2119: cache.put(element); sascha@2119: } sascha@2119: sascha@2119: return fcsc.getCrossSectionLine(km); sascha@2119: } sascha@2119: } sascha@2119: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :