1
24 package net.sf.jasperreports.engine.fill;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.HashSet;
29 import java.util.Iterator;
30 import java.util.LinkedList;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.Set;
34
35 import org.apache.commons.collections4.map.LinkedMap;
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38
39 import net.sf.jasperreports.charts.JRAreaPlot;
40 import net.sf.jasperreports.charts.JRBar3DPlot;
41 import net.sf.jasperreports.charts.JRBarPlot;
42 import net.sf.jasperreports.charts.JRBubblePlot;
43 import net.sf.jasperreports.charts.JRCandlestickPlot;
44 import net.sf.jasperreports.charts.JRCategoryDataset;
45 import net.sf.jasperreports.charts.JRCategorySeries;
46 import net.sf.jasperreports.charts.JRChartAxis;
47 import net.sf.jasperreports.charts.JRGanttDataset;
48 import net.sf.jasperreports.charts.JRGanttSeries;
49 import net.sf.jasperreports.charts.JRHighLowDataset;
50 import net.sf.jasperreports.charts.JRHighLowPlot;
51 import net.sf.jasperreports.charts.JRLinePlot;
52 import net.sf.jasperreports.charts.JRMeterPlot;
53 import net.sf.jasperreports.charts.JRMultiAxisPlot;
54 import net.sf.jasperreports.charts.JRPie3DPlot;
55 import net.sf.jasperreports.charts.JRPieDataset;
56 import net.sf.jasperreports.charts.JRPiePlot;
57 import net.sf.jasperreports.charts.JRPieSeries;
58 import net.sf.jasperreports.charts.JRScatterPlot;
59 import net.sf.jasperreports.charts.JRThermometerPlot;
60 import net.sf.jasperreports.charts.JRTimePeriodDataset;
61 import net.sf.jasperreports.charts.JRTimePeriodSeries;
62 import net.sf.jasperreports.charts.JRTimeSeries;
63 import net.sf.jasperreports.charts.JRTimeSeriesDataset;
64 import net.sf.jasperreports.charts.JRTimeSeriesPlot;
65 import net.sf.jasperreports.charts.JRValueDataset;
66 import net.sf.jasperreports.charts.JRXyDataset;
67 import net.sf.jasperreports.charts.JRXySeries;
68 import net.sf.jasperreports.charts.JRXyzDataset;
69 import net.sf.jasperreports.charts.JRXyzSeries;
70 import net.sf.jasperreports.charts.fill.JRFillAreaPlot;
71 import net.sf.jasperreports.charts.fill.JRFillBar3DPlot;
72 import net.sf.jasperreports.charts.fill.JRFillBarPlot;
73 import net.sf.jasperreports.charts.fill.JRFillBubblePlot;
74 import net.sf.jasperreports.charts.fill.JRFillCandlestickPlot;
75 import net.sf.jasperreports.charts.fill.JRFillCategoryDataset;
76 import net.sf.jasperreports.charts.fill.JRFillCategorySeries;
77 import net.sf.jasperreports.charts.fill.JRFillChartAxis;
78 import net.sf.jasperreports.charts.fill.JRFillGanttDataset;
79 import net.sf.jasperreports.charts.fill.JRFillGanttSeries;
80 import net.sf.jasperreports.charts.fill.JRFillHighLowDataset;
81 import net.sf.jasperreports.charts.fill.JRFillHighLowPlot;
82 import net.sf.jasperreports.charts.fill.JRFillLinePlot;
83 import net.sf.jasperreports.charts.fill.JRFillMeterPlot;
84 import net.sf.jasperreports.charts.fill.JRFillMultiAxisPlot;
85 import net.sf.jasperreports.charts.fill.JRFillPie3DPlot;
86 import net.sf.jasperreports.charts.fill.JRFillPieDataset;
87 import net.sf.jasperreports.charts.fill.JRFillPiePlot;
88 import net.sf.jasperreports.charts.fill.JRFillPieSeries;
89 import net.sf.jasperreports.charts.fill.JRFillScatterPlot;
90 import net.sf.jasperreports.charts.fill.JRFillThermometerPlot;
91 import net.sf.jasperreports.charts.fill.JRFillTimePeriodDataset;
92 import net.sf.jasperreports.charts.fill.JRFillTimePeriodSeries;
93 import net.sf.jasperreports.charts.fill.JRFillTimeSeries;
94 import net.sf.jasperreports.charts.fill.JRFillTimeSeriesDataset;
95 import net.sf.jasperreports.charts.fill.JRFillTimeSeriesPlot;
96 import net.sf.jasperreports.charts.fill.JRFillValueDataset;
97 import net.sf.jasperreports.charts.fill.JRFillXyDataset;
98 import net.sf.jasperreports.charts.fill.JRFillXySeries;
99 import net.sf.jasperreports.charts.fill.JRFillXyzDataset;
100 import net.sf.jasperreports.charts.fill.JRFillXyzSeries;
101 import net.sf.jasperreports.crosstabs.JRCrosstab;
102 import net.sf.jasperreports.crosstabs.JRCrosstabDataset;
103 import net.sf.jasperreports.crosstabs.JRCrosstabParameter;
104 import net.sf.jasperreports.crosstabs.fill.JRFillCrosstabParameter;
105 import net.sf.jasperreports.engine.ExpressionReturnValue;
106 import net.sf.jasperreports.engine.JRAbstractObjectFactory;
107 import net.sf.jasperreports.engine.JRBand;
108 import net.sf.jasperreports.engine.JRBreak;
109 import net.sf.jasperreports.engine.JRChart;
110 import net.sf.jasperreports.engine.JRComponentElement;
111 import net.sf.jasperreports.engine.JRConditionalStyle;
112 import net.sf.jasperreports.engine.JRDataset;
113 import net.sf.jasperreports.engine.JRDatasetRun;
114 import net.sf.jasperreports.engine.JRDefaultStyleProvider;
115 import net.sf.jasperreports.engine.JRElementGroup;
116 import net.sf.jasperreports.engine.JREllipse;
117 import net.sf.jasperreports.engine.JRExpression;
118 import net.sf.jasperreports.engine.JRField;
119 import net.sf.jasperreports.engine.JRFrame;
120 import net.sf.jasperreports.engine.JRGenericElement;
121 import net.sf.jasperreports.engine.JRGroup;
122 import net.sf.jasperreports.engine.JRImage;
123 import net.sf.jasperreports.engine.JRLine;
124 import net.sf.jasperreports.engine.JRParameter;
125 import net.sf.jasperreports.engine.JRRectangle;
126 import net.sf.jasperreports.engine.JRReportTemplate;
127 import net.sf.jasperreports.engine.JRRuntimeException;
128 import net.sf.jasperreports.engine.JRSection;
129 import net.sf.jasperreports.engine.JRStaticText;
130 import net.sf.jasperreports.engine.JRStyle;
131 import net.sf.jasperreports.engine.JRStyleContainer;
132 import net.sf.jasperreports.engine.JRStyleSetter;
133 import net.sf.jasperreports.engine.JRSubreport;
134 import net.sf.jasperreports.engine.JRSubreportReturnValue;
135 import net.sf.jasperreports.engine.JRTextField;
136 import net.sf.jasperreports.engine.JRVariable;
137 import net.sf.jasperreports.engine.VariableReturnValue;
138 import net.sf.jasperreports.engine.analytics.dataset.FillMultiAxisData;
139 import net.sf.jasperreports.engine.analytics.dataset.MultiAxisData;
140 import net.sf.jasperreports.engine.base.JRBaseConditionalStyle;
141 import net.sf.jasperreports.engine.base.JRBaseStyle;
142
143
144
149 public class JRFillObjectFactory extends JRAbstractObjectFactory
150 {
151
152 private static final Log log = LogFactory.getLog(JRFillObjectFactory.class);
153
154 public static final String EXCEPTION_MESSAGE_KEY_UNRESOLVED_STYLE = "fill.object.factory.unresolved.style";
155 public static final String EXCEPTION_MESSAGE_KEY_STYLE_NOT_FOUND = "fill.object.factory.style.not.found";
156
157
160 protected JRBaseFiller filler;
161 protected BaseReportFiller reportFiller;
162 private JRFillExpressionEvaluator evaluator;
163
164 private JRFillObjectFactory parentFiller;
165
166
167
168 private List<JRFillElementDataset> elementDatasets = new ArrayList<JRFillElementDataset>();
169 private Map<String,List<JRFillElementDataset>> elementDatasetMap = new HashMap<String,List<JRFillElementDataset>>();
170
171 private LinkedList<List<JRFillDatasetRun>> trackedDatasetRunsStack = new LinkedList<List<JRFillDatasetRun>>();
172
173 private Map<String,List<JRStyleSetter>> delayedStyleSettersByName = new HashMap<String,List<JRStyleSetter>>();
174
175 protected static class StylesList
176 {
177 private final List<JRStyle> styles = new ArrayList<JRStyle>();
178 private final Map<String,Integer> stylesIdx = new HashMap<String,Integer>();
179
180 public boolean containsStyle(String name)
181 {
182 return stylesIdx.containsKey(name);
183 }
184
185 public JRStyle getStyle(String name)
186 {
187 Integer idx = stylesIdx.get(name);
188 return idx == null ? null : styles.get(idx);
189 }
190
191 public void addStyle(JRStyle style)
192 {
193 styles.add(style);
194 stylesIdx.put(style.getName(), styles.size() - 1);
195 }
196
197 public void renamed(String oldName, String newName)
198 {
199 Integer idx = stylesIdx.remove(oldName);
200 stylesIdx.put(newName, idx);
201 }
202 }
203
204 private Set<JRStyle> originalStyleList;
205 private StylesList stylesMap = new StylesList();
206
207
208
211 protected JRFillObjectFactory(JRBaseFiller filler)
212 {
213 this(filler, filler.calculator);
214 }
215
216
217
220 public JRFillObjectFactory(JRBaseFiller filler, JRFillExpressionEvaluator expressionEvaluator)
221 {
222 this.filler = filler;
223 this.reportFiller = filler;
224 this.evaluator = expressionEvaluator;
225 }
226
227
228 public JRFillObjectFactory(JRFillObjectFactory parent, JRFillExpressionEvaluator expressionEvaluator)
229 {
230 this.parentFiller = parent;
231 this.filler = parent.filler;
232 this.reportFiller = parent.reportFiller;
233 this.evaluator = expressionEvaluator;
234 }
235
236
237 public JRFillObjectFactory(BaseReportFiller reportFiller)
238 {
239 this.reportFiller = reportFiller;
240 this.evaluator = reportFiller.calculator;
241 }
242
243
244
250 public JRFillExpressionEvaluator getExpressionEvaluator()
251 {
252 return evaluator;
253 }
254
255
258 protected JRFillChartDataset[] getDatasets()
259 {
260 return elementDatasets.toArray(new JRFillChartDataset[elementDatasets.size()]);
261 }
262
263
264 protected JRFillElementDataset[] getElementDatasets(JRDataset dataset)
265 {
266 JRFillElementDataset[] elementDatasetsArray;
267 List<JRFillElementDataset> elementDatasetsList;
268 if (dataset.isMainDataset())
269 {
270 elementDatasetsList = elementDatasets;
271 }
272 else
273 {
274 elementDatasetsList = elementDatasetMap.get(dataset.getName());
275 }
276
277 if (elementDatasetsList == null || elementDatasetsList.size() == 0)
278 {
279 elementDatasetsArray = new JRFillElementDataset[0];
280 }
281 else
282 {
283 elementDatasetsArray = new JRFillElementDataset[elementDatasetsList.size()];
284 elementDatasetsList.toArray(elementDatasetsArray);
285 }
286
287 return elementDatasetsArray;
288 }
289
290
291 protected void registerDelayedStyleSetter(JRStyleSetter delayedSetter, String styleName)
292 {
293 if (parentFiller == null)
294 {
295 List<JRStyleSetter> setters = delayedStyleSettersByName.get(styleName);
296 if (setters == null)
297 {
298 setters = new ArrayList<JRStyleSetter>();
299 delayedStyleSettersByName.put(styleName, setters);
300 }
301
302 setters.add(delayedSetter);
303 }
304 else
305 {
306 parentFiller.registerDelayedStyleSetter(delayedSetter, styleName);
307 }
308 }
309
310 public void registerDelayedStyleSetter(JRStyleSetter delayedSetter, JRStyleContainer styleContainer)
311 {
312 JRStyle style = styleContainer.getStyle();
313 String nameReference = styleContainer.getStyleNameReference();
314 if (style != null)
315 {
316 registerDelayedStyleSetter(delayedSetter, style.getName());
317 }
318 else if (nameReference != null)
319 {
320 registerDelayedStyleSetter(delayedSetter, nameReference);
321 }
322 }
323
324 @Override
325 public JRBaseStyle getStyle(JRStyle style)
326 {
327 JRBaseStyle fillStyle = null;
328
329 if (style != null)
330 {
331 fillStyle = (JRBaseStyle) get(style);
332 if (fillStyle == null)
333 {
334 fillStyle = new JRBaseStyle(style, this);
335
336
337 fillStyle = filler.fillContext.deduplicate(fillStyle);
338
339 put(style, fillStyle);
340
341 if (originalStyleList != null && originalStyleList.contains(style))
342 {
343 renameExistingStyle(style.getName());
344 stylesMap.addStyle(style);
345 }
346 }
347 }
348
349 return fillStyle;
350 }
351
352 protected void renameExistingStyle(String name)
353 {
354 JRStyle originalStyle = stylesMap.getStyle(name);
355 if (originalStyle != null)
356 {
357
358
359 JRBaseStyle style = (JRBaseStyle) get(originalStyle);
360
361 String newName;
362 int suf = 1;
363 do
364 {
365 newName = name + suf;
366 ++suf;
367 }
368 while(stylesMap.containsStyle(newName));
369
370 style.rename(newName);
371 stylesMap.renamed(name, newName);
372 }
373 }
374
375
376 @Override
377 public void setStyle(JRStyleSetter setter, JRStyleContainer styleContainer)
378 {
379 JRStyle style = styleContainer.getStyle();
380 String nameReference = styleContainer.getStyleNameReference();
381 if (style != null)
382 {
383 JRStyle newStyle = getStyle(style);
384 setter.setStyle(newStyle);
385 }
386 else if (nameReference != null)
387 {
388 JRStyle originalStyle = stylesMap.getStyle(nameReference);
389 if (originalStyle == null)
390 {
391 throw
392 new JRRuntimeException(
393 EXCEPTION_MESSAGE_KEY_UNRESOLVED_STYLE,
394 new Object[]{nameReference}
395 );
396 }
397
398 JRStyle externalStyle = (JRStyle) get(originalStyle);
399 setter.setStyle(externalStyle);
400 }
401 }
402
403
404
407 protected JRFillParameter getParameter(JRParameter parameter)
408 {
409 JRFillParameter fillParameter = null;
410
411 if (parameter != null)
412 {
413 fillParameter = (JRFillParameter)get(parameter);
414 if (fillParameter == null)
415 {
416 fillParameter = new JRFillParameter(parameter, this);
417 }
418 }
419
420 return fillParameter;
421 }
422
423
424
427 protected JRFillField getField(JRField field)
428 {
429 JRFillField fillField = null;
430
431 if (field != null)
432 {
433 fillField = (JRFillField)get(field);
434 if (fillField == null)
435 {
436 fillField = new JRFillField(field, this);
437 }
438 }
439
440 return fillField;
441 }
442
443
444
447 public JRFillVariable getVariable(JRVariable variable)
448 {
449 JRFillVariable fillVariable = null;
450
451 if (variable != null)
452 {
453 fillVariable = (JRFillVariable)get(variable);
454 if (fillVariable == null)
455 {
456 fillVariable = new JRFillVariable(variable, this);
457 }
458 }
459
460 return fillVariable;
461 }
462
463
464
467 public JRFillGroup getGroup(JRGroup group)
468 {
469 JRFillGroup fillGroup = null;
470
471 if (group != null)
472 {
473 fillGroup = (JRFillGroup)get(group);
474 if (fillGroup == null)
475 {
476 fillGroup = new JRFillGroup(group, this);
477 }
478 }
479
480 return fillGroup;
481 }
482
483
484
487 protected JRFillSection getSection(JRSection section)
488 {
489 JRFillSection fillSection = null;
490
491 if (section == null)
492 {
493 fillSection = filler.missingFillSection;
494 }
495 else
496 {
497 fillSection = (JRFillSection)get(section);
498 if (fillSection == null)
499 {
500 fillSection = new JRFillSection(filler, section, this);
501 }
502 }
503
504 return fillSection;
505 }
506
507
508
511 protected JRFillBand getBand(JRBand band)
512 {
513 JRFillBand fillBand = null;
514
515 if (band == null)
516 {
517 fillBand = filler.missingFillBand;
518 }
519 else
520 {
521 fillBand = (JRFillBand)get(band);
522 if (fillBand == null)
523 {
524 fillBand = new JRFillBand(filler, band, this);
525 }
526 }
527
528 return fillBand;
529 }
530
531
532 @Override
533 public void visitElementGroup(JRElementGroup elementGroup)
534 {
535 JRFillElementGroup fillElementGroup = null;
536
537 if (elementGroup != null)
538 {
539 fillElementGroup = (JRFillElementGroup)get(elementGroup);
540 if (fillElementGroup == null)
541 {
542 fillElementGroup = new JRFillElementGroup(elementGroup, this);
543 }
544 }
545
546 setVisitResult(fillElementGroup);
547 }
548
549
550 @Override
551 public void visitBreak(JRBreak breakElement)
552 {
553 JRFillBreak fillBreak = null;
554
555 if (breakElement != null)
556 {
557 fillBreak = (JRFillBreak)get(breakElement);
558 if (fillBreak == null)
559 {
560 fillBreak = new JRFillBreak(filler, breakElement, this);
561 }
562 }
563
564 setVisitResult(fillBreak);
565 }
566
567
568 @Override
569 public void visitLine(JRLine line)
570 {
571 JRFillLine fillLine = null;
572
573 if (line != null)
574 {
575 fillLine = (JRFillLine)get(line);
576 if (fillLine == null)
577 {
578 fillLine = new JRFillLine(filler, line, this);
579 }
580 }
581
582 setVisitResult(fillLine);
583 }
584
585
586 @Override
587 public void visitRectangle(JRRectangle rectangle)
588 {
589 JRFillRectangle fillRectangle = null;
590
591 if (rectangle != null)
592 {
593 fillRectangle = (JRFillRectangle)get(rectangle);
594 if (fillRectangle == null)
595 {
596 fillRectangle = new JRFillRectangle(filler, rectangle, this);
597 }
598 }
599
600 setVisitResult(fillRectangle);
601 }
602
603
604 @Override
605 public void visitEllipse(JREllipse ellipse)
606 {
607 JRFillEllipse fillEllipse = null;
608
609 if (ellipse != null)
610 {
611 fillEllipse = (JRFillEllipse)get(ellipse);
612 if (fillEllipse == null)
613 {
614 fillEllipse = new JRFillEllipse(filler, ellipse, this);
615 }
616 }
617
618 setVisitResult(fillEllipse);
619 }
620
621
622 @Override
623 public void visitImage(JRImage image)
624 {
625 JRFillImage fillImage = null;
626
627 if (image != null)
628 {
629 fillImage = (JRFillImage)get(image);
630 if (fillImage == null)
631 {
632 fillImage = new JRFillImage(filler, image, this);
633 }
634 }
635
636 setVisitResult(fillImage);
637 }
638
639
640 @Override
641 public void visitStaticText(JRStaticText staticText)
642 {
643 JRFillStaticText fillStaticText = null;
644
645 if (staticText != null)
646 {
647 fillStaticText = (JRFillStaticText)get(staticText);
648 if (fillStaticText == null)
649 {
650 fillStaticText = new JRFillStaticText(filler, staticText, this);
651 }
652 }
653
654 setVisitResult(fillStaticText);
655 }
656
657
658 @Override
659 public void visitTextField(JRTextField textField)
660 {
661 JRFillTextField fillTextField = null;
662
663 if (textField != null)
664 {
665 fillTextField = (JRFillTextField)get(textField);
666 if (fillTextField == null)
667 {
668 fillTextField = new JRFillTextField(filler, textField, this);
669 }
670 }
671
672 setVisitResult(fillTextField);
673 }
674
675
676 @Override
677 public void visitSubreport(JRSubreport subreport)
678 {
679 JRFillSubreport fillSubreport = null;
680
681 if (subreport != null)
682 {
683 fillSubreport = (JRFillSubreport)get(subreport);
684 if (fillSubreport == null)
685 {
686 fillSubreport = new JRFillSubreport(filler, subreport, this);
687 }
688 }
689
690 setVisitResult(fillSubreport);
691 }
692
693
694 @Override
695 public void visitChart(JRChart chart)
696 {
697 JRFillChart fillChart = null;
698
699 if (chart != null)
700 {
701 fillChart = (JRFillChart)get(chart);
702 if (fillChart == null)
703 {
704 fillChart = new JRFillChart(filler, chart, this);
705 }
706 }
707
708 setVisitResult(fillChart);
709 }
710
711
712 @Override
713 public JRPieDataset getPieDataset(JRPieDataset pieDataset)
714 {
715 JRFillPieDataset fillPieDataset = null;
716
717 if (pieDataset != null)
718 {
719 fillPieDataset = (JRFillPieDataset)get(pieDataset);
720 if (fillPieDataset == null)
721 {
722 fillPieDataset = new JRFillPieDataset(pieDataset, this);
723 registerElementDataset(fillPieDataset);
724 }
725 }
726
727 return fillPieDataset;
728 }
729
730
731 @Override
732 public JRPiePlot getPiePlot(JRPiePlot piePlot)
733 {
734 JRFillPiePlot fillPiePlot = null;
735
736 if (piePlot != null)
737 {
738 fillPiePlot = (JRFillPiePlot)get(piePlot);
739 if (fillPiePlot == null)
740 {
741 fillPiePlot = new JRFillPiePlot(piePlot, this);
742 }
743 }
744
745 return fillPiePlot;
746 }
747
748
749 @Override
750 public JRPie3DPlot getPie3DPlot(JRPie3DPlot pie3DPlot)
751 {
752 JRFillPie3DPlot fillPie3DPlot = null;
753
754 if (pie3DPlot != null)
755 {
756 fillPie3DPlot = (JRFillPie3DPlot)get(pie3DPlot);
757 if (fillPie3DPlot == null)
758 {
759 fillPie3DPlot = new JRFillPie3DPlot(pie3DPlot, this);
760 }
761 }
762
763 return fillPie3DPlot;
764 }
765
766
767 @Override
768 public JRCategoryDataset getCategoryDataset(JRCategoryDataset categoryDataset)
769 {
770 JRFillCategoryDataset fillCategoryDataset = null;
771
772 if (categoryDataset != null)
773 {
774 fillCategoryDataset = (JRFillCategoryDataset)get(categoryDataset);
775 if (fillCategoryDataset == null)
776 {
777 fillCategoryDataset = new JRFillCategoryDataset(categoryDataset, this);
778 registerElementDataset(fillCategoryDataset);
779 }
780 }
781
782 return fillCategoryDataset;
783 }
784
785 @Override
786 public JRXyzDataset getXyzDataset( JRXyzDataset xyzDataset ){
787 JRFillXyzDataset fillXyzDataset = null;
788 if( xyzDataset != null ){
789 fillXyzDataset = (JRFillXyzDataset)get( xyzDataset );
790 if( fillXyzDataset == null ){
791 fillXyzDataset = new JRFillXyzDataset( xyzDataset, this );
792 registerElementDataset(fillXyzDataset);
793 }
794 }
795
796 return fillXyzDataset;
797
798 }
799
800
801
804 public JRXyDataset getXyDataset(JRXyDataset xyDataset)
805 {
806 JRFillXyDataset fillXyDataset = null;
807
808 if (xyDataset != null)
809 {
810 fillXyDataset = (JRFillXyDataset)get(xyDataset);
811 if (fillXyDataset == null)
812 {
813 fillXyDataset = new JRFillXyDataset(xyDataset, this);
814 registerElementDataset(fillXyDataset);
815 }
816 }
817
818 return fillXyDataset;
819 }
820
821
822 @Override
823 public JRTimeSeriesDataset getTimeSeriesDataset( JRTimeSeriesDataset timeSeriesDataset ){
824 JRFillTimeSeriesDataset fillTimeSeriesDataset = null;
825
826 if( timeSeriesDataset != null ){
827
828 fillTimeSeriesDataset = (JRFillTimeSeriesDataset)get( timeSeriesDataset );
829
830 if( fillTimeSeriesDataset == null ){
831 fillTimeSeriesDataset = new JRFillTimeSeriesDataset( timeSeriesDataset, this );
832 registerElementDataset(fillTimeSeriesDataset);
833 }
834 }
835
836 return fillTimeSeriesDataset;
837 }
838
839 @Override
840 public JRTimePeriodDataset getTimePeriodDataset( JRTimePeriodDataset timePeriodDataset ){
841 JRFillTimePeriodDataset fillTimePeriodDataset = null;
842 if( timePeriodDataset != null ){
843 fillTimePeriodDataset = (JRFillTimePeriodDataset)get( timePeriodDataset );
844 if( fillTimePeriodDataset == null ){
845 fillTimePeriodDataset = new JRFillTimePeriodDataset( timePeriodDataset, this );
846 registerElementDataset(fillTimePeriodDataset);
847 }
848 }
849 return fillTimePeriodDataset;
850 }
851
852
855 public JRGanttDataset getGanttDataset(JRGanttDataset ganttDataset)
856 {
857 JRFillGanttDataset fillGanttDataset = null;
858
859 if (ganttDataset != null)
860 {
861 fillGanttDataset = (JRFillGanttDataset)get(ganttDataset);
862 if (fillGanttDataset == null)
863 {
864 fillGanttDataset = new JRFillGanttDataset(ganttDataset, this);
865 registerElementDataset(fillGanttDataset);
866 }
867 }
868
869 return fillGanttDataset;
870 }
871
872 @Override
873 public JRPieSeries getPieSeries(JRPieSeries pieSeries)
874 {
875 JRFillPieSeries fillPieSeries = null;
876
877 if (pieSeries != null)
878 {
879 fillPieSeries = (JRFillPieSeries)get(pieSeries);
880 if (fillPieSeries == null)
881 {
882 fillPieSeries = new JRFillPieSeries(pieSeries, this);
883 }
884 }
885
886 return fillPieSeries;
887 }
888
889
890 @Override
891 public JRCategorySeries getCategorySeries(JRCategorySeries categorySeries)
892 {
893 JRFillCategorySeries fillCategorySeries = null;
894
895 if (categorySeries != null)
896 {
897 fillCategorySeries = (JRFillCategorySeries)get(categorySeries);
898 if (fillCategorySeries == null)
899 {
900 fillCategorySeries = new JRFillCategorySeries(categorySeries, this);
901 }
902 }
903
904 return fillCategorySeries;
905 }
906
907
908 @Override
909 public JRXyzSeries getXyzSeries( JRXyzSeries xyzSeries ){
910 JRFillXyzSeries fillXyzSeries = null;
911
912 if( xyzSeries != null ){
913 fillXyzSeries = (JRFillXyzSeries)get( xyzSeries );
914
915 if( fillXyzSeries == null ){
916 fillXyzSeries = new JRFillXyzSeries( xyzSeries, this );
917 }
918 }
919
920 return fillXyzSeries;
921 }
922
923
924
927 public JRXySeries getXySeries(JRXySeries xySeries)
928 {
929 JRFillXySeries fillXySeries = null;
930
931 if (xySeries != null)
932 {
933 fillXySeries = (JRFillXySeries)get(xySeries);
934 if (fillXySeries == null)
935 {
936 fillXySeries = new JRFillXySeries(xySeries, this);
937 }
938 }
939
940 return fillXySeries;
941 }
942
943
944
947 public JRGanttSeries getGanttSeries(JRGanttSeries ganttSeries)
948 {
949 JRFillGanttSeries fillGanttSeries = null;
950
951 if (ganttSeries != null)
952 {
953 fillGanttSeries = (JRFillGanttSeries)get(ganttSeries);
954 if (fillGanttSeries == null)
955 {
956 fillGanttSeries = new JRFillGanttSeries(ganttSeries, this);
957 }
958 }
959
960 return fillGanttSeries;
961 }
962
963
964 @Override
965 public JRBarPlot getBarPlot(JRBarPlot barPlot)
966 {
967 JRFillBarPlot fillBarPlot = null;
968
969 if (barPlot != null)
970 {
971 fillBarPlot = (JRFillBarPlot)get(barPlot);
972 if (fillBarPlot == null)
973 {
974 fillBarPlot = new JRFillBarPlot(barPlot, this);
975 }
976 }
977
978 return fillBarPlot;
979 }
980
981
982 @Override
983 public JRTimeSeries getTimeSeries(JRTimeSeries timeSeries)
984 {
985 JRFillTimeSeries fillTimeSeries = null;
986
987 if (timeSeries != null)
988 {
989 fillTimeSeries = (JRFillTimeSeries)get(timeSeries);
990 if (fillTimeSeries == null)
991 {
992 fillTimeSeries = new JRFillTimeSeries(timeSeries, this);
993 }
994 }
995
996 return fillTimeSeries;
997 }
998
999 @Override
1000 public JRTimePeriodSeries getTimePeriodSeries( JRTimePeriodSeries timePeriodSeries ){
1001 JRFillTimePeriodSeries fillTimePeriodSeries = null;
1002 if( timePeriodSeries != null ){
1003 fillTimePeriodSeries = (JRFillTimePeriodSeries)get( timePeriodSeries );
1004 if( fillTimePeriodSeries == null ){
1005 fillTimePeriodSeries = new JRFillTimePeriodSeries( timePeriodSeries, this );
1006 }
1007 }
1008
1009 return fillTimePeriodSeries;
1010 }
1011
1012
1013 @Override
1014 public JRBar3DPlot getBar3DPlot(JRBar3DPlot barPlot) {
1015 JRFillBar3DPlot fillBarPlot = null;
1016
1017 if (barPlot != null){
1018 fillBarPlot = (JRFillBar3DPlot)get(barPlot);
1019 if (fillBarPlot == null){
1020 fillBarPlot = new JRFillBar3DPlot(barPlot, this);
1021 }
1022 }
1023
1024 return fillBarPlot;
1025 }
1026
1027
1028 @Override
1029 public JRLinePlot getLinePlot(JRLinePlot linePlot) {
1030 JRFillLinePlot fillLinePlot = null;
1031
1032 if (linePlot != null){
1033 fillLinePlot = (JRFillLinePlot)get(linePlot);
1034 if (fillLinePlot == null){
1035 fillLinePlot = new JRFillLinePlot(linePlot, this);
1036 }
1037 }
1038
1039 return fillLinePlot;
1040 }
1041
1042
1043
1046 public JRScatterPlot getScatterPlot(JRScatterPlot scatterPlot) {
1047 JRFillScatterPlot fillScatterPlot = null;
1048
1049 if (scatterPlot != null){
1050 fillScatterPlot = (JRFillScatterPlot)get(scatterPlot);
1051 if (fillScatterPlot == null){
1052 fillScatterPlot = new JRFillScatterPlot(scatterPlot, this);
1053 }
1054 }
1055
1056 return fillScatterPlot;
1057 }
1058
1059
1060 @Override
1061 public JRAreaPlot getAreaPlot(JRAreaPlot areaPlot) {
1062 JRFillAreaPlot fillAreaPlot = null;
1063
1064 if (areaPlot != null)
1065 {
1066 fillAreaPlot = (JRFillAreaPlot)get(areaPlot);
1067 if (fillAreaPlot == null)
1068 {
1069 fillAreaPlot = new JRFillAreaPlot(areaPlot, this);
1070 }
1071 }
1072
1073 return fillAreaPlot;
1074 }
1075
1076
1077
1080 @Override
1081 public JRBubblePlot getBubblePlot(JRBubblePlot bubblePlot) {
1082 JRFillBubblePlot fillBubblePlot = null;
1083
1084 if (bubblePlot != null)
1085 {
1086 fillBubblePlot = (JRFillBubblePlot)get(bubblePlot);
1087 if (fillBubblePlot == null)
1088 {
1089 fillBubblePlot = new JRFillBubblePlot(bubblePlot, this);
1090 }
1091 }
1092
1093 return fillBubblePlot;
1094 }
1095
1096
1097
1100 public JRHighLowDataset getHighLowDataset(JRHighLowDataset highLowDataset)
1101 {
1102 JRFillHighLowDataset fillHighLowDataset = null;
1103
1104 if (highLowDataset != null)
1105 {
1106 fillHighLowDataset = (JRFillHighLowDataset)get(highLowDataset);
1107 if (fillHighLowDataset == null)
1108 {
1109 fillHighLowDataset = new JRFillHighLowDataset(highLowDataset, this);
1110 registerElementDataset(fillHighLowDataset);
1111 }
1112 }
1113
1114 return fillHighLowDataset;
1115 }
1116
1117
1118
1121 public JRHighLowPlot getHighLowPlot(JRHighLowPlot highLowPlot) {
1122 JRFillHighLowPlot fillHighLowPlot = null;
1123
1124 if (highLowPlot != null){
1125 fillHighLowPlot = (JRFillHighLowPlot)get(highLowPlot);
1126 if (fillHighLowPlot == null){
1127 fillHighLowPlot = new JRFillHighLowPlot(highLowPlot, this);
1128 }
1129 }
1130
1131 return fillHighLowPlot;
1132 }
1133
1134
1135 @Override
1136 public JRCandlestickPlot getCandlestickPlot(JRCandlestickPlot candlestickPlot)
1137 {
1138 JRFillCandlestickPlot fillCandlestickPlot = null;
1139
1140 if (candlestickPlot != null){
1141 fillCandlestickPlot = (JRFillCandlestickPlot)get(candlestickPlot);
1142 if (fillCandlestickPlot == null){
1143 fillCandlestickPlot = new JRFillCandlestickPlot(candlestickPlot, this);
1144 }
1145 }
1146
1147 return fillCandlestickPlot;
1148 }
1149
1150
1151
1152 public JRTimeSeriesPlot getTimeSeriesPlot( JRTimeSeriesPlot plot ){
1153 JRFillTimeSeriesPlot fillPlot = null;
1154 if( plot != null ){
1155 fillPlot = (JRFillTimeSeriesPlot)get( plot );
1156 if( fillPlot == null ){
1157 fillPlot = new JRFillTimeSeriesPlot( plot, this );
1158 }
1159 }
1160
1161 return fillPlot;
1162
1163 }
1164
1165
1168 public JRValueDataset getValueDataset(JRValueDataset valueDataset)
1169 {
1170 JRFillValueDataset fillValueDataset = null;
1171
1172 if (valueDataset != null)
1173 {
1174 fillValueDataset = (JRFillValueDataset)get(valueDataset);
1175 if (fillValueDataset == null)
1176 {
1177 fillValueDataset = new JRFillValueDataset(valueDataset, this);
1178 registerElementDataset(fillValueDataset);
1179 }
1180 }
1181
1182 return fillValueDataset;
1183 }
1184
1185
1188 public JRMeterPlot getMeterPlot(JRMeterPlot meterPlot)
1189 {
1190 JRFillMeterPlot fillMeterPlot = null;
1191
1192 if (meterPlot != null)
1193 {
1194 fillMeterPlot = (JRFillMeterPlot)get(meterPlot);
1195 if (fillMeterPlot == null)
1196 {
1197 fillMeterPlot = new JRFillMeterPlot(meterPlot, this);
1198 }
1199 }
1200
1201 return fillMeterPlot;
1202 }
1203
1204
1207 public JRThermometerPlot getThermometerPlot(JRThermometerPlot thermometerPlot)
1208 {
1209 JRFillThermometerPlot fillThermometerPlot = null;
1210
1211 if (thermometerPlot != null)
1212 {
1213 fillThermometerPlot = (JRFillThermometerPlot)get(thermometerPlot);
1214 if (fillThermometerPlot == null)
1215 {
1216 fillThermometerPlot = new JRFillThermometerPlot(thermometerPlot, this);
1217 }
1218 }
1219
1220 return fillThermometerPlot;
1221 }
1222
1223
1224
1227 public JRMultiAxisPlot getMultiAxisPlot(JRMultiAxisPlot multiAxisPlot)
1228 {
1229 JRFillMultiAxisPlot fillMultiAxisPlot = null;
1230
1231 if (multiAxisPlot != null)
1232 {
1233 fillMultiAxisPlot = (JRFillMultiAxisPlot)get(multiAxisPlot);
1234 if (fillMultiAxisPlot == null)
1235 {
1236 fillMultiAxisPlot = new JRFillMultiAxisPlot(multiAxisPlot, this);
1237 }
1238 }
1239
1240 return fillMultiAxisPlot;
1241 }
1242
1243
1244 protected JRFillVariableReturnValue getSubreportReturnValue(JRSubreportReturnValue returnValue)
1245 {
1246 JRFillVariableReturnValue fillReturnValue = null;
1247
1248 if (returnValue != null)
1249 {
1250 fillReturnValue = (JRFillVariableReturnValue) get(returnValue);
1251 if (fillReturnValue == null)
1252 {
1253 fillReturnValue = new JRFillVariableReturnValue(returnValue, this, reportFiller);
1254 }
1255 }
1256
1257 return fillReturnValue;
1258 }
1259
1260
1261 protected JRFillVariableReturnValue getReturnValue(VariableReturnValue returnValue)
1262 {
1263 JRFillVariableReturnValue fillReturnValue = null;
1264
1265 if (returnValue != null)
1266 {
1267 fillReturnValue = (JRFillVariableReturnValue) get(returnValue);
1268 if (fillReturnValue == null)
1269 {
1270 fillReturnValue = new JRFillVariableReturnValue(returnValue, this, filler);
1271 }
1272 }
1273
1274 return fillReturnValue;
1275 }
1276
1277
1278 protected JRFillExpressionReturnValue getReturnValue(ExpressionReturnValue returnValue)
1279 {
1280 JRFillExpressionReturnValue fillReturnValue = null;
1281
1282 if (returnValue != null)
1283 {
1284 fillReturnValue = (JRFillExpressionReturnValue) get(returnValue);
1285 if (fillReturnValue == null)
1286 {
1287 fillReturnValue = new JRFillExpressionReturnValue(returnValue, this, filler);
1288
1289 }
1290 }
1291
1292 return fillReturnValue;
1293 }
1294
1295
1296 @Override
1297 public void visitCrosstab(JRCrosstab crosstabElement)
1298 {
1299 JRFillCrosstab fillCrosstab = null;
1300
1301 if (crosstabElement != null)
1302 {
1303 fillCrosstab = (JRFillCrosstab) get(crosstabElement);
1304 if (fillCrosstab == null)
1305 {
1306 fillCrosstab = new JRFillCrosstab(filler, crosstabElement, this);
1307 }
1308 }
1309
1310 setVisitResult(fillCrosstab);
1311 }
1312
1313
1314 public JRFillCrosstab.JRFillCrosstabDataset getCrosstabDataset(JRCrosstabDataset dataset, JRFillCrosstab fillCrosstab)
1315 {
1316 JRFillCrosstab.JRFillCrosstabDataset fillDataset = null;
1317
1318 if (dataset != null)
1319 {
1320 fillDataset = (JRFillCrosstab.JRFillCrosstabDataset)get(dataset);
1321 if (fillDataset == null)
1322 {
1323 fillDataset = fillCrosstab.new JRFillCrosstabDataset(dataset, this);
1324 registerElementDataset(fillDataset);
1325 }
1326 }
1327
1328 return fillDataset;
1329 }
1330
1331
1332 public JRFillDataset getDataset(JRDataset dataset)
1333 {
1334 JRFillDataset fillDataset = null;
1335
1336 if (dataset != null)
1337 {
1338 fillDataset = (JRFillDataset) get(dataset);
1339 if (fillDataset == null)
1340 {
1341 fillDataset = new JRFillDataset(reportFiller, dataset, this);
1342 }
1343 }
1344
1345 return fillDataset;
1346 }
1347
1348
1349
1358 public void registerElementDataset(JRFillElementDataset elementDataset)
1359 {
1360 List<JRFillElementDataset> elementDatasetsList;
1361 JRDatasetRun datasetRun = elementDataset.getDatasetRun();
1362 if (datasetRun == null)
1363 {
1364 elementDatasetsList = elementDatasets;
1365 }
1366 else
1367 {
1368 String datasetName = datasetRun.getDatasetName();
1369 elementDatasetsList = getElementDatasetsList(datasetName);
1370
1371 registerDatasetRun((JRFillDatasetRun) datasetRun);
1372 }
1373 elementDatasetsList.add(elementDataset);
1374 }
1375
1376 protected List<JRFillElementDataset> getElementDatasetsList(String datasetName)
1377 {
1378 if (parentFiller != null)
1379 {
1380 return parentFiller.getElementDatasetsList(datasetName);
1381 }
1382
1383 List<JRFillElementDataset> elementDatasetsList = elementDatasetMap.get(datasetName);
1384 if (elementDatasetsList == null)
1385 {
1386 elementDatasetsList = new ArrayList<JRFillElementDataset>();
1387 elementDatasetMap.put(datasetName, elementDatasetsList);
1388 }
1389 return elementDatasetsList;
1390 }
1391
1392 public void trackDatasetRuns()
1393 {
1394 if (log.isDebugEnabled())
1395 {
1396 log.debug("tracking dataset runs");
1397 }
1398
1399 ArrayList<JRFillDatasetRun> trackedDatasets = new ArrayList<JRFillDatasetRun>(2);
1400 trackedDatasetRunsStack.push(trackedDatasets);
1401 }
1402
1403 public void registerDatasetRun(JRFillDatasetRun datasetRun)
1404 {
1405 if (!trackedDatasetRunsStack.isEmpty())
1406 {
1407 if (log.isDebugEnabled())
1408 {
1409 log.debug("added tracked dataset run " + datasetRun);
1410 }
1411
1412 trackedDatasetRunsStack.getFirst().add(datasetRun);
1413 }
1414 }
1415
1416 public List<JRFillDatasetRun> getTrackedDatasetRuns()
1417 {
1418 if (log.isDebugEnabled())
1419 {
1420 log.debug("poping tracked dataset runs");
1421 }
1422
1423 return trackedDatasetRunsStack.pop();
1424 }
1425
1426 public JRFillDatasetRun getDatasetRun(JRDatasetRun datasetRun)
1427 {
1428 JRFillDatasetRun fillDatasetRun = null;
1429
1430 if (datasetRun != null)
1431 {
1432 fillDatasetRun = (JRFillDatasetRun) get(datasetRun);
1433 if (fillDatasetRun == null)
1434 {
1435 fillDatasetRun = new JRFillDatasetRun(datasetRun, this);
1436 }
1437 }
1438
1439 return fillDatasetRun;
1440 }
1441
1442
1443 public JRFillCrosstabParameter getCrosstabParameter(JRCrosstabParameter parameter)
1444 {
1445 JRFillCrosstabParameter fillParameter = null;
1446
1447 if (parameter != null)
1448 {
1449 fillParameter = (JRFillCrosstabParameter) get(parameter);
1450 if (fillParameter == null)
1451 {
1452 fillParameter = new JRFillCrosstabParameter(parameter, this);
1453 }
1454 }
1455
1456 return fillParameter;
1457 }
1458
1459
1460 @Override
1461 public void visitFrame(JRFrame frame)
1462 {
1463 Object fillFrame = null;
1464
1465
1466
1467
1468
1469 if (frame != null)
1470 {
1471 fillFrame = get(frame);
1472
1473 if (fillFrame == null)
1474 {
1475 fillFrame = new JRFillFrame(filler, frame, this);
1476 }
1477 }
1478
1479 setVisitResult(fillFrame);
1480 }
1481
1482 public BaseReportFiller getReportFiller()
1483 {
1484 return reportFiller;
1485 }
1486
1487
1492 public JRBaseFiller getFiller()
1493 {
1494 return filler;
1495 }
1496
1497
1498 @Override
1499 public JRConditionalStyle getConditionalStyle(JRConditionalStyle conditionalStyle, JRStyle style)
1500 {
1501 JRBaseConditionalStyle baseConditionalStyle = null;
1502 if (conditionalStyle != null)
1503 {
1504 baseConditionalStyle = (JRBaseConditionalStyle) get(conditionalStyle);
1505 if (baseConditionalStyle == null) {
1506 baseConditionalStyle = new JRBaseConditionalStyle(conditionalStyle, style, this);
1507 put(conditionalStyle, baseConditionalStyle);
1508 }
1509 }
1510 return baseConditionalStyle;
1511 }
1512
1513
1514 @Override
1515 public JRExpression getExpression(JRExpression expression, boolean assignNotUsedId)
1516 {
1517 return expression;
1518 }
1519
1520
1521 public JRChartAxis getChartAxis(JRChartAxis axis)
1522 {
1523 JRFillChartAxis fillAxis = null;
1524 if (axis != null)
1525 {
1526 fillAxis = (JRFillChartAxis) get(axis);
1527 if (fillAxis == null)
1528 {
1529 fillAxis = new JRFillChartAxis(axis, this);
1530 }
1531 }
1532 return fillAxis;
1533 }
1534
1535
1536 public JRFillReportTemplate getReportTemplate(JRReportTemplate template)
1537 {
1538 JRFillReportTemplate fillTemplate = null;
1539 if (template != null)
1540 {
1541 fillTemplate = (JRFillReportTemplate) get(template);
1542 if (fillTemplate == null)
1543 {
1544 fillTemplate = new JRFillReportTemplate(template, filler, this);
1545 }
1546 }
1547 return fillTemplate;
1548 }
1549
1550 public List<JRStyle> setStyles(List<JRStyle> styles)
1551 {
1552 originalStyleList = new HashSet<JRStyle>(styles);
1553
1554
1555 Set<JRStyle> requestedStyles = collectRequestedStyles(styles);
1556
1557
1558 Map<JRStyle,Object> usedStylesMap = new LinkedMap<JRStyle,Object>();
1559 Map<String,JRStyle> allStylesMap = new HashMap<String,JRStyle>();
1560 for (Iterator<JRStyle> it = styles.iterator(); it.hasNext();)
1561 {
1562 JRStyle style = it.next();
1563 if (requestedStyles.contains(style))
1564 {
1565 collectUsedStyles(style, usedStylesMap, allStylesMap);
1566 }
1567 allStylesMap.put(style.getName(), style);
1568 }
1569
1570 List<JRStyle> includedStyles = new ArrayList<JRStyle>();
1571 for (Iterator<JRStyle> it = usedStylesMap.keySet().iterator(); it.hasNext();)
1572 {
1573 JRStyle style = it.next();
1574 JRStyle newStyle = getStyle(style);
1575
1576 includedStyles.add(newStyle);
1577 if (requestedStyles.contains(style))
1578 {
1579 useDelayedStyle(newStyle);
1580 }
1581 }
1582
1583 checkUnresolvedReferences();
1584
1585 return includedStyles;
1586 }
1587
1588 protected Set<JRStyle> collectRequestedStyles(List<JRStyle> externalStyles)
1589 {
1590 Map<String,JRStyle> requestedStylesMap = new HashMap<String,JRStyle>();
1591 for (Iterator<JRStyle> it = externalStyles.iterator(); it.hasNext();)
1592 {
1593 JRStyle style = it.next();
1594 String name = style.getName();
1595 if (delayedStyleSettersByName.containsKey(name))
1596 {
1597 requestedStylesMap.put(name, style);
1598 }
1599 }
1600
1601 return new HashSet<JRStyle>(requestedStylesMap.values());
1602 }
1603
1604 protected void collectUsedStyles(JRStyle style, Map<JRStyle,Object> usedStylesMap, Map<String,JRStyle> allStylesMap)
1605 {
1606 if (!usedStylesMap.containsKey(style) && originalStyleList.contains(style))
1607 {
1608 JRStyle parent = style.getStyle();
1609 if (parent == null)
1610 {
1611 String parentName = style.getStyleNameReference();
1612 if (parentName != null)
1613 {
1614 parent = allStylesMap.get(parentName);
1615 if (parent == null)
1616 {
1617 throw
1618 new JRRuntimeException(
1619 EXCEPTION_MESSAGE_KEY_STYLE_NOT_FOUND,
1620 new Object[]{parentName}
1621 );
1622 }
1623 }
1624 }
1625
1626 if (parent != null)
1627 {
1628 collectUsedStyles(parent, usedStylesMap, allStylesMap);
1629 }
1630
1631 usedStylesMap.put(style, null);
1632 }
1633 }
1634
1635 protected void useDelayedStyle(JRStyle style)
1636 {
1637 List<JRStyleSetter> delayedSetters = delayedStyleSettersByName.remove(style.getName());
1638 if (delayedSetters != null)
1639 {
1640 for (Iterator<JRStyleSetter> it = delayedSetters.iterator(); it.hasNext();)
1641 {
1642 JRStyleSetter setter = it.next();
1643 setter.setStyle(style);
1644 }
1645 }
1646 }
1647
1648 protected void checkUnresolvedReferences()
1649 {
1650 if (!delayedStyleSettersByName.isEmpty())
1651 {
1652 StringBuilder errorMsg = new StringBuilder();
1653 for (Iterator<String> it = delayedStyleSettersByName.keySet().iterator(); it.hasNext();)
1654 {
1655 String name = it.next();
1656 errorMsg.append(name);
1657 errorMsg.append(", ");
1658 }
1659
1660 throw
1661 new JRRuntimeException(
1662 EXCEPTION_MESSAGE_KEY_UNRESOLVED_STYLE,
1663 new Object[]{errorMsg.substring(0, errorMsg.length() - 2)}
1664 );
1665 }
1666 }
1667
1668 @Override
1669 public JRDefaultStyleProvider getDefaultStyleProvider()
1670 {
1671 return filler.getJasperPrint().getDefaultStyleProvider();
1672 }
1673
1674
1675 @Override
1676 public void visitComponentElement(JRComponentElement componentElement)
1677 {
1678 JRFillComponentElement fill = null;
1679
1680 if (componentElement != null)
1681 {
1682 fill = (JRFillComponentElement) get(componentElement);
1683 if (fill == null)
1684 {
1685 fill = new JRFillComponentElement(filler, componentElement, this);
1686 }
1687 }
1688
1689 setVisitResult(fill);
1690 }
1691
1692
1693 @Override
1694 public void visitGenericElement(JRGenericElement element)
1695 {
1696 JRFillGenericElement fill = null;
1697 if (element != null)
1698 {
1699 fill = (JRFillGenericElement) get(element);
1700 if (fill == null)
1701 {
1702 fill = new JRFillGenericElement(filler, element, this);
1703 }
1704 }
1705 setVisitResult(fill);
1706 }
1707
1708 public FillMultiAxisData getBidimensionalData(MultiAxisData data)
1709 {
1710 FillMultiAxisData fillData = null;
1711 if (data != null)
1712 {
1713 fillData = (FillMultiAxisData) get(data);
1714 if (fillData == null)
1715 {
1716 fillData = new FillMultiAxisData(data, this);
1717 }
1718 }
1719 return fillData;
1720 }
1721
1722 }
1723