Hi, This patch adds a getService() method to TaskContext. This method replaces Composable, as far as tasks are concerned. The motivation was to provide a place where tasks can get at services, and in particular, a FileSystemManager.
TaskContext.getService() returns an Object. Do we need to add a Service interface (which we can later add a ROLE attribute to), or is Object sufficient? The change details: * Changed all tasks that used to implement Composable, to use TaskContext.getService() instead. * Axed ExecutionFrame.getComponentManager(). DefaultExecutor no longer composes tasks. * DefaultTaskContext uses a ComponentManager to locate services. Currently, this is the same ComponentManager that used to be used to compose the tasks. * Fixed Condition.evaluate() to work if the property is not defined. It should now only throw an exception when the condition is badly-formed. Changed its signature to throw a TaskException, rather than a ContextException. * Changed LoadProperties to extend AbstractTask instead of AbstractContainerTask. Adam
<<attachment: newfiles.zip>>
Index: proposal/myrmidon/src/java/org/apache/antlib/core/Fail.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/core/Fail.java,v
retrieving revision 1.4
diff -u -r1.4 Fail.java
--- proposal/myrmidon/src/java/org/apache/antlib/core/Fail.java 13 Jan 2002
00:02:11 -0000 1.4
+++ proposal/myrmidon/src/java/org/apache/antlib/core/Fail.java 24 Jan 2002
11:18:26 -0000
@@ -7,7 +7,6 @@
*/
package org.apache.antlib.core;
-import org.apache.avalon.framework.context.ContextException;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.framework.Condition;
@@ -53,30 +52,23 @@
public void execute()
throws TaskException
{
- try
+ boolean failed = true;
+
+ if( null != m_condition )
{
- boolean failed = true;
+ failed = m_condition.evaluate( getContext() );
+ }
- if( null != m_condition )
+ if( failed )
+ {
+ if( null != m_message )
{
- failed = m_condition.evaluate( getContext() );
+ throw new TaskException( m_message );
}
-
- if( failed )
+ else
{
- if( null != m_message )
- {
- throw new TaskException( m_message );
- }
- else
- {
- throw new TaskException();
- }
+ throw new TaskException();
}
- }
- catch( final ContextException ce )
- {
- throw new TaskException( ce.toString(), ce );
}
}
Index: proposal/myrmidon/src/java/org/apache/antlib/core/LoadProperties.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/core/LoadProperties.java,v
retrieving revision 1.3
diff -u -r1.3 LoadProperties.java
--- proposal/myrmidon/src/java/org/apache/antlib/core/LoadProperties.java
20 Jan 2002 17:32:58 -0000 1.3
+++ proposal/myrmidon/src/java/org/apache/antlib/core/LoadProperties.java
24 Jan 2002 11:18:27 -0000
@@ -14,8 +14,8 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.excalibur.io.IOUtil;
+import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;
-import org.apache.myrmidon.framework.AbstractContainerTask;
/**
* This task loads properties from a property file and places them in the
context.
@@ -24,7 +24,7 @@
* @ant:task name="load-properties"
*/
public class LoadProperties
- extends AbstractContainerTask
+ extends AbstractTask
{
private final static Resources REZ =
ResourceManager.getPackageResources( LoadProperties.class );
Index: proposal/myrmidon/src/java/org/apache/antlib/core/Property.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/core/Property.java,v
retrieving revision 1.6
diff -u -r1.6 Property.java
--- proposal/myrmidon/src/java/org/apache/antlib/core/Property.java 22 Jan
2002 11:47:14 -0000 1.6
+++ proposal/myrmidon/src/java/org/apache/antlib/core/Property.java 24 Jan
2002 11:18:27 -0000
@@ -9,8 +9,6 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -18,9 +16,7 @@
import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.framework.AbstractContainerTask;
import org.apache.myrmidon.framework.DataType;
-import org.apache.myrmidon.interfaces.type.TypeException;
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.
@@ -41,24 +37,6 @@
private String m_name;
private Object m_value;
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( "property.bad-factory.error"
);
- throw new ComponentException( message, te );
- }
- }
public void configure( final Configuration configuration )
throws ConfigurationException
@@ -76,7 +54,8 @@
{
try
{
- final DataType value = (DataType)m_factory.create( children[ i
].getName() );
+ final TypeFactory typeFactory = getTypeFactory( DataType.ROLE
);
+ final DataType value = (DataType)typeFactory.create( children[
i ].getName() );
configure( value, children[ i ] );
setValue( value );
}
Index: proposal/myrmidon/src/java/org/apache/antlib/core/Resources.properties
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/core/Resources.properties,v
retrieving revision 1.5
diff -u -r1.5 Resources.properties
--- proposal/myrmidon/src/java/org/apache/antlib/core/Resources.properties
12 Jan 2002 05:49:07 -0000 1.5
+++ proposal/myrmidon/src/java/org/apache/antlib/core/Resources.properties
24 Jan 2002 11:18:27 -0000
@@ -1,4 +1,3 @@
-property.bad-factory.error=Unable to retrieve DataType factory from
TypeManager.
property.no-set.error=Unable to set datatype.
property.multi-set.error=Value can not be set multiple times.
property.no-name.error=Name must be specified.
Index: proposal/myrmidon/src/java/org/apache/antlib/runtime/ConverterDef.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/runtime/ConverterDef.java,v
retrieving revision 1.4
diff -u -r1.4 ConverterDef.java
--- proposal/myrmidon/src/java/org/apache/antlib/runtime/ConverterDef.java
20 Jan 2002 17:32:57 -0000 1.4
+++ proposal/myrmidon/src/java/org/apache/antlib/runtime/ConverterDef.java
24 Jan 2002 11:18:27 -0000
@@ -11,9 +11,6 @@
import java.net.URL;
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.TaskException;
import org.apache.myrmidon.converter.Converter;
@@ -28,7 +25,6 @@
*/
public class ConverterDef
extends AbstractTask
- implements Composable
{
private final static Resources REZ =
ResourceManager.getPackageResources( ConverterDef.class );
@@ -37,15 +33,6 @@
private String m_destinationType;
private File m_lib;
private String m_classname;
- private ConverterRegistry m_converterRegistry;
- private TypeManager m_typeManager;
-
- public void compose( final ComponentManager componentManager )
- throws ComponentException
- {
- m_converterRegistry = (ConverterRegistry)componentManager.lookup(
ConverterRegistry.ROLE );
- m_typeManager = (TypeManager)componentManager.lookup( TypeManager.ROLE
);
- }
public void setLib( final File lib )
{
@@ -93,13 +80,15 @@
try
{
- m_converterRegistry.registerConverter( m_classname, m_sourceType,
m_destinationType );
+ final ConverterRegistry converterRegistry =
(ConverterRegistry)getService( ConverterRegistry.ROLE );
+ converterRegistry.registerConverter( m_classname, m_sourceType,
m_destinationType );
final URL url = m_lib.toURL();
final DefaultTypeFactory factory = new DefaultTypeFactory( new
URL[]{url} );
factory.addNameClassMapping( m_classname, m_classname );
- m_typeManager.registerType( Converter.ROLE, m_classname, factory );
+ final TypeManager typeManager = (TypeManager)getService(
TypeManager.ROLE );
+ typeManager.registerType( Converter.ROLE, m_classname, factory );
}
catch( final Exception e )
{
Index: proposal/myrmidon/src/java/org/apache/antlib/runtime/Facility.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/runtime/Facility.java,v
retrieving revision 1.4
diff -u -r1.4 Facility.java
--- proposal/myrmidon/src/java/org/apache/antlib/runtime/Facility.java 20 Jan
2002 17:32:57 -0000 1.4
+++ proposal/myrmidon/src/java/org/apache/antlib/runtime/Facility.java 24 Jan
2002 11:18:27 -0000
@@ -9,9 +9,6 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -19,9 +16,7 @@
import org.apache.myrmidon.aspects.AspectHandler;
import org.apache.myrmidon.framework.AbstractContainerTask;
import org.apache.myrmidon.interfaces.aspect.AspectManager;
-import org.apache.myrmidon.interfaces.type.TypeException;
import org.apache.myrmidon.interfaces.type.TypeFactory;
-import org.apache.myrmidon.interfaces.type.TypeManager;
/**
* Task that definesMethod to register a single converter.
@@ -30,7 +25,7 @@
*/
public class Facility
extends AbstractContainerTask
- implements Composable, Configurable
+ implements Configurable
{
private final static Resources REZ =
ResourceManager.getPackageResources( Facility.class );
@@ -38,28 +33,6 @@
private String m_namespace;
private AspectHandler m_aspectHandler;
- private AspectManager m_aspectManager;
- private TypeFactory m_factory;
-
- public void compose( final ComponentManager componentManager )
- throws ComponentException
- {
- super.compose( componentManager );
-
- m_aspectManager = (AspectManager)componentManager.lookup(
AspectManager.ROLE );
-
- final TypeManager typeManager = (TypeManager)componentManager.lookup(
TypeManager.ROLE );
- try
- {
- m_factory = typeManager.getFactory( AspectHandler.ROLE );
- }
- catch( final TypeException te )
- {
- final String message = REZ.getString( "facility.no-factory.error"
);
- throw new ComponentException( message, te );
- }
- }
-
public void configure( final Configuration configuration )
throws ConfigurationException
{
@@ -77,7 +50,8 @@
{
try
{
- m_aspectHandler = (AspectHandler)m_factory.create( children[ 0
].getName() );
+ final TypeFactory typeFactory = getTypeFactory(
AspectHandler.ROLE );
+ m_aspectHandler = (AspectHandler)typeFactory.create( children[
0 ].getName() );
}
catch( final Exception e )
{
@@ -109,6 +83,7 @@
throw new TaskException( message );
}
- m_aspectManager.addAspectHandler( m_namespace, m_aspectHandler );
+ final AspectManager aspectManager = (AspectManager)getService(
AspectManager.ROLE );
+ aspectManager.addAspectHandler( m_namespace, m_aspectHandler );
}
}
Index: proposal/myrmidon/src/java/org/apache/antlib/runtime/Import.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/runtime/Import.java,v
retrieving revision 1.4
diff -u -r1.4 Import.java
--- proposal/myrmidon/src/java/org/apache/antlib/runtime/Import.java 20 Jan
2002 17:32:57 -0000 1.4
+++ proposal/myrmidon/src/java/org/apache/antlib/runtime/Import.java 24 Jan
2002 11:18:28 -0000
@@ -10,9 +10,6 @@
import java.io.File;
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.TaskException;
import org.apache.myrmidon.interfaces.deployer.Deployer;
@@ -25,19 +22,11 @@
*/
public class Import
extends AbstractTask
- implements Composable
{
private final static Resources REZ =
ResourceManager.getPackageResources( Import.class );
private File m_lib;
- private Deployer m_deployer;
-
- public void compose( final ComponentManager componentManager )
- throws ComponentException
- {
- m_deployer = (Deployer)componentManager.lookup( Deployer.ROLE );
- }
public void setLib( final File lib )
{
@@ -55,7 +44,8 @@
try
{
- m_deployer.deploy( m_lib );
+ final Deployer deployer = (Deployer)getService( Deployer.ROLE );
+ deployer.deploy( m_lib );
}
catch( final DeploymentException de )
{
Index: proposal/myrmidon/src/java/org/apache/antlib/runtime/Resources.properties
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/antlib/runtime/Resources.properties,v
retrieving revision 1.1
diff -u -r1.1 Resources.properties
--- proposal/myrmidon/src/java/org/apache/antlib/runtime/Resources.properties
17 Dec 2001 08:48:57 -0000 1.1
+++ proposal/myrmidon/src/java/org/apache/antlib/runtime/Resources.properties
24 Jan 2002 11:18:28 -0000
@@ -4,7 +4,6 @@
converterdef.no-lib.error=Must specify the lib parameter.
converterdef.no-register.error=Failed to register converter {0}.
-facility.no-factory.error=Unable to retrieve AspectHandler factory from
TypeManager.
facility.no-create.error=Failed to create aspect handler of type {0}.
facility.multi-element.error=Expected one sub-element to configure facility.
facility.no-namespace.error=Must specify namespace parameter.
Index: proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java,v
retrieving revision 1.13
diff -u -r1.13 AbstractTask.java
--- proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java
5 Jan 2002 03:02:41 -0000 1.13
+++ proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java
24 Jan 2002 11:18:28 -0000
@@ -8,10 +8,15 @@
package org.apache.myrmidon.api;
import java.io.File;
+import org.apache.avalon.excalibur.i18n.ResourceManager;
+import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.myrmidon.interfaces.type.TypeException;
+import org.apache.myrmidon.interfaces.type.TypeFactory;
+import org.apache.myrmidon.interfaces.type.TypeManager;
/**
* This is the class that Task writers should extend to provide custom tasks.
@@ -22,6 +27,9 @@
extends AbstractLogEnabled
implements Task, Contextualizable
{
+ private final static Resources REZ =
+ ResourceManager.getPackageResources( AbstractTask.class );
+
///Variable to hold context for use by sub-classes
private TaskContext m_context;
@@ -31,6 +39,7 @@
* @param context the context
*/
public void contextualize( final Context context )
+ throws ContextException
{
m_context = (TaskContext)context;
}
@@ -103,6 +112,30 @@
throws TaskException
{
getContext().setProperty( name, value, scope );
+ }
+
+ protected final Object getService ( final String role )
+ throws TaskException
+ {
+ return getContext().getService( role );
+ }
+
+ /**
+ * Locates a type factory.
+ */
+ protected final TypeFactory getTypeFactory( final String role )
+ throws TaskException
+ {
+ final TypeManager typeManager = (TypeManager)getService(
TypeManager.ROLE );
+ try
+ {
+ return typeManager.getFactory( role );
+ }
+ catch( final TypeException te )
+ {
+ final String message = REZ.getString(
"abstracttask.no-factory.error", role );
+ throw new TaskException( message, te );
+ }
}
protected final TaskContext createSubContext( final String name )
Index: proposal/myrmidon/src/java/org/apache/myrmidon/api/TaskContext.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/api/TaskContext.java,v
retrieving revision 1.13
diff -u -r1.13 TaskContext.java
--- proposal/myrmidon/src/java/org/apache/myrmidon/api/TaskContext.java 5 Jan
2002 03:02:11 -0000 1.13
+++ proposal/myrmidon/src/java/org/apache/myrmidon/api/TaskContext.java 24 Jan
2002 11:18:29 -0000
@@ -100,6 +100,14 @@
throws TaskException;
/**
+ * Locates a service, by role name.
+ *
+ * @param role the service role.
+ */
+ Object getService( String role )
+ throws TaskException;
+
+ /**
* Create a Child Context.
* This allows separate hierarchly contexts to be easily constructed.
*
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java,v
retrieving revision 1.13
diff -u -r1.13 AspectAwareExecutor.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java
20 Jan 2002 17:32:56 -0000 1.13
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/AspectAwareExecutor.java
24 Jan 2002 11:18:31 -0000
@@ -81,9 +81,6 @@
debug( "contextualizing.notice" );
doContextualize( task, taskModel, frame.getContext() );
- debug( "composing.notice" );
- doCompose( task, taskModel, frame.getComponentManager() );
-
debug( "configuring.notice" );
getAspectManager().preConfigure( taskModel );
doConfigure( task, taskModel, frame.getContext() );
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutionFrame.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutionFrame.java,v
retrieving revision 1.9
diff -u -r1.9 DefaultExecutionFrame.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutionFrame.java
23 Dec 2001 06:25:35 -0000 1.9
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutionFrame.java
24 Jan 2002 11:18:31 -0000
@@ -12,9 +12,11 @@
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.context.Context;
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.Logger;
import org.apache.myrmidon.api.TaskContext;
+import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.interfaces.executor.ExecutionFrame;
import org.apache.myrmidon.interfaces.type.TypeManager;
@@ -24,36 +26,28 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class DefaultExecutionFrame
- implements ExecutionFrame, LogEnabled, Contextualizable, Composable
+ implements ExecutionFrame, LogEnabled, Contextualizable
{
- private TypeManager m_typeManager;
-
private Logger m_logger;
private TaskContext m_context;
- private ComponentManager m_componentManager;
+ private TypeManager m_typeManager;
public void enableLogging( final Logger logger )
{
m_logger = logger;
}
- public void contextualize( final Context context )
+ public void contextualize( final Context context ) throws ContextException
{
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.ROLE );
+ }
+ catch( TaskException te )
+ {
+ throw new ContextException(te.getMessage(), te);
+ }
}
public TypeManager getTypeManager()
@@ -69,10 +63,5 @@
public TaskContext getContext()
{
return m_context;
- }
-
- public ComponentManager getComponentManager()
- {
- return m_componentManager;
}
}
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java,v
retrieving revision 1.18
diff -u -r1.18 DefaultExecutor.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java
20 Jan 2002 17:32:56 -0000 1.18
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/DefaultExecutor.java
24 Jan 2002 11:18:31 -0000
@@ -59,9 +59,6 @@
debug( "contextualizing.notice" );
doContextualize( task, taskModel, frame.getContext() );
- debug( "composing.notice" );
- doCompose( task, taskModel, frame.getComponentManager() );
-
debug( "configuring.notice" );
doConfigure( task, taskModel, frame.getContext() );
@@ -110,29 +107,6 @@
taskModel.getLocation(),
throwable.getMessage() );
throw new TaskException( message, throwable );
- }
- }
-
- 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 );
- }
}
}
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/Resources.properties
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/Resources.properties,v
retrieving revision 1.2
diff -u -r1.2 Resources.properties
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/Resources.properties
19 Nov 2001 12:37:25 -0000 1.2
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/executor/Resources.properties
24 Jan 2002 11:18:31 -0000
@@ -1,7 +1,6 @@
creating.notice=Creating.
logger.notice=Setting Logger.
contextualizing.notice=Contextualizing.
-composing.notice=Composing.
configuring.notice=Configuring.
initializing.notice=Initializing.
executing.notice=Executing.
@@ -9,7 +8,6 @@
no-create.error=Unable to create task {0}.
config.error=Error configuring task {0} at {1} (Reason: {2}).
-compose.error=Error composing task {0} at {1} (Reason: {2}).
context.error=Error contextualizing 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}).
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java,v
retrieving revision 1.8
diff -u -r1.8 DefaultTaskContext.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java
20 Jan 2002 17:32:58 -0000 1.8
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultTaskContext.java
24 Jan 2002 11:18:32 -0000
@@ -14,6 +14,9 @@
import org.apache.avalon.excalibur.io.FileUtil;
import org.apache.avalon.excalibur.property.PropertyException;
import org.apache.avalon.excalibur.property.PropertyUtil;
+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.context.ContextException;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.myrmidon.api.TaskContext;
@@ -26,11 +29,13 @@
*/
public class DefaultTaskContext
extends DefaultContext
- implements TaskContext
+ implements TaskContext, Composable
{
private final static Resources REZ =
ResourceManager.getPackageResources( DefaultTaskContext.class );
+ private ComponentManager m_componentManager;
+
/**
* Constructor for Context with no parent contexts.
*/
@@ -55,6 +60,11 @@
super( parent );
}
+ public void compose( ComponentManager manager )
+ {
+ m_componentManager = manager;
+ }
+
/**
* Retrieve Name of tasklet.
*
@@ -180,7 +190,8 @@
if( CURRENT == scope ) {
put( name, value );
- } else if( PARENT == scope )
+ }
+ else if( PARENT == scope )
{
if( null == getParent() )
{
@@ -207,6 +218,36 @@
{
final String message = REZ.getString( "bad-scope.error", scope );
throw new IllegalStateException( message );
+ }
+ }
+
+ /**
+ * Locates a service, by role name.
+ *
+ * @param role the service role.
+ */
+ public Object getService( String role )
+ throws TaskException
+ {
+ if( m_componentManager != null )
+ {
+ try
+ {
+ return m_componentManager.lookup( role );
+ }
+ catch( ComponentException e )
+ {
+ final String message = REZ.getString(
"bad-find-service.error", role );
+ throw new TaskException( message, e );
+ }
+ }
+ else if( getParent() != null )
+ {
+ return ( (TaskContext) getParent() ).getService( role );
+ }
+ else {
+ final String message = REZ.getString( "bad-find-service.error",
role );
+ throw new TaskException( message );
}
}
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java,v
retrieving revision 1.12
diff -u -r1.12 DefaultWorkspace.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java
20 Jan 2002 17:32:58 -0000 1.12
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/DefaultWorkspace.java
24 Jan 2002 11:18:33 -0000
@@ -19,7 +19,6 @@
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.component.DefaultComponentManager;
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.LogKitLogger;
import org.apache.avalon.framework.logger.Logger;
@@ -219,9 +218,6 @@
private ExecutionFrame createExecutionFrame( final Project project )
throws TaskException
{
- final TaskContext context = new DefaultTaskContext( m_baseContext );
- context.setProperty( TaskContext.BASE_DIRECTORY,
project.getBaseDirectory() );
-
//Create per frame ComponentManager
final DefaultComponentManager componentManager =
new DefaultComponentManager( m_componentManager );
@@ -267,6 +263,11 @@
componentManager.put( Project.ROLE + "/" + name, other );
}
+ // Create and configure the context
+ final DefaultTaskContext context = new DefaultTaskContext(
m_baseContext );
+ context.setProperty( TaskContext.BASE_DIRECTORY,
project.getBaseDirectory() );
+ context.compose( componentManager );
+
final DefaultExecutionFrame frame = new DefaultExecutionFrame();
try
@@ -276,7 +277,6 @@
frame.enableLogging( logger );
frame.contextualize( context );
- frame.compose( componentManager );
}
catch( final Exception e )
{
@@ -401,10 +401,10 @@
return;
}
}
- catch( final ContextException ce )
+ catch( final TaskException te )
{
final String message = REZ.getString( "condition-eval.error",
name );
- throw new TaskException( message, ce );
+ throw new TaskException( message, te );
}
}
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties,v
retrieving revision 1.4
diff -u -r1.4 Resources.properties
---
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties
5 Jan 2002 03:03:55 -0000 1.4
+++
proposal/myrmidon/src/java/org/apache/myrmidon/components/workspace/Resources.properties
24 Jan 2002 11:18:33 -0000
@@ -15,7 +15,9 @@
no-name.error=No Name 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.
+bad-find-services.error=Unable to find service "{0}".
bad-scope.error=Unknown property scope! ({0}).
bad-property.error=Property {0} must have a value of type {1}.
null-resolved-value.error=Value "{0}" resolved to null.
-bad-resolve.error=Unable to resolve value "{0}".
\ No newline at end of file
+bad-resolve.error=Unable to resolve value "{0}".
+bad-find-service.error=Could not find service "{0}".
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractContainerTask.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractContainerTask.java,v
retrieving revision 1.10
diff -u -r1.10 AbstractContainerTask.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractContainerTask.java
20 Jan 2002 17:32:56 -0000 1.10
+++
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractContainerTask.java
24 Jan 2002 11:18:33 -0000
@@ -9,15 +9,12 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.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.TaskException;
import org.apache.myrmidon.converter.Converter;
import org.apache.myrmidon.converter.ConverterException;
import org.apache.myrmidon.interfaces.configurer.Configurer;
@@ -31,7 +28,6 @@
*/
public abstract class AbstractContainerTask
extends AbstractTask
- implements Composable
{
private final static Resources REZ =
ResourceManager.getPackageResources( AbstractContainerTask.class );
@@ -45,12 +41,25 @@
///For executing sub-elements as tasks
private Executor m_executor;
- public void compose( final ComponentManager componentManager )
- throws ComponentException
+ /**
+ * Retrieve context from container.
+ *
+ * @param context the context
+ */
+ public void contextualize( Context context )
+ throws ContextException
{
- m_configurer = (Configurer)componentManager.lookup( Configurer.ROLE );
- m_converter = (MasterConverter)componentManager.lookup(
MasterConverter.ROLE );
- m_executor = (Executor)componentManager.lookup( Executor.ROLE );
+ super.contextualize( context );
+ try
+ {
+ m_configurer = (Configurer)getService( Configurer.ROLE );
+ m_converter = (MasterConverter)getService( MasterConverter.ROLE );
+ m_executor = (Executor)getService( Executor.ROLE );
+ }
+ catch( TaskException te )
+ {
+ throw new ContextException(te.getMessage(), te);
+ }
}
/**
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractTypeDef.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractTypeDef.java,v
retrieving revision 1.11
diff -u -r1.11 AbstractTypeDef.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractTypeDef.java
20 Jan 2002 17:32:56 -0000 1.11
+++
proposal/myrmidon/src/java/org/apache/myrmidon/framework/AbstractTypeDef.java
24 Jan 2002 11:18:33 -0000
@@ -12,9 +12,6 @@
import java.net.URLClassLoader;
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.TaskException;
import org.apache.myrmidon.interfaces.role.RoleManager;
@@ -31,7 +28,6 @@
*/
public abstract class AbstractTypeDef
extends AbstractTask
- implements Composable
{
private final static Resources REZ =
ResourceManager.getPackageResources( AbstractTypeDef.class );
@@ -39,15 +35,6 @@
private File m_lib;
private String m_name;
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 )
{
@@ -80,15 +67,17 @@
}
final String typeName = getTypeName();
- final String role = m_roleManager.getRoleForName( typeName );
+ final RoleManager roleManager = (RoleManager)getService(
RoleManager.ROLE );
+ final String role = roleManager.getRoleForName( typeName );
final ClassLoader classLoader = createClassLoader();
final DefaultTypeFactory factory = new DefaultTypeFactory( classLoader
);
factory.addNameClassMapping( m_name, m_className );
+ final TypeManager typeManager = (TypeManager)getService(
TypeManager.ROLE );
try
{
- m_typeManager.registerType( role, m_name, factory );
+ typeManager.registerType( role, m_name, factory );
}
catch( final TypeException te )
{
@@ -114,11 +103,6 @@
final String message = REZ.getString(
"typedef.bad-classloader.error", e );
throw new TaskException( message, e );
}
- }
-
- protected final TypeManager getTypeManager()
- {
- return m_typeManager;
}
protected abstract String getTypeName();
Index: proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java,v
retrieving revision 1.9
diff -u -r1.9 Condition.java
--- proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java
22 Jan 2002 11:46:30 -0000 1.9
+++ proposal/myrmidon/src/java/org/apache/myrmidon/framework/Condition.java
24 Jan 2002 11:18:34 -0000
@@ -45,7 +45,7 @@
}
public boolean evaluate( final TaskContext context )
- throws ContextException
+ throws TaskException
{
boolean result = false;
@@ -66,8 +66,9 @@
}
}
}
- catch( final TaskException te )
+ catch( final ContextException ce )
{
+ // Unknown property
result = false;
}
/*
Index: proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java,v
retrieving revision 1.12
diff -u -r1.12 Pattern.java
--- proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java
23 Jan 2002 10:18:23 -0000 1.12
+++ proposal/myrmidon/src/java/org/apache/myrmidon/framework/Pattern.java
24 Jan 2002 11:18:34 -0000
@@ -9,10 +9,8 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
-import org.apache.avalon.framework.context.ContextException;
-import org.apache.myrmidon.api.TaskException;
import org.apache.myrmidon.api.TaskContext;
-import org.apache.tools.ant.Project;
+import org.apache.myrmidon.api.TaskException;
/**
* Basic data type for holding patterns.
@@ -103,7 +101,7 @@
return getName();
}
}
- catch( final ContextException ce )
+ catch( final TaskException te )
{
//ignore for the moment
}
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/framework/Resources.properties
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Resources.properties,v
retrieving revision 1.3
diff -u -r1.3 Resources.properties
---
proposal/myrmidon/src/java/org/apache/myrmidon/framework/Resources.properties
16 Dec 2001 12:10:29 -0000 1.3
+++
proposal/myrmidon/src/java/org/apache/myrmidon/framework/Resources.properties
24 Jan 2002 11:18:34 -0000
@@ -11,7 +11,6 @@
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-id.error=Id must be specified.
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/framework/TypeInstanceTask.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/framework/TypeInstanceTask.java,v
retrieving revision 1.8
diff -u -r1.8 TypeInstanceTask.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/framework/TypeInstanceTask.java
20 Jan 2002 17:32:56 -0000 1.8
+++
proposal/myrmidon/src/java/org/apache/myrmidon/framework/TypeInstanceTask.java
24 Jan 2002 11:18:34 -0000
@@ -9,17 +9,13 @@
import org.apache.avalon.excalibur.i18n.ResourceManager;
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.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.myrmidon.api.TaskContext;
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.TypeManager;
/**
* This is the property "task" to declare a binding of a datatype to a name.
@@ -36,24 +32,6 @@
private String m_id;
private Object m_value;
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 )
throws ConfigurationException
@@ -85,7 +63,8 @@
try
{
- m_value = m_factory.create( configuration.getName() );
+ final TypeFactory typeFactory = getTypeFactory( DataType.ROLE );
+ m_value = typeFactory.create( configuration.getName() );
}
catch( final Exception e )
{
Index:
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/ExecutionFrame.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/ExecutionFrame.java,v
retrieving revision 1.5
diff -u -r1.5 ExecutionFrame.java
---
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/ExecutionFrame.java
23 Dec 2001 06:25:36 -0000 1.5
+++
proposal/myrmidon/src/java/org/apache/myrmidon/interfaces/executor/ExecutionFrame.java
24 Jan 2002 11:18:35 -0000
@@ -24,6 +24,4 @@
Logger getLogger();
TaskContext getContext();
-
- ComponentManager getComponentManager();
}
Index: proposal/myrmidon/src/make/sample.ant
===================================================================
RCS file: /home/cvspublic/jakarta-ant/proposal/myrmidon/src/make/sample.ant,v
retrieving revision 1.24
diff -u -r1.24 sample.ant
--- proposal/myrmidon/src/make/sample.ant 19 Jan 2002 07:44:26 -0000
1.24
+++ proposal/myrmidon/src/make/sample.ant 24 Jan 2002 11:18:37 -0000
@@ -81,10 +81,10 @@
<target name="datatype-test">
<property name="foo">
- <pattern value="*.java"/>
+ <pattern name="*.java"/>
</property>
- <pattern id="foo2" value="*.java" if="..." />
+ <pattern id="foo2" name="*.java" if="..." />
<log message="foo=${foo}" />
<log message="foo2=${foo2}" />
Index:
proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java
===================================================================
RCS file:
/home/cvspublic/jakarta-ant/proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java,v
retrieving revision 1.1
diff -u -r1.1 DefaultConfigurerTest.java
---
proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java
22 Jan 2002 11:16:02 -0000 1.1
+++
proposal/myrmidon/src/testcases/org/apache/myrmidon/components/configurer/DefaultConfigurerTest.java
24 Jan 2002 11:18:38 -0000
@@ -101,13 +101,17 @@
m_componentManager.put( Configurer.ROLE, component );
components.add( component );
+ // Setup a context
+ m_context = new DefaultTaskContext();
+ components.add( m_context );
+
// Log enable the components
for( Iterator iterator = components.iterator(); iterator.hasNext(); )
{
- component = (Component)iterator.next();
- if( component instanceof LogEnabled )
+ Object obj = iterator.next();
+ if( obj instanceof LogEnabled )
{
- final LogEnabled logEnabled = (LogEnabled)component;
+ final LogEnabled logEnabled = (LogEnabled)obj;
logEnabled.enableLogging( m_logger );
}
}
@@ -115,21 +119,21 @@
// Compose the components
for( Iterator iterator = components.iterator(); iterator.hasNext(); )
{
- component = (Component)iterator.next();
- if( component instanceof Composable )
+ Object obj = iterator.next();
+ if( obj instanceof Composable )
{
- final Composable composable = (Composable)component;
+ final Composable composable = (Composable)obj;
composable.compose( m_componentManager );
}
}
+ // Configure the context
+ final File baseDir = new File( "." ).getAbsoluteFile();
+ m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir );
+
// Find the configurer
m_configurer = (Configurer)m_componentManager.lookup( Configurer.ROLE
);
- // Setup a context
- m_context = new DefaultTaskContext();
- final File baseDir = new File( "." ).getAbsoluteFile();
- m_context.setProperty( TaskContext.BASE_DIRECTORY, baseDir );
}
/**
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
