Also added unit tests to verify everything works as expected git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270976 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -26,6 +26,10 @@ import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| import org.apache.avalon.framework.logger.LogEnabled; | import org.apache.avalon.framework.logger.LogEnabled; | ||||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | import org.apache.myrmidon.interfaces.configurer.Configurer; | ||||
| import org.apache.myrmidon.interfaces.converter.MasterConverter; | import org.apache.myrmidon.interfaces.converter.MasterConverter; | ||||
| import org.apache.myrmidon.interfaces.type.TypeFactory; | |||||
| import org.apache.myrmidon.interfaces.type.TypeManager; | |||||
| import org.apache.myrmidon.interfaces.type.TypeException; | |||||
| import org.apache.myrmidon.api.TaskException; | |||||
| /** | /** | ||||
| * Class used to configure tasks. | * Class used to configure tasks. | ||||
| @@ -42,6 +46,9 @@ public class DefaultConfigurer | |||||
| ///Converter to use for converting between values | ///Converter to use for converting between values | ||||
| private MasterConverter m_converter; | private MasterConverter m_converter; | ||||
| //TypeManager to use to create types in typed adders | |||||
| private TypeManager m_typeManager; | |||||
| ///Cached object configurers. This is a map from Class to the | ///Cached object configurers. This is a map from Class to the | ||||
| ///ObjectConfigurer for that class. | ///ObjectConfigurer for that class. | ||||
| private Map m_configurerCache = new HashMap(); | private Map m_configurerCache = new HashMap(); | ||||
| @@ -50,6 +57,7 @@ public class DefaultConfigurer | |||||
| throws ComponentException | throws ComponentException | ||||
| { | { | ||||
| m_converter = (MasterConverter)componentManager.lookup( MasterConverter.ROLE ); | m_converter = (MasterConverter)componentManager.lookup( MasterConverter.ROLE ); | ||||
| m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -262,7 +270,8 @@ public class DefaultConfigurer | |||||
| final String name = element.getName(); | final String name = element.getName(); | ||||
| // Locate the configurer for the child element | // Locate the configurer for the child element | ||||
| final PropertyConfigurer childConfigurer = state.getConfigurer().getProperty( name ); | |||||
| final PropertyConfigurer childConfigurer = | |||||
| state.getConfigurer().getProperty( name ); | |||||
| // Create & configure the child element | // Create & configure the child element | ||||
| final Object child = | final Object child = | ||||
| @@ -272,79 +281,6 @@ public class DefaultConfigurer | |||||
| childConfigurer.addValue( state, child ); | childConfigurer.addValue( state, child ); | ||||
| } | } | ||||
| private Object setupChild( final ConfigurationState state, | |||||
| final Configuration element, | |||||
| final Context context, | |||||
| final PropertyConfigurer childConfigurer ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| final String name = element.getName(); | |||||
| final Class type = childConfigurer.getType(); | |||||
| Object child = childConfigurer.createValue( state ); | |||||
| if( null == child && Configuration.class == type ) | |||||
| { | |||||
| //special case where you have add(Configuration) | |||||
| return element; | |||||
| } | |||||
| else if( null == child ) | |||||
| { | |||||
| // Create an instance using the default constructor | |||||
| if( type.isInterface() ) | |||||
| { | |||||
| child = createdTypedObject( name, type ); | |||||
| configureObject( child, element, context ); | |||||
| } | |||||
| else | |||||
| { | |||||
| child = createObject( type ); | |||||
| configureObject( child, element, context ); | |||||
| } | |||||
| } | |||||
| configureObject( child, element, context ); | |||||
| return child; | |||||
| } | |||||
| /** | |||||
| * Utility method to create an instance of the | |||||
| * specified type that satisfied supplied interface. | |||||
| */ | |||||
| private Object createdTypedObject( final String name, | |||||
| final Class type ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| try | |||||
| { | |||||
| return type.newInstance(); | |||||
| } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| final String message = | |||||
| REZ.getString( "create-object.error", | |||||
| type.getName() ); | |||||
| throw new ConfigurationException( message, e ); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Utility method to instantiate an instance of the specified class. | |||||
| */ | |||||
| private Object createObject( final Class type ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| try | |||||
| { | |||||
| return type.newInstance(); | |||||
| } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| final String message = | |||||
| REZ.getString( "create-object.error", | |||||
| type.getName() ); | |||||
| throw new ConfigurationException( message, e ); | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Configures a property from a reference. | * Configures a property from a reference. | ||||
| */ | */ | ||||
| @@ -468,4 +404,96 @@ public class DefaultConfigurer | |||||
| } | } | ||||
| return configurer; | return configurer; | ||||
| } | } | ||||
| private Object setupChild( final ConfigurationState state, | |||||
| final Configuration element, | |||||
| final Context context, | |||||
| final PropertyConfigurer childConfigurer ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| final String name = element.getName(); | |||||
| final Class type = childConfigurer.getType(); | |||||
| Object child = childConfigurer.createValue( state ); | |||||
| if( null == child && Configuration.class == type ) | |||||
| { | |||||
| //special case where you have add...(Configuration) | |||||
| return element; | |||||
| } | |||||
| else if( null == child ) | |||||
| { | |||||
| // Create an instance using the default constructor | |||||
| if( type.isInterface() ) | |||||
| { | |||||
| child = createdTypedObject( name, type ); | |||||
| configureObject( child, element, context ); | |||||
| } | |||||
| else | |||||
| { | |||||
| child = createObject( type ); | |||||
| configureObject( child, element, context ); | |||||
| } | |||||
| } | |||||
| configureObject( child, element, context ); | |||||
| return child; | |||||
| } | |||||
| /** | |||||
| * Utility method to create an instance of the | |||||
| * specified type that satisfied supplied interface. | |||||
| */ | |||||
| private Object createdTypedObject( final String name, | |||||
| final Class type ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| final TypeFactory factory = getTypeFactory( type.getName() ); | |||||
| try | |||||
| { | |||||
| return factory.create( name ); | |||||
| } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| final String message = | |||||
| REZ.getString( "create-typed-object.error", | |||||
| name, | |||||
| type.getName() ); | |||||
| throw new ConfigurationException( message, e ); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Utility method to instantiate an instance of the specified class. | |||||
| */ | |||||
| private Object createObject( final Class type ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| try | |||||
| { | |||||
| return type.newInstance(); | |||||
| } | |||||
| catch( final Exception e ) | |||||
| { | |||||
| final String message = | |||||
| REZ.getString( "create-object.error", | |||||
| type.getName() ); | |||||
| throw new ConfigurationException( message, e ); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Locates a type factory. | |||||
| */ | |||||
| protected final TypeFactory getTypeFactory( final String role ) | |||||
| throws ConfigurationException | |||||
| { | |||||
| try | |||||
| { | |||||
| return m_typeManager.getFactory( role ); | |||||
| } | |||||
| catch( final TypeException te ) | |||||
| { | |||||
| final String message = REZ.getString( "no-factory-for-role.error", role ); | |||||
| throw new ConfigurationException( message, te ); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -351,7 +351,14 @@ class DefaultObjectConfigurer | |||||
| public PropertyConfigurer getProperty( final String name ) | public PropertyConfigurer getProperty( final String name ) | ||||
| throws NoSuchPropertyException | throws NoSuchPropertyException | ||||
| { | { | ||||
| final PropertyConfigurer configurer = (PropertyConfigurer)m_props.get( name ); | |||||
| PropertyConfigurer configurer = (PropertyConfigurer)m_props.get( name ); | |||||
| if( null != configurer ) | |||||
| { | |||||
| return configurer; | |||||
| } | |||||
| //Maybe there is a typed adder?? | |||||
| configurer = (PropertyConfigurer)m_props.get( "" ); | |||||
| if( null != configurer ) | if( null != configurer ) | ||||
| { | { | ||||
| return configurer; | return configurer; | ||||
| @@ -20,4 +20,5 @@ no-such-element.error=Nested <{1}> elements are not allowed for element <{0}>. | |||||
| bad-set-element.error=Could not handle element <{1}>, nested in element <{0}>. | bad-set-element.error=Could not handle element <{1}>, nested in element <{0}>. | ||||
| no-content.error=Text content is not allowed for element <{0}>. | no-content.error=Text content is not allowed for element <{0}>. | ||||
| bad-set-content.error=Could not set text content for element <{0}>. | bad-set-content.error=Could not set text content for element <{0}>. | ||||
| typed-adder-non-interface.error=The typed adder for class "{0}" must have a single parameter that is an interface rather than {1} which defines a class. | |||||
| typed-adder-non-interface.error=The typed adder for class "{0}" must have a single parameter that is an interface rather than {1} which defines a class. | |||||
| no-factory-for-role.error=Unable to locate type factory for role "{0}" | |||||
| @@ -0,0 +1,34 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| import java.util.ArrayList; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.avalon.framework.configuration.Configuration; | |||||
| /** | |||||
| * Simple class to test typed adder. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ConfigTest6 | |||||
| { | |||||
| private ArrayList m_roles = new ArrayList(); | |||||
| public void add( final MyRole1 role1 ) | |||||
| { | |||||
| m_roles.add( role1 ); | |||||
| } | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| final ConfigTest6 other = (ConfigTest6)object; | |||||
| return m_roles.equals( other.m_roles ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,34 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| import java.util.ArrayList; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.avalon.framework.configuration.Configuration; | |||||
| /** | |||||
| * Simple class to test adder for Configurations. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ConfigTest7 | |||||
| { | |||||
| private ArrayList m_configurations = new ArrayList(); | |||||
| public void add( final Configuration configuration ) | |||||
| { | |||||
| m_configurations.add( configuration ); | |||||
| } | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| final ConfigTest7 other = (ConfigTest7)object; | |||||
| return m_configurations.equals( other.m_configurations ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,34 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| import java.util.ArrayList; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.avalon.framework.configuration.Configuration; | |||||
| /** | |||||
| * Simple class to test adder for Configurations. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ConfigTest8 | |||||
| { | |||||
| private ArrayList m_configurations = new ArrayList(); | |||||
| public void addConfig( final Configuration configuration ) | |||||
| { | |||||
| m_configurations.add( configuration ); | |||||
| } | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| final ConfigTest8 other = (ConfigTest8)object; | |||||
| return m_configurations.equals( other.m_configurations ); | |||||
| } | |||||
| } | |||||
| @@ -36,6 +36,7 @@ import org.apache.myrmidon.components.workspace.DefaultTaskContext; | |||||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | import org.apache.myrmidon.interfaces.configurer.Configurer; | ||||
| import org.apache.myrmidon.interfaces.converter.ConverterRegistry; | import org.apache.myrmidon.interfaces.converter.ConverterRegistry; | ||||
| import org.apache.myrmidon.interfaces.converter.MasterConverter; | import org.apache.myrmidon.interfaces.converter.MasterConverter; | ||||
| import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; | |||||
| import org.apache.myrmidon.interfaces.type.TypeManager; | import org.apache.myrmidon.interfaces.type.TypeManager; | ||||
| /** | /** | ||||
| @@ -51,6 +52,7 @@ public class DefaultConfigurerTest | |||||
| private DefaultComponentManager m_componentManager; | private DefaultComponentManager m_componentManager; | ||||
| private Configurer m_configurer; | private Configurer m_configurer; | ||||
| private TypeManager m_typeManager; | |||||
| private Logger m_logger; | private Logger m_logger; | ||||
| private DefaultTaskContext m_context; | private DefaultTaskContext m_context; | ||||
| @@ -134,6 +136,8 @@ public class DefaultConfigurerTest | |||||
| // Find the configurer | // Find the configurer | ||||
| m_configurer = (Configurer)m_componentManager.lookup( Configurer.ROLE ); | m_configurer = (Configurer)m_componentManager.lookup( Configurer.ROLE ); | ||||
| // Find the typeManager | |||||
| m_typeManager = (TypeManager)m_componentManager.lookup( TypeManager.ROLE ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -412,6 +416,85 @@ public class DefaultConfigurerTest | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Tests to see if typed adder works. | |||||
| */ | |||||
| public void testTypedAdder() | |||||
| throws Exception | |||||
| { | |||||
| // Setup test data | |||||
| final DefaultConfiguration config = new DefaultConfiguration( "test", "test" ); | |||||
| final DefaultConfiguration child1 = new DefaultConfiguration( "my-type1", "test" ); | |||||
| final DefaultConfiguration child2 = new DefaultConfiguration( "my-type2", "test" ); | |||||
| config.addChild( child1 ); | |||||
| config.addChild( child2 ); | |||||
| final ClassLoader loader = getClass().getClassLoader(); | |||||
| final DefaultTypeFactory factory = new DefaultTypeFactory( loader ); | |||||
| factory.addNameClassMapping( "my-type1", MyType1.class.getName() ); | |||||
| factory.addNameClassMapping( "my-type2", MyType2.class.getName() ); | |||||
| m_typeManager.registerType( MyRole1.class.getName(), "my-type1", factory ); | |||||
| m_typeManager.registerType( MyRole1.class.getName(), "my-type2", factory ); | |||||
| final ConfigTest6 test = new ConfigTest6(); | |||||
| // Configure the object | |||||
| m_configurer.configure( test, config, m_context ); | |||||
| final ConfigTest6 expected = new ConfigTest6(); | |||||
| expected.add( new MyType1() ); | |||||
| expected.add( new MyType2() ); | |||||
| assertEquals( expected, test ); | |||||
| } | |||||
| /** | |||||
| * Tests to see if typed adder works. | |||||
| */ | |||||
| public void testTypedConfigAdder() | |||||
| throws Exception | |||||
| { | |||||
| // Setup test data | |||||
| final DefaultConfiguration config = new DefaultConfiguration( "test", "test" ); | |||||
| final DefaultConfiguration child1 = new DefaultConfiguration( "my-type1", "test" ); | |||||
| final DefaultConfiguration child2 = new DefaultConfiguration( "my-type2", "test" ); | |||||
| config.addChild( child1 ); | |||||
| config.addChild( child2 ); | |||||
| final ConfigTest7 test = new ConfigTest7(); | |||||
| // Configure the object | |||||
| m_configurer.configure( test, config, m_context ); | |||||
| final ConfigTest7 expected = new ConfigTest7(); | |||||
| expected.add( child1 ); | |||||
| expected.add( child2 ); | |||||
| assertEquals( expected, test ); | |||||
| } | |||||
| /** | |||||
| * Tests to see if typed adder works. | |||||
| */ | |||||
| public void testConfigAdder() | |||||
| throws Exception | |||||
| { | |||||
| // Setup test data | |||||
| final DefaultConfiguration config = new DefaultConfiguration( "test", "test" ); | |||||
| final DefaultConfiguration child1 = new DefaultConfiguration( "config", "test" ); | |||||
| final DefaultConfiguration child2 = new DefaultConfiguration( "config", "test" ); | |||||
| config.addChild( child1 ); | |||||
| config.addChild( child2 ); | |||||
| final ConfigTest8 test = new ConfigTest8(); | |||||
| // Configure the object | |||||
| m_configurer.configure( test, config, m_context ); | |||||
| final ConfigTest8 expected = new ConfigTest8(); | |||||
| expected.addConfig( child1 ); | |||||
| expected.addConfig( child2 ); | |||||
| assertEquals( expected, test ); | |||||
| } | |||||
| /** | /** | ||||
| * Test resolving properties in an id. | * Test resolving properties in an id. | ||||
| */ | */ | ||||
| @@ -0,0 +1,23 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| /** | |||||
| * A basic implementation of MyRole1 to test configurer. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class MyType1 | |||||
| implements MyRole1 | |||||
| { | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| return object.getClass() == getClass(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,23 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| /** | |||||
| * A basic implementation of MyRole1 to test configurer. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class MyType2 | |||||
| implements MyRole1 | |||||
| { | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| return object.getClass() == getClass(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,34 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| import java.util.ArrayList; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.avalon.framework.configuration.Configuration; | |||||
| /** | |||||
| * Simple class to test typed adder. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ConfigTest6 | |||||
| { | |||||
| private ArrayList m_roles = new ArrayList(); | |||||
| public void add( final MyRole1 role1 ) | |||||
| { | |||||
| m_roles.add( role1 ); | |||||
| } | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| final ConfigTest6 other = (ConfigTest6)object; | |||||
| return m_roles.equals( other.m_roles ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,34 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| import java.util.ArrayList; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.avalon.framework.configuration.Configuration; | |||||
| /** | |||||
| * Simple class to test adder for Configurations. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ConfigTest7 | |||||
| { | |||||
| private ArrayList m_configurations = new ArrayList(); | |||||
| public void add( final Configuration configuration ) | |||||
| { | |||||
| m_configurations.add( configuration ); | |||||
| } | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| final ConfigTest7 other = (ConfigTest7)object; | |||||
| return m_configurations.equals( other.m_configurations ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,34 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| import java.util.ArrayList; | |||||
| import junit.framework.AssertionFailedError; | |||||
| import org.apache.avalon.framework.configuration.Configuration; | |||||
| /** | |||||
| * Simple class to test adder for Configurations. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class ConfigTest8 | |||||
| { | |||||
| private ArrayList m_configurations = new ArrayList(); | |||||
| public void addConfig( final Configuration configuration ) | |||||
| { | |||||
| m_configurations.add( configuration ); | |||||
| } | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| final ConfigTest8 other = (ConfigTest8)object; | |||||
| return m_configurations.equals( other.m_configurations ); | |||||
| } | |||||
| } | |||||
| @@ -36,6 +36,7 @@ import org.apache.myrmidon.components.workspace.DefaultTaskContext; | |||||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | import org.apache.myrmidon.interfaces.configurer.Configurer; | ||||
| import org.apache.myrmidon.interfaces.converter.ConverterRegistry; | import org.apache.myrmidon.interfaces.converter.ConverterRegistry; | ||||
| import org.apache.myrmidon.interfaces.converter.MasterConverter; | import org.apache.myrmidon.interfaces.converter.MasterConverter; | ||||
| import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; | |||||
| import org.apache.myrmidon.interfaces.type.TypeManager; | import org.apache.myrmidon.interfaces.type.TypeManager; | ||||
| /** | /** | ||||
| @@ -51,6 +52,7 @@ public class DefaultConfigurerTest | |||||
| private DefaultComponentManager m_componentManager; | private DefaultComponentManager m_componentManager; | ||||
| private Configurer m_configurer; | private Configurer m_configurer; | ||||
| private TypeManager m_typeManager; | |||||
| private Logger m_logger; | private Logger m_logger; | ||||
| private DefaultTaskContext m_context; | private DefaultTaskContext m_context; | ||||
| @@ -134,6 +136,8 @@ public class DefaultConfigurerTest | |||||
| // Find the configurer | // Find the configurer | ||||
| m_configurer = (Configurer)m_componentManager.lookup( Configurer.ROLE ); | m_configurer = (Configurer)m_componentManager.lookup( Configurer.ROLE ); | ||||
| // Find the typeManager | |||||
| m_typeManager = (TypeManager)m_componentManager.lookup( TypeManager.ROLE ); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -412,6 +416,85 @@ public class DefaultConfigurerTest | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Tests to see if typed adder works. | |||||
| */ | |||||
| public void testTypedAdder() | |||||
| throws Exception | |||||
| { | |||||
| // Setup test data | |||||
| final DefaultConfiguration config = new DefaultConfiguration( "test", "test" ); | |||||
| final DefaultConfiguration child1 = new DefaultConfiguration( "my-type1", "test" ); | |||||
| final DefaultConfiguration child2 = new DefaultConfiguration( "my-type2", "test" ); | |||||
| config.addChild( child1 ); | |||||
| config.addChild( child2 ); | |||||
| final ClassLoader loader = getClass().getClassLoader(); | |||||
| final DefaultTypeFactory factory = new DefaultTypeFactory( loader ); | |||||
| factory.addNameClassMapping( "my-type1", MyType1.class.getName() ); | |||||
| factory.addNameClassMapping( "my-type2", MyType2.class.getName() ); | |||||
| m_typeManager.registerType( MyRole1.class.getName(), "my-type1", factory ); | |||||
| m_typeManager.registerType( MyRole1.class.getName(), "my-type2", factory ); | |||||
| final ConfigTest6 test = new ConfigTest6(); | |||||
| // Configure the object | |||||
| m_configurer.configure( test, config, m_context ); | |||||
| final ConfigTest6 expected = new ConfigTest6(); | |||||
| expected.add( new MyType1() ); | |||||
| expected.add( new MyType2() ); | |||||
| assertEquals( expected, test ); | |||||
| } | |||||
| /** | |||||
| * Tests to see if typed adder works. | |||||
| */ | |||||
| public void testTypedConfigAdder() | |||||
| throws Exception | |||||
| { | |||||
| // Setup test data | |||||
| final DefaultConfiguration config = new DefaultConfiguration( "test", "test" ); | |||||
| final DefaultConfiguration child1 = new DefaultConfiguration( "my-type1", "test" ); | |||||
| final DefaultConfiguration child2 = new DefaultConfiguration( "my-type2", "test" ); | |||||
| config.addChild( child1 ); | |||||
| config.addChild( child2 ); | |||||
| final ConfigTest7 test = new ConfigTest7(); | |||||
| // Configure the object | |||||
| m_configurer.configure( test, config, m_context ); | |||||
| final ConfigTest7 expected = new ConfigTest7(); | |||||
| expected.add( child1 ); | |||||
| expected.add( child2 ); | |||||
| assertEquals( expected, test ); | |||||
| } | |||||
| /** | |||||
| * Tests to see if typed adder works. | |||||
| */ | |||||
| public void testConfigAdder() | |||||
| throws Exception | |||||
| { | |||||
| // Setup test data | |||||
| final DefaultConfiguration config = new DefaultConfiguration( "test", "test" ); | |||||
| final DefaultConfiguration child1 = new DefaultConfiguration( "config", "test" ); | |||||
| final DefaultConfiguration child2 = new DefaultConfiguration( "config", "test" ); | |||||
| config.addChild( child1 ); | |||||
| config.addChild( child2 ); | |||||
| final ConfigTest8 test = new ConfigTest8(); | |||||
| // Configure the object | |||||
| m_configurer.configure( test, config, m_context ); | |||||
| final ConfigTest8 expected = new ConfigTest8(); | |||||
| expected.addConfig( child1 ); | |||||
| expected.addConfig( child2 ); | |||||
| assertEquals( expected, test ); | |||||
| } | |||||
| /** | /** | ||||
| * Test resolving properties in an id. | * Test resolving properties in an id. | ||||
| */ | */ | ||||
| @@ -0,0 +1,23 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| /** | |||||
| * A basic implementation of MyRole1 to test configurer. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class MyType1 | |||||
| implements MyRole1 | |||||
| { | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| return object.getClass() == getClass(); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,23 @@ | |||||
| /* | |||||
| * Copyright (C) The Apache Software Foundation. All rights reserved. | |||||
| * | |||||
| * This software is published under the terms of the Apache Software License | |||||
| * version 1.1, a copy of which has been included with this distribution in | |||||
| * the LICENSE.txt file. | |||||
| */ | |||||
| package org.apache.myrmidon.components.configurer; | |||||
| /** | |||||
| * A basic implementation of MyRole1 to test configurer. | |||||
| * | |||||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||||
| * @version $Revision$ $Date$ | |||||
| */ | |||||
| public class MyType2 | |||||
| implements MyRole1 | |||||
| { | |||||
| public boolean equals( final Object object ) | |||||
| { | |||||
| return object.getClass() == getClass(); | |||||
| } | |||||
| } | |||||