package net.sf.jasperreports.charts.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jfree.data.xy.AbstractXYZDataset;
import org.jfree.data.xy.XYZDataset;

public class DefaultXYZDataset extends AbstractXYZDataset implements XYZDataset {
  private static final long serialVersionUID = 10200L;
  
  List dataset = null;
  
  public DefaultXYZDataset() {
    this.dataset = new ArrayList();
  }
  
  public void addValue(Comparable series, Number xValue, Number yValue, Number zValue) {
    boolean found = false;
    for (Iterator it = this.dataset.iterator(); it.hasNext(); ) {
      XYZElement element = it.next();
      if (element.getSeries().equals(series)) {
        element.addElement(xValue, yValue, zValue);
        found = true;
      } 
    } 
    if (!found) {
      XYZElement element = new XYZElement();
      element.setSeries(series);
      element.addElement(xValue, yValue, zValue);
      this.dataset.add(element);
    } 
  }
  
  public int getSeriesCount() {
    int retVal = 0;
    if (this.dataset != null)
      retVal = this.dataset.size(); 
    return retVal;
  }
  
  public Number getZ(int series, int index) {
    Number retVal = null;
    if (this.dataset != null && 
      series < getSeriesCount()) {
      XYZElement element = this.dataset.get(series);
      retVal = element.getZElement(index);
    } 
    return retVal;
  }
  
  public int getItemCount(int series) {
    int retVal = 0;
    if (this.dataset != null && 
      series < getSeriesCount()) {
      XYZElement element = this.dataset.get(series);
      retVal = element.getCount();
    } 
    return retVal;
  }
  
  public Number getX(int series, int index) {
    Number retVal = null;
    if (this.dataset != null && 
      series < getSeriesCount()) {
      XYZElement element = this.dataset.get(series);
      retVal = element.getXElement(index);
    } 
    return retVal;
  }
  
  public Number getY(int series, int index) {
    Number retVal = null;
    if (this.dataset != null && 
      series < getSeriesCount()) {
      XYZElement element = this.dataset.get(series);
      retVal = element.getYElement(index);
    } 
    return retVal;
  }
  
  public Comparable getSeriesKey(int index) {
    String retVal = null;
    if (this.dataset != null && 
      index < getSeriesCount()) {
      XYZElement element = this.dataset.get(index);
      retVal = element.getSeries().toString();
    } 
    return retVal;
  }
}
