Browse Source

Replace need for Composable tasks with TaskContext.getService()

Submitted By: "Adam Murdoch" <adammurdoch_ml@yahoo.com>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270847 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 23 years ago
parent
commit
43cbdfc52c
14 changed files with 142 additions and 137 deletions
  1. +7
    -2
      proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java
  2. +2
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/api/Task.java
  3. +0
    -3
      proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java
  4. +13
    -24
      proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutionFrame.java
  5. +0
    -26
      proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java
  6. +0
    -2
      proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/Resources.properties
  7. +63
    -12
      proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java
  8. +10
    -8
      proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java
  9. +4
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties
  10. +36
    -12
      proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractContainerTask.java
  11. +4
    -20
      proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractTypeDef.java
  12. +1
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/framework/Resources.properties
  13. +2
    -23
      proposal/myrmidon/src/java/org/apache/myrmidon/framework/TypeInstanceTask.java
  14. +0
    -2
      proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/ExecutionFrame.java

+ 7
- 2
proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java View File

@@ -8,9 +8,7 @@
package org.apache.myrmidon.api; package org.apache.myrmidon.api;


import java.io.File; import java.io.File;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled;


/** /**
@@ -31,6 +29,7 @@ public abstract class AbstractTask
* @param context the context * @param context the context
*/ */
public void contextualize( final TaskContext context ) public void contextualize( final TaskContext context )
throws TaskException
{ {
m_context = context; m_context = context;
} }
@@ -104,6 +103,12 @@ public abstract class AbstractTask
getContext().setProperty( name, value, scope ); getContext().setProperty( name, value, scope );
} }


protected final Object getService( final Class serviceClass )
throws TaskException
{
return getContext().getService( serviceClass );
}

protected final TaskContext createSubContext( final String name ) protected final TaskContext createSubContext( final String name )
throws TaskException throws TaskException
{ {


+ 2
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/api/Task.java View File

@@ -29,7 +29,8 @@ public interface Task
* The Task will use the TaskContext to receive information * The Task will use the TaskContext to receive information
* about it's environment. * about it's environment.
*/ */
void contextualize( TaskContext context );
void contextualize( TaskContext context )
throws TaskException;


/** /**
* Execute task. * Execute task.


+ 0
- 3
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java View File

@@ -81,9 +81,6 @@ public class AspectAwareExecutor
debug( "contextualizing.notice" ); debug( "contextualizing.notice" );
doContextualize( task, taskModel, frame.getContext() ); doContextualize( task, taskModel, frame.getContext() );


debug( "composing.notice" );
doCompose( task, taskModel, frame.getComponentManager() );

debug( "configuring.notice" ); debug( "configuring.notice" );
getAspectManager().preConfigure( taskModel ); getAspectManager().preConfigure( taskModel );
doConfigure( task, taskModel, frame.getContext() ); doConfigure( task, taskModel, frame.getContext() );


+ 13
- 24
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutionFrame.java View File

@@ -12,9 +12,11 @@ import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.logger.Logger;
import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.executor.ExecutionFrame; import org.apache.myrmidon.interfaces.executor.ExecutionFrame;
import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.type.TypeManager;


@@ -24,36 +26,28 @@ import org.apache.myrmidon.interfaces.type.TypeManager;
* @author <a href="mailto:peter@apache.org">Peter Donald</a> * @author <a href="mailto:peter@apache.org">Peter Donald</a>
*/ */
public class DefaultExecutionFrame public class DefaultExecutionFrame
implements ExecutionFrame, LogEnabled, Contextualizable, Composable
implements ExecutionFrame, LogEnabled, Contextualizable
{ {
private TypeManager m_typeManager;

private Logger m_logger; private Logger m_logger;
private TaskContext m_context; private TaskContext m_context;
private ComponentManager m_componentManager;
private TypeManager m_typeManager;


public void enableLogging( final Logger logger ) public void enableLogging( final Logger logger )
{ {
m_logger = logger; m_logger = logger;
} }


public void contextualize( final Context context )
public void contextualize( final Context context ) throws ContextException
{ {
m_context = (TaskContext)context; m_context = (TaskContext)context;
}

/**
* Retrieve relevent services needed to deploy.
*
* @param componentManager the ComponentManager
* @exception ComponentException if an error occurs
*/
public void compose( final ComponentManager componentManager )
throws ComponentException
{
m_componentManager = componentManager;

m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE );
try
{
m_typeManager = (TypeManager)m_context.getService( TypeManager.class );
}
catch( TaskException te )
{
throw new ContextException(te.getMessage(), te);
}
} }


public TypeManager getTypeManager() public TypeManager getTypeManager()
@@ -70,9 +64,4 @@ public class DefaultExecutionFrame
{ {
return m_context; return m_context;
} }

public ComponentManager getComponentManager()
{
return m_componentManager;
}
} }

+ 0
- 26
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java View File

@@ -61,9 +61,6 @@ public class DefaultExecutor
debug( "contextualizing.notice" ); debug( "contextualizing.notice" );
doContextualize( task, taskModel, frame.getContext() ); doContextualize( task, taskModel, frame.getContext() );


debug( "composing.notice" );
doCompose( task, taskModel, frame.getComponentManager() );

debug( "configuring.notice" ); debug( "configuring.notice" );
doConfigure( task, taskModel, frame.getContext() ); doConfigure( task, taskModel, frame.getContext() );


@@ -115,29 +112,6 @@ public class DefaultExecutor
} }
} }


protected final void doCompose( final Task task,
final Configuration taskModel,
final ComponentManager componentManager )
throws TaskException
{
if( task instanceof Composable )
{
try
{
( (Composable)task ).compose( componentManager );
}
catch( final Throwable throwable )
{
final String message =
REZ.getString( "compose.error",
taskModel.getName(),
taskModel.getLocation(),
throwable.getMessage() );
throw new TaskException( message, throwable );
}
}
}

protected final void doContextualize( final Task task, protected final void doContextualize( final Task task,
final Configuration taskModel, final Configuration taskModel,
final TaskContext context ) final TaskContext context )


+ 0
- 2
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/Resources.properties View File

@@ -1,7 +1,6 @@
creating.notice=Creating. creating.notice=Creating.
logger.notice=Setting Logger. logger.notice=Setting Logger.
contextualizing.notice=Contextualizing. contextualizing.notice=Contextualizing.
composing.notice=Composing.
configuring.notice=Configuring. configuring.notice=Configuring.
initializing.notice=Initializing. initializing.notice=Initializing.
executing.notice=Executing. executing.notice=Executing.
@@ -9,7 +8,6 @@ disposing.notice=Disposing.


no-create.error=Unable to create task {0}. no-create.error=Unable to create task {0}.
config.error=Error configuring task {0} at {1} (Reason: {2}). config.error=Error configuring task {0} at {1} (Reason: {2}).
compose.error=Error composing task {0} at {1} (Reason: {2}).
contextualize.error=Error contextualizing task {0} at {1} (Reason: {2}). contextualize.error=Error contextualizing task {0} at {1} (Reason: {2}).
dispose.error=Error disposing task {0} at {1} (Reason: {2}). dispose.error=Error disposing task {0} at {1} (Reason: {2}).
init.error=Error initializing task {0} at {1} (Reason: {2}). init.error=Error initializing task {0} at {1} (Reason: {2}).


+ 63
- 12
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java View File

@@ -8,12 +8,14 @@
package org.apache.myrmidon.components.workspace; package org.apache.myrmidon.components.workspace;


import java.io.File; import java.io.File;
import java.util.Map;
import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.excalibur.io.FileUtil; import org.apache.avalon.excalibur.io.FileUtil;
import org.apache.avalon.excalibur.property.PropertyException; import org.apache.avalon.excalibur.property.PropertyException;
import org.apache.avalon.excalibur.property.PropertyUtil; import org.apache.avalon.excalibur.property.PropertyUtil;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.DefaultContext; import org.apache.avalon.framework.context.DefaultContext;
import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskContext;
@@ -31,32 +33,44 @@ public class DefaultTaskContext
private final static Resources REZ = private final static Resources REZ =
ResourceManager.getPackageResources( DefaultTaskContext.class ); ResourceManager.getPackageResources( DefaultTaskContext.class );


private ComponentManager m_componentManager;

/** /**
* Constructor for Context with no parent contexts. * Constructor for Context with no parent contexts.
*/ */
public DefaultTaskContext( final Map contextData )
public DefaultTaskContext()
{ {
super( contextData );
this( (TaskContext)null );
} }


/** /**
* Constructor for Context with no parent contexts.
* Constructor that specified parent context.
*/ */
public DefaultTaskContext()
public DefaultTaskContext( final TaskContext parent )
{ {
this( (TaskContext)null );
this( parent, null );
} }


/** /**
* Constructor.
* Constructor that specifies the ComponentManager for context.
*/ */
public DefaultTaskContext( final TaskContext parent )
public DefaultTaskContext( final ComponentManager componentManager )
{
this( null, componentManager );
}

/**
* Constructor that takes both parent context and a service directory.
*/
public DefaultTaskContext( final TaskContext parent,
final ComponentManager componentManager )
{ {
super( parent ); super( parent );
m_componentManager = componentManager;
} }


/** /**
* Retrieve Name of tasklet.
* Retrieve Name of task.
* *
* @return the name * @return the name
*/ */
@@ -104,7 +118,42 @@ public class DefaultTaskContext
public Object getService( final Class serviceClass ) public Object getService( final Class serviceClass )
throws TaskException throws TaskException
{ {
throw new TaskException( "No services available atm" );
// Try this context first
final String name = serviceClass.getName();
if( m_componentManager.hasComponent( name ) )
{
try
{
final Component service = m_componentManager.lookup( name );
if( !serviceClass.isInstance( service ) )
{
final String message =
REZ.getString( "bad-service-class.error",
name,
service.getClass().getName(),
serviceClass.getName() );
throw new TaskException( message );
}

return service;
}
catch( final ComponentException ce )
{
final String message = REZ.getString( "bad-find-service.error", name );
throw new TaskException( message, ce );
}
}

// Try parent
final TaskContext parent = (TaskContext)getParent();
if( null != parent )
{
return parent.getService( serviceClass );
}

// Not found
final String message = REZ.getString( "bad-find-service.error", name );
throw new TaskException( message );
} }


/** /**
@@ -194,9 +243,11 @@ public class DefaultTaskContext
{ {
checkPropertyValid( name, value ); checkPropertyValid( name, value );


if( CURRENT == scope ) {
if( CURRENT == scope )
{
put( name, value ); put( name, value );
} else if( PARENT == scope )
}
else if( PARENT == scope )
{ {
if( null == getParent() ) if( null == getParent() )
{ {


+ 10
- 8
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java View File

@@ -19,7 +19,6 @@ import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.component.DefaultComponentManager; import org.apache.avalon.framework.component.DefaultComponentManager;
import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.logger.LogKitLogger; import org.apache.avalon.framework.logger.LogKitLogger;
import org.apache.avalon.framework.logger.Logger; import org.apache.avalon.framework.logger.Logger;
@@ -31,6 +30,7 @@ import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.components.deployer.DefaultDeployer; import org.apache.myrmidon.components.deployer.DefaultDeployer;
import org.apache.myrmidon.components.executor.DefaultExecutionFrame; import org.apache.myrmidon.components.executor.DefaultExecutionFrame;
import org.apache.myrmidon.components.role.DefaultRoleManager;
import org.apache.myrmidon.framework.Condition; import org.apache.myrmidon.framework.Condition;
import org.apache.myrmidon.interfaces.deployer.Deployer; import org.apache.myrmidon.interfaces.deployer.Deployer;
import org.apache.myrmidon.interfaces.deployer.DeploymentException; import org.apache.myrmidon.interfaces.deployer.DeploymentException;
@@ -41,6 +41,7 @@ import org.apache.myrmidon.interfaces.model.Target;
import org.apache.myrmidon.interfaces.model.TypeLib; import org.apache.myrmidon.interfaces.model.TypeLib;
import org.apache.myrmidon.interfaces.type.TypeManager; import org.apache.myrmidon.interfaces.type.TypeManager;
import org.apache.myrmidon.interfaces.workspace.Workspace; import org.apache.myrmidon.interfaces.workspace.Workspace;
import org.apache.myrmidon.interfaces.role.RoleManager;
import org.apache.myrmidon.listeners.ProjectListener; import org.apache.myrmidon.listeners.ProjectListener;


/** /**
@@ -141,7 +142,7 @@ public class DefaultWorkspace
private TaskContext createBaseContext() private TaskContext createBaseContext()
throws TaskException throws TaskException
{ {
final TaskContext context = new DefaultTaskContext();
final TaskContext context = new DefaultTaskContext( m_componentManager );


final String[] names = m_parameters.getNames(); final String[] names = m_parameters.getNames();
for( int i = 0; i < names.length; i++ ) for( int i = 0; i < names.length; i++ )
@@ -219,9 +220,6 @@ public class DefaultWorkspace
private ExecutionFrame createExecutionFrame( final Project project ) private ExecutionFrame createExecutionFrame( final Project project )
throws TaskException throws TaskException
{ {
final TaskContext context = new DefaultTaskContext( m_baseContext );
context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() );

//Create per frame ComponentManager //Create per frame ComponentManager
final DefaultComponentManager componentManager = final DefaultComponentManager componentManager =
new DefaultComponentManager( m_componentManager ); new DefaultComponentManager( m_componentManager );
@@ -267,6 +265,11 @@ public class DefaultWorkspace
componentManager.put( Project.ROLE + "/" + name, other ); componentManager.put( Project.ROLE + "/" + name, other );
} }


// Create and configure the context
final DefaultTaskContext context =
new DefaultTaskContext( m_baseContext, componentManager );
context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() );

final DefaultExecutionFrame frame = new DefaultExecutionFrame(); final DefaultExecutionFrame frame = new DefaultExecutionFrame();


try try
@@ -276,7 +279,6 @@ public class DefaultWorkspace


frame.enableLogging( logger ); frame.enableLogging( logger );
frame.contextualize( context ); frame.contextualize( context );
frame.compose( componentManager );
} }
catch( final Exception e ) catch( final Exception e )
{ {
@@ -401,10 +403,10 @@ public class DefaultWorkspace
return; return;
} }
} }
catch( final ContextException ce )
catch( final TaskException te )
{ {
final String message = REZ.getString( "condition-eval.error", name ); final String message = REZ.getString( "condition-eval.error", name );
throw new TaskException( message, ce );
throw new TaskException( message, te );
} }
} }




+ 4
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties View File

@@ -15,7 +15,10 @@ no-version.error=No JavaVersion in Context.
no-name.error=No Name in Context. no-name.error=No Name in Context.
no-dir.error=No Base Directory in Context. no-dir.error=No Base Directory in Context.
no-parent.error=Can't set a property with parent scope when context has no parent. no-parent.error=Can't set a property with parent scope when context has no parent.
bad-find-services.error=Unable to find service "{0}".
bad-scope.error=Unknown property scope! ({0}). bad-scope.error=Unknown property scope! ({0}).
bad-property.error=Property {0} must have a value of type {1}. bad-property.error=Property {0} must have a value of type {1}.
null-resolved-value.error=Value "{0}" resolved to null. null-resolved-value.error=Value "{0}" resolved to null.
bad-resolve.error=Unable to resolve value "{0}".
bad-resolve.error=Unable to resolve value "{0}".
bad-find-service.error=Could not find service "{0}".
bad-service-class.error=Find service "{0}" but it was of type {1} where it was expected to be of type {2}.

+ 36
- 12
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractContainerTask.java View File

@@ -9,20 +9,21 @@ package org.apache.myrmidon.framework;


import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;


import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.ConfigurationException;

import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.converter.Converter; import org.apache.myrmidon.converter.Converter;
import org.apache.myrmidon.converter.ConverterException; import org.apache.myrmidon.converter.ConverterException;
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.executor.Executor; import org.apache.myrmidon.interfaces.executor.Executor;
import org.apache.myrmidon.interfaces.type.TypeFactory;
import org.apache.myrmidon.interfaces.type.TypeManager;
import org.apache.myrmidon.interfaces.type.TypeException;


/** /**
* This is the class that Task writers should extend to provide custom tasks. * This is the class that Task writers should extend to provide custom tasks.
@@ -31,7 +32,6 @@ import org.apache.myrmidon.interfaces.executor.Executor;
*/ */
public abstract class AbstractContainerTask public abstract class AbstractContainerTask
extends AbstractTask extends AbstractTask
implements Composable
{ {
private final static Resources REZ = private final static Resources REZ =
ResourceManager.getPackageResources( AbstractContainerTask.class ); ResourceManager.getPackageResources( AbstractContainerTask.class );
@@ -45,12 +45,18 @@ public abstract class AbstractContainerTask
///For executing sub-elements as tasks ///For executing sub-elements as tasks
private Executor m_executor; private Executor m_executor;


public void compose( final ComponentManager componentManager )
throws ComponentException
/**
* Retrieve context from container.
*
* @param context the context
*/
public void contextualize( TaskContext context )
throws TaskException
{ {
m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE );
m_converter = (MasterConverter)componentManager.lookup( MasterConverter.ROLE );
m_executor = (Executor)componentManager.lookup( Executor.ROLE );
super.contextualize( context );
m_configurer = (Configurer)getService( Configurer.class );
m_converter = (MasterConverter)getService( MasterConverter.class );
m_executor = (Executor)getService( Executor.class );
} }


/** /**
@@ -102,6 +108,24 @@ public abstract class AbstractContainerTask
getConfigurer().configure( object, name, value, getContext() ); getConfigurer().configure( object, name, value, getContext() );
} }


/**
* Locates a type factory.
*/
protected final TypeFactory getTypeFactory( final String role )
throws TaskException
{
final TypeManager typeManager = (TypeManager)getService( TypeManager.class );
try
{
return typeManager.getFactory( role );
}
catch( final TypeException te )
{
final String message = REZ.getString( "container.no-factory.error", role );
throw new TaskException( message, te );
}
}

/** /**
* Convenience method for sub-class to retrieve Configurer. * Convenience method for sub-class to retrieve Configurer.
* *


+ 4
- 20
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractTypeDef.java View File

@@ -12,9 +12,6 @@ import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.role.RoleManager; import org.apache.myrmidon.interfaces.role.RoleManager;
@@ -31,7 +28,6 @@ import org.apache.myrmidon.interfaces.type.TypeManager;
*/ */
public abstract class AbstractTypeDef public abstract class AbstractTypeDef
extends AbstractTask extends AbstractTask
implements Composable
{ {
private final static Resources REZ = private final static Resources REZ =
ResourceManager.getPackageResources( AbstractTypeDef.class ); ResourceManager.getPackageResources( AbstractTypeDef.class );
@@ -39,15 +35,6 @@ public abstract class AbstractTypeDef
private File m_lib; private File m_lib;
private String m_name; private String m_name;
private String m_className; private String m_className;
private TypeManager m_typeManager;
private RoleManager m_roleManager;

public void compose( final ComponentManager componentManager )
throws ComponentException
{
m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE );
m_roleManager = (RoleManager)componentManager.lookup( RoleManager.ROLE );
}


public void setLib( final File lib ) public void setLib( final File lib )
{ {
@@ -80,15 +67,17 @@ public abstract class AbstractTypeDef
} }


final String typeName = getTypeName(); final String typeName = getTypeName();
final String role = m_roleManager.getRoleForName( typeName );
final RoleManager roleManager = (RoleManager)getService( RoleManager.class );
final String role = roleManager.getRoleForName( typeName );


final ClassLoader classLoader = createClassLoader(); final ClassLoader classLoader = createClassLoader();
final DefaultTypeFactory factory = new DefaultTypeFactory( classLoader ); final DefaultTypeFactory factory = new DefaultTypeFactory( classLoader );
factory.addNameClassMapping( m_name, m_className ); factory.addNameClassMapping( m_name, m_className );


final TypeManager typeManager = (TypeManager)getService( TypeManager.class );
try try
{ {
m_typeManager.registerType( role, m_name, factory );
typeManager.registerType( role, m_name, factory );
} }
catch( final TypeException te ) catch( final TypeException te )
{ {
@@ -116,10 +105,5 @@ public abstract class AbstractTypeDef
} }
} }


protected final TypeManager getTypeManager()
{
return m_typeManager;
}

protected abstract String getTypeName(); protected abstract String getTypeName();
} }

+ 1
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/framework/Resources.properties View File

@@ -1,6 +1,7 @@
container.null-value.error=Value ({0}) resolved to null. container.null-value.error=Value ({0}) resolved to null.
container.bad-resolve.error=Error resolving value ({0}). container.bad-resolve.error=Error resolving value ({0}).
container.bad-config.error=Error converting value. container.bad-config.error=Error converting value.
container.no-factory.error=Could not locate the type factory for type "{0}".


typedef.no-name.error=Must specify name parameter. typedef.no-name.error=Must specify name parameter.
typedef.no-classname.error=Must specify classname parameter. typedef.no-classname.error=Must specify classname parameter.
@@ -11,7 +12,6 @@ condition.no-resolve.error=Error resolving {0}.


pattern.ifelse-duplicate.error=Can only set one of if/else for pattern data type. pattern.ifelse-duplicate.error=Can only set one of if/else for pattern data type.


type.no-factory.error=Unable to retrieve DataType factory from TypeManager.
type.no-create.error=Unable to create datatype. type.no-create.error=Unable to create datatype.
type.no-id.error=Id must be specified. type.no-id.error=Id must be specified.



+ 2
- 23
proposal/myrmidon/src/java/org/apache/myrmidon/framework/TypeInstanceTask.java View File

@@ -9,17 +9,13 @@ package org.apache.myrmidon.framework;


import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources; import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration; import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.myrmidon.api.TaskContext; import org.apache.myrmidon.api.TaskContext;
import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.type.TypeException;
import org.apache.myrmidon.interfaces.type.TypeFactory; import org.apache.myrmidon.interfaces.type.TypeFactory;
import org.apache.myrmidon.interfaces.type.TypeManager;


/** /**
* This is the property "task" to declare a binding of a datatype to a name. * This is the property "task" to declare a binding of a datatype to a name.
@@ -36,24 +32,6 @@ public class TypeInstanceTask
private String m_id; private String m_id;
private Object m_value; private Object m_value;
private boolean m_localScope = true; private boolean m_localScope = true;
private TypeFactory m_factory;

public void compose( final ComponentManager componentManager )
throws ComponentException
{
super.compose( componentManager );

final TypeManager typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE );
try
{
m_factory = typeManager.getFactory( DataType.ROLE );
}
catch( final TypeException te )
{
final String message = REZ.getString( "type.no-factory.error" );
throw new ComponentException( message, te );
}
}


public void configure( final Configuration configuration ) public void configure( final Configuration configuration )
throws ConfigurationException throws ConfigurationException
@@ -85,7 +63,8 @@ public class TypeInstanceTask


try try
{ {
m_value = m_factory.create( configuration.getName() );
final TypeFactory typeFactory = getTypeFactory( DataType.ROLE );
m_value = typeFactory.create( configuration.getName() );
} }
catch( final Exception e ) catch( final Exception e )
{ {


+ 0
- 2
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/ExecutionFrame.java View File

@@ -24,6 +24,4 @@ public interface ExecutionFrame
Logger getLogger(); Logger getLogger();


TaskContext getContext(); TaskContext getContext();

ComponentManager getComponentManager();
} }

Loading…
Cancel
Save