package org.jboss.seam.pdf.ui;
import java.io.IOException;
import javax.faces.context.FacesContext;
import org.jboss.seam.log.*;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.renderer.AbstractRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.Dataset;
public class UIChartSeries extends ITextComponent {
private static Log log = Logging.getLog(UIChartSeries.class);
private String key;
private String seriesPaint;
private String seriesFillPaint;
private String seriesOutlinePaint;
private String seriesOutlineStroke;
private String seriesStroke;
private Boolean seriesVisible;
private Boolean seriesVisibleInLegend;
public String getKey() {
return (String) valueBinding("key", key);
}
public void setKey(String key) {
this.key = key;
}
public String getSeriesPaint() {
return (String) valueBinding("seriesPaint", seriesPaint);
}
public void setSeriesPaint(String seriesPaint) {
this.seriesPaint = seriesPaint;
}
public String getSeriesFillPaint() {
return (String) valueBinding("seriesFillPaint", seriesFillPaint);
}
public void setSeriesFillPaint(String seriesFillPaint) {
this.seriesFillPaint = seriesFillPaint;
}
public String getSeriesOutlinePaint() {
return (String) valueBinding("seriesOutlinePaint", seriesOutlinePaint);
}
public void setSeriesOutlinePaint(String seriesOutlinePaint) {
this.seriesOutlinePaint = seriesOutlinePaint;
}
public String getSeriesOutlineStroke() {
return (String) valueBinding("seriesOutlineStroke", seriesOutlineStroke);
}
public void setSeriesOutlineStroke(String seriesOutlineStroke) {
this.seriesOutlineStroke = seriesOutlineStroke;
}
public String getSeriesStroke() {
return (String) valueBinding("seriesStroke", seriesStroke);
}
public void setSeriesStroke(String seriesStroke) {
this.seriesStroke = seriesStroke;
}
public Boolean getSeriesVisible() {
return (Boolean) valueBinding("seriesVisible", seriesVisible);
}
public void setSeriesVisible(Boolean seriesVisible) {
this.seriesVisible = seriesVisible;
}
public Boolean getSeriesVisibleInLegend() {
return (Boolean) valueBinding("seriesVisibleInLegend",
seriesVisibleInLegend);
}
public void setSeriesVisibleInLegend(Boolean seriesVisibleInLegend) {
this.seriesVisibleInLegend = seriesVisibleInLegend;
}
@Override
public void restoreState(FacesContext context, Object state) {
Object[] values = (Object[]) state;
super.restoreState(context, values[0]);
key = (String) values[1];
seriesPaint = (String) values[2];
seriesFillPaint = (String) values[3];
seriesOutlinePaint = (String) values[4];
seriesOutlineStroke = (String) values[5];
seriesStroke = (String) values[6];
seriesVisible = (Boolean) values[7];
seriesVisibleInLegend = (Boolean) values[8];
}
@Override
public Object saveState(FacesContext context) {
Object[] values = new Object[9];
values[0] = super.saveState(context);
values[1] = key;
values[2] = seriesPaint;
values[3] = seriesFillPaint;
values[4] = seriesOutlinePaint;
values[5] = seriesOutlineStroke;
values[6] = seriesStroke;
values[7] = seriesVisible;
values[8] = seriesVisibleInLegend;
return values;
}
@Override
public void encodeEnd(FacesContext context) throws IOException {
UIChart chart = (UIChart) findITextParent(getParent(), UIChart.class);
if (chart != null) {
Dataset dataset = chart.getDataset();
Plot p = chart.getChart().getPlot();
if (p instanceof CategoryPlot) {
CategoryPlot plot = (CategoryPlot) p;
int seriesIndex = ((CategoryDataset) dataset).getRowIndex(getKey());
CategoryItemRenderer renderer = plot.getRenderer();
// CategoryRenderer
if (renderer instanceof AbstractRenderer) {
configureSeries((AbstractRenderer) renderer, seriesIndex);
} else {
log.error("render is not AbtractRenderer" + renderer);
}
}
// else if (p instanceof XYPlot) {
// /// ???
// }
}
}
private void configureSeries(AbstractRenderer renderer, int seriesIndex) {
if (getSeriesPaint() != null) {
renderer.setSeriesPaint(seriesIndex, UIChart.findColor(getSeriesPaint()));
}
if (getSeriesFillPaint() != null) {
renderer.setSeriesFillPaint(seriesIndex, UIChart.findColor(getSeriesFillPaint()));
}
if (getSeriesOutlinePaint() != null) {
renderer.setSeriesOutlinePaint(seriesIndex, UIChart.findColor(getSeriesOutlinePaint()));
}
if (getSeriesOutlineStroke() != null) {
renderer.setSeriesOutlineStroke(seriesIndex, UIChart.findStroke(getSeriesOutlineStroke()));
}
if (getSeriesStroke() != null) {
renderer.setSeriesStroke(seriesIndex, UIChart.findStroke(getSeriesStroke()));
}
if (getSeriesVisible() != null) {
renderer.setSeriesVisible(seriesIndex, getSeriesVisible());
}
if (getSeriesVisibleInLegend() != null) {
renderer.setSeriesVisibleInLegend(seriesIndex, getSeriesVisibleInLegend());
}
renderer.setSeriesItemLabelsVisible(seriesIndex, true);
}
@Override
public void createITextObject(FacesContext context) {
}
@Override
public Object getITextObject() {
return null;
}
@Override
public void removeITextObject() {
}
@Override
public void handleAdd(Object other) {
}
}