1 /*
2  * JasperReports - Free Java Reporting Library.
3  * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
4  * http://www.jaspersoft.com
5  *
6  * Unless you have purchased a commercial license agreement from Jaspersoft,
7  * the following license terms apply:
8  *
9  * This program is part of JasperReports.
10  *
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.
15  *
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.
20  *
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/>.
23  */

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 /**
39  * XML digester for built-in part component implementations.
40  * 
41  * @author Lucian Chirita (lucianc@users.sourceforge.net)
42  * @see PartComponentsExtensionsRegistryFactory
43  */

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