package org.docbag.chart.jfree; import java.util.List; import java.util.Map; import java.util.Set; import org.jfree.chart.ChartFactory; import org.jfree.chart.plot.PiePlot; import org.jfree.data.general.PieDataset; /** * PieChart * * <p>To create:</p> * * <pre> * new PieChart.Builder(createPieDataSet()).build(); * </pre> * * <p>PieCharts can be exploded. To create an exploded PieChart use the following code:</p> * * <pre> * Map<Comparable, Double> exploded = new HashMap<Comparable, Double>(); * exploded.put("Label Name", 0.3); * new PieChart.Builder(createPieDataSet()).exploded(exploded).title("Pie Chart").build(); * </pre> * * <p>To change PieChart colors:</p> * * <pre> * Map<String, Style> styles = new HashMap<String, Style>(); * styles.put("Label Name", new Style(Color.white)); * new PieChart.Builder(createPieDataSet()).title("Pie Chart").styles(styles).build(); * </pre> * * @author Jakub Torbicki */ public class PieChart extends BaseChart { private final PieDataset dataSet; private final Map<Comparable<String>, Double> exploded; private PieChart(Builder builder) { super(Type.PieChart, builder); this.dataSet = builder.dataSet; this.exploded = builder.exploded; } protected org.jfree.chart.JFreeChart createChart() { if (isThirdDimension()) { return ChartFactory.createPieChart3D(getTitle(), dataSet, isLegend(), isTooltips(), isUrls()); } else { return ChartFactory.createPieChart(getTitle(), dataSet, isLegend(), isTooltips(), isUrls()); } } protected List<String> getLabels() { return dataSet.getKeys(); } @Override protected void customizeChart(org.jfree.chart.JFreeChart chart) { super.customizeChart(chart); customizeExploded(chart); } private void customizeExploded(org.jfree.chart.JFreeChart chart) { if (exploded != null) { PiePlot plot = (PiePlot) chart.getPlot(); Set<Map.Entry<Comparable<String>, Double>> set = exploded.entrySet(); for (Map.Entry<Comparable<String>, Double> mapping : set) { plot.setExplodePercent(mapping.getKey(), mapping.getValue()); } } } public static class Builder extends BaseChartBuilder<PieChart> { private final PieDataset dataSet; // optional private Map<Comparable<String>, Double> exploded; public Builder(PieDataset dataSet) { this.dataSet = dataSet; } public Builder exploded(Map<Comparable<String>, Double> exploded) { this.exploded = exploded; return this; } public PieChart build() { return new PieChart(this); } } }