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.data.general.DefaultPieDataset;
010
011import com.ganteater.ae.AEManager;
012import com.ganteater.ae.processor.annotation.CommandDescription;
013
014@CommandDescription("`PieChart` View Type example:\r\n"
015                + "\r\n"
016                + "```xml\r\n"
017                + "<View name=\"pieView\" reuse=\"true\" type=\"PieChart\" title=\"Pie Chart\" /> \r\n"
018                + "<Loop name=\"column\" numbers=\"10\">\r\n"
019                + "     <Rnd name=\"value\" symbols=\"3\" type=\"number\" /> \r\n"
020                + "     <Out view=\"pieView\" key=\"$var{column}\" level=\"debug\">$var{value}</Out> \r\n"
021                + "</Loop>\r\n"
022                + "```")
023public class PieChart extends View {
024        private static final long serialVersionUID = 1L;
025
026        private DefaultPieDataset dataset;
027        private JFreeChart chart = null;
028
029        public void init(Properties params, AEManager manager) {
030                super.init(params, null);
031                String title = params.getProperty("title");
032
033                dataset = new DefaultPieDataset();
034                chart = ChartFactory.createPieChart(title, dataset, true, true, true);
035
036                add(new ChartPanel(chart, false), BorderLayout.CENTER);
037        }
038
039        @Override
040        public synchronized void out(Object data, Properties properties) {
041                if (data instanceof String) {
042                        double value = Double.parseDouble((String) data);
043                        Comparable<?> key = properties.getProperty("key");
044                        dataset.setValue(key, value);
045                }
046        }
047}