skitching    2005/01/12 02:47:04

  Modified:    digester/src/java/org/apache/commons/digester/xmlrules
                        DigesterRuleParser.java
  Log:
  Add support for SetNestedPropertiesRule. Patch provided by Wendy Smoak.
  
  Revision  Changes    Path
  1.31      +47 -1     
jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/DigesterRuleParser.java
  
  Index: DigesterRuleParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/xmlrules/DigesterRuleParser.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- DigesterRuleParser.java   9 Sep 2004 20:38:21 -0000       1.30
  +++ DigesterRuleParser.java   12 Jan 2005 10:47:03 -0000      1.31
  @@ -42,6 +42,7 @@
   import org.apache.commons.digester.Rule;
   import org.apache.commons.digester.RuleSetBase;
   import org.apache.commons.digester.Rules;
  +import org.apache.commons.digester.SetNestedPropertiesRule;
   import org.apache.commons.digester.SetNextRule;
   import org.apache.commons.digester.SetPropertiesRule;
   import org.apache.commons.digester.SetPropertyRule;
  @@ -255,6 +256,12 @@
           digester.addRule("*/set-property-rule", new PatternRule("pattern"));
           digester.addSetNext("*/set-property-rule", "add", ruleClassName);
           
  +        digester.addFactoryCreate("*/set-nested-properties-rule", new 
SetNestedPropertiesRuleFactory());
  +        digester.addRule("*/set-nested-properties-rule", new 
PatternRule("pattern"));
  +        digester.addSetNext("*/set-nested-properties-rule", "add", 
ruleClassName);
  +        
  +        digester.addRule("*/set-nested-properties-rule/alias", new 
SetNestedPropertiesAliasRule());
  +        
           digester.addFactoryCreate("*/set-top-rule", new SetTopRuleFactory());
           digester.addRule("*/set-top-rule", new PatternRule("pattern"));
           digester.addSetNext("*/set-top-rule", "add", ruleClassName);
  @@ -682,6 +689,19 @@
       }
       
       /**
  +     * Factory for creating a SetNestedPropertiesRule
  +     */
  +    protected class SetNestedPropertiesRuleFactory extends 
AbstractObjectCreationFactory {
  +        public Object createObject(Attributes attributes) {
  +           boolean allowUnknownChildElements = 
  +                
"true".equalsIgnoreCase(attributes.getValue("allow-unknown-child-elements"));
  +                SetNestedPropertiesRule snpr = new SetNestedPropertiesRule();
  +                snpr.setAllowUnknownChildElements( allowUnknownChildElements 
);
  +                return snpr;
  +        }
  +    }
  +    
  +    /**
        * Factory for creating a SetTopRuleFactory
        */
       protected class SetTopRuleFactory extends AbstractObjectCreationFactory {
  @@ -742,6 +762,32 @@
               String propName = attributes.getValue("prop-name");
       
               SetPropertiesRule rule = (SetPropertiesRule) digester.peek();
  +            rule.addAlias(attrName, propName);
  +        }
  +    }
  +
  +    /**
  +     * A rule for adding a attribute-property alias to the custom alias 
mappings of
  +     * the containing SetNestedPropertiesRule rule.
  +     */
  +    protected class SetNestedPropertiesAliasRule extends Rule {
  +        
  +        /**
  +         * <p>Base constructor.</p>
  +         */
  +        public SetNestedPropertiesAliasRule() {
  +            super();
  +        }
  +        
  +        /**
  +         * Add the alias to the SetNestedPropertiesRule object created by the
  +         * enclosing <set-nested-properties-rule> tag.
  +         */
  +        public void begin(Attributes attributes) {
  +            String attrName = attributes.getValue("attr-name");
  +            String propName = attributes.getValue("prop-name");
  +    
  +            SetNestedPropertiesRule rule = (SetNestedPropertiesRule) 
digester.peek();
               rule.addAlias(attrName, propName);
           }
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to