[DIGESTER-156] Make (Nested|Set)PropertiesBuilder#addAlias() fluent
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/digester/trunk@1197969 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 8429c16..5a89ebe 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -60,6 +60,7 @@
IMPROVEMENTS OVER PREVIOUS RELEASE
===================================
+ * [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 b7fd5b8..39343b3 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-156">
+ Make (Nested|Set)PropertiesBuilder#addAlias() fluent.
+ </action>
<action dev="simonetripodi" type="fix" issue="DIGESTER-155">
ClassLoader reference set to DigesterLoader not set in produced Digester instances
</action>
diff --git a/src/main/java/org/apache/commons/digester3/annotations/handlers/SetPropertiesHandler.java b/src/main/java/org/apache/commons/digester3/annotations/handlers/SetPropertiesHandler.java
index ed6307e..c3e6b17 100644
--- a/src/main/java/org/apache/commons/digester3/annotations/handlers/SetPropertiesHandler.java
+++ b/src/main/java/org/apache/commons/digester3/annotations/handlers/SetPropertiesHandler.java
@@ -48,7 +48,7 @@
if ( annotation.attributeName() != null && annotation.attributeName().length() > 0
&& !element.getName().equals( annotation.attributeName() ) )
{
- builder.addAlias( annotation.attributeName(), element.getName() );
+ builder.addAlias( annotation.attributeName() ).forProperty( element.getName() );
}
}
diff --git a/src/main/java/org/apache/commons/digester3/binder/NestedPropertiesBuilder.java b/src/main/java/org/apache/commons/digester3/binder/NestedPropertiesBuilder.java
index c719fcf..f2c021d 100644
--- a/src/main/java/org/apache/commons/digester3/binder/NestedPropertiesBuilder.java
+++ b/src/main/java/org/apache/commons/digester3/binder/NestedPropertiesBuilder.java
@@ -57,11 +57,7 @@
{
reportError( "setNestedProperties().ignoreElement( String )", "empty 'elementName' not allowed" );
}
- else
- {
- addAlias( elementName, null );
- }
- return this;
+ return addAlias( elementName ).forProperty( null );
}
/**
@@ -70,18 +66,28 @@
* @param elementName The child xml element to match
* @param propertyName The java bean property to be assigned the value
* @return this builder instance
+ * @deprecated
*/
+ @Deprecated
public NestedPropertiesBuilder addAlias( String elementName, String propertyName )
{
+ return addAlias( elementName ).forProperty( propertyName );
+ }
+
+ /**
+ * Allows element2property mapping to be overridden.
+ *
+ * @param elementName
+ * @return the property alias builder
+ * @since 3.2
+ */
+ public AddAliasBuilder<NestedPropertiesBuilder> addAlias( String elementName )
+ {
if ( elementName == null )
{
- reportError( "setNestedProperties().addAlias( String,String )", "empty 'elementName' not allowed" );
+ reportError( "setProperties().addAlias( String )", "empty 'elementName' not allowed" );
}
- else
- {
- elementNames.put( elementName, propertyName );
- }
- return this;
+ return new AddAliasBuilder<NestedPropertiesBuilder>( this, elementNames, elementName );
}
/**
diff --git a/src/main/java/org/apache/commons/digester3/binder/SetPropertiesBuilder.java b/src/main/java/org/apache/commons/digester3/binder/SetPropertiesBuilder.java
index 6f33b01..c392315 100644
--- a/src/main/java/org/apache/commons/digester3/binder/SetPropertiesBuilder.java
+++ b/src/main/java/org/apache/commons/digester3/binder/SetPropertiesBuilder.java
@@ -47,18 +47,28 @@
* @param attributeName The attribute to match
* @param propertyName The java bean property to be assigned the value
* @return this builder instance
+ * @deprecated
*/
+ @Deprecated
public SetPropertiesBuilder addAlias( String attributeName, String propertyName )
{
+ return addAlias( attributeName ).forProperty( propertyName );
+ }
+
+ /**
+ * Add an additional attribute name to property name mapping.
+ *
+ * @param attributeName The attribute to match
+ * @return the property alias builder
+ * @since 3.2
+ */
+ public AddAliasBuilder<SetPropertiesBuilder> addAlias( String attributeName )
+ {
if ( attributeName == null )
{
- reportError( "setProperties().addAlias( String,String )", "empty 'attributeName' not allowed" );
+ reportError( "setProperties().addAlias( String )", "empty 'attributeName' not allowed" );
}
- else
- {
- aliases.put( attributeName, propertyName );
- }
- return this;
+ return new AddAliasBuilder<SetPropertiesBuilder>( this, aliases, attributeName );
}
/**
@@ -73,16 +83,12 @@
{
reportError( "setProperties().ignoreAttribute( String )", "empty 'attributeName' not allowed" );
}
- else
- {
- addAlias( attributeName, null );
- }
- return this;
+ return addAlias( attributeName ).forProperty( null );
}
/**
* Sets whether attributes found in the XML without matching properties should be ignored.
- *
+ *
* If set to false, the parsing will throw an {@code NoSuchMethodException}
* if an unmatched attribute is found.
* This allows to trap misspellings in the XML file.
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 572d238..e3a3d6d 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetNestedPropertiesAliasRule.java
@@ -24,7 +24,7 @@
import org.xml.sax.Attributes;
/**
- *
+ *
*/
final class SetNestedPropertiesAliasRule
extends AbstractXmlRule
@@ -45,7 +45,7 @@
String elementName = attributes.getValue( "attr-name" );
String propertyName = attributes.getValue( "prop-name" );
- linkedRuleBuilder.setNestedProperties().addAlias( elementName, propertyName );
+ linkedRuleBuilder.setNestedProperties().addAlias( elementName ).forProperty( propertyName );
}
}
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 531798a..a61f4f5 100644
--- a/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
+++ b/src/main/java/org/apache/commons/digester3/xmlrules/SetPropertiesAliasRule.java
@@ -24,7 +24,7 @@
import org.xml.sax.Attributes;
/**
- *
+ *
*/
final class SetPropertiesAliasRule
extends AbstractXmlRule
@@ -45,7 +45,7 @@
String attributeName = attributes.getValue( "attr-name" );
String propertyName = attributes.getValue( "prop-name" );
- linkedRuleBuilder.setProperties().addAlias( attributeName, propertyName );
+ linkedRuleBuilder.setProperties().addAlias( attributeName ).forProperty( propertyName );
}
}
diff --git a/src/test/java/org/apache/commons/digester3/SetNestedPropertiesRuleTestCase.java b/src/test/java/org/apache/commons/digester3/SetNestedPropertiesRuleTestCase.java
index 4c416df..eedf40a 100644
--- a/src/test/java/org/apache/commons/digester3/SetNestedPropertiesRuleTestCase.java
+++ b/src/test/java/org/apache/commons/digester3/SetNestedPropertiesRuleTestCase.java
@@ -142,9 +142,9 @@
forPattern( "root" ).createObject().ofType( "org.apache.commons.digester3.SimpleTestBean" )
.then()
.setNestedProperties()
- .addAlias( "alpha", null )
- .addAlias( "gamma-alt", "gamma" )
- .addAlias( "delta", null );
+ .addAlias( "alpha" ).forProperty( null )
+ .addAlias( "gamma-alt" ).forProperty( "gamma" )
+ .addAlias( "delta" ).forProperty( null );
}
}).newDigester();
@@ -184,7 +184,7 @@
forPattern( "root" ).createObject().ofType( "org.apache.commons.digester3.SimpleTestBean" )
.then()
.setNestedProperties()
- .addAlias( "alpha", null );
+ .addAlias( "alpha" ).forProperty( null );
}
}).newDigester();
@@ -224,7 +224,7 @@
forPattern( "root" ).createObject().ofType( "org.apache.commons.digester3.SimpleTestBean" )
.then()
.setNestedProperties()
- .addAlias( "alpha-alt", "alpha" );
+ .addAlias( "alpha-alt" ).forProperty( "alpha" );
}
}).newDigester();
diff --git a/src/test/java/org/apache/commons/digester3/SetPropertiesRuleTestCase.java b/src/test/java/org/apache/commons/digester3/SetPropertiesRuleTestCase.java
index 412eb7b..aa0a60f 100644
--- a/src/test/java/org/apache/commons/digester3/SetPropertiesRuleTestCase.java
+++ b/src/test/java/org/apache/commons/digester3/SetPropertiesRuleTestCase.java
@@ -198,7 +198,7 @@
forPattern( "root" ).createObject().ofType( "org.apache.commons.digester3.SimpleTestBean" )
.then()
.setProperties()
- .addAlias( "ignore", null )
+ .addAlias( "ignore" ).forProperty( null )
.ignoreMissingProperty( false );
}