Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java @ 300:6a3a02e004d9
Refactored process of chart generation. Charts will be generated via Chart-Interface from rev351 and no more via factory classes.
gnv-artifacts/trunk@354 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 20 Nov 2009 13:51:14 +0000 |
parents | d6c75171f1e9 |
children | 3ea030aafe65 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java Thu Nov 19 17:54:18 2009 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/timeseries/TimeSeriesOutputTransition.java Fri Nov 20 13:51:14 2009 +0000 @@ -12,6 +12,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.Locale; import javax.imageio.ImageIO; import javax.xml.transform.Transformer; @@ -28,16 +29,19 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.jfree.chart.ChartTheme; + import au.com.bytecode.opencsv.CSVWriter; import de.intevation.artifactdatabase.Config; import de.intevation.artifactdatabase.XMLUtils; import de.intevation.artifacts.CallMeta; import de.intevation.artifacts.PreferredLocale; import de.intevation.gnv.artifacts.ressource.RessourceFactory; -import de.intevation.gnv.chart.TestChart; +import de.intevation.gnv.chart.Chart; import de.intevation.gnv.chart.ChartFactory; import de.intevation.gnv.chart.ChartLabels; import de.intevation.gnv.chart.ChartStyle; +import de.intevation.gnv.chart.AbstractXYLineChart; import de.intevation.gnv.chart.TimeSeriesChart; import de.intevation.gnv.chart.exception.TechnicalChartException; import de.intevation.gnv.exports.DefaultExport; @@ -70,6 +74,9 @@ */ public class TimeSeriesOutputTransition extends OutputTransitionBase { + protected static final boolean CACHE_CHART = + Boolean.parseBoolean(System.getProperty("cache.chart", "false")); + /** * The UID of this Class */ @@ -80,8 +87,7 @@ */ private static Logger log = Logger .getLogger(TimeSeriesOutputTransition.class); - - + private static List<TimeGap> timeGapDefinitions = null; protected String domainLable = "Zeit [UTC]"; @@ -352,17 +358,82 @@ * @throws IOException * @throws TechnicalChartException */ - protected void createChart(OutputStream outputStream, - Collection<KeyValueDescibeData> parameters, - Collection<KeyValueDescibeData> measurements, - Collection<KeyValueDescibeData> dates, - ChartStyle chartStyle, ChartLabels chartLables, - String uuid) throws IOException, - TechnicalChartException { - ChartFactory chartFactory = new ChartFactory(); - chartFactory.createSimpleTimeSeriesChart(chartLables, chartStyle, - parameters, measurements, outputStream, this - .getChartResult(uuid),timeGapDefinitions); + protected void createChart( + OutputStream outputStream, + Collection parameters, + Collection measurements, + Collection dates, + ChartStyle chartStyle, + ChartLabels chartLables, + String uuid + ) + throws IOException, TechnicalChartException + { + log.debug("Create chart."); + Chart chart = getChart( + chartLables, + null, // ChartTheme + parameters, + measurements, + getChartResult(uuid), + timeGapDefinitions, + null, // Locale + uuid + ); + + if (chart == null) { + log.error("Could not initialize chart."); + return; + } + + // TODO generic format + Dimension dim = chartStyle.getChartSize(); + String format = "PNG"; + int width = new Double(dim.getWidth()).intValue(); + int height = new Double(dim.getHeight()).intValue(); + + log.debug("export chart as " + format + " in " + width + "x" + height); + ImageIO.write(chart.exportPNG(width, height), format, outputStream); + } + + protected Chart getChart( + ChartLabels chartLables, + ChartTheme chartTheme, + Collection parameters, + Collection measurements, + Collection result, + Collection dates, + Locale locale, + String uuid + ) { + Chart chart = null; + + if (CACHE_CHART) { + log.info("Try to get timeseries chart from cache."); + chart = (Chart) getChartFromCache(uuid); + } + + if (chart != null) + return chart; + + log.info("Chart not in cache yet."); + chart = new TimeSeriesChart( + chartLables, + null, + parameters, + measurements, + result, + dates, + null + ); + chart.generateChart(); + + if (CACHE_CHART) { + log.info("Put chart into cache."); + purifyChart(chart, uuid); + } + + return chart; } protected ChartStyle creatStyle(int witdh, int height) {