package de.laures.cewolf.cpp; import java.awt.Color; import java.io.Serializable; import java.util.*; import de.laures.cewolf.ChartPostProcessor; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.*; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer; /** * A postprocessor for setting alternative colors for pie charts, category plots, XY plots and spider web plots. * It takes numbered parameters containing the hex color values. * <P> * Usage:<P> * <chart:chartpostprocessor id="seriesPaint"><BR> *   <chart:param name="0" value="#FFFFAA" /><BR> *   <chart:param name="1" value="#AAFFAA" /><BR> *   <chart:param name="2" value="#FFAAFF" /><BR> *   <chart:param name="3" value="#FFAAAA" /><BR> * </chart:chartpostprocessor> */ public class SeriesPaintProcessor implements ChartPostProcessor, Serializable { static final long serialVersionUID = -2290498142826058256L; public void processChart (Object chart, Map params) { JFreeChart localChart = (JFreeChart) chart; Plot plot = (Plot) localChart.getPlot(); // pie charts if (plot instanceof PiePlot) { PiePlot piePlot = (PiePlot) plot; List keys = piePlot.getDataset().getKeys(); for (int i=0; i<params.size(); i++) { String colorStr = (String) params.get(String.valueOf(i)); piePlot.setSectionPaint((Comparable) keys.get(i), Color.decode(colorStr)); } // category plots } else if (plot instanceof CategoryPlot) { CategoryItemRenderer render = ((CategoryPlot) plot).getRenderer(); for (int i=0; i<params.size(); i++) { String colorStr = (String) params.get(String.valueOf(i)); render.setSeriesPaint(i, Color.decode(colorStr)); } // spider web plots } else if (plot instanceof SpiderWebPlot) { SpiderWebPlot swPlot = (SpiderWebPlot) plot; for (int i=0; i<params.size(); i++) { String colorStr = (String) params.get(String.valueOf(i)); swPlot.setSeriesPaint(i, Color.decode(colorStr)); } // XY plots } else if (plot instanceof XYPlot) { XYItemRenderer render = ((XYPlot) plot).getRenderer(); for (int i=0; i<params.size(); i++) { String colorStr = (String) params.get(String.valueOf(i)); render.setSeriesPaint(i, Color.decode(colorStr)); } } } }