ingo@1074: package de.intevation.gnv.state.profile.horizontal;
ingo@1074:
ingo@1074: import de.intevation.artifacts.CallContext;
ingo@1074:
ingo@1074: import de.intevation.gnv.artifacts.cache.CacheFactory;
ingo@1074:
ingo@1074: import de.intevation.gnv.chart.Chart;
ingo@1074: import de.intevation.gnv.chart.ChartLabels;
ingo@1074: import de.intevation.gnv.chart.HorizontalProfileVectorChart;
ingo@1074:
ingo@1074: import de.intevation.gnv.geobackend.base.Result;
ingo@1074:
ingo@1074: import de.intevation.gnv.utils.VectorDataProcessor;
ingo@1074:
ingo@1074: import java.util.Collection;
ingo@1074: import java.util.Locale;
ingo@1074:
ingo@1074: import net.sf.ehcache.Cache;
ingo@1074:
ingo@1074: import org.apache.log4j.Logger;
ingo@1074:
ingo@1074: import org.jfree.chart.ChartTheme;
ingo@1074:
ingo@1074:
ingo@1074: /**
ingo@1074: * @author Ingo Weinzierl
ingo@1074: */
ingo@1074: public class HorizontalProfileMeshVectorOutputState
ingo@1074: extends HorizontalProfileMeshOutputState
ingo@1074: {
ingo@1074: private static Logger logger =
ingo@1074: Logger.getLogger(HorizontalProfileMeshVectorOutputState.class);
ingo@1074:
ingo@1074: public static final String[] RESULT_COLUMNS = {
ingo@1074: "YORDINATE", "SHAPE",
ingo@1074: "GROUP1", "GROUP2", "GROUP3",
ingo@1074: "IPOSITION", "JPOSITION",
ingo@1074: "DATAID", "MESHID",
ingo@1074: "SERIES"
ingo@1074: };
ingo@1074:
ingo@1074:
ingo@1074: @Override
ingo@1074: protected Object getChartResult(String uuid, CallContext callContext) {
ingo@1074: logger.debug("Fetch data for horizontalprofile chart with vector data");
ingo@1074: CacheFactory factory = CacheFactory.getInstance();
ingo@1074:
ingo@1074: if (factory.isInitialized()) {
ingo@1074: // we use a cache
ingo@1074: logger.info("Using cache.");
ingo@1074: Cache cache = factory.getCache();
ingo@1074: String key = "chart_" + getHash();
ingo@1074:
ingo@1074: net.sf.ehcache.Element value = cache.get(key);
ingo@1074: if (value != null) {
ingo@1074: logger.debug("Found element in cache.");
ingo@1074: return value.getObjectValue();
ingo@1074: }
ingo@1074: else {
ingo@1074: logger.debug("Element not in cache, we ask the database");
ingo@1074: Collection res = (Collection)getData(queryID);
ingo@1074: res = VectorDataProcessor.process(res, RESULT_COLUMNS);
ingo@1074: logger.debug("Got " + res.size() + " elements from database.");
ingo@1074:
ingo@1074: cache.put(new net.sf.ehcache.Element(key, res));
ingo@1074:
ingo@1074: return res;
ingo@1074: }
ingo@1074: }
ingo@1074: else {
ingo@1074: // we don't use a cache, so we have to query the database every
ingo@1074: // single time
ingo@1074: logger.info("Not using a cache.");
ingo@1074: return VectorDataProcessor.process(
ingo@1074: getData(queryID), RESULT_COLUMNS);
ingo@1074: }
ingo@1074: }
ingo@1074:
ingo@1074:
ingo@1074: @Override
ingo@1074: protected Chart getChart(
ingo@1074: ChartLabels chartLables,
ingo@1074: ChartTheme theme,
ingo@1074: Collection parameters,
ingo@1074: Collection measurements,
ingo@1074: Collection dates,
ingo@1074: Object result,
ingo@1074: Locale locale,
ingo@1074: String uuid,
ingo@1074: boolean linesVisible,
ingo@1074: boolean shapesVisible,
ingo@1074: CallContext callContext
ingo@1074: ) {
ingo@1074: Chart chart = new HorizontalProfileVectorChart(
ingo@1074: chartLables,
ingo@1074: theme,
ingo@1074: parameters,
ingo@1074: measurements,
ingo@1074: dates,
ingo@1074: (Collection)result,
ingo@1074: timeGapDefinitions,
ingo@1074: locale,
ingo@1074: linesVisible,
ingo@1074: shapesVisible
ingo@1074: );
ingo@1074: chart.generateChart();
ingo@1074:
ingo@1074: return chart;
ingo@1074: }
ingo@1074: }
ingo@1074: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :