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 static java.lang.Integer.parseInt;
23 import static org.apache.commons.beanutils.ConvertUtils.convert;
24
25 import org.apache.commons.digester3.binder.LinkedRuleBuilder;
26 import org.apache.commons.digester3.binder.ObjectParamBuilder;
27 import org.apache.commons.digester3.binder.RulesBinder;
28 import org.xml.sax.Attributes;
29
30
31
32
33 final class ObjectParamRule
34 extends AbstractXmlRule
35 {
36
37
38
39
40
41 public ObjectParamRule( RulesBinder targetRulesBinder, PatternStack patternStack )
42 {
43 super( targetRulesBinder, patternStack );
44 }
45
46
47
48
49 @Override
50 protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
51 throws Exception
52 {
53
54 String paramNumber = attributes.getValue( "paramnumber" );
55 String attributeName = attributes.getValue( "attrname" );
56 String type = attributes.getValue( "type" );
57 String value = attributes.getValue( "value" );
58
59 int paramIndex = parseInt( paramNumber );
60
61
62 Class<?> clazz = getDigester().getClassLoader().loadClass( type );
63 Object param;
64 if ( value != null )
65 {
66 param = convert( value, clazz );
67 }
68 else
69 {
70 param = clazz.newInstance();
71 }
72
73 ObjectParamBuilder<?> builder = linkedRuleBuilder.objectParam( param ).ofIndex( paramIndex );
74
75 if ( attributeName != null )
76 {
77 builder.matchingAttribute( attributeName );
78 }
79 }
80
81 }