001package com.ganteater.ae.desktop.view;
002
003import java.awt.BorderLayout;
004import java.util.Properties;
005
006import org.jfree.chart.ChartFactory;
007import org.jfree.chart.ChartPanel;
008import org.jfree.chart.JFreeChart;
009import org.jfree.chart.axis.NumberAxis;
010import org.jfree.chart.labels.ItemLabelAnchor;
011import org.jfree.chart.labels.ItemLabelPosition;
012import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
013import org.jfree.chart.plot.CategoryPlot;
014import org.jfree.chart.plot.PlotOrientation;
015import org.jfree.chart.renderer.category.CategoryItemRenderer;
016import org.jfree.data.category.DefaultCategoryDataset;
017import org.jfree.ui.TextAnchor;
018
019import com.ganteater.ae.AEManager;
020
021public class BarChart extends PresentationPanel {
022        private static final long serialVersionUID = 1L;
023
024        private DefaultCategoryDataset dataset;
025        private JFreeChart chart = null;
026
027        public BarChart(Properties params, AEManager manager) {
028                super(params);
029
030                String title = params.getProperty("title");
031                String xAxisLabel = params.getProperty("xAxisLabel");
032                String yAxisLabel = params.getProperty("yAxisLabel");
033
034                dataset = new DefaultCategoryDataset();
035                chart = ChartFactory.createBarChart(title, xAxisLabel, yAxisLabel, dataset, PlotOrientation.VERTICAL, true,
036                                true, true);
037
038                CategoryPlot plot = chart.getCategoryPlot();
039                plot.setDomainGridlinesVisible(true);
040
041                CategoryItemRenderer renderer = ((CategoryPlot) chart.getPlot()).getRenderer();
042                renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
043                renderer.setBaseItemLabelsVisible(true);
044                ItemLabelPosition position = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.TOP_CENTER);
045                renderer.setBasePositiveItemLabelPosition(position);
046
047                final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
048                rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
049
050                ChartPanel comp = new ChartPanel(chart);
051                add(comp, BorderLayout.CENTER);
052        }
053
054        @Override
055        public void out(Object data, Properties properties) {
056                if (data instanceof String) {
057                        double value = Double.parseDouble((String) data);
058                        Comparable<?> row = properties.getProperty("row");
059                        Comparable<?> column = properties.getProperty("column");
060
061                        CategoryPlot plot = chart.getCategoryPlot();
062                        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
063                        if (value != Math.ceil(value) && rangeAxis.getStandardTickUnits() == NumberAxis.createIntegerTickUnits()) {
064                                rangeAxis.setStandardTickUnits(NumberAxis.createStandardTickUnits());
065                        }
066
067                        dataset.addValue((int) value, row, column);
068                }
069        }
070}