Browse Source

Add some extra methods to configurer interface that allows you to pass in the class/interface to use during configuring process. This makes it dead simple to support facades

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271832 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
12c0f4b50a
3 changed files with 157 additions and 27 deletions
  1. +69
    -17
      proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/ClassicConfigurer.java
  2. +42
    -10
      proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java
  3. +46
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/configurer/Configurer.java

+ 69
- 17
proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/ClassicConfigurer.java View File

@@ -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 )


+ 42
- 10
proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java View File

@@ -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 ) )


+ 46
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/configurer/Configurer.java View File

@@ -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;
}

Loading…
Cancel
Save