1
24 package net.sf.jasperreports.components.spiderchart;
25
26 import net.sf.jasperreports.charts.JRCategorySeries;
27 import net.sf.jasperreports.components.charts.ChartSettings;
28 import net.sf.jasperreports.engine.JRExpressionCollector;
29 import net.sf.jasperreports.engine.JRHyperlinkParameter;
30 import net.sf.jasperreports.engine.base.JRBaseObjectFactory;
31 import net.sf.jasperreports.engine.component.Component;
32 import net.sf.jasperreports.engine.component.ComponentCompiler;
33 import net.sf.jasperreports.engine.design.JRVerifier;
34 import net.sf.jasperreports.engine.design.JasperDesign;
35 import net.sf.jasperreports.engine.type.EvaluationTimeEnum;
36
37
41 public class SpiderChartCompiler implements ComponentCompiler
42 {
43
44 @Override
45 public void collectExpressions(Component component, JRExpressionCollector collector)
46 {
47 SpiderChartComponent chart = (SpiderChartComponent) component;
48 collectExpressions(chart.getChartSettings(), collector);
49 collectExpressions((SpiderDataset)chart.getDataset(), collector);
50 collectExpressions((SpiderPlot)chart.getPlot(), collector);
51 }
52
53 public static void collectExpressions(SpiderDataset dataset, JRExpressionCollector collector)
54 {
55 if(dataset != null)
56 {
57 collector.collect(dataset);
58
59 JRCategorySeries[] categorySeries = dataset.getSeries();
60 if (categorySeries != null && categorySeries.length > 0)
61 {
62 JRExpressionCollector seriesCollector = collector.getCollector(dataset);
63 for(int j = 0; j < categorySeries.length; j++)
64 {
65 seriesCollector.addExpression(categorySeries[j].getSeriesExpression());
66 seriesCollector.addExpression(categorySeries[j].getCategoryExpression());
67 seriesCollector.addExpression(categorySeries[j].getValueExpression());
68 seriesCollector.addExpression(categorySeries[j].getLabelExpression());
69
70 seriesCollector.collectHyperlink(categorySeries[j].getItemHyperlink());
71
72 }
73 }
74 }
75 }
76
77 public static void collectExpressions(SpiderPlot spiderPlot, JRExpressionCollector collector)
78 {
79 if(spiderPlot != null)
80 {
81 collector.addExpression(spiderPlot.getMaxValueExpression());
82 }
83 }
84
85 public static void collectExpressions(ChartSettings chart, JRExpressionCollector collector)
86 {
87 if(chart != null)
88 {
89 collector.addExpression(chart.getTitleExpression());
90 collector.addExpression(chart.getSubtitleExpression());
91 collector.addExpression(chart.getAnchorNameExpression());
92 collector.addExpression(chart.getBookmarkLevelExpression());
93 collector.addExpression(chart.getHyperlinkReferenceExpression());
94 collector.addExpression(chart.getHyperlinkWhenExpression());
95 collector.addExpression(chart.getHyperlinkAnchorExpression());
96 collector.addExpression(chart.getHyperlinkPageExpression());
97 collector.addExpression(chart.getHyperlinkTooltipExpression());
98
99 JRHyperlinkParameter[] hyperlinkParameters = chart.getHyperlinkParameters();
100 if (hyperlinkParameters != null)
101 {
102 for (int i = 0; i < hyperlinkParameters.length; i++)
103 {
104 JRHyperlinkParameter parameter = hyperlinkParameters[i];
105 if (parameter != null)
106 {
107 collector.addExpression(parameter.getValueExpression());
108 }
109 }
110 }
111 }
112 }
113
114 @Override
115 public void verify(Component component, JRVerifier verifier)
116 {
117 SpiderChartComponent chartComponent = (SpiderChartComponent) component;
118
119 verifyEvaluation(verifier, chartComponent);
120
121 ChartSettings chartSettings = chartComponent.getChartSettings();
122 if (chartSettings == null)
123 {
124 verifier.addBrokenRule("No chart settings for spider chart", chartComponent);
125 }
126
127 SpiderDataset dataset = (SpiderDataset)chartComponent.getDataset();
128 if (dataset == null)
129 {
130 verifier.addBrokenRule("No dataset for spider chart", chartComponent);
131 }
132 else
133 {
134 verify(verifier, dataset);
135 }
136
137 SpiderPlot spiderPlot = (SpiderPlot)chartComponent.getPlot();
138
139 if (dataset == null)
140 {
141 verifier.addBrokenRule("No plot set for spider chart", chartComponent);
142 }
143 else
144 {
145 verify(verifier, spiderPlot);
146 }
147
148
149 }
150
151 protected void verifyEvaluation(JRVerifier verifier,
152 SpiderChartComponent chart)
153 {
154 EvaluationTimeEnum evaluationTime = chart.getEvaluationTime();
155 if (evaluationTime == EvaluationTimeEnum.AUTO)
156 {
157 verifier.addBrokenRule("Spider chart evaluation time cannot be Auto", chart);
158 }
159 else if (evaluationTime == EvaluationTimeEnum.GROUP)
160 {
161 String groupName = chart.getEvaluationGroup();
162 if (groupName == null)
163 {
164 verifier.addBrokenRule("Evaluation group not set for spider chart", chart);
165 }
166 else
167 {
168 JasperDesign report = verifier.getReportDesign();
169 if (!report.getGroupsMap().containsKey(groupName))
170 {
171 verifier.addBrokenRule("Spider chart evaluation group " + groupName
172 + " not found in report", chart);
173 }
174 }
175 }
176 }
177
178 protected void verify(JRVerifier verifier, SpiderDataset dataset)
179 {
180 verifier.verifyElementDataset(dataset);
181
182 JRCategorySeries[] series = dataset.getSeries();
183 if (series != null)
184 {
185 for (int i = 0; i < series.length; i++)
186 {
187 verifier.verifyHyperlink(series[i].getItemHyperlink());
188 }
189 }
190 }
191
192 protected void verify(JRVerifier verifier, SpiderPlot spiderPlot)
193 {
194 }
195
196 @Override
197 public Component toCompiledComponent(Component component,
198 JRBaseObjectFactory baseFactory)
199 {
200 SpiderChartComponent chart = (SpiderChartComponent) component;
201 SpiderChartComponent compiledChart = new SpiderChartComponent(chart, baseFactory);
202 return compiledChart;
203 }
204
205 }
206