git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271832 13f79535-47bb-0310-9956-ffa450edef68master
@@ -51,6 +51,58 @@ public class ClassicConfigurer | |||
m_converter = (Converter)serviceManager.lookup( Converter.ROLE ); | |||
} | |||
/** | |||
* Configure an object based on a configuration in a particular context. | |||
* This configuring can be done in different ways for different | |||
* configurers. | |||
* | |||
* The implementation of this method should only use the methods | |||
* specified by the supplied class. It is an error for the specified | |||
* class not to be a base class or interface compatible with specified | |||
* object. | |||
* | |||
* @param object the object | |||
* @param clazz the Class object to use during configuration | |||
* @param configuration the configuration | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureElement( Object object, | |||
Class clazz, | |||
Configuration configuration, | |||
TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
throw new UnsupportedOperationException(); | |||
} | |||
/** | |||
* Configure named attribute of object in a particular context. | |||
* This configuring can be done in different ways for different | |||
* configurers. | |||
* | |||
* The implementation of this method should only use the methods | |||
* specified by the supplied class. It is an error for the specified | |||
* class not to be a base class or interface compatible with specified | |||
* object. | |||
* | |||
* @param object the object | |||
* @param clazz the Class object to use during configuration | |||
* @param name the attribute name | |||
* @param value the attribute value | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureAttribute( Object object, | |||
Class clazz, | |||
String name, | |||
String value, | |||
TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
throw new UnsupportedOperationException(); | |||
} | |||
/** | |||
* Configure a task based on a configuration in a particular context. | |||
* This configuring can be done in different ways for different | |||
@@ -65,8 +117,8 @@ public class ClassicConfigurer | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureElement( final Object object, | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
if( DEBUG ) | |||
@@ -106,7 +158,7 @@ public class ClassicConfigurer | |||
getLogger().debug( message ); | |||
} | |||
configureAttribute( object, name, value, context ); | |||
doConfigureAttribute( object, name, value, context ); | |||
} | |||
final Configuration[] children = configuration.getChildren(); | |||
@@ -122,7 +174,7 @@ public class ClassicConfigurer | |||
getLogger().debug( message ); | |||
} | |||
configureElement( object, child, context ); | |||
doConfigureElement( object, child, context ); | |||
} | |||
final String content = configuration.getValue( null ); | |||
@@ -155,12 +207,12 @@ public class ClassicConfigurer | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureAttribute( final Object object, | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
configureAttribute( object, name, value, context ); | |||
doConfigureAttribute( object, name, value, context ); | |||
} | |||
/** | |||
@@ -179,10 +231,10 @@ public class ClassicConfigurer | |||
setValue( object, "addContent", content, context ); | |||
} | |||
private void configureAttribute( final Object object, | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
private void doConfigureAttribute( final Object object, | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
final String methodName = getMethodNameFor( name ); | |||
@@ -431,9 +483,9 @@ public class ClassicConfigurer | |||
return sb.toString(); | |||
} | |||
private void configureElement( final Object object, | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
private void doConfigureElement( final Object object, | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
final String name = configuration.getName(); | |||
@@ -474,7 +526,7 @@ public class ClassicConfigurer | |||
try | |||
{ | |||
final Object created = method.invoke( object, new Object[ 0 ] ); | |||
configureElement( created, configuration, context ); | |||
doConfigureElement( created, configuration, context ); | |||
} | |||
catch( final ConfigurationException ce ) | |||
{ | |||
@@ -498,7 +550,7 @@ public class ClassicConfigurer | |||
final Class clazz = method.getParameterTypes()[ 0 ]; | |||
final Object created = clazz.newInstance(); | |||
configureElement( created, configuration, context ); | |||
doConfigureElement( created, configuration, context ); | |||
method.invoke( object, new Object[]{created} ); | |||
} | |||
catch( final ConfigurationException ce ) | |||
@@ -78,14 +78,23 @@ public class DefaultConfigurer | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureElement( final Object object, | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
configureElement( object, object.getClass(), configuration, context ); | |||
} | |||
public void configureElement( final Object object, | |||
final Class clazz, | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
try | |||
{ | |||
// Configure the object | |||
configureObject( object, configuration, context ); | |||
configureObject( object, clazz, configuration, context ); | |||
} | |||
catch( final ReportableConfigurationException e ) | |||
{ | |||
@@ -109,6 +118,7 @@ public class DefaultConfigurer | |||
* @throws Exception On error | |||
*/ | |||
private void configureObject( final Object object, | |||
final Class clazz, | |||
final Configuration configuration, | |||
final TaskContext context ) | |||
throws Exception | |||
@@ -122,7 +132,7 @@ public class DefaultConfigurer | |||
{ | |||
// Start configuration of the object | |||
final String elemName = configuration.getName(); | |||
final ObjectConfigurer configurer = getConfigurer( object.getClass() ); | |||
final ObjectConfigurer configurer = getConfigurer( clazz ); | |||
final ConfigurationState state = configurer.startConfiguration( object ); | |||
// Set each of the attributes | |||
@@ -140,7 +150,7 @@ public class DefaultConfigurer | |||
{ | |||
final String message = | |||
REZ.getString( "no-such-attribute.error", elemName, name ); | |||
throw new ReportableConfigurationException( message ); | |||
throw new ReportableConfigurationException( message ); | |||
} | |||
catch( final Exception ce ) | |||
{ | |||
@@ -218,13 +228,34 @@ public class DefaultConfigurer | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureAttribute( final Object object, | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
configureAttribute( object, object.getClass(), name, value, context ); | |||
} | |||
/** | |||
* Configure named attribute of object in a particular context. | |||
* This configuring can be done in different ways for different | |||
* configurers. | |||
* | |||
* @param object the object | |||
* @param name the attribute name | |||
* @param value the attribute value | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configureAttribute( final Object object, | |||
final Class clazz, | |||
final String name, | |||
final String value, | |||
final TaskContext context ) | |||
throws ConfigurationException | |||
{ | |||
// Locate the configurer for this object | |||
final ObjectConfigurer configurer = getConfigurer( object.getClass() ); | |||
final ObjectConfigurer configurer = getConfigurer( clazz ); | |||
// TODO - this ain't right, the validation is going to be screwed up | |||
final ConfigurationState state = configurer.startConfiguration( object ); | |||
@@ -471,7 +502,8 @@ public class DefaultConfigurer | |||
} | |||
// Configure the object | |||
configureObject( child, element, context ); | |||
final Object object = child; | |||
configureObject( object, object.getClass(), element, context ); | |||
// Convert the object, if necessary | |||
if( !type.isInstance( child ) ) | |||
@@ -48,4 +48,50 @@ public interface Configurer | |||
*/ | |||
void configureAttribute( Object object, String name, String value, TaskContext context ) | |||
throws ConfigurationException; | |||
/** | |||
* Configure an object based on a configuration in a particular context. | |||
* This configuring can be done in different ways for different | |||
* configurers. | |||
* | |||
* The implementation of this method should only use the methods | |||
* specified by the supplied class. It is an error for the specified | |||
* class not to be a base class or interface compatible with specified | |||
* object. | |||
* | |||
* @param object the object | |||
* @param clazz the Class object to use during configuration | |||
* @param configuration the configuration | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
void configureElement( Object object, | |||
Class clazz, | |||
Configuration configuration, | |||
TaskContext context ) | |||
throws ConfigurationException; | |||
/** | |||
* Configure named attribute of object in a particular context. | |||
* This configuring can be done in different ways for different | |||
* configurers. | |||
* | |||
* The implementation of this method should only use the methods | |||
* specified by the supplied class. It is an error for the specified | |||
* class not to be a base class or interface compatible with specified | |||
* object. | |||
* | |||
* @param object the object | |||
* @param clazz the Class object to use during configuration | |||
* @param name the attribute name | |||
* @param value the attribute value | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
void configureAttribute( Object object, | |||
Class clazz, | |||
String name, | |||
String value, | |||
TaskContext context ) | |||
throws ConfigurationException; | |||
} |