Browse Source

Started to update to task engine design I have been talking about.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269048 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
6caf36ea18
27 changed files with 191 additions and 178 deletions
  1. +1
    -1
      proposal/myrmidon/build.xml
  2. +4
    -4
      proposal/myrmidon/src/java/org/apache/ant/Main.java
  3. +6
    -6
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java
  4. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java
  5. +5
    -5
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java
  6. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java
  7. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java
  8. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java
  9. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java
  10. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java
  11. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java
  12. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java
  13. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java
  14. +4
    -4
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java
  15. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java
  16. +10
    -10
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java
  17. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/project/Project.java
  18. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java
  19. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java
  20. +0
    -29
      proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java
  21. +42
    -41
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java
  22. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java
  23. +7
    -7
      proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java
  24. +26
    -27
      proposal/myrmidon/src/java/org/apache/myrmidon/api/DefaultTaskContext.java
  25. +1
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/api/JavaVersion.java
  26. +39
    -0
      proposal/myrmidon/src/java/org/apache/myrmidon/api/Task.java
  27. +16
    -13
      proposal/myrmidon/src/java/org/apache/myrmidon/api/TaskContext.java

+ 1
- 1
proposal/myrmidon/build.xml View File

@@ -108,7 +108,7 @@ Legal:
<jar jarfile="${build.lib}/myrmidon.jar"
basedir="${build.classes}"
manifest="${manifest.dir}/myrmidon-manifest.mf">
<include name="org/apache/ant/**" />
<include name="org/apache/**" />
<exclude name="org/apache/ant/launcher/*" />
<exclude name="org/apache/ant/tasks/**" />
<exclude name="org/apache/ant/convert/core/**" />


+ 4
- 4
proposal/myrmidon/src/java/org/apache/ant/Main.java View File

@@ -30,8 +30,8 @@ import org.apache.ant.project.ProjectEngine;
import org.apache.ant.project.ProjectListener;
import org.apache.ant.runtime.AntEngine;
import org.apache.ant.runtime.DefaultAntEngine;
import org.apache.ant.tasklet.JavaVersion;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.JavaVersion;
import org.apache.myrmidon.api.TaskContext;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.excalibur.cli.CLArgsParser;
import org.apache.avalon.excalibur.cli.CLOption;
@@ -495,7 +495,7 @@ public class Main
//defines.put( AntContextResources.TASKLIB_DIR, m_taskLibDir );
//defines.put( TaskletContext.JAVA_VERSION, getJavaVersion() );

final TaskletContext context = project.getContext();
final TaskContext context = project.getContext();
addToContext( context, defines );

//Add system properties second so that they overide user-defined properties
@@ -508,7 +508,7 @@ public class Main
* @param context the context
* @param map the map of names->values
*/
protected void addToContext( final TaskletContext context, final Map map )
protected void addToContext( final TaskContext context, final Map map )
{
final Iterator keys = map.keySet().iterator();



+ 6
- 6
proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java View File

@@ -11,9 +11,9 @@ import java.util.ArrayList;
import org.apache.ant.AntException;
import org.apache.ant.project.Project;
import org.apache.ant.project.ProjectEngine;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.DefaultTaskContext;
import org.apache.myrmidon.api.TaskContext;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
@@ -25,20 +25,20 @@ import org.apache.avalon.framework.context.Context;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class AntCall
extends AbstractTasklet
extends AbstractTask
implements Composable
{
protected ProjectEngine m_projectEngine;
protected Project m_project;
protected String m_target;
protected ArrayList m_properties = new ArrayList();
protected TaskletContext m_childContext;
protected TaskContext m_childContext;
protected ComponentManager m_componentManager;

public void contextualize( final Context context )
{
super.contextualize( context );
m_childContext = new DefaultTaskletContext( getContext() );
m_childContext = new DefaultTaskContext( getContext() );
}

public void compose( final ComponentManager componentManager )


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java View File

@@ -8,7 +8,7 @@
package org.apache.ant.modules.basic;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;

/**
* This is the echo task to display a message.
@@ -16,7 +16,7 @@ import org.apache.ant.tasklet.AbstractTasklet;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Echo
extends AbstractTasklet
extends AbstractTask
{
protected String m_message;



+ 5
- 5
proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java View File

@@ -13,8 +13,8 @@ import org.apache.ant.configuration.Configurer;
import org.apache.ant.convert.Converter;
import org.apache.ant.tasklet.DataType;
import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskContext;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
@@ -30,7 +30,7 @@ import org.apache.avalon.framework.context.Resolvable;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class Property
extends AbstractTasklet
extends AbstractTask
implements Configurable, Composable
{
protected String m_name;
@@ -158,7 +158,7 @@ public class Property
throw new AntException( "Value must be specified" );
}

final TaskletContext context = getContext();
final TaskContext context = getContext();

Object value = m_value;

@@ -178,7 +178,7 @@ public class Property
}
else
{
context.setProperty( m_name, value, TaskletContext.PARENT );
context.setProperty( m_name, value, TaskContext.PARENT );
}
}
}

+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java View File

@@ -9,8 +9,8 @@ package org.apache.ant.modules.basic;

import java.io.File;
import org.apache.ant.convert.AbstractConverter;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.framework.context.Context;
import org.apache.myrmidon.api.TaskContext;

/**
* String to file converter
@@ -28,8 +28,8 @@ public class StringToFileConverter
public Object convert( final Object original, final Context context )
throws Exception
{
final TaskletContext taskletContext = (TaskletContext)context;
return taskletContext.resolveFile( (String)original );
final TaskContext taskContext = (TaskContext)context;
return taskContext.resolveFile( (String)original );
}
}


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java View File

@@ -11,7 +11,7 @@ import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
@@ -24,7 +24,7 @@ import org.apache.avalon.framework.camelot.RegistryException;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public abstract class AbstractResourceRegisterer
extends AbstractTasklet
extends AbstractTask
implements Composable
{
protected String m_lib;


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java View File

@@ -13,7 +13,7 @@ import java.net.URL;
import org.apache.ant.AntException;
import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.convert.engine.DefaultConverterInfo;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
@@ -28,7 +28,7 @@ import org.apache.avalon.framework.camelot.RegistryException;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class RegisterConverter
extends AbstractTasklet
extends AbstractTask
implements Composable
{
protected String m_sourceType;


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java View File

@@ -11,7 +11,7 @@ import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
@@ -24,7 +24,7 @@ import org.apache.avalon.framework.camelot.DeploymentException;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class RegisterTasklib
extends AbstractTasklet
extends AbstractTask
implements Composable
{
protected String m_lib;


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java View File

@@ -8,7 +8,7 @@
package org.apache.ant.modules.test;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -19,7 +19,7 @@ import org.apache.avalon.framework.configuration.ConfigurationException;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class ConfigurationTest
extends AbstractTasklet
extends AbstractTask
implements Configurable
{
private String m_message;


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java View File

@@ -8,7 +8,7 @@
package org.apache.ant.modules.test;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;

/**
* This is to test whether content is added.
@@ -16,7 +16,7 @@ import org.apache.ant.tasklet.AbstractTasklet;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class ContentTest
extends AbstractTasklet
extends AbstractTask
{
public void addContent( final Integer value )
{
@@ -31,7 +31,7 @@ public class ContentTest
*/

public void execute()
throws AntException
throws Exception
{
}
}

+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java View File

@@ -9,7 +9,7 @@
package org.apache.ant.modules.test;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;

/**
* Test conversion of all the primitive types.
@@ -17,7 +17,7 @@ import org.apache.ant.tasklet.AbstractTasklet;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class PrimitiveTypesTest
extends AbstractTasklet
extends AbstractTask
{
public void setInteger( final Integer value )
{


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java View File

@@ -8,7 +8,7 @@
package org.apache.ant.modules.test;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.myrmidon.api.AbstractTask;

/**
* Test sub-elements addition.
@@ -16,7 +16,7 @@ import org.apache.ant.tasklet.AbstractTasklet;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class SubElementTest
extends AbstractTasklet
extends AbstractTask
{
public static final class Beep
{


+ 4
- 4
proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java View File

@@ -13,8 +13,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.DefaultTaskContext;
import org.apache.myrmidon.api.TaskContext;

/**
* Default project implementation.
@@ -24,7 +24,7 @@ import org.apache.ant.tasklet.TaskletContext;
public class DefaultProject
implements Project
{
protected final TaskletContext m_baseContext = new DefaultTaskletContext();
protected final TaskContext m_baseContext = new DefaultTaskContext();
protected final HashMap m_targets = new HashMap();
protected Target m_implicitTarget;
protected String m_defaultTarget;
@@ -87,7 +87,7 @@ public class DefaultProject
*
* @return the context
*/
public TaskletContext getContext()
public TaskContext getContext()
{
return m_baseContext;
}


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java View File

@@ -11,7 +11,7 @@ import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.TaskContext;
import org.apache.ant.util.Condition;
import org.apache.avalon.framework.ExceptionUtil;
import org.apache.avalon.framework.configuration.Configuration;
@@ -118,8 +118,8 @@ public class DefaultProjectBuilder
project.setDefaultTargetName( defaultTarget );

//setup basic context of project
final TaskletContext context = project.getContext();
context.setProperty( TaskletContext.BASE_DIRECTORY, baseDirectory );
final TaskContext context = project.getContext();
context.setProperty( TaskContext.BASE_DIRECTORY, baseDirectory );
context.setProperty( Project.PROJECT_FILE, file );
context.setProperty( Project.PROJECT, projectName );



+ 10
- 10
proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java View File

@@ -10,8 +10,8 @@ package org.apache.ant.project;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.DefaultTaskContext;
import org.apache.myrmidon.api.TaskContext;
import org.apache.ant.tasklet.engine.DefaultTaskletEngine;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.ant.util.Condition;
@@ -87,7 +87,7 @@ public class DefaultProjectEngine
//HACK: should do this a better way !!!!!!
m_componentManager.put( "org.apache.ant.project.Project", project );

final TaskletContext context = project.getContext();
final TaskContext context = project.getContext();

final String projectName = (String)context.getProperty( Project.PROJECT );

@@ -110,7 +110,7 @@ public class DefaultProjectEngine
* @param context the context
* @exception AntException if an error occurs
*/
public void execute( Project project, String target, TaskletContext context )
public void execute( Project project, String target, TaskContext context )
throws AntException
{
execute( project, target, context, new ArrayList() );
@@ -127,7 +127,7 @@ public class DefaultProjectEngine
*/
protected void execute( final Project project,
final String targetName,
final TaskletContext context,
final TaskContext context,
final ArrayList done )
throws AntException
{
@@ -165,7 +165,7 @@ public class DefaultProjectEngine
*/
protected void executeTarget( final String targetName,
final Target target,
final TaskletContext context )
final TaskContext context )
throws AntException
{
//is this necessary ? I think not but ....
@@ -173,7 +173,7 @@ public class DefaultProjectEngine
//m_componentManager.put( "org.apache.ant.project.Target", target );

//create project context and set target name
final TaskletContext targetContext = new DefaultTaskletContext( context );
final TaskContext targetContext = new DefaultTaskContext( context );
targetContext.setProperty( Project.TARGET, targetName );

//notify listeners
@@ -196,7 +196,7 @@ public class DefaultProjectEngine
*/
protected void executeTargetWork( final String name,
final Target target,
final TaskletContext context )
final TaskContext context )
{
//check the condition associated with target.
//if it is not satisfied then skip target
@@ -229,7 +229,7 @@ public class DefaultProjectEngine
* @param context the context
* @exception AntException if an error occurs
*/
protected void executeTask( final Configuration task, final TaskletContext context )
protected void executeTask( final Configuration task, final TaskContext context )
throws AntException
{
final String name = task.getName();
@@ -241,7 +241,7 @@ public class DefaultProjectEngine
//final TaskletContext targetContext = new DefaultTaskletContext( context );

//is setting name even necessary ???
context.setProperty( TaskletContext.NAME, name );
context.setProperty( TaskContext.NAME, name );

//notify listeners
m_listenerSupport.taskletStarted( name );


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/project/Project.java View File

@@ -9,7 +9,7 @@ package org.apache.ant.project;

import java.util.Iterator;
import org.apache.ant.AntException;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.TaskContext;
import org.apache.avalon.framework.component.Component;

/**
@@ -65,5 +65,5 @@ public interface Project
*
* @return the context
*/
TaskletContext getContext();
TaskContext getContext();
}

+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java View File

@@ -8,7 +8,7 @@
package org.apache.ant.project;

import org.apache.ant.AntException;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.TaskContext;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.framework.component.Component;

@@ -55,6 +55,6 @@ public interface ProjectEngine
* @param context the context
* @exception AntException if an error occurs
*/
void execute( Project project, String target, TaskletContext context )
void execute( Project project, String target, TaskContext context )
throws AntException;
}

+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java View File

@@ -14,7 +14,7 @@ import org.apache.ant.configuration.Configurer;
import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.project.ProjectBuilder;
import org.apache.ant.project.ProjectEngine;
import org.apache.ant.tasklet.JavaVersion;
import org.apache.myrmidon.api.JavaVersion;
import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.ant.tasklet.engine.TskDeployer;


+ 0
- 29
proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java View File

@@ -1,29 +0,0 @@
/*
* 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 file.
*/
package org.apache.ant.tasklet;

import org.apache.avalon.framework.component.Component;

/**
* This represents the individual tasks.
* Particular instances can also implement Initializable
* and/or Disposable, in which case init()/dispose() will
* be called at appropriate time.
* The task can also implement Composable in which case required
* facilities will be passed via a ComponentManager. The actual
* facilties is determined by particular task engine but will usually
* include ProjectEngine and TaskEngine.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface Tasklet
extends Component
{
void execute()
throws Exception;
}

+ 42
- 41
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java View File

@@ -14,8 +14,8 @@ import org.apache.ant.configuration.DefaultConfigurer;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.tasklet.Tasklet;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.Task;
import org.apache.myrmidon.api.TaskContext;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
@@ -98,43 +98,44 @@ public class DefaultTaskletEngine
lookup( "org.apache.ant.convert.engine.ConverterEngine" );
}

public void execute( final Configuration task, final TaskletContext context )
public void execute( final Configuration taskData, final TaskContext context )
throws AntException
{
getLogger().debug( "Creating" );
final Tasklet tasklet = createTasklet( task.getName() );
setupLogger( tasklet );
final Task task = createTask( taskData.getName() );
setupLogger( task );

getLogger().debug( "Contextualizing" );
doContextualize( tasklet, task, context );
doContextualize( task, taskData, context );

getLogger().debug( "Composing" );
doCompose( tasklet, task );
doCompose( task, taskData );

getLogger().debug( "Configuring" );
doConfigure( tasklet, task, context );
doConfigure( task, taskData, context );

getLogger().debug( "Initializing" );
doInitialize( tasklet, task );
doInitialize( task, taskData );

getLogger().debug( "Running" );
try { tasklet.execute(); }

try { task.execute(); }
catch( final Exception e )
{
throw new AntException( "Error executing task", e );
}

getLogger().debug( "Disposing" );
doDispose( tasklet, task );
doDispose( task, taskData );
}
protected Tasklet createTasklet( final String name )
protected Task createTask( final String name )
throws AntException
{
try
{
final Locator locator = (Locator)m_locatorRegistry.getInfo( name, Locator.class );
return (Tasklet)m_factory.create( locator, Tasklet.class );
return (Task)m_factory.create( locator, Task.class );
}
catch( final RegistryException re )
{
@@ -146,80 +147,80 @@ public class DefaultTaskletEngine
}
}

protected void doConfigure( final Tasklet tasklet,
final Configuration task,
final TaskletContext context )
protected void doConfigure( final Task task,
final Configuration taskData,
final TaskContext context )
throws AntException
{
try { m_configurer.configure( tasklet, task, context ); }
try { m_configurer.configure( task, taskData, context ); }
catch( final Throwable throwable )
{
throw new AntException( "Error configuring task " + task.getName() + " at " +
task.getLocation() + "(Reason: " +
throw new AntException( "Error configuring task " + taskData.getName() + " at " +
taskData.getLocation() + "(Reason: " +
throwable.getMessage() + ")", throwable );
}
}
protected void doCompose( final Tasklet tasklet, final Configuration task )
protected void doCompose( final Task task, final Configuration taskData )
throws AntException
{
if( tasklet instanceof Composable )
if( task instanceof Composable )
{
try { ((Composable)tasklet).compose( m_componentManager ); }
try { ((Composable)task).compose( m_componentManager ); }
catch( final Throwable throwable )
{
throw new AntException( "Error composing task " + task.getName() + " at " +
task.getLocation() + "(Reason: " +
throw new AntException( "Error composing task " + taskData.getName() + " at " +
taskData.getLocation() + "(Reason: " +
throwable.getMessage() + ")", throwable );
}
}
}

protected void doContextualize( final Tasklet tasklet,
final Configuration task,
final TaskletContext context )
protected void doContextualize( final Task task,
final Configuration taskData,
final TaskContext context )
throws AntException
{
try
{
if( tasklet instanceof Contextualizable )
if( task instanceof Contextualizable )
{
((Contextualizable)tasklet).contextualize( context );
((Contextualizable)task).contextualize( context );
}
}
catch( final Throwable throwable )
{
throw new AntException( "Error contextualizing task " + task.getName() + " at " +
task.getLocation() + "(Reason: " +
throw new AntException( "Error contextualizing task " + taskData.getName() + " at " +
taskData.getLocation() + "(Reason: " +
throwable.getMessage() + ")", throwable );
}
}

protected void doDispose( final Tasklet tasklet, final Configuration task )
protected void doDispose( final Task task, final Configuration taskData )
throws AntException
{
if( tasklet instanceof Disposable )
if( task instanceof Disposable )
{
try { ((Disposable)tasklet).dispose(); }
try { ((Disposable)task).dispose(); }
catch( final Throwable throwable )
{
throw new AntException( "Error disposing task " + task.getName() + " at " +
task.getLocation() + "(Reason: " +
throw new AntException( "Error disposing task " + taskData.getName() + " at " +
taskData.getLocation() + "(Reason: " +
throwable.getMessage() + ")", throwable );
}
}
}

protected void doInitialize( final Tasklet tasklet, final Configuration task )
protected void doInitialize( final Task task, final Configuration taskData )
throws AntException
{
if( tasklet instanceof Initializable )
if( task instanceof Initializable )
{
try { ((Initializable)tasklet).initialize(); }
try { ((Initializable)task).initialize(); }
catch( final Throwable throwable )
{
throw new AntException( "Error initializing task " + task.getName() + " at " +
task.getLocation() + "(Reason: " +
throw new AntException( "Error initializing task " + taskData.getName() + " at " +
taskData.getLocation() + "(Reason: " +
throwable.getMessage() + ")", throwable );
}
}


+ 2
- 2
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java View File

@@ -10,7 +10,7 @@ package org.apache.ant.tasklet.engine;
import org.apache.ant.AntException;
import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.TaskletContext;
import org.apache.myrmidon.api.TaskContext;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
@@ -60,6 +60,6 @@ public interface TaskletEngine
* @param task the configruation data for task
* @exception AntException if an error occurs
*/
void execute( Configuration task, TaskletContext context )
void execute( Configuration task, TaskContext context )
throws AntException;
}

proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java → proposal/myrmidon/src/java/org/apache/myrmidon/api/AbstractTask.java View File

@@ -5,7 +5,7 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.ant.tasklet;
package org.apache.myrmidon.api;

import org.apache.ant.AntException;
import org.apache.avalon.framework.activity.Disposable;
@@ -15,16 +15,16 @@ import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLoggable;

/**
* This is abstract base class for tasklets.
* This is the class that Task writers should extend to provide custom tasks.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public abstract class AbstractTasklet
public abstract class AbstractTask
extends AbstractLoggable
implements Tasklet, Contextualizable, Initializable, Disposable
implements Task, Contextualizable, Initializable, Disposable
{
///Variable to hold context for use by sub-classes
private TaskletContext m_context;
private TaskContext m_context;

/**
* Retrieve context from container.
@@ -33,7 +33,7 @@ public abstract class AbstractTasklet
*/
public void contextualize( final Context context )
{
m_context = (TaskletContext)context;
m_context = (TaskContext)context;
}

/**
@@ -62,7 +62,7 @@ public abstract class AbstractTasklet
*
* @return the context
*/
protected final TaskletContext getContext()
protected final TaskContext getContext()
{
return m_context;
}

proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java → proposal/myrmidon/src/java/org/apache/myrmidon/api/DefaultTaskContext.java View File

@@ -5,39 +5,38 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.ant.tasklet;
package org.apache.myrmidon.api;

import java.io.File;
import org.apache.ant.AntException;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.excalibur.property.PropertyException;
import org.apache.avalon.excalibur.property.PropertyUtil;
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.context.ContextException;
import org.apache.avalon.framework.context.DefaultContext;

/**
* Default implementation of TaskletContext.
* It represents the *Context* in which a task can be executed.
* Default implementation of TaskContext.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class DefaultTaskletContext
public class DefaultTaskContext
extends DefaultContext
implements TaskletContext
implements TaskContext
{
protected File m_baseDirectory;
private File m_baseDirectory;

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

@@ -64,7 +63,7 @@ public class DefaultTaskletContext
}
}

/**
* Retrieve Name of tasklet.
*
@@ -93,10 +92,10 @@ public class DefaultTaskletContext
}

/**
* Resolve filename.
* Resolve filename.
* This involves resolving it against baseDirectory and
* removing ../ and ./ references. It also means formatting
* it appropriately for the particular OS (ie different OS have
* removing ../ and ./ references. It also means formatting
* it appropriately for the particular OS (ie different OS have
* different volumes, file conventions etc)
*
* @param filename the filename to resolve
@@ -110,7 +109,7 @@ public class DefaultTaskletContext
}

/**
* Resolve property.
* Resolve property.
* This evaluates all property substitutions based on current context.
*
* @param property the property to resolve
@@ -151,7 +150,7 @@ public class DefaultTaskletContext
{
setProperty( name, value, CURRENT );
}
/**
* Set property value.
*
@@ -164,23 +163,23 @@ public class DefaultTaskletContext
if( CURRENT == scope ) put( name, value );
else if( PARENT == scope )
{
if( null == m_parent )
if( null == m_parent )
{
throw new AntException( "Can't set a property with parent scope when context " +
" has no parent" );
" has no parent" );
}
else
{
((DefaultTaskletContext)m_parent).put( name, value );
((DefaultTaskContext)m_parent).put( name, value );
}
}
else if( TOP_LEVEL == scope )
{
DefaultTaskletContext context = this;
DefaultTaskContext context = this;

while( null != context.m_parent )
{
context = (DefaultTaskletContext)context.m_parent;
context = (DefaultTaskContext)context.m_parent;
}

context.put( name, value );
@@ -194,7 +193,7 @@ public class DefaultTaskletContext

/**
* put a value in context.
* This put method is overidden so new baseDirectory can be saved
* This put method is overidden so new baseDirectory can be saved
* in member variable.
*
* @param key the key
@@ -228,19 +227,19 @@ public class DefaultTaskletContext
if( BASE_DIRECTORY.equals( name ) && !( value instanceof File ) )
{
throw new AntException( "Property " + BASE_DIRECTORY +
" must have a value of type " +
" must have a value of type " +
File.class.getName() );
}
else if( NAME.equals( name ) && !( value instanceof String ) )
{
throw new AntException( "Property " + NAME +
" must have a value of type " +
" must have a value of type " +
String.class.getName() );
}
else if( JAVA_VERSION.equals( name ) && !( value instanceof JavaVersion ) )
{
throw new AntException( "property " + JAVA_VERSION +
" must have a value of type " +
" must have a value of type " +
JavaVersion.class.getName() );
}
}

proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java → proposal/myrmidon/src/java/org/apache/myrmidon/api/JavaVersion.java View File

@@ -5,7 +5,7 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.ant.tasklet;
package org.apache.myrmidon.api;

import org.apache.avalon.framework.ValuedEnum;


+ 39
- 0
proposal/myrmidon/src/java/org/apache/myrmidon/api/Task.java View File

@@ -0,0 +1,39 @@
/*
* 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 file.
*/
package org.apache.myrmidon.api;

/**
* This is the interface that tasks implement to be executed in Myrmidon runtime.
*
* Instances can also implement the Avalon lifecycle methods
* Loggable, Contextualizable, Composable, Initializable and Disposable.
* Each of these lifecycle stages will be executed at appropriate time.
*
* Tasks can also choose to implement Configurable if they wish to directly
* receive the Configuration data representing the task. If this interface is
* not implemented then the engine will be responsbil for mapping configuration
* to task object.
*
* The Components passed in via ComponentManager are determined by container.
* Most containers will include the Engine and Registrys.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface Task
{
/**
* Execute task.
* This method is called to perform actual work associated with task.
* It is called after Task has been Configured and Initialized and before
* beig Disposed (If task implements appropriate interfaces).
*
* @exception Exception if an error occurs
*/
void execute()
throws Exception;
}

proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java → proposal/myrmidon/src/java/org/apache/myrmidon/api/TaskContext.java View File

@@ -5,19 +5,22 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.ant.tasklet;
package org.apache.myrmidon.api;

import java.io.File;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.Enum;
import org.apache.avalon.framework.ValuedEnum;
import org.apache.avalon.framework.context.Context;

/**
* This represents the *Context* in which a task can be executed.
* This interface represents the <em>Context</em> in which Task is executed.
* Like other Component APIs the TaskContext represents the communication
* path between the container and the Task.
* Unlike other APIs the Logging is provided through another interface (Loggable)
* as is access to Peer components (via Composable).
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface TaskletContext
public interface TaskContext
extends Context
{
//these values are used when setting properties to indicate the scope at
@@ -37,14 +40,14 @@ public interface TaskletContext
* @return the version of JVM
*/
JavaVersion getJavaVersion();
/**
* Retrieve Name of tasklet.
*
* @return the name
*/
String getName();
/**
* Retrieve base directory.
*
@@ -53,10 +56,10 @@ public interface TaskletContext
File getBaseDirectory();

/**
* Resolve filename.
* Resolve filename.
* This involves resolving it against baseDirectory and
* removing ../ and ./ references. It also means formatting
* it appropriately for the particular OS (ie different OS have
* removing ../ and ./ references. It also means formatting
* it appropriately for the particular OS (ie different OS have
* different volumes, file conventions etc)
*
* @param filename the filename to resolve
@@ -65,7 +68,7 @@ public interface TaskletContext
File resolveFile( String filename );

/**
* Resolve property.
* Resolve property.
* This evaluates all property substitutions based on current context.
*
* @param property the property to resolve
@@ -88,7 +91,7 @@ public interface TaskletContext
* @param value the value of property
*/
void setProperty( String name, Object value );
/**
* Set property value.
*
@@ -96,7 +99,7 @@ public interface TaskletContext
* @param value the value of property
* @param scope the scope at which to set property
*/
void setProperty( String name, Object value, ScopeEnum scope );
void setProperty( String name, Object value, ScopeEnum scope );

/**
* Safe wrapper class for Scope enums.

Loading…
Cancel
Save