* A class may now be explicitly associated with a role, rather than being implicit in the role name. * Added RoleInfo to bundle up role meta-info. * Reworked the methods of RoleManager. * Added test-cases for DefaultRoleManager. * Make tests compile again. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271498 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -25,6 +25,7 @@ import org.apache.avalon.framework.service.Serviceable; | |||
| import org.apache.myrmidon.framework.DataType; | |||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | |||
| import org.apache.myrmidon.interfaces.converter.MasterConverter; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.type.TypeException; | |||
| import org.apache.myrmidon.interfaces.type.TypeFactory; | |||
| @@ -468,7 +469,7 @@ public class DefaultConfigurer | |||
| private PropertyConfigurer getConfigurerFromName( final ObjectConfigurer configurer, | |||
| final String name, | |||
| boolean ignoreRoleName ) | |||
| throws NoSuchPropertyException | |||
| throws Exception | |||
| { | |||
| // Try a named property | |||
| final NoSuchPropertyException exc; | |||
| @@ -486,8 +487,8 @@ public class DefaultConfigurer | |||
| final PropertyConfigurer propertyConfigurer = configurer.getTypedProperty(); | |||
| if( !ignoreRoleName ) | |||
| { | |||
| final String roleShorthand = m_roleManager.getNameForRole( propertyConfigurer.getType().getName() ); | |||
| if( !name.equalsIgnoreCase( roleShorthand ) ) | |||
| final RoleInfo roleInfo = m_roleManager.getRoleByType( propertyConfigurer.getType() ); | |||
| if( roleInfo == null || !name.equalsIgnoreCase( roleInfo.getShorthand() ) ) | |||
| { | |||
| // Rethrow the original exception | |||
| throw exc; | |||
| @@ -24,6 +24,7 @@ import org.apache.myrmidon.interfaces.deployer.Deployer; | |||
| import org.apache.myrmidon.interfaces.deployer.DeploymentException; | |||
| import org.apache.myrmidon.interfaces.deployer.TypeDefinition; | |||
| import org.apache.myrmidon.interfaces.deployer.TypeDeployer; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.service.AntServiceManager; | |||
| import org.apache.myrmidon.interfaces.service.ServiceFactory; | |||
| @@ -146,12 +147,10 @@ public class DefaultDeployer | |||
| final ServiceDefinition definition ) | |||
| throws Exception | |||
| { | |||
| // Determine the service interface class name | |||
| String serviceTypeName = getRoleForName( definition.getRoleShorthand() ); | |||
| // Register the service factory | |||
| final String roleShorthand = definition.getRoleShorthand(); | |||
| final Class serviceType = getRoleType( roleShorthand ); | |||
| final String factoryClassName = definition.getFactoryClass(); | |||
| handleType( deployment, ServiceFactory.class, serviceTypeName, factoryClassName ); | |||
| handleType( deployment, ServiceFactory.class, serviceType.getName(), factoryClassName ); | |||
| } | |||
| /** | |||
| @@ -206,8 +205,7 @@ public class DefaultDeployer | |||
| } | |||
| // Deploy general-purpose type | |||
| final String role = getRoleForName( roleShorthand ); | |||
| final Class roleType = deployment.getClassLoader().loadClass( role ); | |||
| final Class roleType = getRoleType( roleShorthand ); | |||
| handleType( deployment, roleType, typeName, className ); | |||
| if( getLogger().isDebugEnabled() ) | |||
| @@ -261,10 +259,13 @@ public class DefaultDeployer | |||
| */ | |||
| public void deployRole( final Deployment deployment, | |||
| final RoleDefinition roleDef ) | |||
| throws Exception | |||
| { | |||
| final String name = roleDef.getShortHand(); | |||
| final String role = roleDef.getRoleName(); | |||
| m_roleManager.addNameRoleMapping( name, role ); | |||
| final Class type = deployment.getClassLoader().loadClass( role ); | |||
| final RoleInfo roleInfo = new RoleInfo( role, name, type ); | |||
| m_roleManager.addRole( roleInfo ); | |||
| if( getLogger().isDebugEnabled() ) | |||
| { | |||
| @@ -274,19 +275,17 @@ public class DefaultDeployer | |||
| } | |||
| /** | |||
| * Determines the role name from shorthand name. | |||
| * Determines the type for a role, from its shorthand. | |||
| */ | |||
| private String getRoleForName( final String name ) | |||
| private Class getRoleType( final String roleShorthand ) | |||
| throws DeploymentException | |||
| { | |||
| final String role = m_roleManager.getRoleForName( name ); | |||
| if( null == role ) | |||
| final RoleInfo roleInfo = m_roleManager.getRoleByShorthandName( roleShorthand ); | |||
| if( null == roleInfo ) | |||
| { | |||
| final String message = REZ.getString( "unknown-role4name.error", name ); | |||
| final String message = REZ.getString( "unknown-role4name.error", roleShorthand ); | |||
| throw new DeploymentException( message ); | |||
| } | |||
| return role; | |||
| return roleInfo.getType(); | |||
| } | |||
| } | |||
| @@ -267,15 +267,25 @@ class Deployment | |||
| * Deploys the roles from a role descriptor. | |||
| */ | |||
| private void deployRoles( final RoleDescriptor descriptor ) | |||
| throws DeploymentException | |||
| { | |||
| final String message = REZ.getString( "url-deploy-roles.notice", descriptor.getUrl() ); | |||
| getLogger().info( message ); | |||
| final RoleDefinition[] definitions = descriptor.getDefinitions(); | |||
| for( int i = 0; i < definitions.length; i++ ) | |||
| try | |||
| { | |||
| final RoleDefinition definition = definitions[ i ]; | |||
| m_deployer.deployRole( this, definition ); | |||
| final String message = REZ.getString( "url-deploy-roles.notice", descriptor.getUrl() ); | |||
| getLogger().info( message ); | |||
| final RoleDefinition[] definitions = descriptor.getDefinitions(); | |||
| for( int i = 0; i < definitions.length; i++ ) | |||
| { | |||
| final RoleDefinition definition = definitions[ i ]; | |||
| m_deployer.deployRole( this, definition ); | |||
| } | |||
| } | |||
| catch( Exception e ) | |||
| { | |||
| final String message = REZ.getString( "deploy-roles.error", descriptor.getUrl() ); | |||
| throw new DeploymentException( message, e ); | |||
| } | |||
| } | |||
| @@ -7,6 +7,7 @@ url-deploy-services.notice=Registering services from "{0}". | |||
| deploy-from-classloader.error=Could not register types from ClassLoader. | |||
| deploy-from-file.error=Could not register types from type library "{0}". | |||
| deploy-roles.error=Could not register roles from "{0}". | |||
| deploy-types.error=Could not register types from "{0}". | |||
| deploy-services.error=Could not register services from "{0}". | |||
| deploy-converter.error=Could not register converter that converts from {0} to {1}. | |||
| @@ -10,6 +10,8 @@ package org.apache.myrmidon.components.role; | |||
| import java.util.HashMap; | |||
| import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
| import org.apache.avalon.excalibur.i18n.Resources; | |||
| import org.apache.myrmidon.interfaces.role.RoleException; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| /** | |||
| @@ -27,11 +29,14 @@ public class DefaultRoleManager | |||
| /** Parent <code>RoleManager</code> for nested resolution */ | |||
| private final RoleManager m_parent; | |||
| /** Map for name to role mapping */ | |||
| private final HashMap m_names = new HashMap(); | |||
| /** Map from shorthand name -> RoleInfo. */ | |||
| private final HashMap m_shorthandMap = new HashMap(); | |||
| /** Map for role to name mapping */ | |||
| private final HashMap m_roles = new HashMap(); | |||
| /** Map from role name -> RoleInfo. */ | |||
| private final HashMap m_nameMap = new HashMap(); | |||
| /** Map from role type -> RoleInfo. */ | |||
| private final HashMap m_typeMap = new HashMap(); | |||
| /** | |||
| * constructor--this RoleManager has no parent. | |||
| @@ -53,66 +58,106 @@ public class DefaultRoleManager | |||
| } | |||
| /** | |||
| * Find Role name based on shorthand name. | |||
| * Find role based on shorthand name. | |||
| * | |||
| * @param name the shorthand name | |||
| * @return the role | |||
| * @return the role, or null if the role cannot be found. | |||
| */ | |||
| public String getRoleForName( final String name ) | |||
| public RoleInfo getRoleByShorthandName( final String name ) | |||
| { | |||
| final String role = (String)m_names.get( name ); | |||
| final RoleInfo role = (RoleInfo)m_shorthandMap.get( name ); | |||
| if( null == role && null != m_parent ) | |||
| { | |||
| return m_parent.getRoleForName( name ); | |||
| return m_parent.getRoleByShorthandName( name ); | |||
| } | |||
| return role; | |||
| } | |||
| /** | |||
| * Find name based on role. | |||
| * Find role based on role type. | |||
| * | |||
| * @param role the role | |||
| * @return the name | |||
| * @param type the role type. | |||
| * @return the role, or null if the role cannot be found. | |||
| */ | |||
| public String getNameForRole( final String role ) | |||
| public RoleInfo getRoleByType( final Class type ) | |||
| { | |||
| final String name = (String)m_roles.get( role ); | |||
| final RoleInfo role = (RoleInfo)m_typeMap.get( type ); | |||
| if( null == name && null != m_parent ) | |||
| if( null == role && null != m_parent ) | |||
| { | |||
| return m_parent.getNameForRole( name ); | |||
| return m_parent.getRoleByType( type ); | |||
| } | |||
| return name; | |||
| return role; | |||
| } | |||
| /** | |||
| * Add a mapping between name and role | |||
| * Find role based on name. | |||
| * | |||
| * @param name the shorthand name | |||
| * @param role the role | |||
| * @exception IllegalArgumentException if an name is already mapped to a different role | |||
| * @param name the role name | |||
| * @return the role, or null if the role cannot be found. | |||
| */ | |||
| public RoleInfo getRole( final String name ) | |||
| { | |||
| final RoleInfo role = (RoleInfo)m_nameMap.get( name ); | |||
| if( null == role && null != m_parent ) | |||
| { | |||
| return m_parent.getRole( name ); | |||
| } | |||
| return role; | |||
| } | |||
| /** | |||
| * Adds a role definition. | |||
| */ | |||
| public void addNameRoleMapping( final String name, final String role ) | |||
| throws IllegalArgumentException | |||
| public void addRole( final RoleInfo role ) throws RoleException | |||
| { | |||
| final String oldRole = (String)m_names.get( name ); | |||
| // Check for duplicate role names | |||
| final String roleName = role.getName(); | |||
| RoleInfo oldRole = (RoleInfo)m_nameMap.get( roleName ); | |||
| if( null != oldRole && !oldRole.equals( role ) ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-name.error", oldRole ); | |||
| throw new IllegalArgumentException( message ); | |||
| final String message = REZ.getString( "duplicate-role.error", roleName ); | |||
| throw new RoleException( message ); | |||
| } | |||
| final String oldName = (String)m_roles.get( role ); | |||
| if( null != oldName && !oldName.equals( name ) ) | |||
| // Check for duplicate shorthand names | |||
| final String shorthand = role.getShorthand(); | |||
| if( shorthand != null ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-role.error", oldName ); | |||
| throw new IllegalArgumentException( message ); | |||
| oldRole = (RoleInfo)m_shorthandMap.get( shorthand ); | |||
| if( null != oldRole && !oldRole.equals( role ) ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-shorthand.error", shorthand ); | |||
| throw new RoleException( message ); | |||
| } | |||
| } | |||
| m_names.put( name, role ); | |||
| m_roles.put( role, name ); | |||
| // Check for duplicate types | |||
| final Class roleType = role.getType(); | |||
| if( roleType != null ) | |||
| { | |||
| oldRole = (RoleInfo)m_typeMap.get( roleType ); | |||
| if( null != oldRole && !oldRole.equals( role ) ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-type.error", roleType.getName() ); | |||
| throw new RoleException( message ); | |||
| } | |||
| } | |||
| // Add the role to the maps | |||
| m_nameMap.put( roleName, role ); | |||
| if( shorthand != null ) | |||
| { | |||
| m_shorthandMap.put( shorthand, role ); | |||
| } | |||
| if( roleType != null ) | |||
| { | |||
| m_typeMap.put( roleType, role ); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,2 +1,3 @@ | |||
| duplicate-name.error=Name already mapped to another role ({0}). | |||
| duplicate-role.error=Role already mapped to another name ({0}). | |||
| duplicate-shorthand.error=Duplicate roles with shorthand name "{0}". | |||
| duplicate-type.error=Duplicate roles with type "{0}". | |||
| duplicate-role.error=Duplicate roles with name "{0}". | |||
| @@ -0,0 +1,30 @@ | |||
| /* | |||
| * 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.interfaces.role; | |||
| import org.apache.avalon.framework.CascadingException; | |||
| /** | |||
| * An exception thrown by the RoleManager. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class RoleException | |||
| extends CascadingException | |||
| { | |||
| public RoleException( String s ) | |||
| { | |||
| super( s ); | |||
| } | |||
| public RoleException( String s, Throwable throwable ) | |||
| { | |||
| super( s, throwable ); | |||
| } | |||
| } | |||
| @@ -0,0 +1,130 @@ | |||
| /* | |||
| * 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.interfaces.role; | |||
| /** | |||
| * A role definition. Role definitions are immutable. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public final class RoleInfo | |||
| { | |||
| private final String m_name; | |||
| private final String m_shorthand; | |||
| private final Class m_type; | |||
| /** | |||
| * Creates a role definition. | |||
| * | |||
| * @param name The role name. | |||
| */ | |||
| public RoleInfo( final String name ) | |||
| { | |||
| m_name = name; | |||
| m_shorthand = null; | |||
| m_type = null; | |||
| } | |||
| /** | |||
| * Creates a role definition. | |||
| * | |||
| * @param name The role name. | |||
| * @param shorthand The role shorthand name. | |||
| */ | |||
| public RoleInfo( final String name, final String shorthand ) | |||
| { | |||
| m_name = name; | |||
| m_shorthand = shorthand; | |||
| m_type = null; | |||
| } | |||
| /** | |||
| * Creates a role definition. | |||
| * | |||
| * @param name The role name. | |||
| * @param shorthand The role shorthand name. May be null. | |||
| * @param type The role type. May be null. | |||
| */ | |||
| public RoleInfo( final String name, final String shorthand, final Class type ) | |||
| { | |||
| m_name = name; | |||
| m_shorthand = shorthand; | |||
| m_type = type; | |||
| } | |||
| /** | |||
| * Creates a role definition. The role type's fully-qualified name | |||
| * is used as the role name. | |||
| */ | |||
| public RoleInfo( final String shorthand, final Class type ) | |||
| { | |||
| m_name = type.getName(); | |||
| m_shorthand = shorthand; | |||
| m_type = type; | |||
| } | |||
| /** | |||
| * Compares a role to this role. | |||
| */ | |||
| public boolean equals( final RoleInfo role ) | |||
| { | |||
| if( role == null ) | |||
| { | |||
| return false; | |||
| } | |||
| if( ! m_name.equals( role.m_name ) ) | |||
| { | |||
| return false; | |||
| } | |||
| if( m_shorthand == null && role.m_shorthand != null ) | |||
| { | |||
| return false; | |||
| } | |||
| if( m_shorthand != null && ! m_shorthand.equals( role.m_shorthand ) ) | |||
| { | |||
| return false; | |||
| } | |||
| if( m_type != role.m_type ) | |||
| { | |||
| return false; | |||
| } | |||
| return true; | |||
| } | |||
| /** | |||
| * Returns this role's name. This name uniquely identifies the role. | |||
| */ | |||
| public String getName() | |||
| { | |||
| return m_name; | |||
| } | |||
| /** | |||
| * Returns this role's shorthand name. | |||
| * | |||
| * @return The shorthand name, or null if this role has none. | |||
| */ | |||
| public String getShorthand() | |||
| { | |||
| return m_shorthand; | |||
| } | |||
| /** | |||
| * Returns this role's type. All implementations of this role must be | |||
| * assignable to this type. | |||
| * | |||
| * @return The role type, or null if this role has no type. | |||
| */ | |||
| public Class getType() | |||
| { | |||
| return m_type; | |||
| } | |||
| } | |||
| @@ -8,12 +8,13 @@ | |||
| package org.apache.myrmidon.interfaces.role; | |||
| /** | |||
| * Interface to manage roles and mapping to shorthand names. | |||
| * Interface to manage roles. | |||
| * | |||
| * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a> | |||
| * @author <a href="mailto:ricardo@apache,org">Ricardo Rocha</a> | |||
| * @author <a href="mailto:giacomo@apache,org">Giacomo Pati</a> | |||
| * @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version CVS $Revision$ $Date$ | |||
| */ | |||
| public interface RoleManager | |||
| @@ -21,27 +22,31 @@ public interface RoleManager | |||
| String ROLE = RoleManager.class.getName(); | |||
| /** | |||
| * Find Role name based on shorthand name. | |||
| * Find role based on shorthand name. | |||
| * | |||
| * @param name the shorthand name | |||
| * @return the role | |||
| * @return the role, or null if the role cannot be found. | |||
| */ | |||
| String getRoleForName( String name ); | |||
| RoleInfo getRoleByShorthandName( String name ); | |||
| /** | |||
| * Find name based on role. | |||
| * Find role based on role type. | |||
| * | |||
| * @param role the role | |||
| * @return the name | |||
| * @param type the role type. | |||
| * @return the role, or null if the role cannot be found. | |||
| */ | |||
| String getNameForRole( String role ); | |||
| RoleInfo getRoleByType( Class type ); | |||
| /** | |||
| * Adds a role mapping. | |||
| * Find role based on name. | |||
| * | |||
| * @param name the shorthand name. | |||
| * @param role the role name. | |||
| * @param name the role name | |||
| * @return the role, or null if the role cannot be found. | |||
| */ | |||
| void addNameRoleMapping( String name, String role ) | |||
| throws IllegalArgumentException; | |||
| RoleInfo getRole( String name ); | |||
| /** | |||
| * Adds a role definition. | |||
| */ | |||
| void addRole( RoleInfo role ) throws RoleException; | |||
| } | |||
| @@ -4,7 +4,7 @@ | |||
| <role shorthand="listener" name="org.apache.myrmidon.listeners.ProjectListener"/> | |||
| <role shorthand="aspect" name="org.apache.myrmidon.aspects.AspectHandler"/> | |||
| <role shorthand="project-builder" name="org.apache.myrmidon.interfaces.builder.ProjectBuilder"/> | |||
| <role shorthand="converter" name="org.apache.myrmidon.converter.Converter"/> | |||
| <role shorthand="converter" name="org.apache.aut.converter.Converter"/> | |||
| <role shorthand="configurer" name="org.apache.myrmidon.interfaces.configurer.Configurer"/> | |||
| <role shorthand="exec-manager" name="org.apache.aut.nativelib.ExecManager"/> | |||
| <role shorthand="file-system-manager" name="org.apache.aut.vfs.FileSystemManager"/> | |||
| @@ -10,11 +10,12 @@ package org.apache.myrmidon.components; | |||
| import java.util.ArrayList; | |||
| import java.util.Iterator; | |||
| import java.util.List; | |||
| import org.apache.aut.converter.Converter; | |||
| import org.apache.avalon.framework.logger.LogEnabled; | |||
| import org.apache.avalon.framework.logger.Logger; | |||
| import org.apache.avalon.framework.service.DefaultServiceManager; | |||
| import org.apache.avalon.framework.service.ServiceManager; | |||
| import org.apache.avalon.framework.service.ServiceException; | |||
| import org.apache.avalon.framework.service.ServiceManager; | |||
| import org.apache.avalon.framework.service.Serviceable; | |||
| import org.apache.myrmidon.AbstractMyrmidonTest; | |||
| import org.apache.myrmidon.components.configurer.DefaultConfigurer; | |||
| @@ -25,14 +26,15 @@ import org.apache.myrmidon.components.deployer.DefaultClassLoaderManager; | |||
| import org.apache.myrmidon.components.deployer.DefaultDeployer; | |||
| import org.apache.myrmidon.components.extensions.DefaultExtensionManager; | |||
| import org.apache.myrmidon.components.role.DefaultRoleManager; | |||
| import org.apache.myrmidon.components.service.DefaultAntServiceManager; | |||
| import org.apache.myrmidon.components.type.DefaultTypeManager; | |||
| import org.apache.aut.converter.Converter; | |||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | |||
| import org.apache.myrmidon.interfaces.converter.ConverterRegistry; | |||
| import org.apache.myrmidon.interfaces.converter.MasterConverter; | |||
| import org.apache.myrmidon.interfaces.deployer.Deployer; | |||
| import org.apache.myrmidon.interfaces.extensions.ExtensionManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.service.AntServiceManager; | |||
| import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; | |||
| import org.apache.myrmidon.interfaces.type.TypeException; | |||
| import org.apache.myrmidon.interfaces.type.TypeManager; | |||
| @@ -115,8 +117,8 @@ public abstract class AbstractComponentTest | |||
| m_serviceManager.put( RoleManager.ROLE, component ); | |||
| components.add( component ); | |||
| component = new DefaultServiceManager(); | |||
| m_serviceManager.put( ServiceManager.ROLE, component ); | |||
| component = new DefaultAntServiceManager(); | |||
| m_serviceManager.put( AntServiceManager.ROLE, component ); | |||
| components.add( component ); | |||
| // Log enable the components | |||
| @@ -13,12 +13,15 @@ import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
| import org.apache.avalon.excalibur.i18n.Resources; | |||
| import org.apache.avalon.framework.configuration.ConfigurationException; | |||
| import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
| import org.apache.avalon.framework.context.Context; | |||
| import org.apache.myrmidon.api.TaskContext; | |||
| import org.apache.myrmidon.components.AbstractComponentTest; | |||
| import org.apache.myrmidon.components.workspace.DefaultTaskContext; | |||
| import org.apache.myrmidon.framework.DataType; | |||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | |||
| import org.apache.myrmidon.interfaces.configurer.TaskContextAdapter; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; | |||
| /** | |||
| @@ -34,6 +37,7 @@ public class DefaultConfigurerTest | |||
| private Configurer m_configurer; | |||
| private DefaultTaskContext m_context; | |||
| private Context m_adaptor; | |||
| public DefaultConfigurerTest( String name ) | |||
| { | |||
| @@ -55,6 +59,7 @@ public class DefaultConfigurerTest | |||
| m_context = new DefaultTaskContext(); | |||
| final File baseDir = new File( "." ).getAbsoluteFile(); | |||
| m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir ); | |||
| m_adaptor = new TaskContextAdapter( m_context ); | |||
| } | |||
| /** | |||
| @@ -73,7 +78,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest1 test = new ConfigTest1(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -102,7 +107,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest10 test = new ConfigTest10(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest10 expected = new ConfigTest10(); | |||
| @@ -126,7 +131,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -156,7 +161,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest2 test = new ConfigTest2(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest2 expected = new ConfigTest2(); | |||
| @@ -185,7 +190,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -209,7 +214,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest1 test = new ConfigTest1(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -232,7 +237,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -257,7 +262,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "other" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -279,7 +284,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "some value" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -303,7 +308,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "some value" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -329,7 +334,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -354,7 +359,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -380,7 +385,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -415,7 +420,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest6 test = new ConfigTest6(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest6 expected = new ConfigTest6(); | |||
| expected.add( new MyType1() ); | |||
| @@ -435,13 +440,14 @@ public class DefaultConfigurerTest | |||
| // Set up the converter and role | |||
| RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); | |||
| roleMgr.addNameRoleMapping( "my-role1", MyRole1.ROLE ); | |||
| final RoleInfo roleInfo = new RoleInfo("my-role1", MyRole1.class ); | |||
| roleMgr.addRole( roleInfo ); | |||
| registerConverter( StringToMyRole1Converter.class, String.class, MyRole1.class ); | |||
| final ConfigTest6 test = new ConfigTest6(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest6 expected = new ConfigTest6(); | |||
| @@ -465,7 +471,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest7 test = new ConfigTest7(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest7 expected = new ConfigTest7(); | |||
| expected.add( child1 ); | |||
| @@ -489,7 +495,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest8 test = new ConfigTest8(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest8 expected = new ConfigTest8(); | |||
| expected.addConfig( child1 ); | |||
| @@ -509,7 +515,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest9 test = new ConfigTest9(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest9 expected = new ConfigTest9(); | |||
| expected.configure( config ); | |||
| @@ -532,7 +538,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "some indirect value" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -555,7 +561,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -583,7 +589,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -612,14 +618,15 @@ public class DefaultConfigurerTest | |||
| // Add role mapping, and add to reference to context | |||
| final RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); | |||
| roleMgr.addNameRoleMapping( "my-role1", MyRole1.class.getName() ); | |||
| final RoleInfo roleInfo = new RoleInfo( "my-role1", MyRole1.class ); | |||
| roleMgr.addRole( roleInfo ); | |||
| m_context.setProperty( "id", new MyType1() ); | |||
| m_context.setProperty( "id2", new MyType2() ); | |||
| final ConfigTest6 test = new ConfigTest6(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Compare against expected value | |||
| final ConfigTest6 expected = new ConfigTest6(); | |||
| @@ -644,7 +651,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -675,7 +682,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest3 test = new ConfigTest3(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Test expected value | |||
| final ConfigTest3 expected = new ConfigTest3(); | |||
| @@ -15,6 +15,7 @@ import org.apache.myrmidon.interfaces.deployer.Deployer; | |||
| import org.apache.myrmidon.interfaces.deployer.TypeDefinition; | |||
| import org.apache.myrmidon.interfaces.deployer.TypeDeployer; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.type.TypeFactory; | |||
| import org.apache.myrmidon.interfaces.type.TypeManager; | |||
| import org.apache.myrmidon.interfaces.type.TypeException; | |||
| @@ -32,6 +33,7 @@ public class DefaultDeployerTest | |||
| { | |||
| private static final String TEST_TYPE1_NAME = "test-type1"; | |||
| private static final String DATA_TYPE_ROLE = "data-type"; | |||
| private static final String CONVERTER_ROLE = "converter"; | |||
| private Deployer m_deployer; | |||
| private RoleManager m_roleManager; | |||
| @@ -54,8 +56,8 @@ public class DefaultDeployerTest | |||
| // Add some core roles | |||
| m_roleManager = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); | |||
| m_roleManager.addNameRoleMapping( DATA_TYPE_ROLE, DataType.ROLE ); | |||
| m_roleManager.addNameRoleMapping( "converter", Converter.ROLE ); | |||
| m_roleManager.addRole( new RoleInfo( DataType.ROLE, DATA_TYPE_ROLE, DataType.class ) ); | |||
| m_roleManager.addRole( new RoleInfo( Converter.ROLE, CONVERTER_ROLE, Converter.class ) ); | |||
| } | |||
| /** | |||
| @@ -0,0 +1,182 @@ | |||
| /* | |||
| * 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.role; | |||
| import org.apache.myrmidon.AbstractMyrmidonTest; | |||
| import org.apache.myrmidon.api.Task; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.role.RoleException; | |||
| import org.apache.avalon.excalibur.i18n.Resources; | |||
| import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
| /** | |||
| * Test cases for the DefaultRoleManager. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class DefaultRoleManagerTest | |||
| extends AbstractMyrmidonTest | |||
| { | |||
| private final static Resources REZ | |||
| = ResourceManager.getPackageResources( DefaultRoleManagerTest.class ); | |||
| private RoleManager m_roleManager; | |||
| public DefaultRoleManagerTest( String name ) | |||
| { | |||
| super( name ); | |||
| } | |||
| protected void setUp() throws Exception | |||
| { | |||
| m_roleManager = new DefaultRoleManager(); | |||
| } | |||
| /** | |||
| * Tests looking up a role by name, shorthand and type. | |||
| */ | |||
| public void testLookup() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "role-shorthand"; | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| // Lookup the role | |||
| RoleInfo role = m_roleManager.getRole( roleName ); | |||
| assertTrue( origRole.equals(role) ); | |||
| // Lookup the role by shorthand | |||
| role = m_roleManager.getRoleByShorthandName( shorthand ); | |||
| assertTrue( origRole.equals( role ) ); | |||
| // Lookup the role by type | |||
| role = m_roleManager.getRoleByType( Task.class ); | |||
| assertTrue( origRole.equals( role ) ); | |||
| // Lookup an unknown role | |||
| RoleInfo unknownRole = m_roleManager.getRole( "unknown" ); | |||
| assertNull( unknownRole ); | |||
| // Lookup an unknown shorthand | |||
| unknownRole = m_roleManager.getRoleByShorthandName( "unknown" ); | |||
| assertNull( unknownRole ); | |||
| // Lookup an unknown role | |||
| unknownRole = m_roleManager.getRoleByType( DefaultRoleManagerTest.class ); | |||
| assertNull( unknownRole ); | |||
| } | |||
| /** | |||
| * Tests inheriting roles from parent role manager. | |||
| */ | |||
| public void testParent() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "shorthand"; | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| final RoleManager roleManager = new DefaultRoleManager( m_roleManager ); | |||
| // Lookup by name | |||
| RoleInfo roleInfo = roleManager.getRole( roleName ); | |||
| assertTrue( origRole.equals( roleInfo ) ); | |||
| // Lookup by shorthand | |||
| roleInfo = roleManager.getRoleByShorthandName( shorthand ); | |||
| assertTrue( origRole.equals( roleInfo ) ); | |||
| // Lookup by type | |||
| roleInfo = roleManager.getRoleByType( Task.class ); | |||
| assertTrue( origRole.equals( roleInfo ) ); | |||
| } | |||
| /** | |||
| * Tests overriding a role in a child role manager. | |||
| */ | |||
| public void testOverrideName() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "shorthand"; | |||
| // Add original role | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| // Override role | |||
| final RoleManager roleManager = new DefaultRoleManager( m_roleManager ); | |||
| final RoleInfo overrideNameRole = new RoleInfo( roleName, "shorthand1" ); | |||
| roleManager.addRole( overrideNameRole ); | |||
| final RoleInfo overrideShorthandRole = new RoleInfo( "role2", shorthand ); | |||
| roleManager.addRole( overrideShorthandRole ); | |||
| final RoleInfo overrideTypeRole = new RoleInfo( "role3", "shorthand3", Task.class ); | |||
| roleManager.addRole( overrideTypeRole ); | |||
| // Lookup role by name | |||
| RoleInfo roleInfo = roleManager.getRole( roleName ); | |||
| assertTrue( overrideNameRole.equals( roleInfo ) ); | |||
| // Lookup role by shorthand | |||
| roleInfo = roleManager.getRoleByShorthandName( shorthand ); | |||
| assertTrue( overrideShorthandRole.equals( roleInfo ) ); | |||
| // Lookup role by type | |||
| roleInfo = roleManager.getRoleByType( Task.class ); | |||
| assertTrue( overrideTypeRole.equals( roleInfo ) ); | |||
| } | |||
| /** | |||
| * Tests adding duplicate roles. | |||
| */ | |||
| public void testDuplicate() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "shorthand"; | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| // Duplicate role name | |||
| try | |||
| { | |||
| m_roleManager.addRole( new RoleInfo( roleName ) ); | |||
| fail(); | |||
| } | |||
| catch( RoleException exc ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-role.error", roleName ); | |||
| assertSameMessage( message, exc ); | |||
| } | |||
| // Duplicate shorthand | |||
| try | |||
| { | |||
| m_roleManager.addRole( new RoleInfo( "another-role", shorthand ) ); | |||
| fail(); | |||
| } | |||
| catch( RoleException exc ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-shorthand.error", shorthand ); | |||
| assertSameMessage( message, exc ); | |||
| } | |||
| // Duplicate type | |||
| try | |||
| { | |||
| m_roleManager.addRole( new RoleInfo( null, Task.class ) ); | |||
| fail(); | |||
| } | |||
| catch( RoleException exc ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-type.error", Task.class.getName() ); | |||
| assertSameMessage( message, exc ); | |||
| } | |||
| } | |||
| } | |||
| @@ -10,11 +10,12 @@ package org.apache.myrmidon.components; | |||
| import java.util.ArrayList; | |||
| import java.util.Iterator; | |||
| import java.util.List; | |||
| import org.apache.aut.converter.Converter; | |||
| import org.apache.avalon.framework.logger.LogEnabled; | |||
| import org.apache.avalon.framework.logger.Logger; | |||
| import org.apache.avalon.framework.service.DefaultServiceManager; | |||
| import org.apache.avalon.framework.service.ServiceManager; | |||
| import org.apache.avalon.framework.service.ServiceException; | |||
| import org.apache.avalon.framework.service.ServiceManager; | |||
| import org.apache.avalon.framework.service.Serviceable; | |||
| import org.apache.myrmidon.AbstractMyrmidonTest; | |||
| import org.apache.myrmidon.components.configurer.DefaultConfigurer; | |||
| @@ -25,14 +26,15 @@ import org.apache.myrmidon.components.deployer.DefaultClassLoaderManager; | |||
| import org.apache.myrmidon.components.deployer.DefaultDeployer; | |||
| import org.apache.myrmidon.components.extensions.DefaultExtensionManager; | |||
| import org.apache.myrmidon.components.role.DefaultRoleManager; | |||
| import org.apache.myrmidon.components.service.DefaultAntServiceManager; | |||
| import org.apache.myrmidon.components.type.DefaultTypeManager; | |||
| import org.apache.aut.converter.Converter; | |||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | |||
| import org.apache.myrmidon.interfaces.converter.ConverterRegistry; | |||
| import org.apache.myrmidon.interfaces.converter.MasterConverter; | |||
| import org.apache.myrmidon.interfaces.deployer.Deployer; | |||
| import org.apache.myrmidon.interfaces.extensions.ExtensionManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.service.AntServiceManager; | |||
| import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; | |||
| import org.apache.myrmidon.interfaces.type.TypeException; | |||
| import org.apache.myrmidon.interfaces.type.TypeManager; | |||
| @@ -115,8 +117,8 @@ public abstract class AbstractComponentTest | |||
| m_serviceManager.put( RoleManager.ROLE, component ); | |||
| components.add( component ); | |||
| component = new DefaultServiceManager(); | |||
| m_serviceManager.put( ServiceManager.ROLE, component ); | |||
| component = new DefaultAntServiceManager(); | |||
| m_serviceManager.put( AntServiceManager.ROLE, component ); | |||
| components.add( component ); | |||
| // Log enable the components | |||
| @@ -13,12 +13,15 @@ import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
| import org.apache.avalon.excalibur.i18n.Resources; | |||
| import org.apache.avalon.framework.configuration.ConfigurationException; | |||
| import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
| import org.apache.avalon.framework.context.Context; | |||
| import org.apache.myrmidon.api.TaskContext; | |||
| import org.apache.myrmidon.components.AbstractComponentTest; | |||
| import org.apache.myrmidon.components.workspace.DefaultTaskContext; | |||
| import org.apache.myrmidon.framework.DataType; | |||
| import org.apache.myrmidon.interfaces.configurer.Configurer; | |||
| import org.apache.myrmidon.interfaces.configurer.TaskContextAdapter; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.type.DefaultTypeFactory; | |||
| /** | |||
| @@ -34,6 +37,7 @@ public class DefaultConfigurerTest | |||
| private Configurer m_configurer; | |||
| private DefaultTaskContext m_context; | |||
| private Context m_adaptor; | |||
| public DefaultConfigurerTest( String name ) | |||
| { | |||
| @@ -55,6 +59,7 @@ public class DefaultConfigurerTest | |||
| m_context = new DefaultTaskContext(); | |||
| final File baseDir = new File( "." ).getAbsoluteFile(); | |||
| m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir ); | |||
| m_adaptor = new TaskContextAdapter( m_context ); | |||
| } | |||
| /** | |||
| @@ -73,7 +78,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest1 test = new ConfigTest1(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -102,7 +107,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest10 test = new ConfigTest10(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest10 expected = new ConfigTest10(); | |||
| @@ -126,7 +131,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -156,7 +161,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest2 test = new ConfigTest2(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest2 expected = new ConfigTest2(); | |||
| @@ -185,7 +190,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -209,7 +214,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest1 test = new ConfigTest1(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -232,7 +237,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -257,7 +262,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "other" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -279,7 +284,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "some value" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -303,7 +308,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "some value" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -329,7 +334,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -354,7 +359,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -380,7 +385,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( final ConfigurationException ce ) | |||
| @@ -415,7 +420,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest6 test = new ConfigTest6(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest6 expected = new ConfigTest6(); | |||
| expected.add( new MyType1() ); | |||
| @@ -435,13 +440,14 @@ public class DefaultConfigurerTest | |||
| // Set up the converter and role | |||
| RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); | |||
| roleMgr.addNameRoleMapping( "my-role1", MyRole1.ROLE ); | |||
| final RoleInfo roleInfo = new RoleInfo("my-role1", MyRole1.class ); | |||
| roleMgr.addRole( roleInfo ); | |||
| registerConverter( StringToMyRole1Converter.class, String.class, MyRole1.class ); | |||
| final ConfigTest6 test = new ConfigTest6(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check result | |||
| final ConfigTest6 expected = new ConfigTest6(); | |||
| @@ -465,7 +471,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest7 test = new ConfigTest7(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest7 expected = new ConfigTest7(); | |||
| expected.add( child1 ); | |||
| @@ -489,7 +495,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest8 test = new ConfigTest8(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest8 expected = new ConfigTest8(); | |||
| expected.addConfig( child1 ); | |||
| @@ -509,7 +515,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest9 test = new ConfigTest9(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| final ConfigTest9 expected = new ConfigTest9(); | |||
| expected.configure( config ); | |||
| @@ -532,7 +538,7 @@ public class DefaultConfigurerTest | |||
| m_context.setProperty( "prop-a", "some indirect value" ); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Check the configured object | |||
| final ConfigTest1 expected = new ConfigTest1(); | |||
| @@ -555,7 +561,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -583,7 +589,7 @@ public class DefaultConfigurerTest | |||
| // Configure the object | |||
| try | |||
| { | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -612,14 +618,15 @@ public class DefaultConfigurerTest | |||
| // Add role mapping, and add to reference to context | |||
| final RoleManager roleMgr = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); | |||
| roleMgr.addNameRoleMapping( "my-role1", MyRole1.class.getName() ); | |||
| final RoleInfo roleInfo = new RoleInfo( "my-role1", MyRole1.class ); | |||
| roleMgr.addRole( roleInfo ); | |||
| m_context.setProperty( "id", new MyType1() ); | |||
| m_context.setProperty( "id2", new MyType2() ); | |||
| final ConfigTest6 test = new ConfigTest6(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Compare against expected value | |||
| final ConfigTest6 expected = new ConfigTest6(); | |||
| @@ -644,7 +651,7 @@ public class DefaultConfigurerTest | |||
| try | |||
| { | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| fail(); | |||
| } | |||
| catch( ConfigurationException e ) | |||
| @@ -675,7 +682,7 @@ public class DefaultConfigurerTest | |||
| final ConfigTest3 test = new ConfigTest3(); | |||
| // Configure the object | |||
| m_configurer.configure( test, config, m_context ); | |||
| m_configurer.configure( test, config, m_adaptor ); | |||
| // Test expected value | |||
| final ConfigTest3 expected = new ConfigTest3(); | |||
| @@ -15,6 +15,7 @@ import org.apache.myrmidon.interfaces.deployer.Deployer; | |||
| import org.apache.myrmidon.interfaces.deployer.TypeDefinition; | |||
| import org.apache.myrmidon.interfaces.deployer.TypeDeployer; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.type.TypeFactory; | |||
| import org.apache.myrmidon.interfaces.type.TypeManager; | |||
| import org.apache.myrmidon.interfaces.type.TypeException; | |||
| @@ -32,6 +33,7 @@ public class DefaultDeployerTest | |||
| { | |||
| private static final String TEST_TYPE1_NAME = "test-type1"; | |||
| private static final String DATA_TYPE_ROLE = "data-type"; | |||
| private static final String CONVERTER_ROLE = "converter"; | |||
| private Deployer m_deployer; | |||
| private RoleManager m_roleManager; | |||
| @@ -54,8 +56,8 @@ public class DefaultDeployerTest | |||
| // Add some core roles | |||
| m_roleManager = (RoleManager)getServiceManager().lookup( RoleManager.ROLE ); | |||
| m_roleManager.addNameRoleMapping( DATA_TYPE_ROLE, DataType.ROLE ); | |||
| m_roleManager.addNameRoleMapping( "converter", Converter.ROLE ); | |||
| m_roleManager.addRole( new RoleInfo( DataType.ROLE, DATA_TYPE_ROLE, DataType.class ) ); | |||
| m_roleManager.addRole( new RoleInfo( Converter.ROLE, CONVERTER_ROLE, Converter.class ) ); | |||
| } | |||
| /** | |||
| @@ -0,0 +1,182 @@ | |||
| /* | |||
| * 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.role; | |||
| import org.apache.myrmidon.AbstractMyrmidonTest; | |||
| import org.apache.myrmidon.api.Task; | |||
| import org.apache.myrmidon.interfaces.role.RoleManager; | |||
| import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
| import org.apache.myrmidon.interfaces.role.RoleException; | |||
| import org.apache.avalon.excalibur.i18n.Resources; | |||
| import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
| /** | |||
| * Test cases for the DefaultRoleManager. | |||
| * | |||
| * @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class DefaultRoleManagerTest | |||
| extends AbstractMyrmidonTest | |||
| { | |||
| private final static Resources REZ | |||
| = ResourceManager.getPackageResources( DefaultRoleManagerTest.class ); | |||
| private RoleManager m_roleManager; | |||
| public DefaultRoleManagerTest( String name ) | |||
| { | |||
| super( name ); | |||
| } | |||
| protected void setUp() throws Exception | |||
| { | |||
| m_roleManager = new DefaultRoleManager(); | |||
| } | |||
| /** | |||
| * Tests looking up a role by name, shorthand and type. | |||
| */ | |||
| public void testLookup() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "role-shorthand"; | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| // Lookup the role | |||
| RoleInfo role = m_roleManager.getRole( roleName ); | |||
| assertTrue( origRole.equals(role) ); | |||
| // Lookup the role by shorthand | |||
| role = m_roleManager.getRoleByShorthandName( shorthand ); | |||
| assertTrue( origRole.equals( role ) ); | |||
| // Lookup the role by type | |||
| role = m_roleManager.getRoleByType( Task.class ); | |||
| assertTrue( origRole.equals( role ) ); | |||
| // Lookup an unknown role | |||
| RoleInfo unknownRole = m_roleManager.getRole( "unknown" ); | |||
| assertNull( unknownRole ); | |||
| // Lookup an unknown shorthand | |||
| unknownRole = m_roleManager.getRoleByShorthandName( "unknown" ); | |||
| assertNull( unknownRole ); | |||
| // Lookup an unknown role | |||
| unknownRole = m_roleManager.getRoleByType( DefaultRoleManagerTest.class ); | |||
| assertNull( unknownRole ); | |||
| } | |||
| /** | |||
| * Tests inheriting roles from parent role manager. | |||
| */ | |||
| public void testParent() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "shorthand"; | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| final RoleManager roleManager = new DefaultRoleManager( m_roleManager ); | |||
| // Lookup by name | |||
| RoleInfo roleInfo = roleManager.getRole( roleName ); | |||
| assertTrue( origRole.equals( roleInfo ) ); | |||
| // Lookup by shorthand | |||
| roleInfo = roleManager.getRoleByShorthandName( shorthand ); | |||
| assertTrue( origRole.equals( roleInfo ) ); | |||
| // Lookup by type | |||
| roleInfo = roleManager.getRoleByType( Task.class ); | |||
| assertTrue( origRole.equals( roleInfo ) ); | |||
| } | |||
| /** | |||
| * Tests overriding a role in a child role manager. | |||
| */ | |||
| public void testOverrideName() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "shorthand"; | |||
| // Add original role | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| // Override role | |||
| final RoleManager roleManager = new DefaultRoleManager( m_roleManager ); | |||
| final RoleInfo overrideNameRole = new RoleInfo( roleName, "shorthand1" ); | |||
| roleManager.addRole( overrideNameRole ); | |||
| final RoleInfo overrideShorthandRole = new RoleInfo( "role2", shorthand ); | |||
| roleManager.addRole( overrideShorthandRole ); | |||
| final RoleInfo overrideTypeRole = new RoleInfo( "role3", "shorthand3", Task.class ); | |||
| roleManager.addRole( overrideTypeRole ); | |||
| // Lookup role by name | |||
| RoleInfo roleInfo = roleManager.getRole( roleName ); | |||
| assertTrue( overrideNameRole.equals( roleInfo ) ); | |||
| // Lookup role by shorthand | |||
| roleInfo = roleManager.getRoleByShorthandName( shorthand ); | |||
| assertTrue( overrideShorthandRole.equals( roleInfo ) ); | |||
| // Lookup role by type | |||
| roleInfo = roleManager.getRoleByType( Task.class ); | |||
| assertTrue( overrideTypeRole.equals( roleInfo ) ); | |||
| } | |||
| /** | |||
| * Tests adding duplicate roles. | |||
| */ | |||
| public void testDuplicate() throws Exception | |||
| { | |||
| final String roleName = "role-name"; | |||
| final String shorthand = "shorthand"; | |||
| final RoleInfo origRole = new RoleInfo( roleName, shorthand, Task.class ); | |||
| m_roleManager.addRole( origRole ); | |||
| // Duplicate role name | |||
| try | |||
| { | |||
| m_roleManager.addRole( new RoleInfo( roleName ) ); | |||
| fail(); | |||
| } | |||
| catch( RoleException exc ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-role.error", roleName ); | |||
| assertSameMessage( message, exc ); | |||
| } | |||
| // Duplicate shorthand | |||
| try | |||
| { | |||
| m_roleManager.addRole( new RoleInfo( "another-role", shorthand ) ); | |||
| fail(); | |||
| } | |||
| catch( RoleException exc ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-shorthand.error", shorthand ); | |||
| assertSameMessage( message, exc ); | |||
| } | |||
| // Duplicate type | |||
| try | |||
| { | |||
| m_roleManager.addRole( new RoleInfo( null, Task.class ) ); | |||
| fail(); | |||
| } | |||
| catch( RoleException exc ) | |||
| { | |||
| final String message = REZ.getString( "duplicate-type.error", Task.class.getName() ); | |||
| assertSameMessage( message, exc ); | |||
| } | |||
| } | |||
| } | |||