1
2
3
4
5
6
7
8
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 }