1
24 package net.sf.jasperreports.parts;
25
26 import net.sf.jasperreports.engine.JRExpression;
27 import net.sf.jasperreports.engine.JRSubreportParameter;
28 import net.sf.jasperreports.engine.JRSubreportReturnValue;
29 import net.sf.jasperreports.engine.component.XmlDigesterConfigurer;
30 import net.sf.jasperreports.engine.xml.JRExpressionFactory;
31 import net.sf.jasperreports.engine.xml.JRSubreportParameterFactory;
32 import net.sf.jasperreports.engine.xml.JRSubreportReturnValueFactory;
33 import net.sf.jasperreports.engine.xml.JRXmlConstants;
34 import net.sf.jasperreports.parts.subreport.StandardSubreportPartComponent;
35
36 import org.apache.commons.digester.Digester;
37
38
44 public class PartComponentsXmlDigesterConfigurer implements XmlDigesterConfigurer
45 {
46 @Override
47 public void configureDigester(Digester digester)
48 {
49 addSubreportRules(digester);
50 }
51
52 protected void addSubreportRules(Digester digester)
53 {
54 String subreportPattern = "*/part/subreportPart";
55 digester.addObjectCreate(subreportPattern, StandardSubreportPartComponent.class);
56 digester.addSetProperties(subreportPattern);
57
58 String partNamespace = digester.getRuleNamespaceURI();
59 String jrNamespace = JRXmlConstants.JASPERREPORTS_NAMESPACE;
60
61 digester.setRuleNamespaceURI(jrNamespace);
62
63 String paramMapExpressionPattern = subreportPattern + "/parametersMapExpression";
64 digester.addFactoryCreate(paramMapExpressionPattern,
65 JRExpressionFactory.class.getName());
66 digester.addCallMethod(paramMapExpressionPattern, "setText", 0);
67 digester.addSetNext(paramMapExpressionPattern, "setParametersMapExpression",
68 JRExpression.class.getName());
69
70
71 digester.addFactoryCreate("*/subreportPart/subreportParameter", JRSubreportParameterFactory.class.getName());
72 digester.addSetNext("*/subreportPart/subreportParameter", "addParameter", JRSubreportParameter.class.getName());
73
74
75 digester.addFactoryCreate("*/subreportPart/subreportParameter/subreportParameterExpression", JRExpressionFactory.class.getName());
76 digester.addSetNext("*/subreportPart/subreportParameter/subreportParameterExpression", "setExpression", JRExpression.class.getName());
77 digester.addCallMethod("*/subreportPart/subreportParameter/subreportParameterExpression", "setText", 0);
78
79
80 digester.addFactoryCreate("*/subreportPart/returnValue", JRSubreportReturnValueFactory.class.getName());
81 digester.addSetNext("*/subreportPart/returnValue", "addReturnValue", JRSubreportReturnValue.class.getName());
82
83 String subreportExpressionPattern = subreportPattern + "/subreportExpression";
84 digester.addFactoryCreate(subreportExpressionPattern,
85 JRExpressionFactory.class.getName());
86 digester.addCallMethod(subreportExpressionPattern, "setText", 0);
87 digester.addSetNext(subreportExpressionPattern, "setExpression",
88 JRExpression.class.getName());
89
90 digester.setRuleNamespaceURI(partNamespace);
91 }
92 }
93