package net.sourceforge.jabm.view; import java.util.LinkedList; import java.util.List; import net.sourceforge.jabm.report.DataSeriesWriter; import org.jfree.data.DomainOrder; import org.jfree.data.general.DatasetChangeEvent; import org.jfree.data.general.DatasetChangeListener; import org.jfree.data.general.DatasetGroup; import org.jfree.data.xy.XYDataset; /** * An adaptor that allows multiple DataSeriesWriter objects to be combined * and presented as an XYDataset suitable for charting by JFreeChart. * * @author Steve Phelps * */ public class XYDatasetAdaptor implements XYDataset { protected LinkedList<DatasetChangeListener> listeners = new LinkedList<DatasetChangeListener>(); protected List<DataSeriesWriter> dataSeries; protected List<String> seriesNames; public XYDatasetAdaptor(List<DataSeriesWriter> dataSeries, List<String> seriesNames) { this.dataSeries = dataSeries; this.seriesNames = seriesNames; } public DataSeriesWriter getDataSeries(int series) { return dataSeries.get(series); } @Override public int getSeriesCount() { return dataSeries.size(); } @Override public Comparable getSeriesKey(int series) { return seriesNames.get(series); } @Override public int indexOf(Comparable seriesKey) { return seriesNames.indexOf(seriesKey); } @Override public void addChangeListener(DatasetChangeListener listener) { listeners.add(listener); } @Override public void removeChangeListener(DatasetChangeListener listener) { listeners.remove(listener); } @Override public DatasetGroup getGroup() { // TODO Auto-generated method stub return null; } @Override public void setGroup(DatasetGroup group) { // TODO Auto-generated method stub } @Override public DomainOrder getDomainOrder() { // TODO Auto-generated method stub return null; } @Override public int getItemCount(int series) { return getDataSeries(series).length(); } @Override public Number getX(int series, int item) { return getDataSeries(series).getXCoord(item); } @Override public double getXValue(int series, int item) { return getDataSeries(series).getYCoord(item); } @Override public Number getY(int series, int item) { return getDataSeries(series).getYCoord(item); } @Override public double getYValue(int series, int item) { return getDataSeries(series).getXCoord(item); } public void datasetChanged(Object source) { for(DatasetChangeListener listener : listeners) { listener.datasetChanged(new DatasetChangeEvent(source, this)); } } }