[DIGESTER-157] Improve Set(Nested)PropertiesRuleAlias performances in the XML ruleset while binding rules
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/digester/trunk@1197978 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 5a89ebe..cd94138 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -60,6 +60,7 @@
IMPROVEMENTS OVER PREVIOUS RELEASE
===================================
+ * [DIGESTER-157] Improve Set(Nested)PropertiesRuleAlias performances in the XML ruleset while binding rules
* [DIGESTER-156] Make (Nested|Set)PropertiesBuilder#addAlias() fluent.
* [DIGESTER-152] The DigesterLoader doesn't allow binding a default Locator
* [DIGESTER-151] The DigesterLoader doesn't allow binding a default ErrorHandler.
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 39343b3..d3d266c 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -23,6 +23,9 @@
</properties>
<body>
<release version="3.2" date="201?-??-??" description="Maintenance release.">
+ <action dev="simonetripodi" type="fix" issue="DIGESTER-157">
+ Improve Set(Nested)PropertiesRuleAlias performances in the XML ruleset while binding rules.
+ </action>
<action dev="simonetripodi" type="fix" issue="DIGESTER-156">
Make (Nested|Set)PropertiesBuilder#addAlias() fluent.
</action>
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
index e3a3d6d..4cb2d0e 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
@@ -19,33 +19,29 @@
* under the License.
*/
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.NestedPropertiesBuilder;
import org.xml.sax.Attributes;
/**
*
*/
final class SetNestedPropertiesAliasRule
- extends AbstractXmlRule
+ extends Rule
{
- public SetNestedPropertiesAliasRule( RulesBinder targetRulesBinder, PatternStack patternStack )
- {
- super( targetRulesBinder, patternStack );
- }
-
/**
* {@inheritDoc}
*/
@Override
- protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+ public void begin( String namespace, String name, Attributes attributes )
throws Exception
{
String elementName = attributes.getValue( "attr-name" );
String propertyName = attributes.getValue( "prop-name" );
- linkedRuleBuilder.setNestedProperties().addAlias( elementName ).forProperty( propertyName );
+ NestedPropertiesBuilder builder = getDigester().peek();
+ builder.addAlias( elementName ).forProperty( propertyName );
}
}
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java
index b5aa987..1b4bcae 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesIgnoreRule.java
@@ -19,32 +19,28 @@
* under the License.
*/
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.NestedPropertiesBuilder;
import org.xml.sax.Attributes;
/**
- *
+ *
*/
final class SetNestedPropertiesIgnoreRule
- extends AbstractXmlRule
+ extends Rule
{
- public SetNestedPropertiesIgnoreRule( RulesBinder targetRulesBinder, PatternStack patternStack )
- {
- super( targetRulesBinder, patternStack );
- }
-
/**
* {@inheritDoc}
*/
@Override
- protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+ public void begin( String namespace, String name, Attributes attributes )
throws Exception
{
String elementName = attributes.getValue( "elem-name" );
- linkedRuleBuilder.setNestedProperties().ignoreElement( elementName );
+ NestedPropertiesBuilder builder = getDigester().peek();
+ builder.ignoreElement( elementName );
}
}
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java
index acaeb9b..121e081 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesRule.java
@@ -20,11 +20,12 @@
*/
import org.apache.commons.digester3.binder.LinkedRuleBuilder;
+import org.apache.commons.digester3.binder.NestedPropertiesBuilder;
import org.apache.commons.digester3.binder.RulesBinder;
import org.xml.sax.Attributes;
/**
- *
+ *
*/
final class SetNestedPropertiesRule
extends AbstractXmlRule
@@ -44,7 +45,20 @@
{
boolean allowUnknownChildElements =
"true".equalsIgnoreCase( attributes.getValue( "allow-unknown-child-elements" ) );
- linkedRuleBuilder.setNestedProperties().allowUnknownChildElements( allowUnknownChildElements );
+ NestedPropertiesBuilder builder = linkedRuleBuilder
+ .setNestedProperties()
+ .allowUnknownChildElements( allowUnknownChildElements );
+ getDigester().push( builder );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void end( String namespace, String name )
+ throws Exception
+ {
+ getDigester().pop();
}
}
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
index a61f4f5..a485bd7 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
@@ -19,33 +19,29 @@
* under the License.
*/
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.SetPropertiesBuilder;
import org.xml.sax.Attributes;
/**
*
*/
final class SetPropertiesAliasRule
- extends AbstractXmlRule
+ extends Rule
{
- public SetPropertiesAliasRule( RulesBinder targetRulesBinder, PatternStack patternStack )
- {
- super( targetRulesBinder, patternStack );
- }
-
/**
* {@inheritDoc}
*/
@Override
- protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+ public void begin( String namespace, String name, Attributes attributes )
throws Exception
{
String attributeName = attributes.getValue( "attr-name" );
String propertyName = attributes.getValue( "prop-name" );
- linkedRuleBuilder.setProperties().addAlias( attributeName ).forProperty( propertyName );
+ SetPropertiesBuilder builder = getDigester().peek();
+ builder.addAlias( attributeName ).forProperty( propertyName );
}
}
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java
index b954aa9..b75756c 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesIgnoreRule.java
@@ -19,32 +19,27 @@
* under the License.
*/
-import org.apache.commons.digester3.binder.LinkedRuleBuilder;
-import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.Rule;
+import org.apache.commons.digester3.binder.SetPropertiesBuilder;
import org.xml.sax.Attributes;
/**
- *
+ *
*/
final class SetPropertiesIgnoreRule
- extends AbstractXmlRule
+ extends Rule
{
- public SetPropertiesIgnoreRule( RulesBinder targetRulesBinder, PatternStack patternStack )
- {
- super( targetRulesBinder, patternStack );
- }
-
/**
* {@inheritDoc}
*/
- @Override
- protected void bindRule( LinkedRuleBuilder linkedRuleBuilder, Attributes attributes )
+ public void begin(String namespace, String name, Attributes attributes)
throws Exception
{
String attributeName = attributes.getValue( "attr-name" );
- linkedRuleBuilder.setProperties().ignoreAttribute( attributeName );
+ SetPropertiesBuilder builder = getDigester().peek();
+ builder.ignoreAttribute( attributeName );
}
}
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java
index e589623..3595e35 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesRule.java
@@ -21,10 +21,11 @@
import org.apache.commons.digester3.binder.LinkedRuleBuilder;
import org.apache.commons.digester3.binder.RulesBinder;
+import org.apache.commons.digester3.binder.SetPropertiesBuilder;
import org.xml.sax.Attributes;
/**
- *
+ *
*/
final class SetPropertiesRule
extends AbstractXmlRule
@@ -43,7 +44,19 @@
throws Exception
{
boolean ignoreMissingProperty = "true".equalsIgnoreCase( attributes.getValue( "ignore-missing-property" ) );
- linkedRuleBuilder.setProperties().ignoreMissingProperty( ignoreMissingProperty );
+
+ SetPropertiesBuilder builder = linkedRuleBuilder.setProperties().ignoreMissingProperty( ignoreMissingProperty );
+ getDigester().push( builder );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void end( String namespace, String name )
+ throws Exception
+ {
+ getDigester().pop();
}
}
diff --git a/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java b/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
index d6c7621..29b0f99 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/XmlRulesModule.java
@@ -94,18 +94,18 @@
forPattern( "*/set-properties-rule" ).addRule( new SetPropertiesRule( targetRulesBinder, patternStack ) );
forPattern( "*/set-properties-rule/alias" )
- .addRule( new SetPropertiesAliasRule( targetRulesBinder, patternStack ) );
+ .addRule( new SetPropertiesAliasRule() );
forPattern( "*/set-properties-rule/ignore" )
- .addRule( new SetPropertiesIgnoreRule( targetRulesBinder, patternStack ) );
+ .addRule( new SetPropertiesIgnoreRule() );
forPattern( "*/set-property-rule" ).addRule( new SetPropertyRule( targetRulesBinder, patternStack ) );
forPattern( "*/set-nested-properties-rule" )
.addRule( new SetNestedPropertiesRule( targetRulesBinder, patternStack ) );
forPattern( "*/set-nested-properties-rule/alias" )
- .addRule( new SetNestedPropertiesAliasRule( targetRulesBinder, patternStack ) );
+ .addRule( new SetNestedPropertiesAliasRule() );
forPattern( "*/set-nested-properties-rule/ignore" )
- .addRule( new SetPropertiesIgnoreRule( targetRulesBinder, patternStack ) );
+ .addRule( new SetNestedPropertiesIgnoreRule() );
forPattern( "*/set-top-rule" ).addRule( new SetTopRule( targetRulesBinder, patternStack ) );
forPattern( "*/set-next-rule" ).addRule( new SetNextRule( targetRulesBinder, patternStack ) );