ingo@1072: package de.intevation.gnv.state.profile.vertical;
ingo@1072:
ingo@1072: import de.intevation.artifacts.CallContext;
ingo@1072:
ingo@1072: import de.intevation.gnv.artifacts.cache.CacheFactory;
ingo@1072:
ingo@1072: import de.intevation.gnv.geobackend.base.Result;
ingo@1072:
ingo@1072: import de.intevation.gnv.utils.VectorDataProcessor;
ingo@1072:
ingo@1072: import java.util.Collection;
ingo@1072:
ingo@1072: import net.sf.ehcache.Cache;
ingo@1072:
ingo@1072: import org.apache.log4j.Logger;
ingo@1072:
ingo@1072:
ingo@1072: /**
ingo@1072: * @author Ingo Weinzierl
ingo@1072: */
ingo@1072: public class VerticalProfileMeshVectorOutputState
ingo@1072: extends VerticalProfileVectorOutputState
ingo@1072: {
ingo@1072: public static final String[] RESULT_COLUMNS = {
ingo@1072: "YORDINATE", "XORDINATE", "KPOSITION",
ingo@1072: "GROUP1", "GROUP2", "GROUP3",
ingo@1072: "DATAID", "FEATUREID", "MESHID",
ingo@1072: "SERIES"
ingo@1072: };
ingo@1072:
ingo@1072: private static Logger logger =
ingo@1072: Logger.getLogger(VerticalProfileMeshVectorOutputState.class);
ingo@1072:
ingo@1072:
ingo@1072: @Override
ingo@1072: protected Object getChartResult(String uuid, CallContext callContext) {
ingo@1072: logger.debug("Fetch chart data for vertical profile with vector data.");
ingo@1072: CacheFactory factory = CacheFactory.getInstance();
ingo@1072:
ingo@1072: if (factory.isInitialized()) {
ingo@1072: // we use a cache
ingo@1072: logger.info("Using cache.");
ingo@1072: Cache cache = factory.getCache();
ingo@1072: String key = "chart_" + getHash();
ingo@1072:
ingo@1072: net.sf.ehcache.Element value = cache.get(key);
ingo@1072: if (value != null) {
ingo@1072: logger.debug("Found element in cache.");
ingo@1072: return value.getObjectValue();
ingo@1072: }
ingo@1072: else {
ingo@1072: logger.debug("Element not in cache, we ask the database");
ingo@1072: Collection res = (Collection)getData(queryID);
ingo@1072: logger.debug("Got " + res.size() + " elements from db.");
ingo@1072:
ingo@1072: res = VectorDataProcessor.process(res, RESULT_COLUMNS);
ingo@1072: cache.put(new net.sf.ehcache.Element(key, res));
ingo@1072:
ingo@1072: return res;
ingo@1072: }
ingo@1072: }
ingo@1072: else {
ingo@1072: // we don't use a cache, so we have to query the database every
ingo@1072: // single time
ingo@1072: logger.info("Not using a cache.");
ingo@1072: return VectorDataProcessor.process(
ingo@1072: getData(queryID), RESULT_COLUMNS);
ingo@1072: }
ingo@1072: }
ingo@1072: }
ingo@1072: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :