View Javadoc

1   package org.apache.commons.digester3.xmlrules;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * @since 3.2
32   */
33  final class ObjectParamRule
34      extends AbstractXmlRule
35  {
36  
37      /**
38       * @param targetRulesBinder
39       * @param patternStack
40       */
41      public ObjectParamRule( RulesBinder targetRulesBinder, PatternStack patternStack )
42      {
43          super( targetRulesBinder, patternStack );
44      }
45  
46      /**
47       * {@inheritDoc}
48       */
49      @Override
50      protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
51          throws Exception
52      {
53          // create callparamrule
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          // create object instance
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  }