package jeql.command.chart;
import jeql.api.row.Row;
import jeql.api.row.RowIterator;
import jeql.api.table.Table;
import jeql.util.TypeUtil;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
public class PieChart extends BaseChart
{
public PieChart(String chartType)
{
}
public JFreeChart createChart() throws Exception {
JFreeChart chart = createChart(createDataset(param.getFirstDataTable()));
return chart;
}
/**
* Creates a sample dataset.
*
* @return A sample dataset.
*/
private PieDataset createSampleDataset() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("One", new Double(43.2));
dataset.setValue("Two", new Double(10.0));
dataset.setValue("Three", new Double(27.5));
dataset.setValue("Four", new Double(17.5));
dataset.setValue("Five", new Double(11.0));
dataset.setValue("Six", new Double(200));
return dataset;
}
private PieDataset createDataset(Table tbl)
{
DefaultPieDataset dataset = new DefaultPieDataset();
if (tbl == null)
return dataset;
int keyIndex = findColumnIndex(tbl, DATA_COL_KEY, DATA_COL_X, 0);
int valueIndex = findColumnIndex(tbl, DATA_COL_VALUE, DATA_COL_Y, 1);
for (RowIterator i = tbl.getRows().iterator(); ; )
{
Row row = i.next();
if (row == null) break;
String key = row.getValue(keyIndex).toString();
double value = TypeUtil.toDouble(row.getValue(valueIndex));
dataset.setValue(key, new Double(value));
}
return dataset;
}
public String getChartType()
{
String chartType = param.chartType;
return chartType;
}
/**
* Creates a chart.
*
* @param dataset the dataset.
*
* @return A chart.
*/
private JFreeChart createChart(PieDataset dataset)
{
JFreeChart chart = null;
if (param.isExtruded)
chart = ChartFactory.createPieChart3D(
param.title, // chart title
dataset, // data
param.showLegend, // include legend
false, // no tooltips
false // no URLs
);
else
chart = ChartFactory.createPieChart(
param.title, // chart title
dataset, // data
param.showLegend, // include legend
false, // no tooltips
false // no URLs
);
PiePlot plot = (PiePlot) chart.getPlot();
plot.setCircular(true);
plot.setLabelGap(0.01);
return chart;
}
}