View Javadoc

1   /*
2    * @(#)HistogramDataset.java Sep 22, 2003
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  
11  package nl.tudelft.simulation.jstats.charts.histogram;
12  
13  import java.util.ArrayList;
14  import java.util.Arrays;
15  import java.util.List;
16  
17  import org.jfree.data.AbstractDataset;
18  import org.jfree.data.DatasetChangeEvent;
19  import org.jfree.data.DatasetChangeListener;
20  import org.jfree.data.IntervalXYDataset;
21  
22  /***
23   * The dataset defines a histogram data set. A dataset contains multiple series
24   * each containing the entries to display.
25   * <p>
26   * (c) copyright 2002-2004 <a href="http://www.simulation.tudelft.nl">Delft
27   * University of Technology </a>, the Netherlands. <br>
28   * See for project information <a href="http://www.simulation.tudelft.nl">
29   * www.simulation.tudelft.nl </a> <br>
30   * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
31   * License (GPL) </a>, no warranty <br>
32   * 
33   * @author <a href="http://www.tbm.tudelft.nl/webstaf/alexandv/index.htm">
34   *         Alexander Verbraeck </a> <br>
35   *         <a href="http://www.tbm.tudelft.nl/webstaf/peterja/index.htm"> Peter
36   *         Jacobs </a>
37   * @version 1.7 2004-03-22
38   * @since 1.2
39   */
40  public class HistogramDataset extends AbstractDataset implements
41  		IntervalXYDataset, DatasetChangeListener
42  {
43  	/*** domain is the minimal value to be displayed in this set */
44  	protected double[] domain = null;
45  
46  	/*** range is the maximum value to be displayed in the set */
47  	protected double[] range = null;
48  
49  	/*** numberOfBins is the number of bins (or categories between min-max) */
50  	protected int numberOfBins = 0;
51  
52  	/*** series the series in this set */
53  	protected HistogramSeries[] series = new HistogramSeries[0];
54  
55  	/***
56  	 * constructs a new HistogramDataset
57  	 * 
58  	 * @param domain the domain of the set.
59  	 * @param range the range of the set.
60  	 * @param numberOfBins the number of bins
61  	 */
62  	public HistogramDataset(final double[] domain, final double[] range,
63  			final int numberOfBins)
64  	{
65  		super();
66  		this.domain = domain;
67  		this.range = range;
68  		this.numberOfBins = numberOfBins;
69  	}
70  
71  	/***
72  	 * adds a series to the dataset.
73  	 * 
74  	 * @param name the name of the series.
75  	 * @return HistogramSeries.
76  	 */
77  	public synchronized HistogramSeries addSeries(final String name)
78  	{
79  		HistogramSeries series = new HistogramSeries(name, this.domain,
80  				this.range, this.numberOfBins);
81  		this.addSeries(series);
82  		return series;
83  	}
84  
85  	/***
86  	 * adds a series to the dataset
87  	 * 
88  	 * @param newSeries the set to add.
89  	 */
90  	public synchronized void addSeries(final HistogramSeries newSeries)
91  	{
92  		newSeries.addChangeListener(this);
93  		List list = new ArrayList(Arrays.asList(this.series));
94  		list.add(newSeries);
95  		this.series = (HistogramSeries[]) list.toArray(new HistogramSeries[list
96  				.size()]);
97  		this.fireDatasetChanged();
98  	}
99  
100 	/***
101 	 * @see org.jfree.data.DatasetChangeListener
102 	 *      #datasetChanged(org.jfree.data.DatasetChangeEvent)
103 	 */
104 	public void datasetChanged(final DatasetChangeEvent arg0)
105 	{
106 		if (arg0 != null)
107 		{
108 			this.fireDatasetChanged();
109 		}
110 	}
111 
112 	/***
113 	 * @see org.jfree.data.IntervalXYDataset#getEndXValue(int, int)
114 	 */
115 	public Number getEndXValue(final int series, final int bin)
116 	{
117 		return this.series[series].getEndXValue(bin);
118 	}
119 
120 	/***
121 	 * @see org.jfree.data.IntervalXYDataset#getEndYValue(int, int)
122 	 */
123 	public Number getEndYValue(final int series, final int bin)
124 	{
125 		return this.series[series].getEndYValue(bin);
126 	}
127 
128 	/***
129 	 * @see org.jfree.data.IntervalXYDataset#getStartXValue(int, int)
130 	 */
131 	public Number getStartXValue(final int series, final int bin)
132 	{
133 		return this.series[series].getStartXValue(bin);
134 	}
135 
136 	/***
137 	 * @see org.jfree.data.IntervalXYDataset#getStartYValue(int, int)
138 	 */
139 	public Number getStartYValue(final int series, final int bin)
140 	{
141 		return this.series[series].getStartYValue(bin);
142 	}
143 
144 	/***
145 	 * @see org.jfree.data.XYDataset#getItemCount(int)
146 	 */
147 	public int getItemCount(final int series)
148 	{
149 		return this.series[series].getBinCount();
150 	}
151 
152 	/***
153 	 * @see org.jfree.data.XYDataset#getXValue(int, int)
154 	 */
155 	public Number getXValue(final int series, final int bin)
156 	{
157 		return this.series[series].getXValue(bin);
158 	}
159 
160 	/***
161 	 * @see org.jfree.data.XYDataset#getYValue(int, int)
162 	 */
163 	public Number getYValue(final int series, final int bin)
164 	{
165 		return this.series[series].getYValue(bin);
166 	}
167 
168 	/***
169 	 * @see org.jfree.data.SeriesDataset#getSeriesCount()
170 	 */
171 	public int getSeriesCount()
172 	{
173 		return this.series.length;
174 	}
175 
176 	/***
177 	 * @see org.jfree.data.SeriesDataset#getSeriesName(int)
178 	 */
179 	public String getSeriesName(final int series)
180 	{
181 		return this.series[series].getName();
182 	}
183 
184 	/***
185 	 * @see org.jfree.data.IntervalXYDataset#getEndX(int, int)
186 	 */
187 	public double getEndX(final int series, final int bin)
188 	{
189 		return this.series[series].getEndXValue(bin).doubleValue();
190 	}
191 
192 	/***
193 	 * @see org.jfree.data.IntervalXYDataset#getEndY(int, int)
194 	 */
195 	public double getEndY(final int series, final int bin)
196 	{
197 		return this.series[series].getEndYValue(bin).doubleValue();
198 	}
199 
200 	/***
201 	 * @see org.jfree.data.IntervalXYDataset#getStartX(int, int)
202 	 */
203 	public double getStartX(final int series, final int bin)
204 	{
205 		return this.series[series].getStartXValue(bin).doubleValue();
206 	}
207 
208 	/***
209 	 * @see org.jfree.data.IntervalXYDataset#getStartY(int, int)
210 	 */
211 	public double getStartY(final int series, final int bin)
212 	{
213 		return this.series[series].getStartYValue(bin).doubleValue();
214 	}
215 
216 	/***
217 	 * @see org.jfree.data.XYDataset#getX(int, int)
218 	 */
219 	public double getX(final int series, final int bin)
220 	{
221 		return this.series[series].getXValue(bin).doubleValue();
222 	}
223 
224 	/***
225 	 * @see org.jfree.data.XYDataset#getY(int, int)
226 	 */
227 	public double getY(final int series, final int bin)
228 	{
229 		return this.series[series].getYValue(bin).doubleValue();
230 	}
231 }