diff flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java @ 924:f7761914f745

An initial implementation to render chart series based on the XML configuration in themes.xml. flys-artifacts/trunk@2276 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 01 Jul 2011 14:46:13 +0000
parents 7ca4a287cd0e
children fd5c70973e0b
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java	Fri Jul 01 11:16:11 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java	Fri Jul 01 14:46:13 2011 +0000
@@ -14,6 +14,7 @@
 import org.jfree.chart.axis.ValueAxis;
 import org.jfree.chart.plot.PlotOrientation;
 import org.jfree.chart.plot.XYPlot;
+import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
 import org.jfree.data.Range;
 import org.jfree.data.xy.XYDataset;
 import org.jfree.data.xy.XYSeries;
@@ -112,6 +113,8 @@
 
         autoZoom(plot);
 
+        applyThemes(plot);
+
         return chart;
     }
 
@@ -329,5 +332,59 @@
     protected void addSubtitles(JFreeChart chart) {
         // override this method in subclasses that need subtitles
     }
+
+
+    protected void applyThemes(XYPlot plot) {
+        if (first != null) {
+            applyThemes(plot, first, 0);
+        }
+
+        if (second != null) {
+            applyThemes(plot, second, 1);
+        }
+    }
+
+
+    protected void applyThemes(XYPlot plot, XYSeriesCollection dataset, int i) {
+        XYLineAndShapeRenderer r = getRenderer(plot, i);
+
+        for (int s = 0, num = dataset.getSeriesCount(); s < num; s++) {
+            XYSeries series = dataset.getSeries(s);
+
+            if (series instanceof StyledXYSeries) {
+                ((StyledXYSeries) series).applyTheme(r, s);
+            }
+        }
+
+        plot.setRenderer(i, r);
+    }
+
+
+    protected XYLineAndShapeRenderer getRenderer(XYPlot plot, int idx) {
+        XYLineAndShapeRenderer r =
+            (XYLineAndShapeRenderer) plot.getRenderer(idx);
+
+        if (r != null) {
+            return r;
+        }
+
+        if (idx == 0) {
+            logger.warn("No default renderer set!");
+            return new XYLineAndShapeRenderer();
+        }
+
+        r = (XYLineAndShapeRenderer) plot.getRenderer(0);
+
+        try {
+            return (XYLineAndShapeRenderer) r.clone();
+        }
+        catch (CloneNotSupportedException cnse) {
+            logger.warn(cnse, cnse);
+        }
+
+        logger.warn("No applicalable renderer found!");
+
+        return new XYLineAndShapeRenderer();
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org