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) {

http://dive4elements.wald.intevation.org