package org.jboss.seam.example.pdf;
import org.jboss.seam.annotations.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Paint;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
@Name("jfree")
public class JFreeData {
public JFreeChart getChart() {
return createChart(getDataset());
}
public CategoryDataset getDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(81.0, "Against all torture", "Italy");
dataset.addValue(72.0, "Against all torture", "Great Britain");
dataset.addValue(58.0, "Against all torture", "USA");
dataset.addValue(48.0, "Against all torture", "Israel");
dataset.addValue(43.0, "Against all torture", "Russia");
dataset.addValue(23.0, "Against all torture", "India");
dataset.addValue(59.0, "Against all torture", "Average (*)");
dataset.addValue(5.0, "-", "Italy");
dataset.addValue(4.0, "-", "Great Britain");
dataset.addValue(6.0, "-", "USA");
dataset.addValue(9.0, "-", "Israel");
dataset.addValue(20.0, "-", "Russia");
dataset.addValue(45.0, "-", "India");
dataset.addValue(12.0, "-", "Average (*)");
dataset.addValue(14.0, "Some degree permissible", "Italy");
dataset.addValue(24.0, "Some degree permissible", "Great Britain");
dataset.addValue(36.0, "Some degree permissible", "USA");
dataset.addValue(43.0, "Some degree permissible", "Israel");
dataset.addValue(37.0, "Some degree permissible", "Russia");
dataset.addValue(32.0, "Some degree permissible", "India");
dataset.addValue(29.0, "Some degree permissible", "Average (*)");
return dataset;
}
/**
* Creates a sample chart.
*
* @param dataset the dataset.
*
* @return The chart.
*/
private JFreeChart createChart(CategoryDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createStackedBarChart(
"Public Opinion : Torture of Prisoners",
"Country", // domain axis label
"%", // range axis label
dataset, // data
PlotOrientation.HORIZONTAL, // orientation
false, // include legend
true, // tooltips?
false // URLs?
);
// set the background color for the chart...
chart.setBackgroundPaint(Color.white);
chart.getTitle().setMargin(2.0, 0.0, 0.0, 0.0);
TextTitle tt = new TextTitle(
"Source: http://news.bbc.co.uk/1/hi/world/6063386.stm",
new Font("Dialog", Font.PLAIN, 11));
tt.setPosition(RectangleEdge.BOTTOM);
tt.setHorizontalAlignment(HorizontalAlignment.RIGHT);
tt.setMargin(0.0, 0.0, 4.0, 4.0);
chart.addSubtitle(tt);
TextTitle t = new TextTitle(
"(*) Across 27,000 respondents in 25 countries",
new Font("Dialog", Font.PLAIN, 11));
t.setPosition(RectangleEdge.BOTTOM);
t.setHorizontalAlignment(HorizontalAlignment.RIGHT);
t.setMargin(4.0, 0.0, 2.0, 4.0);
chart.addSubtitle(t);
// get a reference to the plot for further customisation...
CategoryPlot plot = (CategoryPlot) chart.getPlot();
LegendItemCollection items = new LegendItemCollection();
items.add(new LegendItem("Against all torture", null, null, null,
new Rectangle2D.Double(-6.0, -3.0, 12.0, 6.0), Color.green));
items.add(new LegendItem("Some degree permissible", null, null, null,
new Rectangle2D.Double(-6.0, -3.0, 12.0, 6.0), Color.red));
plot.setFixedLegendItems(items);
plot.setInsets(new RectangleInsets(5, 5, 5, 20));
LegendTitle legend = new LegendTitle(plot);
legend.setPosition(RectangleEdge.BOTTOM);
chart.addSubtitle(legend);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setDomainGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.white);
// set the range axis to display integers only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setUpperMargin(0.0);
// disable bar outlines...
BarRenderer renderer = (BarRenderer) plot.getRenderer();
renderer.setDrawBarOutline(false);
// set up gradient paints for series...
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.green, 0.0f, 0.0f, new Color(0, 64, 0));
Paint gp1 = new Color(0, 0, 0, 0);
GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f, 0.0f, new Color(64, 0, 0));
//renderer.setSeriesPaint(0, gp0);
renderer.setSeriesPaint(0, Color.green);
renderer.setSeriesPaint(1, gp1);
//renderer.setSeriesPaint(2, gp2);
renderer.setSeriesPaint(2, Color.red);
return chart;
}
}