1 package org.apache.commons.digester3.xmlrules;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Set;
23
24 import org.apache.commons.digester3.binder.LinkedRuleBuilder;
25 import org.apache.commons.digester3.binder.RulesBinder;
26 import org.apache.commons.digester3.binder.RulesModule;
27
28
29
30
31 final class XmlRulesModule
32 implements RulesModule
33 {
34
35 private final NameSpaceURIRulesBinder targetRulesBinder;
36
37 private final Set<String> rootSystemIds;
38
39 private final String rootPath;
40
41 private WithMemoryRulesBinder memoryRulesBinder;
42
43 public XmlRulesModule( final NameSpaceURIRulesBinder targetRulesBinder, Set<String> rootSystemIds,
44
45 {
46 this.targetRulesBinder = targetRulesBinder;
47 this.rootSystemIds = rootSystemIds;
48 this.rootPath = rootPath;
49 }
50
51
52
53
54 public void configure( RulesBinder rulesBinder )
55 {
56 if ( rulesBinder instanceof WithMemoryRulesBinder )
57 {
58 memoryRulesBinder = (WithMemoryRulesBinder) rulesBinder;
59 }
60 else
61 {
62 memoryRulesBinder = new WithMemoryRulesBinder( rulesBinder );
63 if ( !rootSystemIds.isEmpty() )
64 {
65 memoryRulesBinder.getIncludedFiles().addAll( rootSystemIds );
66 }
67 }
68
69 PatternStack patternStack = memoryRulesBinder.getPatternStack();
70
71 if ( rootPath != null )
72 {
73 patternStack.push( rootPath );
74 }
75
76 try
77 {
78 forPattern( "digester-rules" ).addRule( new SetNamespaceURIRule( targetRulesBinder ) );
79
80 forPattern( "*/pattern" ).addRule( new PatternRule( patternStack ) );
81 forPattern( "*/include" ).addRule( new IncludeRule( memoryRulesBinder, targetRulesBinder ) );
82
83 forPattern( "*/bean-property-setter-rule" ).addRule( new BeanPropertySetterRule( targetRulesBinder,
84 patternStack ) );
85
86 forPattern( "*/call-method-rule" ).addRule( new CallMethodRule( targetRulesBinder, patternStack ) );
87 forPattern( "*/call-param-rule" ).addRule( new CallParamRule( targetRulesBinder, patternStack ) );
88
89 forPattern( "*/factory-create-rule" ).addRule( new FactoryCreateRule( targetRulesBinder, patternStack ) );
90 forPattern( "*/node-create-rule" ).addRule( new NodeCreateRule( targetRulesBinder, patternStack ) );
91 forPattern( "*/object-create-rule" ).addRule( new ObjectCreateRule( targetRulesBinder, patternStack ) );
92 forPattern( "*/object-param-rule" ).addRule( new ObjectParamRule( targetRulesBinder, patternStack ) );
93
94 forPattern( "*/set-properties-rule" ).addRule( new SetPropertiesRule( targetRulesBinder, patternStack ) );
95 forPattern( "*/set-properties-rule/alias" )
96 .addRule( new SetPropertiesAliasRule() );
97 forPattern( "*/set-properties-rule/ignore" )
98 .addRule( new SetPropertiesIgnoreRule() );
99
100 forPattern( "*/set-property-rule" ).addRule( new SetPropertyRule( targetRulesBinder, patternStack ) );
101
102 forPattern( "*/set-nested-properties-rule" )
103 .addRule( new SetNestedPropertiesRule( targetRulesBinder, patternStack ) );
104 forPattern( "*/set-nested-properties-rule/alias" )
105 .addRule( new SetNestedPropertiesAliasRule() );
106 forPattern( "*/set-nested-properties-rule/ignore" )
107 .addRule( new SetNestedPropertiesIgnoreRule() );
108
109 forPattern( "*/set-top-rule" ).addRule( new SetTopRule( targetRulesBinder, patternStack ) );
110 forPattern( "*/set-next-rule" ).addRule( new SetNextRule( targetRulesBinder, patternStack ) );
111 forPattern( "*/set-root-rule" ).addRule( new SetRootRule( targetRulesBinder, patternStack ) );
112 }
113 finally
114 {
115 memoryRulesBinder = null;
116 }
117 }
118
119
120
121
122
123 protected LinkedRuleBuilder forPattern( String pattern )
124 {
125 return memoryRulesBinder.forPattern( pattern );
126 }
127
128 }