1 package org.apache.commons.digester3.binder;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.commons.digester3.Rule;
23
24
25
26
27
28
29 public final class LinkedRuleBuilder
30 {
31
32 private final RulesBinder mainBinder;
33
34 private final FromBinderRuleSet fromBinderRuleSet;
35
36 private final ClassLoader classLoader;
37
38 private final String keyPattern;
39
40 private String namespaceURI;
41
42 LinkedRuleBuilder( final RulesBinder mainBinder, final FromBinderRuleSet fromBinderRuleSet,
43 final ClassLoader classLoader, final String keyPattern )
44 {
45 this.mainBinder = mainBinder;
46 this.fromBinderRuleSet = fromBinderRuleSet;
47 this.classLoader = classLoader;
48 this.keyPattern = keyPattern;
49 }
50
51
52
53
54
55
56
57 public BeanPropertySetterBuilder setBeanProperty()
58 {
59 return addProvider( new BeanPropertySetterBuilder( keyPattern, namespaceURI, mainBinder, this ) );
60 }
61
62
63
64
65
66
67
68
69 public CallMethodBuilder callMethod( String methodName )
70 {
71 if ( methodName == null || methodName.length() == 0 )
72 {
73 mainBinder.addError( "{ forPattern( \"%s\" ).callMethod( String ) } empty 'methodName' not allowed",
74 keyPattern );
75 }
76
77 return this.addProvider( new CallMethodBuilder( keyPattern, namespaceURI, mainBinder, this, methodName,
78 classLoader ) );
79 }
80
81
82
83
84
85
86 public CallParamBuilder callParam()
87 {
88 return this.addProvider( new CallParamBuilder( keyPattern, namespaceURI, mainBinder, this ) );
89 }
90
91
92
93
94
95
96 public PathCallParamBuilder callParamPath()
97 {
98 return addProvider( new PathCallParamBuilder( keyPattern, namespaceURI, mainBinder, this ) );
99 }
100
101
102
103
104
105
106
107
108
109 public FactoryCreateBuilder factoryCreate()
110 {
111 return addProvider( new FactoryCreateBuilder( keyPattern, namespaceURI, mainBinder, this, classLoader ) );
112 }
113
114
115
116
117
118
119 public ObjectCreateBuilder createObject()
120 {
121 return addProvider( new ObjectCreateBuilder( keyPattern, namespaceURI, mainBinder, this, classLoader ) );
122 }
123
124
125
126
127
128
129
130
131 public <T> ObjectParamBuilder<T> objectParam(
132 {
133 return addProvider( new ObjectParamBuilder<T>( keyPattern, namespaceURI, mainBinder, this, paramObj ) );
134 }
135
136
137
138
139
140
141
142 public NestedPropertiesBuilder setNestedProperties()
143 {
144
145 NestedPropertiesBuilder nestedPropertiesBuilder =
146 fromBinderRuleSet.getProvider( keyPattern, namespaceURI, NestedPropertiesBuilder.class );
147 if ( nestedPropertiesBuilder != null )
148 {
149 return nestedPropertiesBuilder;
150 }
151
152 return addProvider( new NestedPropertiesBuilder( keyPattern, namespaceURI, mainBinder, this ) );
153 }
154
155
156
157
158
159
160
161
162 public SetNextBuilder setNext( String methodName )
163 {
164 if ( methodName == null || methodName.length() == 0 )
165 {
166 mainBinder.addError( "{ forPattern( \"%s\" ).setNext( String ) } empty 'methodName' not allowed",
167 keyPattern );
168 }
169 return this.addProvider( new SetNextBuilder( keyPattern, namespaceURI, mainBinder, this, methodName,
170 classLoader ) );
171 }
172
173
174
175
176
177
178 public SetPropertiesBuilder setProperties()
179 {
180
181 SetPropertiesBuilder setPropertiesBuilder =
182 fromBinderRuleSet.getProvider( keyPattern, namespaceURI, SetPropertiesBuilder.class );
183 if ( setPropertiesBuilder != null )
184 {
185 return setPropertiesBuilder;
186 }
187
188 return addProvider( new SetPropertiesBuilder( keyPattern, namespaceURI, mainBinder, this ) );
189 }
190
191
192
193
194
195
196
197 public SetPropertyBuilder setProperty( String attributePropertyName )
198 {
199 if ( attributePropertyName == null || attributePropertyName.length() == 0 )
200 {
201 mainBinder
202 .addError( "{ forPattern( \"%s\" ).setProperty( String ) } empty 'attributePropertyName' not allowed",
203 keyPattern );
204 }
205
206 return addProvider( new SetPropertyBuilder( keyPattern,
207 namespaceURI,
208 mainBinder,
209 this,
210 attributePropertyName ) );
211 }
212
213
214
215
216
217
218
219 public SetRootBuilder setRoot( String methodName )
220 {
221 if ( methodName == null || methodName.length() == 0 )
222 {
223 mainBinder.addError( "{ forPattern( \"%s\" ).setRoot( String ) } empty 'methodName' not allowed",
224 keyPattern );
225 }
226
227 return addProvider( new SetRootBuilder( keyPattern, namespaceURI, mainBinder, this, methodName, classLoader ) );
228 }
229
230
231
232
233
234
235
236 public SetTopBuilder setTop( String methodName )
237 {
238 if ( methodName == null || methodName.length() == 0 )
239 {
240 mainBinder.addError( "{ forPattern( \"%s\" ).setTop( String ) } empty 'methodName' not allowed",
241 keyPattern );
242 }
243
244 return addProvider( new SetTopBuilder( keyPattern, namespaceURI, mainBinder, this, methodName, classLoader ) );
245 }
246
247
248
249
250
251
252
253
254
255
256 public PluginDeclarationRuleBuilder declarePlugin()
257 {
258 return addProvider( new PluginDeclarationRuleBuilder( keyPattern, namespaceURI, mainBinder, this ) );
259 }
260
261
262
263
264
265
266
267
268
269 public PluginCreateRuleBuilder createPlugin()
270 {
271 return addProvider( new PluginCreateRuleBuilder( keyPattern, namespaceURI, mainBinder, this ) );
272 }
273
274
275
276
277
278
279 public NodeCreateRuleProvider createNode()
280 {
281 return addProvider( new NodeCreateRuleProvider( keyPattern, namespaceURI, mainBinder, this ) );
282 }
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297 public <R extends Rule> ByRuleBuilder<R> addRule( R rule )
298 {
299 if ( rule == null )
300 {
301 mainBinder.addError( "{ forPattern( \"%s\" ).addRule( R ) } NULL rule not valid", keyPattern );
302 }
303
304 return this.addProvider( new ByRuleBuilder<R>( keyPattern, namespaceURI, mainBinder, this, rule ) );
305 }
306
307
308
309
310
311
312
313
314 public <R extends Rule> ByRuleProviderBuilder<R> addRuleCreatedBy( RuleProvider<R> provider )
315 {
316 if ( provider == null )
317 {
318 mainBinder.addError( "{ forPattern( \"%s\" ).addRuleCreatedBy() } null rule provider not valid",
319 keyPattern );
320 }
321
322 return addProvider( new ByRuleProviderBuilder<R>( keyPattern, namespaceURI, mainBinder, this, provider ) );
323 }
324
325
326
327
328
329
330
331 public LinkedRuleBuilder withNamespaceURI(
332 {
333 if ( namespaceURI == null || namespaceURI.length() > 0 )
334 {
335 this.namespaceURI = namespaceURI;
336 }
337 else
338 {
339
340 this.namespaceURI = null;
341 }
342
343 return this;
344 }
345
346
347
348
349
350
351
352
353 private <R extends Rule, RB extends AbstractBackToLinkedRuleBuilder<R>> RB addProvider( RB provider )
354 {
355 fromBinderRuleSet.registerProvider( provider );
356 return provider;
357 }
358
359 }