2
* JasperReports - Free Java Reporting Library.
3
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved.
4
* http://www.jaspersoft.com
6
* Unless you have purchased a commercial license agreement from Jaspersoft,
7
* the following license terms apply:
9
* This program is part of JasperReports.
11
* JasperReports is free software: you can redistribute it and/or modify
12
* it under the terms of the GNU Lesser General Public License as published by
13
* the Free Software Foundation, either version 3 of the License, or
14
* (at your option) any later version.
16
* JasperReports is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU Lesser General Public License for more details.
21
* You should have received a copy of the GNU Lesser General Public License
22
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
27
* Eugene D - eugenedruy@users.sourceforge.net
28
* Adrian Jackson - iapetus@users.sourceforge.net
29
* David Taylor - exodussystems@users.sourceforge.net
30
* Lars Kristensen - llk@users.sourceforge.net
32
package net.sf.jasperreports.engine.convert;
34
import java.util.Calendar;
35
import java.util.Date;
36
import java.util.Locale;
37
import java.util.TimeZone;
39
import net.sf.jasperreports.charts.ChartContext;
40
import net.sf.jasperreports.engine.JRChart;
41
import net.sf.jasperreports.engine.JRChartDataset;
42
import net.sf.jasperreports.engine.JRException;
43
import net.sf.jasperreports.engine.JRExpression;
45
import org.jfree.data.category.CategoryDataset;
46
import org.jfree.data.category.DefaultCategoryDataset;
47
import org.jfree.data.category.IntervalCategoryDataset;
48
import org.jfree.data.gantt.Task;
49
import org.jfree.data.gantt.TaskSeries;
50
import org.jfree.data.gantt.TaskSeriesCollection;
51
import org.jfree.data.general.Dataset;
52
import org.jfree.data.general.DefaultPieDataset;
53
import org.jfree.data.general.DefaultValueDataset;
54
import org.jfree.data.general.PieDataset;
55
import org.jfree.data.time.Day;
56
import org.jfree.data.time.Hour;
57
import org.jfree.data.time.Minute;
58
import org.jfree.data.time.SimpleTimePeriod;
59
import org.jfree.data.time.TimePeriodValues;
60
import org.jfree.data.time.TimePeriodValuesCollection;
61
import org.jfree.data.time.TimeSeries;
62
import org.jfree.data.time.TimeSeriesCollection;
63
import org.jfree.data.time.Year;
64
import org.jfree.data.xy.DefaultHighLowDataset;
65
import org.jfree.data.xy.DefaultXYZDataset;
66
import org.jfree.data.xy.OHLCDataset;
67
import org.jfree.data.xy.XYDataset;
68
import org.jfree.data.xy.XYSeries;
69
import org.jfree.data.xy.XYSeriesCollection;
70
import org.jfree.data.xy.XYZDataset;
71
import org.jfree.date.DateUtilities;
75
* @author Teodor Danciu (teodord@users.sourceforge.net)
76
* @version $Id: ConvertChartContext.java 3690 2010-04-06 12:23:17Z shertage $
78
public class ConvertChartContext implements ChartContext
80
private final JRChart chart;
82
protected ConvertChartContext(JRChart chart)
87
public Object evaluateExpression(JRExpression expression) throws JRException {
88
if (expression != null)
90
if (String.class.getName().equals(expression.getValueClassName()))
92
return expression.getText();
98
public JRChart getChart() {
102
public Dataset getDataset()
103
{//FIXMETHEME make different datasets
104
Dataset dataset = null;
105
switch (chart.getDataset().getDatasetType()){
106
case JRChartDataset.CATEGORY_DATASET:
107
dataset = createCategoryDataset();
109
case JRChartDataset.GANTT_DATASET:
110
dataset = createGanttDataset();
112
case JRChartDataset.HIGHLOW_DATASET:
113
dataset = createHighLowDataset();
115
case JRChartDataset.PIE_DATASET:
116
dataset = createPieDataset();
118
case JRChartDataset.TIMEPERIOD_DATASET:
119
dataset = createTimePeriodDataset();
121
case JRChartDataset.TIMESERIES_DATASET:
122
dataset = createTimeSeriesDataset();
124
case JRChartDataset.VALUE_DATASET:
125
dataset = new DefaultValueDataset(50);
127
case JRChartDataset.XY_DATASET:
128
dataset = createXyDataset();
130
case JRChartDataset.XYZ_DATASET:
131
dataset = createXyzDataset();
137
public Object getLabelGenerator() {
141
public Locale getLocale() {
142
return null;//FIXMETHEME
145
public TimeZone getTimeZone() {
149
private static DefaultCategoryDataset sampleCategoryDataset = null;
151
private CategoryDataset createCategoryDataset()
153
if (sampleCategoryDataset == null)
155
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
156
dataset.addValue(1.0, "First", "One");
157
dataset.addValue(4.0, "First", "Two");
158
dataset.addValue(3.0, "First", "Three");
159
dataset.addValue(5.0, "First", "Four");
160
dataset.addValue(5.0, "First", "Five");
161
dataset.addValue(7.0, "First", "Six");
162
dataset.addValue(7.0, "First", "Seven");
163
dataset.addValue(8.0, "First", "Eight");
164
dataset.addValue(5.0, "Second", "One");
165
dataset.addValue(7.0, "Second", "Two");
166
dataset.addValue(6.0, "Second", "Three");
167
dataset.addValue(8.0, "Second", "Four");
168
dataset.addValue(4.0, "Second", "Five");
169
dataset.addValue(4.0, "Second", "Six");
170
dataset.addValue(2.0, "Second", "Seven");
171
dataset.addValue(1.0, "Second", "Eight");
172
dataset.addValue(4.0, "Third", "One");
173
dataset.addValue(3.0, "Third", "Two");
174
dataset.addValue(2.0, "Third", "Three");
175
dataset.addValue(3.0, "Third", "Four");
176
dataset.addValue(6.0, "Third", "Five");
177
dataset.addValue(3.0, "Third", "Six");
178
dataset.addValue(4.0, "Third", "Seven");
179
dataset.addValue(3.0, "Third", "Eight");
181
sampleCategoryDataset = dataset;
184
return sampleCategoryDataset;
187
private static PieDataset samplePieDataset = null;
189
private PieDataset createPieDataset()
191
if (samplePieDataset == null)
193
DefaultPieDataset dataset = new DefaultPieDataset();
194
dataset.setValue("First", new Double(45));
195
dataset.setValue("Second", new Double(10));
196
dataset.setValue("Third", new Double(15));
197
dataset.setValue("Fourth", new Double(25));
198
dataset.setValue("Fifth", new Double(5));
200
samplePieDataset = dataset;
203
return samplePieDataset;
206
private static XYSeriesCollection sampleXyDataset = null;
208
private XYDataset createXyDataset()
210
if (sampleXyDataset == null)
212
XYSeriesCollection dataset = new XYSeriesCollection();
214
XYSeries series = new XYSeries("First");
215
series.add(1.0, 500.2);
216
series.add(5.0, 694.1);
217
series.add(4.0, 100.0);
218
series.add(12.5, 734.4);
219
series.add(17.3, 453.2);
220
series.add(21.2, 500.2);
221
series.add(21.9, null);
222
series.add(25.6, 734.4);
223
series.add(30.0, 453.2);
224
dataset.addSeries(series);
226
series = new XYSeries("Second");
227
series.add(2.0, 400.2);
228
series.add(6.0, 594.1);
229
series.add(5.0, 90.0);
230
series.add(13.5, 634.4);
231
series.add(18.3, 353.2);
232
series.add(22.2, 400.2);
233
series.add(22.9, null);
234
series.add(26.6, 634.4);
235
series.add(31.0, 353.2);
236
dataset.addSeries(series);
238
series = new XYSeries("Third");
239
series.add(0.0, 600.2);
240
series.add(4.0, 794.1);
241
series.add(3.0, 200.0);
242
series.add(11.5, 834.4);
243
series.add(16.3, 553.2);
244
series.add(20.2, 600.2);
245
series.add(20.9, null);
246
series.add(24.6, 834.4);
247
series.add(29.0, 553.2);
248
dataset.addSeries(series);
250
sampleXyDataset = dataset;
253
return sampleXyDataset;
256
private static TimeSeriesCollection sampleTimeSeriesDataset = null;
258
private TimeSeriesCollection createTimeSeriesDataset()
260
// TimeSeries series1 = new TimeSeries("Series 1", Day.class);
261
// series1.add(new Day(1, 1, 2003), 54.3);
262
// series1.add(new Day(2, 1, 2003), 20.3);
263
// series1.add(new Day(3, 1, 2003), 43.4);
264
// series1.add(new Day(4, 1, 2003), -12.0);
266
// TimeSeries series2 = new TimeSeries("Series 2", Day.class);
267
// series2.add(new Day(1, 1, 2003), 8.0);
268
// series2.add(new Day(2, 1, 2003), 16.0);
269
// series2.add(new Day(3, 1, 2003), 21.0);
270
// series2.add(new Day(4, 1, 2003), 5.0);
272
// TimeSeriesCollection dataset = new TimeSeriesCollection();
273
// dataset.addSeries(series1);
274
// dataset.addSeries(series2);
277
if (sampleTimeSeriesDataset == null)
279
TimeSeriesCollection dataset = new TimeSeriesCollection();
281
TimeSeries series = new TimeSeries("First", "Year", "Count", Year.class);
284
series.add(new Year(1976), Integer.valueOf(0));
285
series.add(new Year(1977), Integer.valueOf(1));
286
series.add(new Year(1978), Integer.valueOf(0));
287
series.add(new Year(1979), Integer.valueOf(2));
288
series.add(new Year(1980), Integer.valueOf(0));
289
series.add(new Year(1981), Integer.valueOf(1));
290
series.add(new Year(1982), Integer.valueOf(2));
291
series.add(new Year(1983), Integer.valueOf(5));
292
series.add(new Year(1984), Integer.valueOf(21));
293
series.add(new Year(1985), Integer.valueOf(18));
294
series.add(new Year(1986), Integer.valueOf(18));
295
series.add(new Year(1987), Integer.valueOf(25));
296
series.add(new Year(1988), Integer.valueOf(11));
297
series.add(new Year(1989), Integer.valueOf(16));
298
series.add(new Year(1990), Integer.valueOf(23));
299
series.add(new Year(1991), Integer.valueOf(14));
300
series.add(new Year(1992), Integer.valueOf(31));
301
series.add(new Year(1993), Integer.valueOf(38));
302
series.add(new Year(1994), Integer.valueOf(31));
303
series.add(new Year(1995), Integer.valueOf(56));
304
series.add(new Year(1996), Integer.valueOf(45));
305
series.add(new Year(1997), Integer.valueOf(74));
306
series.add(new Year(1998), Integer.valueOf(68));
307
series.add(new Year(1999), Integer.valueOf(98));
308
series.add(new Year(2000), Integer.valueOf(85));
309
series.add(new Year(2001), Integer.valueOf(66));
310
series.add(new Year(2002), Integer.valueOf(71));
311
series.add(new Year(2003), Integer.valueOf(65));
312
series.add(new Year(2004), Integer.valueOf(59));
313
series.add(new Year(2005), Integer.valueOf(60));
317
System.err.println(e.getMessage());
320
dataset.addSeries(series);
322
sampleTimeSeriesDataset = dataset;
325
return sampleTimeSeriesDataset;
328
private static DefaultXYZDataset sampleXyzDataset = null;
330
private XYZDataset createXyzDataset()
332
if (sampleXyzDataset == null)
334
DefaultXYZDataset dataset = new DefaultXYZDataset();
339
{2.1, 2.3, 2.3, 2.2, 2.2, 1.8, 1.8, 1.9, 2.3, 3.8},
340
{14.1, 11.1, 10.0, 8.8, 8.7, 8.4, 5.4, 4.1, 4.1, 25},
341
{2.4, 2.7, 2.7, 2.2, 2.2, 2.2, 2.1, 2.2, 1.6, 4}
345
sampleXyzDataset = dataset;
348
return sampleXyzDataset;
351
private static TaskSeriesCollection sampleGanttDataset = null;
353
private IntervalCategoryDataset createGanttDataset()
355
if (sampleGanttDataset == null)
357
TaskSeriesCollection dataset = new TaskSeriesCollection();
359
TaskSeries series = new TaskSeries("Scheduled");
360
series.add(new Task("First", new SimpleTimePeriod(date(1, Calendar.APRIL, 2008), date(5, Calendar.APRIL, 2008))));
361
series.add(new Task("Second", new SimpleTimePeriod(date(9, Calendar.APRIL, 2008), date(9, Calendar.APRIL, 2008))));
362
series.add(new Task("Third", new SimpleTimePeriod(date(10, Calendar.APRIL, 2008), date(5, Calendar.MAY, 2008))));
363
series.add(new Task("Fourth", new SimpleTimePeriod(date(6, Calendar.MAY, 2008), date(30, Calendar.MAY, 2008))));
364
series.add(new Task("Fifth", new SimpleTimePeriod(date(2, Calendar.JUNE, 2008), date(2, Calendar.JUNE, 2008))));
367
series = new TaskSeries("Actual");
368
series.add(new Task("First", new SimpleTimePeriod(date(1, Calendar.APRIL, 2008), date(5, Calendar.APRIL, 2008))));
369
series.add(new Task("Second", new SimpleTimePeriod(date(9, Calendar.APRIL, 2008), date(9, Calendar.APRIL, 2008))));
370
series.add(new Task("Third", new SimpleTimePeriod(date(10, Calendar.APRIL, 2008), date(15, Calendar.MAY, 2008))));
371
series.add(new Task("Fourth", new SimpleTimePeriod(date(15, Calendar.MAY, 2008), date(17, Calendar.JUNE, 2008))));
372
series.add(new Task("Fifth", new SimpleTimePeriod(date(30, Calendar.JUNE, 2008), date(30, Calendar.JUNE, 2008))));
375
sampleGanttDataset = dataset;
378
return sampleGanttDataset;
381
private static Date date(int day, int month, int year)
383
Calendar calendar = Calendar.getInstance();
384
calendar.set(year, month, day);
385
return calendar.getTime();
388
private static DefaultHighLowDataset sampleHighLowDataset = null;
390
private OHLCDataset createHighLowDataset()
392
if (sampleHighLowDataset == null)
394
Date[] date = new Date[47];
395
double[] high = new double[47];
396
double[] low = new double[47];
397
double[] open = new double[47];
398
double[] close = new double[47];
399
double[] volume = new double[47];
404
date[0] = DateUtilities.createDate(2001, jan, 4, 12, 0);
411
date[1] = DateUtilities.createDate(2001, jan, 5, 12, 0);
418
date[2] = DateUtilities.createDate(2001, jan, 6, 12, 0);
425
date[3] = DateUtilities.createDate(2001, jan, 7, 12, 0);
432
date[4] = DateUtilities.createDate(2001, jan, 8, 12, 0);
439
date[5] = DateUtilities.createDate(2001, jan, 9, 12, 0);
446
date[6] = DateUtilities.createDate(2001, jan, 10, 12, 0);
453
date[7] = DateUtilities.createDate(2001, jan, 11, 12, 0);
460
date[8] = DateUtilities.createDate(2001, jan, 12, 12, 0);
467
date[9] = DateUtilities.createDate(2001, jan, 13, 12, 0);
474
date[10] = DateUtilities.createDate(2001, jan, 14, 12, 0);
481
date[11] = DateUtilities.createDate(2001, jan, 15, 12, 0);
488
date[12] = DateUtilities.createDate(2001, jan, 17, 12, 0);
495
date[13] = DateUtilities.createDate(2001, jan, 18, 12, 0);
502
date[14] = DateUtilities.createDate(2001, jan, 19, 12, 0);
509
date[15] = DateUtilities.createDate(2001, jan, 20, 12, 0);
516
date[16] = DateUtilities.createDate(2001, jan, 21, 12, 0);
523
date[17] = DateUtilities.createDate(2001, jan, 22, 12, 0);
530
date[18] = DateUtilities.createDate(2001, jan, 23, 12, 0);
537
date[19] = DateUtilities.createDate(2001, jan, 24, 12, 0);
544
date[20] = DateUtilities.createDate(2001, jan, 25, 12, 0);
551
date[21] = DateUtilities.createDate(2001, jan, 26, 12, 0);
558
date[22] = DateUtilities.createDate(2001, jan, 27, 12, 0);
565
date[23] = DateUtilities.createDate(2001, jan, 28, 12, 0);
572
date[24] = DateUtilities.createDate(2001, jan, 29, 12, 0);
579
date[25] = DateUtilities.createDate(2001, jan, 30, 12, 0);
586
date[26] = DateUtilities.createDate(2001, jan, 31, 12, 0);
593
date[27] = DateUtilities.createDate(2001, feb, 1, 12, 0);
600
date[28] = DateUtilities.createDate(2001, feb, 2, 12, 0);
607
date[29] = DateUtilities.createDate(2001, feb, 3, 12, 0);
614
date[30] = DateUtilities.createDate(2001, feb, 4, 12, 0);
621
date[31] = DateUtilities.createDate(2001, feb, 5, 12, 0);
628
date[32] = DateUtilities.createDate(2001, feb, 6, 12, 0);
635
date[33] = DateUtilities.createDate(2001, feb, 7, 12, 0);
642
date[34] = DateUtilities.createDate(2001, feb, 8, 12, 0);
649
date[35] = DateUtilities.createDate(2001, feb, 9, 12, 0);
656
date[36] = DateUtilities.createDate(2001, feb, 10, 12, 0);
663
date[37] = DateUtilities.createDate(2001, feb, 11, 12, 0);
670
date[38] = DateUtilities.createDate(2001, feb, 12, 12, 0);
677
date[39] = DateUtilities.createDate(2001, feb, 13, 12, 0);
684
date[40] = DateUtilities.createDate(2001, feb, 14, 12, 0);
691
date[41] = DateUtilities.createDate(2001, feb, 15, 12, 0);
698
date[42] = DateUtilities.createDate(2001, feb, 16, 12, 0);
705
date[43] = DateUtilities.createDate(2001, feb, 17, 12, 0);
712
date[44] = DateUtilities.createDate(2001, feb, 18, 12, 0);
719
date[45] = DateUtilities.createDate(2001, feb, 19, 12, 0);
726
date[46] = DateUtilities.createDate(2001, feb, 20, 12, 0);
733
sampleHighLowDataset = new DefaultHighLowDataset("First", date, high, low, open, close, volume);
736
return sampleHighLowDataset;
739
private static TimePeriodValuesCollection sampleTimePeriodDataset = null;
741
private XYDataset createTimePeriodDataset()
743
if (sampleTimePeriodDataset == null)
745
TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();
747
Day today = new Day();
748
TimePeriodValues series1 = new TimePeriodValues("First");
749
TimePeriodValues series2 = new TimePeriodValues("Second");
751
for (int i = 0; i < 24; i++)
753
Minute m0 = new Minute(0, new Hour(i, today));
754
Minute m1 = new Minute(15, new Hour(i, today));
755
Minute m2 = new Minute(30, new Hour(i, today));
756
Minute m3 = new Minute(45, new Hour(i, today));
757
Minute m4 = new Minute(0, new Hour(i + 1, today));
758
series1.add(new SimpleTimePeriod(m0.getStart(), m1.getStart()), Math.random());
759
series2.add(new SimpleTimePeriod(m1.getStart(), m2.getStart()), Math.random());
760
series1.add(new SimpleTimePeriod(m2.getStart(), m3.getStart()), Math.random());
761
series2.add(new SimpleTimePeriod(m3.getStart(), m4.getStart()), Math.random());
764
dataset.addSeries(series1);
765
dataset.addSeries(series2);
767
sampleTimePeriodDataset = dataset;
770
return sampleTimePeriodDataset;