package org.jboss.seam.pdf.ui;
import java.io.IOException;
import java.math.BigDecimal;
import javax.faces.context.FacesContext;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.DefaultPieDataset;
public class UIChartData extends ITextComponent {
private String key;
private String series;
private Object value;
private Float explodedPercent;
private String sectionPaint;
private String sectionOutlinePaint;
private String sectionOutlineStroke;
public Object getValue() {
return valueBinding("value", value);
}
public void setValue(Object value) {
this.value = value;
}
public Number getNumericValue() {
Object val = getValue();
if (val instanceof Number) {
return (Number) getValue();
} else if (val instanceof String) {
return new BigDecimal((String) val);
} else {
throw new RuntimeException("Can't convert "
+ val.getClass().getName() + " to numeric value");
}
}
public String getKey() {
return (String) valueBinding("key", key);
}
public void setKey(String key) {
this.key = key;
}
public String getSeries() {
String value = (String) valueBinding("series", series);
if (value == null) {
UIChartSeries series = (UIChartSeries) findITextParent(this,
UIChartSeries.class);
value = series.getKey();
}
return value;
}
public void setSeries(String series) {
this.series = series;
}
public void setValue(Double value) {
this.value = value;
}
public Float getExplodedPercent() {
return (Float) valueBinding("explodedPercent", explodedPercent);
}
public void setExplodedPercent(Float explodedPercent) {
this.explodedPercent = explodedPercent;
}
public String getSectionOutlinePaint() {
return (String) valueBinding("sectionOutlinePaint", sectionOutlinePaint);
}
public void setSectionOutlinePaint(String sectionOutlinePaint) {
this.sectionOutlinePaint = sectionOutlinePaint;
}
public String getSectionOutlineStroke() {
return (String) valueBinding("sectionOutlineStroke",
sectionOutlineStroke);
}
public void setSectionOutlineStroke(String sectionOutlineStroke) {
this.sectionOutlineStroke = sectionOutlineStroke;
}
public String getSectionPaint() {
return (String) valueBinding("sectionPaint", sectionPaint);
}
public void setSectionPaint(String sectionPaint) {
this.sectionPaint = sectionPaint;
}
@Override
public void restoreState(FacesContext context, Object state) {
Object[] values = (Object[]) state;
super.restoreState(context, values[0]);
key = (String) values[1];
// columnKey = (String) values[2];
series = (String) values[3];
value = values[4];
explodedPercent = (Float) values[5];
sectionPaint = (String) values[6];
sectionOutlinePaint = (String) values[7];
sectionOutlineStroke = (String) values[8];
}
@Override
public Object saveState(FacesContext context) {
Object[] values = new Object[9];
values[0] = super.saveState(context);
values[1] = key;
// values[2] = columnKey;
values[3] = series;
values[4] = value;
values[5] = explodedPercent;
values[6] = sectionPaint;
values[7] = sectionOutlinePaint;
values[8] = sectionOutlineStroke;
return values;
}
@Override
public void encodeEnd(FacesContext context) throws IOException {
super.encodeEnd(context);
UIChart chart = (UIChart) findITextParent(getParent(), UIChart.class);
if (chart != null) {
Dataset dataset = chart.getDataset();
if (dataset instanceof DefaultPieDataset) {
DefaultPieDataset piedata = (DefaultPieDataset) dataset;
piedata.setValue(getKey(), getNumericValue());
PiePlot plot = (PiePlot) chart.getChart().getPlot();
if (getExplodedPercent() != null) {
plot.setExplodePercent(getKey(), getExplodedPercent());
}
if (UIChart.findColor(getSectionPaint()) != null) {
plot.setSectionPaint(getKey(), UIChart.findColor(getSectionPaint()));
}
if (UIChart.findColor(getSectionOutlinePaint()) != null) {
plot.setSectionOutlinePaint(getKey(), UIChart.findColor(getSectionOutlinePaint()));
}
if (UIChart.findStroke(getSectionOutlineStroke()) != null) {
plot.setSectionOutlineStroke(getKey(), UIChart.findStroke(getSectionOutlineStroke()));
}
} else if (dataset instanceof DefaultCategoryDataset) {
DefaultCategoryDataset data = (DefaultCategoryDataset) dataset;
// CategoryPlot plot = (CategoryPlot)
// chart.getChart().getPlot();
data.addValue(getNumericValue(), getSeries(), getKey());
// } else if (dataset instanceof DefaultXYDataset) {
// DefaultXYDataset data = (DefaultXYDataset) dataset;
} else {
throw new RuntimeException(
"Cannot add data to dataset of type "
+ dataset.getClass());
}
}
}
@Override
public void createITextObject(FacesContext context) {
}
@Override
public Object getITextObject() {
return null;
}
@Override
public void handleAdd(Object other) {
}
@Override
public void removeITextObject() {
}
}