1
24 package net.sf.jasperreports.parts.subreport;
25
26 import net.sf.jasperreports.engine.JRExpressionCollector;
27 import net.sf.jasperreports.engine.JRSubreportParameter;
28 import net.sf.jasperreports.engine.JRSubreportReturnValue;
29 import net.sf.jasperreports.engine.base.JRBaseObjectFactory;
30 import net.sf.jasperreports.engine.design.JRVerifier;
31 import net.sf.jasperreports.engine.part.PartComponent;
32 import net.sf.jasperreports.engine.part.PartComponentCompiler;
33
34
39 public class SubreportPartComponentCompiler implements PartComponentCompiler
40 {
41
42 @Override
43 public void collectExpressions(PartComponent component, JRExpressionCollector collector)
44 {
45 SubreportPartComponent subreport = (SubreportPartComponent) component;
46
47 collector.addExpression(subreport.getParametersMapExpression());
48
49 JRSubreportParameter[] parameters = subreport.getParameters();
50 if (parameters != null && parameters.length > 0)
51 {
52 for(int j = 0; j < parameters.length; j++)
53 {
54 collector.addExpression(parameters[j].getExpression());
55 }
56 }
57
58 collector.addExpression(subreport.getExpression());
59 }
60
61 @Override
62 public PartComponent toCompiledComponent(PartComponent component,
63 JRBaseObjectFactory baseFactory)
64 {
65 SubreportPartComponent subreportComponent = (SubreportPartComponent) component;
66 StandardSubreportPartComponent compiledComponent = new StandardSubreportPartComponent(
67 subreportComponent, baseFactory);
68 return compiledComponent;
69 }
70
71 @Override
72 public void verify(PartComponent component, JRVerifier verifier)
73 {
74
75 SubreportPartComponent subreportComponent = (SubreportPartComponent) component;
76 JRSubreportParameter[] parameters = subreportComponent.getParameters();
77 if (parameters != null && parameters.length > 0)
78 {
79 for(int index = 0; index < parameters.length; index++)
80 {
81 JRSubreportParameter parameter = parameters[index];
82
83 if (parameter.getName() == null || parameter.getName().trim().length() == 0)
84 {
85 verifier.addBrokenRule("Subreport part parameter name missing.", parameter);
86 }
87 }
88 }
89
90 JRSubreportReturnValue[] returnValues = subreportComponent.getReturnValues();
91 if (returnValues != null && returnValues.length > 0)
92 {
93 for (int i = 0; i < returnValues.length; i++)
94 {
95 JRSubreportReturnValue returnValue = returnValues[i];
96
97 if (returnValue.getFromVariable() == null || returnValue.getFromVariable().trim().length() == 0)
98 {
99 verifier.addBrokenRule("Subreport part return value variable name missing.", returnValue);
100 }
101
102 if (returnValue.getToVariable() == null || returnValue.getToVariable().trim().length() == 0)
103 {
104 verifier.addBrokenRule("Subreport part return value to variable name missing.", returnValue);
105 }
106
107 if (!verifier.getReportDesign().getVariablesMap().containsKey(returnValue.getToVariable()))
108 {
109 verifier.addBrokenRule("Subreport part return value to variable not found.", returnValue);
110 }
111 }
112 }
113 }
114
115 }
116