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 :