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]