package net.sf.jasperreports.charts.design;

import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.charts.JRXySeries;
import net.sf.jasperreports.charts.JRXyzDataset;
import net.sf.jasperreports.charts.JRXyzSeries;
import net.sf.jasperreports.engine.JRChartDataset;
import net.sf.jasperreports.engine.JRExpressionCollector;
import net.sf.jasperreports.engine.design.JRDesignChartDataset;
import net.sf.jasperreports.engine.design.JRVerifier;

public class JRDesignXyzDataset extends JRDesignChartDataset implements JRXyzDataset {
  private static final long serialVersionUID = 10200L;
  
  public static final String PROPERTY_XYZ_SERIES = "xyzSeries";
  
  private List xyzSeriesList = new ArrayList();
  
  public JRDesignXyzDataset(JRChartDataset dataset) {
    super(dataset);
  }
  
  public JRXyzSeries[] getSeries() {
    JRXyzSeries[] xyzSeriesArray = new JRXyzSeries[this.xyzSeriesList.size()];
    this.xyzSeriesList.toArray((Object[])xyzSeriesArray);
    return xyzSeriesArray;
  }
  
  public List getSeriesList() {
    return this.xyzSeriesList;
  }
  
  public void addXyzSeries(JRXyzSeries xyzSeries) {
    this.xyzSeriesList.add(xyzSeries);
    getEventSupport().fireCollectionElementAddedEvent("xyzSeries", xyzSeries, this.xyzSeriesList.size() - 1);
  }
  
  public JRXyzSeries removeXyzSeries(JRXyzSeries xyzSeries) {
    if (xyzSeries != null) {
      int idx = this.xyzSeriesList.indexOf(xyzSeries);
      if (idx >= 0) {
        this.xyzSeriesList.remove(idx);
        getEventSupport().fireCollectionElementRemovedEvent("xyzSeries", xyzSeries, idx);
      } 
    } 
    return xyzSeries;
  }
  
  public byte getDatasetType() {
    return 4;
  }
  
  public void collectExpressions(JRExpressionCollector collector) {
    collector.collect(this);
  }
  
  public void validate(JRVerifier verifier) {
    verifier.verify(this);
  }
  
  public Object clone() {
    JRDesignXyzDataset clone = (JRDesignXyzDataset)super.clone();
    if (this.xyzSeriesList != null) {
      clone.xyzSeriesList = new ArrayList(this.xyzSeriesList.size());
      for (int i = 0; i < this.xyzSeriesList.size(); i++)
        clone.xyzSeriesList.add(((JRXySeries)this.xyzSeriesList.get(i)).clone()); 
    } 
    return clone;
  }
}
