Browse Source

Run convert script to update to Beta Avalon.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269047 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Donald 24 years ago
parent
commit
48c54a5212
74 changed files with 692 additions and 965 deletions
  1. +0
    -19
      proposal/myrmidon/build.bat
  2. +7
    -4
      proposal/myrmidon/build.sh
  3. +32
    -149
      proposal/myrmidon/build.xml
  4. BIN
      proposal/myrmidon/lib/avalon-container.jar
  5. BIN
      proposal/myrmidon/lib/avalon-excalibur.jar
  6. BIN
      proposal/myrmidon/lib/avalon-framework.jar
  7. BIN
      proposal/myrmidon/lib/avalonapi.jar
  8. BIN
      proposal/myrmidon/lib/logkit.jar
  9. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/AntException.java
  10. +90
    -67
      proposal/myrmidon/src/java/org/apache/ant/Main.java
  11. +0
    -39
      proposal/myrmidon/src/java/org/apache/ant/configuration/Configurable.java
  12. +0
    -34
      proposal/myrmidon/src/java/org/apache/ant/configuration/Configuration.java
  13. +0
    -25
      proposal/myrmidon/src/java/org/apache/ant/configuration/ConfigurationBuilder.java
  14. +6
    -5
      proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java
  15. +0
    -48
      proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfiguration.java
  16. +81
    -79
      proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java
  17. +0
    -24
      proposal/myrmidon/src/java/org/apache/ant/configuration/SAXConfigurationHandler.java
  18. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/convert/AbstractConverter.java
  19. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java
  20. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterEngine.java
  21. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterInfo.java
  22. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterRegistry.java
  23. +19
    -19
      proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterEngine.java
  24. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterRegistry.java
  25. +44
    -16
      proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java
  26. +8
    -8
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java
  27. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java
  28. +17
    -16
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java
  29. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java
  30. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java
  31. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java
  32. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java
  33. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java
  34. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java
  35. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java
  36. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java
  37. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java
  38. +7
    -7
      proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java
  39. +9
    -9
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java
  40. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java
  41. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java
  42. +7
    -7
      proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java
  43. +5
    -5
      proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java
  44. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java
  45. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java
  46. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java
  47. +30
    -31
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java
  48. +29
    -29
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java
  49. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java
  50. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultTarget.java
  51. +7
    -7
      proposal/myrmidon/src/java/org/apache/ant/project/LogTargetToListenerAdapter.java
  52. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/project/Project.java
  53. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/project/ProjectBuilder.java
  54. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java
  55. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/project/Target.java
  56. +5
    -5
      proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java
  57. +16
    -17
      proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java
  58. +22
    -25
      proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java
  59. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/tasklet/DataType.java
  60. +27
    -8
      proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java
  61. +1
    -1
      proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java
  62. +5
    -5
      proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java
  63. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java
  64. +5
    -5
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DataTypeEngine.java
  65. +17
    -17
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultDataTypeEngine.java
  66. +43
    -33
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java
  67. +76
    -51
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java
  68. +6
    -6
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java
  69. +3
    -3
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java
  70. +26
    -17
      proposal/myrmidon/src/java/org/apache/ant/util/Condition.java
  71. +0
    -28
      proposal/myrmidon/src/java/org/apache/ant/util/ItemSet.java
  72. +0
    -35
      proposal/myrmidon/src/java/org/apache/ant/util/Mapper.java
  73. +0
    -20
      proposal/myrmidon/src/java/org/apache/ant/util/Scanner.java
  74. BIN
      proposal/myrmidon/tools/lib/ant.jar

+ 0
- 19
proposal/myrmidon/build.bat View File

@@ -1,19 +0,0 @@
@echo off

echo.
echo Ant Build System
echo ----------------

set ANT_HOME=tools

set LOCALCLASSPATH=
for %%i in (lib\*.jar) do call tools\bin\lcp.bat %%i
set CLASSPATH=%LOCALCLASSPATH%
set LOCALCLASSPATH=

%ANT_HOME%\bin\ant.bat -logger org.apache.tools.ant.NoBannerLogger -emacs %1 %2 %3 %4 %5 %6 %7 %8
goto cleanup

:cleanup
set ANT_HOME=
set CLASSPATH=

+ 7
- 4
proposal/myrmidon/build.sh View File

@@ -4,9 +4,12 @@ echo
echo "Ant Build System" echo "Ant Build System"
echo "----------------" echo "----------------"


chmod u+x $PWD/bin/antRun
chmod u+x $PWD/bin/ant
export MYRMIDON_HOME=tools


export ANT_HOME=.
chmod u+x $MYRMIDON_HOME/bin/antRun
chmod u+x $MYRMIDON_HOME/bin/ant


$PWD/bin/ant -emacs $@
export ANT_HOME=
export CLASSPATH=lib/xerces.jar

$MYRMIDON_HOME/bin/ant -logger org.apache.tools.ant.NoBannerLogger -emacs $@

+ 32
- 149
proposal/myrmidon/build.xml View File

@@ -46,111 +46,39 @@ Legal:
<property name="build.lib" value="${build.dir}/lib"/> <property name="build.lib" value="${build.dir}/lib"/>
<property name="build.src" value="${build.dir}/src"/> <property name="build.src" value="${build.dir}/src"/>
<property name="build.classes" value="${build.dir}/classes"/> <property name="build.classes" value="${build.dir}/classes"/>
<property name="build.javadocs" value="${build.dir}/javadocs"/>
<property name="build.docs" value="${build.dir}/docs"/>


<property name="src.base" value="src"/> <property name="src.base" value="src"/>
<property name="manifest.dir" value="${src.base}/manifest"/> <property name="manifest.dir" value="${src.base}/manifest"/>
<property name="xdocs.dir" value="${src.base}/xdocs"/>
<property name="java.dir" value="${src.base}/java"/> <property name="java.dir" value="${src.base}/java"/>
<property name="skins.dir" value="${src.base}/skins"/>
<property name="script.dir" value="${src.base}/script"/> <property name="script.dir" value="${src.base}/script"/>
<property name="lib.dir" value="lib"/> <property name="lib.dir" value="lib"/>


<property name="dist.name" value="${Name}-${version}"/> <property name="dist.name" value="${Name}-${version}"/>
<!-- <property name="dist.dir" value="${dist.name}"/> -->
<property name="dist.dir" value="dist"/> <property name="dist.dir" value="dist"/>
<property name="dist.bin" value="${dist.dir}/bin"/> <property name="dist.bin" value="${dist.dir}/bin"/>
<property name="dist.blocks" value="${dist.dir}/bin/blocks"/>
<property name="dist.lib" value="${dist.dir}/lib"/> <property name="dist.lib" value="${dist.dir}/lib"/>
<property name="dist.docs" value="${dist.dir}/docs"/>
<property name="dist.javadocs" value="${dist.dir}/docs/api"/>
<property name="dist.src.base" value="${dist.dir}/src"/>
<property name="dist.conf" value="${dist.dir}/conf"/>
<property name="dist.log" value="${dist.dir}/logs"/>


<property name="constants.file" value="org/apache/ant/Constants.java"/> <property name="constants.file" value="org/apache/ant/Constants.java"/>


<!--
===================================================================
Main target
===================================================================
-->
<target name="main" depends="dist" />
<path id="project.class.path">
<pathelement path="${java.class.path}" />
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
<pathelement path="${build.classes}" />
</path>


<!--
===================================================================
Help on usage
===================================================================
-->
<target name="usage">
<echo message=""/>
<echo message="${Name} Build file"/>
<echo message="-------------------------------------------------------------"/>
<echo message=""/>
<echo message=" available targets are:"/>
<echo message=""/>
<echo message=" jar -> generates the ${Name} jar files"/>
<echo message=" compile -> compiles the source code"/>
<echo message=" dist -> generates the ${Name} distribution (default)"/>
<echo message=" clean -> cleans up the created directories"/>
<echo message=" real-clean -> cleans up all genereated files and directories"/>
<!--
<echo message=" test -> perform unit tests"/>
<echo message=" javadocs -> generates the API documentation (java 1.2+ only)"/>
<echo message=" docs -> generates the ${Name} documentation"/>
-->
<echo message=""/>
<echo message="-------------------------------------------------------------"/>
<echo message=""/>
</target>

<target name="help" depends="usage"/>
<!-- Main target -->
<target name="main" depends="dist" />
<!-- Compiles the source code -->
<target name="compile">


<!--
===================================================================
Prepares the build directory
===================================================================
-->
<target name="prepare">
<tstamp/> <tstamp/>
<mkdir dir="${build.dir}"/>
</target>

<!--
===================================================================
Prepares the library code
===================================================================
-->
<target name="prepare-lib" depends="prepare">
<mkdir dir="${build.lib}"/>
<copy file="${lib.dir}/xerces.jar" todir="${build.lib}"/>
<copy file="${lib.dir}/avalonapi.jar" todir="${build.lib}"/>
</target>

<!--
===================================================================
Prepares the source code
===================================================================
-->
<target name="prepare-src" depends="prepare">
<mkdir dir="${build.src}"/> <mkdir dir="${build.src}"/>
<copy todir="${build.src}">
<fileset dir="${java.dir}">
<include name="${constants.file}" />
</fileset>
</copy>
<copy file="${java.dir}/${constants.file}" tofile="${build.src}/${constants.file}"/>
<replace file="${build.src}/${constants.file}" token="@@VERSION@@" value="${version}" /> <replace file="${build.src}/${constants.file}" token="@@VERSION@@" value="${version}" />
<replace file="${build.src}/${constants.file}" token="@@DATE@@" value="${TODAY}" /> <replace file="${build.src}/${constants.file}" token="@@DATE@@" value="${TODAY}" />
</target>
<!--
===================================================================
Compiles the source code
===================================================================
-->
<target name="compile" depends="prepare-src,prepare-lib">


<mkdir dir="${build.classes}"/> <mkdir dir="${build.classes}"/>
<javac srcdir="${java.dir}" <javac srcdir="${java.dir}"
@@ -158,43 +86,25 @@ Legal:
debug="${debug}" debug="${debug}"
optimize="${optimize}" optimize="${optimize}"
deprecation="${deprecation}"> deprecation="${deprecation}">
<classpath refid="project.class.path"/>
<exclude name="org/apache/ant/gui/**"/> <exclude name="org/apache/ant/gui/**"/>
<exclude name="${constants.file}"/> <exclude name="${constants.file}"/>
<src path="${build.src}" /> <src path="${build.src}" />
</javac> </javac>


<!--
<copy todir="${build.classes}">
<fileset dir="${java.dir}">
<include name="**/*.properties"/>
</fileset>
</copy>
-->
</target>


<mkdir dir="${build.classes}/TASK-LIB"/>
<copy file="${manifest.dir}/taskdefs.xml" todir="${build.classes}/TASK-LIB"/>
<!-- Creates the jars file -->
<target name="jars" depends="compile">


</target>
<mkdir dir="${build.lib}"/>


<!--
===================================================================
Creates the ant.jar file
===================================================================
-->
<target name="jar-ant" depends="compile">
<jar jarfile="${build.lib}/ant.jar" <jar jarfile="${build.lib}/ant.jar"
basedir="${build.classes}" basedir="${build.classes}"
manifest="${manifest.dir}/ant-manifest.mf"> manifest="${manifest.dir}/ant-manifest.mf">
<include name="org/apache/ant/launcher/*" /> <include name="org/apache/ant/launcher/*" />
</jar> </jar>
</target>


<!--
===================================================================
Creates the myrmidon.jar file
===================================================================
-->
<target name="jar-myrmidon" depends="compile">
<jar jarfile="${build.lib}/myrmidon.jar" <jar jarfile="${build.lib}/myrmidon.jar"
basedir="${build.classes}" basedir="${build.classes}"
manifest="${manifest.dir}/myrmidon-manifest.mf"> manifest="${manifest.dir}/myrmidon-manifest.mf">
@@ -203,32 +113,29 @@ Legal:
<exclude name="org/apache/ant/tasks/**" /> <exclude name="org/apache/ant/tasks/**" />
<exclude name="org/apache/ant/convert/core/**" /> <exclude name="org/apache/ant/convert/core/**" />
</jar> </jar>
</target>


<!--
===================================================================
Creates the ant.jar file
===================================================================
-->
<target name="jar-core" depends="compile">
<jar jarfile="${build.lib}/core.tsk" basedir="${build.classes}"> <jar jarfile="${build.lib}/core.tsk" basedir="${build.classes}">
<include name="org/apache/ant/modules/**" /> <include name="org/apache/ant/modules/**" />
<include name="TASK-LIB/*" />

<zipfileset dir="${manifest.dir}" fullpath="TASK-LIB/taskdefs.xml">
<include name="taskdefs.xml"/>
</zipfileset>

</jar> </jar>
</target> </target>


<!--
===================================================================
Creates the distribution
===================================================================
-->
<target name="dist" depends="jar-ant,jar-core,jar-myrmidon">
<mkdir dir="${dist.dir}"/>
<!-- Creates the distribution -->
<target name="dist" depends="jars">

<mkdir dir="${dist.bin}"/> <mkdir dir="${dist.bin}"/>
<mkdir dir="${dist.lib}"/> <mkdir dir="${dist.lib}"/>


<copy todir="${dist.lib}"> <copy todir="${dist.lib}">
<fileset dir="${build.lib}">
<fileset dir="${build.lib}"/>
</copy>

<copy todir="${dist.lib}">
<fileset dir="${lib.dir}">
<exclude name="xalan*" /> <exclude name="xalan*" />
<exclude name="StyleBook*" /> <exclude name="StyleBook*" />
</fileset> </fileset>
@@ -246,20 +153,7 @@ Legal:


</target> </target>


<!--
===================================================================
Performs unit tests
===================================================================
-->
<target name="test" depends="jar-ant" if="test-task.present">
<ant antfile="build-test.xml" dir="src/make" target="test" />
</target>

<!--
===================================================================
Cleans up build and distribution directories
===================================================================
-->
<!-- Cleans up build and distribution directories -->
<target name="clean"> <target name="clean">
<delete dir="${build.dir}"/> <delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/> <delete dir="${dist.dir}"/>
@@ -268,15 +162,4 @@ Legal:
</delete> </delete>
</target> </target>


<!--
===================================================================
Cleans absolutely everything up
===================================================================
-->
<target name="real-clean" depends="clean">
<delete file="${dist.name}.tar.gz"/>
<delete file="${dist.name}.zip"/>
<delete dir="${javadocs.dir}"/>
</target>

</project> </project>

BIN
proposal/myrmidon/lib/avalon-container.jar View File


BIN
proposal/myrmidon/lib/avalon-excalibur.jar View File


BIN
proposal/myrmidon/lib/avalon-framework.jar View File


BIN
proposal/myrmidon/lib/avalonapi.jar View File


BIN
proposal/myrmidon/lib/logkit.jar View File


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

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant; package org.apache.ant;


import org.apache.avalon.CascadingRuntimeException;
import org.apache.avalon.framework.CascadingRuntimeException;


/** /**
* AntException thrown when a problem with tasks etc. * AntException thrown when a problem with tasks etc.


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

@@ -33,34 +33,35 @@ import org.apache.ant.runtime.DefaultAntEngine;
import org.apache.ant.tasklet.JavaVersion; import org.apache.ant.tasklet.JavaVersion;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
import org.apache.avalon.camelot.CamelotUtil;
import org.apache.avalon.camelot.Deployer;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.util.ObjectUtil;
import org.apache.avalon.util.StringUtil;
import org.apache.avalon.util.cli.AbstractMain;
import org.apache.avalon.util.cli.CLOption;
import org.apache.avalon.util.cli.CLOptionDescriptor;
import org.apache.avalon.util.io.ExtensionFileFilter;
import org.apache.log.Category;
import org.apache.log.LogKit;
import org.apache.avalon.excalibur.cli.CLArgsParser;
import org.apache.avalon.excalibur.cli.CLOption;
import org.apache.avalon.excalibur.cli.CLUtil;
import org.apache.avalon.excalibur.cli.CLOptionDescriptor;
import org.apache.avalon.excalibur.io.ExtensionFileFilter;
import org.apache.avalon.framework.ExceptionUtil;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.camelot.CamelotUtil;
import org.apache.avalon.framework.camelot.Deployer;
import org.apache.avalon.framework.camelot.DeploymentException;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.log.Hierarchy;
import org.apache.log.Logger; import org.apache.log.Logger;
import org.apache.log.LogTarget;
import org.apache.log.Priority; import org.apache.log.Priority;


/** /**
* The class to kick the tires and light the fires. * The class to kick the tires and light the fires.
* Starts ant, loads ProjectBuilder, builds project then uses ProjectEngine * Starts ant, loads ProjectBuilder, builds project then uses ProjectEngine
* to run project. * to run project.
*
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public class Main public class Main
extends AbstractMain
extends AbstractLoggable
{ {
//Constants to indicate the build of Ant/Myrmidon //Constants to indicate the build of Ant/Myrmidon
public final static String VERSION =
public final static String VERSION =
"Ant " + Constants.BUILD_VERSION + " compiled on " + Constants.BUILD_DATE; "Ant " + Constants.BUILD_VERSION + " compiled on " + Constants.BUILD_DATE;


//default log level //default log level
@@ -69,7 +70,7 @@ public class Main
//Some defaults for file locations/names //Some defaults for file locations/names
protected final static String DEFAULT_FILENAME = "build.ant"; protected final static String DEFAULT_FILENAME = "build.ant";


protected final static String DEFAULT_LISTENER =
protected final static String DEFAULT_LISTENER =
"org.apache.ant.project.DefaultProjectListener"; "org.apache.ant.project.DefaultProjectListener";


//defines for the Command Line options //defines for the Command Line options
@@ -84,17 +85,17 @@ public class Main
private static final int TASKLIB_DIR_OPT = 5; private static final int TASKLIB_DIR_OPT = 5;
private static final int INCREMENTAL_OPT = 6; private static final int INCREMENTAL_OPT = 6;
private static final int HOME_DIR_OPT = 7; private static final int HOME_DIR_OPT = 7;
//incompatable options for info options //incompatable options for info options
private static final int[] INFO_OPT_INCOMPAT = new int[]
{
HELP_OPT, QUIET_OPT, VERBOSE_OPT, FILE_OPT,
private static final int[] INFO_OPT_INCOMPAT = new int[]
{
HELP_OPT, QUIET_OPT, VERBOSE_OPT, FILE_OPT,
LOG_LEVEL_OPT, VERSION_OPT, LISTENER_OPT, LOG_LEVEL_OPT, VERSION_OPT, LISTENER_OPT,
DEFINE_OPT //TASKLIB_DIR_OPT, HOME_DIR_OPT DEFINE_OPT //TASKLIB_DIR_OPT, HOME_DIR_OPT
}; };
//incompatable options for other logging options //incompatable options for other logging options
private static final int[] LOG_OPT_INCOMPAT = new int[]
private static final int[] LOG_OPT_INCOMPAT = new int[]
{ {
QUIET_OPT, VERBOSE_OPT, LOG_LEVEL_OPT QUIET_OPT, VERBOSE_OPT, LOG_LEVEL_OPT
}; };
@@ -110,21 +111,32 @@ public class Main
public static void main( final String[] args ) public static void main( final String[] args )
{ {
final Main main = new Main(); final Main main = new Main();
main.setLogger( LogKit.getLoggerFor( "default" ) );
main.setLogger( Hierarchy.getDefaultHierarchy().getLoggerFor( "default" ) );


try { main.execute( args ); } try { main.execute( args ); }
catch( final AntException ae ) catch( final AntException ae )
{ {
main.getLogger().error( "Error: " + ae.getMessage() ); main.getLogger().error( "Error: " + ae.getMessage() );
main.getLogger().debug( "Exception..." + StringUtil.printStackTrace( ae ) );
main.getLogger().debug( "Exception..." + ExceptionUtil.printStackTrace( ae ) );
} }
catch( final Throwable throwable ) catch( final Throwable throwable )
{ {
main.getLogger().error( "Error: " + throwable ); main.getLogger().error( "Error: " + throwable );
main.getLogger().debug( "Exception..." + StringUtil.printStackTrace( throwable ) );
main.getLogger().debug( "Exception..." + ExceptionUtil.printStackTrace( throwable ) );
} }
} }


/**
* Display usage report.
*
*/
protected void usage( final CLOptionDescriptor[] options )
{
System.out.println( "java " + getClass().getName() + " [options]" );
System.out.println( "\tAvailable options:");
System.out.println( CLUtil.describeOptions( options ) );
}

/** /**
* Initialise the options for command line parser. * Initialise the options for command line parser.
* This is called by super-class. * This is called by super-class.
@@ -140,7 +152,7 @@ public class Main
HELP_OPT, HELP_OPT,
"display this help message", "display this help message",
INFO_OPT_INCOMPAT ); INFO_OPT_INCOMPAT );
options[1] = options[1] =
new CLOptionDescriptor( "file", new CLOptionDescriptor( "file",
CLOptionDescriptor.ARGUMENT_REQUIRED, CLOptionDescriptor.ARGUMENT_REQUIRED,
@@ -206,14 +218,19 @@ public class Main
return options; return options;
} }


/**
* Entry point for standard ant.
*
* @param clOptions the list of command line options
*/
protected void execute( final List clOptions )
protected void execute( final String[] args )
throws Exception throws Exception
{ {
final CLOptionDescriptor[] options = createCLOptions();
final CLArgsParser parser = new CLArgsParser( args, options );

if( null != parser.getErrorString() )
{
System.err.println( "Error: " + parser.getErrorString() );
return;
}
final List clOptions = parser.getArguments();
final int size = clOptions.size(); final int size = clOptions.size();
final ArrayList targets = new ArrayList(); final ArrayList targets = new ArrayList();
String filename = null; String filename = null;
@@ -224,25 +241,25 @@ public class Main
boolean incremental = false; boolean incremental = false;
HashMap defines = new HashMap(); HashMap defines = new HashMap();


for( int i = 0; i < size; i++ )
for( int i = 0; i < size; i++ )
{ {
final CLOption option = (CLOption)clOptions.get( i ); final CLOption option = (CLOption)clOptions.get( i );
switch( option.getId() ) switch( option.getId() )
{ {
case 0: targets.add( option.getArgument() ); break; case 0: targets.add( option.getArgument() ); break;
case HELP_OPT: usage(); return;
case HELP_OPT: usage( options ); return;
case VERSION_OPT: System.out.println( VERSION ); return; case VERSION_OPT: System.out.println( VERSION ); return;
case FILE_OPT: filename = option.getArgument(); break; case FILE_OPT: filename = option.getArgument(); break;
case HOME_DIR_OPT: homeDir = option.getArgument(); break; case HOME_DIR_OPT: homeDir = option.getArgument(); break;
case TASKLIB_DIR_OPT: taskLibDir = option.getArgument(); break; case TASKLIB_DIR_OPT: taskLibDir = option.getArgument(); break;
case VERBOSE_OPT: logLevel = "INFO"; break; case VERBOSE_OPT: logLevel = "INFO"; break;
case QUIET_OPT: logLevel = "ERROR"; break; case QUIET_OPT: logLevel = "ERROR"; break;
case LOG_LEVEL_OPT: logLevel = option.getArgument(); break;
case LOG_LEVEL_OPT: logLevel = option.getArgument(); break;
case LISTENER_OPT: listenerName = option.getArgument(); break; case LISTENER_OPT: listenerName = option.getArgument(); break;
case INCREMENTAL_OPT: incremental = true; break; case INCREMENTAL_OPT: incremental = true; break;


case DEFINE_OPT:
case DEFINE_OPT:
defines.put( option.getArgument( 0 ), option.getArgument( 1 ) ); defines.put( option.getArgument( 0 ), option.getArgument( 1 ) );
break; break;
} }
@@ -255,7 +272,7 @@ public class Main
//handle logging... //handle logging...
setLogger( createLogger( logLevel ) ); setLogger( createLogger( logLevel ) );


//if ant home not set then use system property ant.home
//if ant home not set then use system property ant.home
//that was set up by launcher. //that was set up by launcher.
if( null == homeDir ) homeDir = System.getProperty( "ant.home" ); if( null == homeDir ) homeDir = System.getProperty( "ant.home" );


@@ -277,14 +294,14 @@ public class Main
{ {
throw new AntException( "File " + buildFile + " is not a file or doesn't exist" ); throw new AntException( "File " + buildFile + " is not a file or doesn't exist" );
} }
//setup classloader so that it will correctly load //setup classloader so that it will correctly load
//the Project/ProjectBuilder/ProjectEngine and all dependencies //the Project/ProjectBuilder/ProjectEngine and all dependencies
final ClassLoader classLoader = createClassLoader( libDir ); final ClassLoader classLoader = createClassLoader( libDir );
Thread.currentThread().setContextClassLoader( classLoader ); Thread.currentThread().setContextClassLoader( classLoader );


//handle listener..
final ProjectListener listener = createListener( listenerName );
//handle listener..
final ProjectListener listener = createListener( listenerName );


getLogger().warn( "Ant Build File: " + buildFile ); getLogger().warn( "Ant Build File: " + buildFile );
getLogger().info( "Ant Home Directory: " + m_homeDir ); getLogger().info( "Ant Home Directory: " + m_homeDir );
@@ -295,7 +312,7 @@ public class Main
final AntEngine antEngine = new DefaultAntEngine(); final AntEngine antEngine = new DefaultAntEngine();
setupLogger( antEngine ); setupLogger( antEngine );
antEngine.setProperties( properties ); antEngine.setProperties( properties );
antEngine.init();
antEngine.initialize();


final ProjectBuilder builder = antEngine.getProjectBuilder(); final ProjectBuilder builder = antEngine.getProjectBuilder();


@@ -324,9 +341,9 @@ public class Main
} }


String line = reader.readLine(); String line = reader.readLine();
if( line.equalsIgnoreCase( "no" ) ) break; if( line.equalsIgnoreCase( "no" ) ) break;
} }


antEngine.dispose(); antEngine.dispose();
@@ -339,14 +356,14 @@ public class Main
* @param project the project * @param project the project
* @param targets the targets to build as passed by CLI * @param targets the targets to build as passed by CLI
*/ */
protected void doBuild( final ProjectEngine engine,
final Project project,
protected void doBuild( final ProjectEngine engine,
final Project project,
final ArrayList targets ) final ArrayList targets )
{ {
try try
{ {
final int targetCount = targets.size(); final int targetCount = targets.size();
//if we didn't specify a target on CLI then choose default //if we didn't specify a target on CLI then choose default
if( 0 == targetCount ) if( 0 == targetCount )
{ {
@@ -363,10 +380,10 @@ public class Main
catch( final AntException ae ) catch( final AntException ae )
{ {
getLogger().error( "BUILD FAILED" ); getLogger().error( "BUILD FAILED" );
getLogger().error( "Reason:\n" + StringUtil.printStackTrace( ae, 5, true ) );
getLogger().error( "Reason:\n" + ExceptionUtil.printStackTrace( ae, 5, true ) );
} }
}
}
/** /**
* Create Logger of appropriate log-level. * Create Logger of appropriate log-level.
* *
@@ -378,15 +395,19 @@ public class Main
throws AntException throws AntException
{ {
final String logLevelCapitalized = logLevel.toUpperCase(); final String logLevelCapitalized = logLevel.toUpperCase();
final Priority.Enum priority = LogKit.getPriorityForName( logLevelCapitalized );
final Priority priority = Priority.getPriorityForName( logLevelCapitalized );
if( !priority.getName().equals( logLevelCapitalized ) ) if( !priority.getName().equals( logLevelCapitalized ) )
{ {
throw new AntException( "Unknown log level - " + logLevel ); throw new AntException( "Unknown log level - " + logLevel );
} }

final Logger logger =
Hierarchy.getDefaultHierarchy().getLoggerFor( "ant" );

logger.setPriority( priority );
final Category category = LogKit.createCategory( "ant", priority );
return LogKit.createLogger( category );
return logger;
} }


/** /**
@@ -399,15 +420,17 @@ public class Main
{ {
ProjectListener result = null; ProjectListener result = null;


try { result = (ProjectListener)ObjectUtil.createObject( listenerName ); }
try { result = (ProjectListener)Class.forName( listenerName ).newInstance(); }
catch( final Throwable t ) catch( final Throwable t )
{ {
throw new AntException( "Error creating the listener " + listenerName +
" due to " + StringUtil.printStackTrace( t, 5, true ),
throw new AntException( "Error creating the listener " + listenerName +
" due to " + ExceptionUtil.printStackTrace( t, 5, true ),
t ); t );
} }


getLogger().addLogTarget( new LogTargetToListenerAdapter( result ) );
final LogTarget target = new LogTargetToListenerAdapter( result );

getLogger().setLogTargets( new LogTarget[] { target } );


return result; return result;
} }
@@ -420,41 +443,41 @@ public class Main
protected ClassLoader createClassLoader( final File libDir ) protected ClassLoader createClassLoader( final File libDir )
{ {
final ClassLoader candidate = getClass().getClassLoader(); final ClassLoader candidate = getClass().getClassLoader();
if( !(candidate instanceof AntClassLoader) ) if( !(candidate instanceof AntClassLoader) )
{ {
getLogger().warn( "Warning: Unable to add entries from " +
getLogger().warn( "Warning: Unable to add entries from " +
"lib-path to classloader" ); "lib-path to classloader" );
return candidate; return candidate;
} }
final AntClassLoader classLoader = (AntClassLoader)candidate; final AntClassLoader classLoader = (AntClassLoader)candidate;


final ExtensionFileFilter filter =
final ExtensionFileFilter filter =
new ExtensionFileFilter( new String[] { ".jar", ".zip" } ); new ExtensionFileFilter( new String[] { ".jar", ".zip" } );


final File[] files = libDir.listFiles( filter ); final File[] files = libDir.listFiles( filter );


for( int i = 0; i < files.length; i++ ) for( int i = 0; i < files.length; i++ )
{ {
//except for a few *special* files add all the
//except for a few *special* files add all the
//.zip/.jars to classloader //.zip/.jars to classloader
final String name = files[ i ].getName(); final String name = files[ i ].getName();
if( !name.equals( "ant.jar" ) && if( !name.equals( "ant.jar" ) &&
!name.equals( "myrmidon.jar" ) && !name.equals( "myrmidon.jar" ) &&
!name.equals( "avalonapi.jar" ) ) !name.equals( "avalonapi.jar" ) )
{
{
try { classLoader.addURL( files[ i ].toURL() ); } try { classLoader.addURL( files[ i ].toURL() ); }
catch( final MalformedURLException mue ) {} catch( final MalformedURLException mue ) {}
} }
}
}


return classLoader; return classLoader;
} }


/** /**
* Setup the projects context so all the "default" properties are defined. * Setup the projects context so all the "default" properties are defined.
* This also takes a hashmap that is added to context. Usually these are the
* This also takes a hashmap that is added to context. Usually these are the
* ones defined on command line. * ones defined on command line.
* *
* @param project the project * @param project the project


+ 0
- 39
proposal/myrmidon/src/java/org/apache/ant/configuration/Configurable.java View File

@@ -1,39 +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.configuration;

import org.apache.avalon.ConfigurationException;

/**
* This interface should be implemented by classes that need to be
* configured with custom parameters before initialization.
* <br />
*
* The contract surrounding a <code>Configurable</code> is that the
* instantiating entity must call the <code>configure</code>
* method before it is valid. The <code>configure</code> method
* must be called after the constructor, and before any other method.
*
* @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
* @author <a href="mailto:pier@apache.org">Pierpaolo Fumagalli</a>
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface Configurable
{
/**
* Pass the <code>Configuration</code> to the <code>Configurable</code>
* class. This method must always be called after the constructor
* and before any other method.
*
* @param configuration the class configurations.
*/
void configure( Configuration configuration )
throws ConfigurationException;
}

+ 0
- 34
proposal/myrmidon/src/java/org/apache/ant/configuration/Configuration.java View File

@@ -1,34 +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.configuration;

import java.util.Iterator;

/**
* Fork of Avalon code that will be folded back when they get equivelent facilties.
* Note that the code is different package so it should not cause any issues.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface Configuration
extends org.apache.avalon.Configuration
{
/**
* Retrieve a list of all child names.
*
* @return the child names
*/
Iterator getChildren();

/**
* Retrieve a list of all attribute names.
*
* @return the attribute names
*/
Iterator getAttributeNames();
}

+ 0
- 25
proposal/myrmidon/src/java/org/apache/ant/configuration/ConfigurationBuilder.java View File

@@ -1,25 +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.configuration;

import org.xml.sax.SAXException;

/**
* Fork of Avalon code that will be folded back when they get equivelent facilties.
* Note that the code is different package so it should not cause any issues.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class ConfigurationBuilder
extends org.apache.avalon.DefaultConfigurationBuilder
{
protected org.apache.avalon.SAXConfigurationHandler getHandler()
{
return new SAXConfigurationHandler();
}
}

+ 6
- 5
proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java View File

@@ -7,13 +7,14 @@
*/ */
package org.apache.ant.configuration; package org.apache.ant.configuration;


import org.apache.avalon.Component;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.Context;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.Context;


/** /**
* Class used to configure tasks. * Class used to configure tasks.
*
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public interface Configurer public interface Configurer
@@ -21,7 +22,7 @@ public interface Configurer
{ {
/** /**
* Configure an object based on a configuration in a particular context. * Configure an object based on a configuration in a particular context.
* This configuring can be done in different ways for different
* This configuring can be done in different ways for different
* configurers. * configurers.
* *
* @param object the object * @param object the object


+ 0
- 48
proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfiguration.java View File

@@ -1,48 +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.configuration;

import java.util.Iterator;

/**
* Fork of Avalon code that will be folded back when they get equivelent facilties.
* Note that the code is different package so it should not cause any issues.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class DefaultConfiguration
extends org.apache.avalon.DefaultConfiguration
implements Configuration
{
public DefaultConfiguration( final String localname, final String location )
{
super( localname, location );
}

/**
* Retrieve a list of all child names.
*
* @return the child names
*/
public Iterator getChildren()
{
if( null == m_children ) return EMPTY_ITERATOR;
else return m_children.iterator();
}
/**
* Retrieve a list of all attribute names.
*
* @return the attribute names
*/
public Iterator getAttributeNames()
{
if( null == m_attributes ) return EMPTY_ITERATOR;
else return m_attributes.keySet().iterator();
}
}

+ 81
- 79
proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java View File

@@ -13,32 +13,34 @@ import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.convert.Converter; import org.apache.ant.convert.Converter;
import org.apache.ant.convert.ConverterException; import org.apache.ant.convert.ConverterException;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.Context;
import org.apache.avalon.Loggable;
import org.apache.avalon.util.PropertyException;
import org.apache.avalon.util.PropertyUtil;
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.configuration.Configuration;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.log.Logger; import org.apache.log.Logger;


/** /**
* Class used to configure tasks. * Class used to configure tasks.
*
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public class DefaultConfigurer public class DefaultConfigurer
extends AbstractLoggable extends AbstractLoggable
implements Configurer, Composer, Loggable
implements Configurer, Composable, Loggable
{ {
protected final static String RESERVED_ATTRIBUTES[] =
protected final static String RESERVED_ATTRIBUTES[] =
{ {
"id" "id"
}; };


protected final static String RESERVED_ELEMENTS[] =
protected final static String RESERVED_ELEMENTS[] =
{ {
"content" "content"
}; };
@@ -47,16 +49,16 @@ public class DefaultConfigurer
protected Converter m_converter; protected Converter m_converter;


public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" ); m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" );
} }
/** /**
* Configure a task based on a configuration in a particular context. * Configure a task based on a configuration in a particular context.
* This configuring can be done in different ways for different
* configurers.
* This one does it by first checking if object implements Configurable
* This configuring can be done in different ways for different
* configurers.
* This one does it by first checking if object implements Configurable
* and if it does will pass the task the configuration - else it will use * and if it does will pass the task the configuration - else it will use
* ants rules to map configuration to types * ants rules to map configuration to types
* *
@@ -65,59 +67,59 @@ public class DefaultConfigurer
* @param context the Context * @param context the Context
* @exception ConfigurationException if an error occurs * @exception ConfigurationException if an error occurs
*/ */
public void configure( final Object object,
public void configure( final Object object,
final Configuration configuration, final Configuration configuration,
final Context context ) final Context context )
throws ConfigurationException throws ConfigurationException
{ {
if( DEBUG ) if( DEBUG )
{ {
m_logger.debug( "Configuring " + object );
getLogger().debug( "Configuring " + object );
} }


if( object instanceof Configurable ) if( object instanceof Configurable )
{ {
if( DEBUG )
if( DEBUG )
{ {
m_logger.debug( "Configuring object via Configurable interface" );
getLogger().debug( "Configuring object via Configurable interface" );
} }


((Configurable)object).configure( configuration ); ((Configurable)object).configure( configuration );
} }
else else
{ {
if( DEBUG )
if( DEBUG )
{ {
m_logger.debug( "Configuring object via Configurable reflection" );
getLogger().debug( "Configuring object via Configurable reflection" );
} }


final Iterator attributes = configuration.getAttributeNames();
while( attributes.hasNext() )
final String[] attributes = configuration.getAttributeNames();
for( int i = 0; i < attributes.length; i++ )
{ {
final String name = (String)attributes.next();
final String name = attributes[ i ];
final String value = configuration.getAttribute( name ); final String value = configuration.getAttribute( name );
if( DEBUG )
if( DEBUG )
{ {
m_logger.debug( "Configuring attribute name=" + name +
getLogger().debug( "Configuring attribute name=" + name +
" value=" + value ); " value=" + value );
} }
configureAttribute( object, name, value, context ); configureAttribute( object, name, value, context );
} }


final Iterator elements = configuration.getChildren();
while( elements.hasNext() )
final Configuration[] children = configuration.getChildren();
for( int i = 0; i < children.length; i++ )
{ {
final Configuration element = (Configuration)elements.next();
if( DEBUG )
final Configuration child = children[ i ];
if( DEBUG )
{ {
m_logger.debug( "Configuring subelement name=" + element.getName() );
getLogger().debug( "Configuring subelement name=" + child.getName() );
} }
configureElement( object, element, context );
configureElement( object, child, context );
} }


final String content = configuration.getValue( null ); final String content = configuration.getValue( null );
@@ -126,11 +128,11 @@ public class DefaultConfigurer
{ {
if( !content.trim().equals( "" ) ) if( !content.trim().equals( "" ) )
{ {
if( DEBUG )
if( DEBUG )
{ {
m_logger.debug( "Configuring content " + content );
getLogger().debug( "Configuring content " + content );
} }
configureContent( object, content, context ); configureContent( object, content, context );
} }
} }
@@ -145,7 +147,7 @@ public class DefaultConfigurer
* @param context the Context * @param context the Context
* @exception ConfigurationException if an error occurs * @exception ConfigurationException if an error occurs
*/ */
protected void configureContent( final Object object,
protected void configureContent( final Object object,
final String content, final String content,
final Context context ) final Context context )
throws ConfigurationException throws ConfigurationException
@@ -153,8 +155,8 @@ public class DefaultConfigurer
setValue( object, "addContent", content, context ); setValue( object, "addContent", content, context );
} }


protected void configureAttribute( final Object object,
final String name,
protected void configureAttribute( final Object object,
final String name,
final String value, final String value,
final Context context ) final Context context )
throws ConfigurationException throws ConfigurationException
@@ -168,7 +170,7 @@ public class DefaultConfigurer
setValue( object, methodName, value, context ); setValue( object, methodName, value, context );
} }


protected void setValue( final Object object,
protected void setValue( final Object object,
final String methodName, final String methodName,
final String value, final String value,
final Context context ) final Context context )
@@ -182,8 +184,8 @@ public class DefaultConfigurer


if( 0 == methods.length ) if( 0 == methods.length )
{ {
throw new ConfigurationException( "Unable to set attribute via " + methodName +
" due to not finding any appropriate " +
throw new ConfigurationException( "Unable to set attribute via " + methodName +
" due to not finding any appropriate " +
"accessor method" ); "accessor method" );
} }


@@ -198,7 +200,7 @@ public class DefaultConfigurer
{ {
try try
{ {
final Object objectValue =
final Object objectValue =
PropertyUtil.resolveProperty( value, context, false ); PropertyUtil.resolveProperty( value, context, false );


setValue( object, objectValue, methods, context ); setValue( object, objectValue, methods, context );
@@ -210,8 +212,8 @@ public class DefaultConfigurer
} }
} }


protected void setValue( final Object object,
Object value,
protected void setValue( final Object object,
Object value,
final Method methods[], final Method methods[],
final Context context ) final Context context )
throws ConfigurationException throws ConfigurationException
@@ -226,14 +228,14 @@ public class DefaultConfigurer
return; return;
} }
} }
throw new ConfigurationException( "Unable to set attribute via " +
methods[ 0 ].getName() + " as could not convert " +
throw new ConfigurationException( "Unable to set attribute via " +
methods[ 0 ].getName() + " as could not convert " +
source + " to a matching type" ); source + " to a matching type" );
} }


protected boolean setValue( final Object object,
Object value,
protected boolean setValue( final Object object,
Object value,
final Method method, final Method method,
final Class sourceClass, final Class sourceClass,
final String source, final String source,
@@ -245,7 +247,7 @@ public class DefaultConfigurer
{ {
parameterType = getComplexTypeFor( parameterType ); parameterType = getComplexTypeFor( parameterType );
} }
try try
{ {
value = m_converter.convert( parameterType, value, context ); value = m_converter.convert( parameterType, value, context );
@@ -254,18 +256,18 @@ public class DefaultConfigurer
{ {
if( DEBUG ) if( DEBUG )
{ {
m_logger.debug( "Failed to find converter ", ce );
getLogger().debug( "Failed to find converter ", ce );
} }


return false; return false;
} }
catch( final Exception e ) catch( final Exception e )
{ {
throw new ConfigurationException( "Error converting attribute for " +
throw new ConfigurationException( "Error converting attribute for " +
method.getName(), method.getName(),
e ); e );
} }
try try
{ {
method.invoke( object, new Object[] { value } ); method.invoke( object, new Object[] { value } );
@@ -273,13 +275,13 @@ public class DefaultConfigurer
catch( final IllegalAccessException iae ) catch( final IllegalAccessException iae )
{ {
//should never happen .... //should never happen ....
throw new ConfigurationException( "Error retrieving methods with " +
throw new ConfigurationException( "Error retrieving methods with " +
"correct access specifiers", "correct access specifiers",
iae ); iae );
} }
catch( final InvocationTargetException ite ) catch( final InvocationTargetException ite )
{ {
throw new ConfigurationException( "Error calling method attribute " +
throw new ConfigurationException( "Error calling method attribute " +
method.getName(), method.getName(),
ite ); ite );
} }
@@ -308,11 +310,11 @@ public class DefaultConfigurer
{ {
final Method methods[] = clazz.getMethods(); final Method methods[] = clazz.getMethods();
final ArrayList matches = new ArrayList(); final ArrayList matches = new ArrayList();
for( int i = 0; i < methods.length; i++ ) for( int i = 0; i < methods.length; i++ )
{ {
final Method method = methods[ i ]; final Method method = methods[ i ];
if( methodName.equals( method.getName() ) &&
if( methodName.equals( method.getName() ) &&
Method.PUBLIC == (method.getModifiers() & Method.PUBLIC) ) Method.PUBLIC == (method.getModifiers() & Method.PUBLIC) )
{ {
if( method.getReturnType().equals( Void.TYPE ) ) if( method.getReturnType().equals( Void.TYPE ) )
@@ -333,11 +335,11 @@ public class DefaultConfigurer
{ {
final Method methods[] = clazz.getMethods(); final Method methods[] = clazz.getMethods();
final ArrayList matches = new ArrayList(); final ArrayList matches = new ArrayList();
for( int i = 0; i < methods.length; i++ ) for( int i = 0; i < methods.length; i++ )
{ {
final Method method = methods[ i ]; final Method method = methods[ i ];
if( methodName.equals( method.getName() ) &&
if( methodName.equals( method.getName() ) &&
Method.PUBLIC == (method.getModifiers() & Method.PUBLIC) ) Method.PUBLIC == (method.getModifiers() & Method.PUBLIC) )
{ {
final Class returnType = method.getReturnType(); final Class returnType = method.getReturnType();
@@ -352,7 +354,7 @@ public class DefaultConfigurer
} }
} }
} }
return (Method[])matches.toArray( new Method[0] ); return (Method[])matches.toArray( new Method[0] );
} }


@@ -364,10 +366,10 @@ public class DefaultConfigurer
protected String getJavaNameFor( final String name ) protected String getJavaNameFor( final String name )
{ {
final StringBuffer sb = new StringBuffer(); final StringBuffer sb = new StringBuffer();
int index = name.indexOf( '-' ); int index = name.indexOf( '-' );
int last = 0; int last = 0;
while( -1 != index ) while( -1 != index )
{ {
final String word = name.substring( last, index ).toLowerCase(); final String word = name.substring( last, index ).toLowerCase();
@@ -376,16 +378,16 @@ public class DefaultConfigurer
last = index + 1; last = index + 1;
index = name.indexOf( '-', last ); index = name.indexOf( '-', last );
} }
index = name.length(); index = name.length();
final String word = name.substring( last, index ).toLowerCase(); final String word = name.substring( last, index ).toLowerCase();
sb.append( Character.toUpperCase( word.charAt( 0 ) ) ); sb.append( Character.toUpperCase( word.charAt( 0 ) ) );
sb.append( word.substring( 1, word.length() ) ); sb.append( word.substring( 1, word.length() ) );
return sb.toString(); return sb.toString();
}
}


protected void configureElement( final Object object,
protected void configureElement( final Object object,
final Configuration configuration, final Configuration configuration,
final Context context ) final Context context )
throws ConfigurationException throws ConfigurationException
@@ -403,7 +405,7 @@ public class DefaultConfigurer
// slow. Need to cache results per class etc. // slow. Need to cache results per class etc.
final Class clazz = object.getClass(); final Class clazz = object.getClass();
Method methods[] = getMethodsFor( clazz, "add" + javaName ); Method methods[] = getMethodsFor( clazz, "add" + javaName );
if( 0 != methods.length ) if( 0 != methods.length )
{ {
//guess it is first method ???? //guess it is first method ????
@@ -415,8 +417,8 @@ public class DefaultConfigurer


if( 0 == methods.length ) if( 0 == methods.length )
{ {
throw new ConfigurationException( "Unable to set attribute " + javaName +
" due to not finding any appropriate " +
throw new ConfigurationException( "Unable to set attribute " + javaName +
" due to not finding any appropriate " +
"accessor method" ); "accessor method" );
} }


@@ -425,7 +427,7 @@ public class DefaultConfigurer
} }
} }


protected void createElement( final Object object,
protected void createElement( final Object object,
final Method method, final Method method,
final Configuration configuration, final Configuration configuration,
final Context context ) final Context context )
@@ -446,7 +448,7 @@ public class DefaultConfigurer
} }
} }


protected void addElement( final Object object,
protected void addElement( final Object object,
final Method method, final Method method,
final Configuration configuration, final Configuration configuration,
final Context context ) final Context context )


+ 0
- 24
proposal/myrmidon/src/java/org/apache/ant/configuration/SAXConfigurationHandler.java View File

@@ -1,24 +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.configuration;

/**
* Fork of Avalon code that will be folded back when they get equivelent facilties.
* Note that the code is different package so it should not cause any issues.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class SAXConfigurationHandler
extends org.apache.avalon.SAXConfigurationHandler
{
protected org.apache.avalon.DefaultConfiguration
createConfiguration( final String localName, final String location )
{
return new DefaultConfiguration( localName, location );
}
}

+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/convert/AbstractConverter.java View File

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant.convert; package org.apache.ant.convert;


import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* Instances of this interface are used to convert between different types. * Instances of this interface are used to convert between different types.


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java View File

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant.convert; package org.apache.ant.convert;


import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* Instances of this interface are used to convert between different types. * Instances of this interface are used to convert between different types.


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterEngine.java View File

@@ -8,8 +8,8 @@
package org.apache.ant.convert.engine; package org.apache.ant.convert.engine;


import org.apache.ant.convert.Converter; import org.apache.ant.convert.Converter;
import org.apache.avalon.Component;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.camelot.Registry;


/** /**
* Converter engine to handle converting between types. * Converter engine to handle converting between types.
@@ -24,7 +24,7 @@ public interface ConverterEngine
* *
* @return the LocatorRegistry * @return the LocatorRegistry
*/ */
LocatorRegistry getRegistry();
Registry getRegistry();


/** /**
* Get registry for converterInfo objects. * Get registry for converterInfo objects.


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterInfo.java View File

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant.convert.engine; package org.apache.ant.convert.engine;


import org.apache.avalon.camelot.Info;
import org.apache.avalon.framework.camelot.Info;


/** /**
* This info represents meta-information about a converter. * This info represents meta-information about a converter.


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterRegistry.java View File

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant.convert.engine; package org.apache.ant.convert.engine;


import org.apache.avalon.camelot.Registry;
import org.apache.avalon.framework.camelot.Registry;


/** /**
* Interface for registry for ConverterInfos. * Interface for registry for ConverterInfos.


+ 19
- 19
proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterEngine.java View File

@@ -10,16 +10,16 @@ package org.apache.ant.convert.engine;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.convert.Converter; import org.apache.ant.convert.Converter;
import org.apache.ant.convert.ConverterException; import org.apache.ant.convert.ConverterException;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Context;
import org.apache.avalon.camelot.DefaultFactory;
import org.apache.avalon.camelot.DefaultLocatorRegistry;
import org.apache.avalon.camelot.Factory;
import org.apache.avalon.camelot.Locator;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.camelot.DefaultFactory;
import org.apache.avalon.framework.camelot.DefaultRegistry;
import org.apache.avalon.framework.camelot.Factory;
import org.apache.avalon.framework.camelot.Locator;
import org.apache.avalon.framework.camelot.Registry;


/** /**
* Converter engine to handle converting between types. * Converter engine to handle converting between types.
@@ -28,12 +28,12 @@ import org.apache.avalon.camelot.LocatorRegistry;
*/ */
public class DefaultConverterEngine public class DefaultConverterEngine
extends AbstractLoggable extends AbstractLoggable
implements ConverterEngine, Composer
implements ConverterEngine, Composable
{ {
protected final static boolean DEBUG = false; protected final static boolean DEBUG = false;


protected Factory m_factory; protected Factory m_factory;
protected LocatorRegistry m_registry = new DefaultLocatorRegistry();
protected Registry m_registry = new DefaultRegistry( Locator.class );
protected ConverterRegistry m_infoRegistry = new DefaultConverterRegistry(); protected ConverterRegistry m_infoRegistry = new DefaultConverterRegistry();


/** /**
@@ -41,7 +41,7 @@ public class DefaultConverterEngine
* *
* @return the LocatorRegistry * @return the LocatorRegistry
*/ */
public LocatorRegistry getRegistry()
public Registry getRegistry()
{ {
return m_registry; return m_registry;
} }
@@ -60,12 +60,12 @@ public class DefaultConverterEngine
* Retrieve relevent services needed to deploy. * Retrieve relevent services needed to deploy.
* *
* @param componentManager the ComponentManager * @param componentManager the ComponentManager
* @exception ComponentManagerException if an error occurs
* @exception ComponentException if an error occurs
*/ */
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_factory = (Factory)componentManager.lookup( "org.apache.avalon.camelot.Factory" );
m_factory = (Factory)componentManager.lookup( "org.apache.avalon.framework.camelot.Factory" );
} }


/** /**
@@ -89,8 +89,8 @@ public class DefaultConverterEngine


if( DEBUG ) if( DEBUG )
{ {
m_logger.debug( "Looking for converter from " + originalClass.getName() +
" to " + destination.getName() );
getLogger().debug( "Looking for converter from " + originalClass.getName() +
" to " + destination.getName() );
} }


//TODO: Start searching inheritance hierarchy for converter //TODO: Start searching inheritance hierarchy for converter
@@ -106,7 +106,7 @@ public class DefaultConverterEngine
} }


//TODO: Start caching converters instead of repeatedly instantiating em. //TODO: Start caching converters instead of repeatedly instantiating em.
final Locator locator = m_registry.getLocator( name );
final Locator locator = (Locator)m_registry.getInfo( name, Locator.class );
final Converter converter = (Converter)m_factory.create( locator, Converter.class ); final Converter converter = (Converter)m_factory.create( locator, Converter.class );
return converter.convert( destination, original, context ); return converter.convert( destination, original, context );
} }


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterRegistry.java View File

@@ -8,9 +8,9 @@
package org.apache.ant.convert.engine; package org.apache.ant.convert.engine;


import java.util.HashMap; import java.util.HashMap;
import org.apache.avalon.camelot.DefaultRegistry;
import org.apache.avalon.camelot.Info;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.camelot.DefaultRegistry;
import org.apache.avalon.framework.camelot.Info;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* Default implementation of ConverterInfo registry. * Default implementation of ConverterInfo registry.


+ 44
- 16
proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java View File

@@ -8,10 +8,11 @@
package org.apache.ant.launcher; package org.apache.ant.launcher;


import java.io.File; import java.io.File;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.StringTokenizer; import java.util.StringTokenizer;


/** /**
@@ -26,12 +27,12 @@ public final class AntLoader
/** /**
* Magic entry point. * Magic entry point.
* *
* @param argsthe CLI arguments
* @param args the CLI arguments
* @exception Exception if an error occurs * @exception Exception if an error occurs
*/ */
public final static void main( final String[] args )
public final static void main( final String[] args )
throws Exception throws Exception
{
{
try try
{ {
//actually try to discover the install directory based on where //actually try to discover the install directory based on where
@@ -40,40 +41,67 @@ public final class AntLoader
System.setProperty( "ant.home", installDirectory.toString() ); System.setProperty( "ant.home", installDirectory.toString() );


//setup classloader appropriately for myrmidon jar //setup classloader appropriately for myrmidon jar
final File archive =
new File( installDirectory, "lib" + File.separator + "myrmidon.jar" );
final AntClassLoader classLoader =
new AntClassLoader( new URL[] { archive.toURL() } );
final File libDir = new File( installDirectory, "lib" );
final URL[] urls = buildURLList( libDir );
final AntClassLoader classLoader = new AntClassLoader( urls );


//load class and retrieve appropriate main method. //load class and retrieve appropriate main method.
final Class clazz = classLoader.loadClass( "org.apache.ant.Main" ); final Class clazz = classLoader.loadClass( "org.apache.ant.Main" );
final Method method = clazz.getMethod( "main", new Class[] { args.getClass() } ); final Method method = clazz.getMethod( "main", new Class[] { args.getClass() } );
//kick the tires and light the fires.... //kick the tires and light the fires....
method.invoke( null, new Object[] { args } ); method.invoke( null, new Object[] { args } );
} }
catch( final InvocationTargetException ite )
catch( final InvocationTargetException ite )
{ {
System.err.println( "Error: " + ite.getTargetException().getMessage() ); System.err.println( "Error: " + ite.getTargetException().getMessage() );
ite.getTargetException().printStackTrace(); ite.getTargetException().printStackTrace();
} }
catch( final Throwable throwable )
catch( final Throwable throwable )
{ {
System.err.println( "Error: " + throwable.getMessage() ); System.err.println( "Error: " + throwable.getMessage() );
throwable.printStackTrace(); throwable.printStackTrace();
} }
} }


private final static URL[] buildURLList( final File dir )
throws Exception
{
final ArrayList urlList = new ArrayList();

final File[] contents = dir.listFiles();

if( null == contents )
{
return new URL[ 0 ];
}

for( int i = 0; i < contents.length; i++ )
{
final File file = contents[ i ];

if( !file.isFile() || !file.canRead() )
{
continue;
}

urlList.add( file.toURL() );
}

return (URL[])urlList.toArray( new URL[ 0 ] );
}

/** /**
* Finds the ant.jar file in the classpath. * Finds the ant.jar file in the classpath.
*/ */
protected final static File findInstallDir()
private final static File findInstallDir()
throws Exception throws Exception
{ {
final String classpath = System.getProperty( "java.class.path" ); final String classpath = System.getProperty( "java.class.path" );
final String pathSeparator = System.getProperty( "path.separator" ); final String pathSeparator = System.getProperty( "path.separator" );
final StringTokenizer tokenizer = new StringTokenizer( classpath, pathSeparator ); final StringTokenizer tokenizer = new StringTokenizer( classpath, pathSeparator );
while( tokenizer.hasMoreTokens() ) while( tokenizer.hasMoreTokens() )
{ {
final String element = tokenizer.nextToken(); final String element = tokenizer.nextToken();
@@ -82,16 +110,16 @@ public final class AntLoader
{ {
File file = (new File( element )).getAbsoluteFile(); File file = (new File( element )).getAbsoluteFile();
file = file.getParentFile(); file = file.getParentFile();
if( null != file ) if( null != file )
{ {
file = file.getParentFile(); file = file.getParentFile();
} }


return file;
return file;
} }
} }
throw new Exception( "Unable to locate ant.jar in classpath" ); throw new Exception( "Unable to locate ant.jar in classpath" );
} }
} }

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

@@ -14,10 +14,10 @@ import org.apache.ant.project.ProjectEngine;
import org.apache.ant.tasklet.AbstractTasklet; import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.DefaultTaskletContext; import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Context;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.context.Context;


/** /**
* This is abstract base class for tasklets. * This is abstract base class for tasklets.
@@ -26,7 +26,7 @@ import org.apache.avalon.Context;
*/ */
public class AntCall public class AntCall
extends AbstractTasklet extends AbstractTasklet
implements Composer
implements Composable
{ {
protected ProjectEngine m_projectEngine; protected ProjectEngine m_projectEngine;
protected Project m_project; protected Project m_project;
@@ -42,7 +42,7 @@ public class AntCall
} }


public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_componentManager = componentManager; m_componentManager = componentManager;
m_projectEngine = (ProjectEngine)componentManager. m_projectEngine = (ProjectEngine)componentManager.
@@ -66,7 +66,7 @@ public class AntCall
return property; return property;
} }


public void run()
public void execute()
throws AntException throws AntException
{ {
if( null == m_target ) if( null == m_target )
@@ -78,7 +78,7 @@ public class AntCall
for( int i = 0; i < size; i++ ) for( int i = 0; i < size; i++ )
{ {
final Property property = (Property)m_properties.get( i ); final Property property = (Property)m_properties.get( i );
property.run();
property.execute();
} }


getLogger().info( "Calling target " + m_target ); getLogger().info( "Calling target " + m_target );


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

@@ -25,7 +25,7 @@ public class Echo
m_message = message; m_message = message;
} }


public void run()
public void execute()
throws AntException throws AntException
{ {
getLogger().warn( m_message ); getLogger().warn( m_message );


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

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


import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.configuration.Configurable;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.configuration.Configurer; import org.apache.ant.configuration.Configurer;
import org.apache.ant.convert.Converter; import org.apache.ant.convert.Converter;
import org.apache.ant.tasklet.DataType; import org.apache.ant.tasklet.DataType;
@@ -18,11 +16,13 @@ import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.AbstractTasklet; import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.Resolvable;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.context.Resolvable;


/** /**
* 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.
@@ -31,7 +31,7 @@ import org.apache.avalon.Resolvable;
*/ */
public class Property public class Property
extends AbstractTasklet extends AbstractTasklet
implements Configurable, Composer
implements Configurable, Composable
{ {
protected String m_name; protected String m_name;
protected Object m_value; protected Object m_value;
@@ -41,7 +41,7 @@ public class Property
protected Configurer m_configurer; protected Configurer m_configurer;
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_configurer = (Configurer)componentManager. m_configurer = (Configurer)componentManager.
lookup( "org.apache.ant.configuration.Configurer" ); lookup( "org.apache.ant.configuration.Configurer" );
@@ -55,11 +55,11 @@ public class Property
public void configure( final Configuration configuration ) public void configure( final Configuration configuration )
throws ConfigurationException throws ConfigurationException
{ {
final Iterator attributes = configuration.getAttributeNames();
final String[] attributes = configuration.getAttributeNames();


while( attributes.hasNext() )
for( int i = 0; i < attributes.length; i++ )
{ {
final String name = (String)attributes.next();
final String name = attributes[ i ];
final String value = configuration.getAttribute( name ); final String value = configuration.getAttribute( name );


final Object object = getContext().resolveValue( value ); final Object object = getContext().resolveValue( value );
@@ -105,10 +105,11 @@ public class Property
} }
} }


final Iterator children = configuration.getChildren();
while( children.hasNext() )
final Configuration[] children = configuration.getChildren();

for( int i = 0; i < children.length; i++ )
{ {
final Configuration child = (Configuration)children.next();
final Configuration child = children[ i ];


try try
{ {
@@ -144,7 +145,7 @@ public class Property
m_localScope = localScope; m_localScope = localScope;
} }


public void run()
public void execute()
throws AntException throws AntException
{ {
if( null == m_name ) if( null == m_name )


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to byte converter * String to byte converter


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to class converter * String to class converter


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to double converter * String to double converter


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

@@ -10,7 +10,7 @@ package org.apache.ant.modules.basic;
import java.io.File; import java.io.File;
import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to file converter * String to file converter


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to float converter * String to float converter


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to integer converter. * String to integer converter.


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to long converter * String to long converter


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java View File

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


import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to short converter * String to short converter


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java View File

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


import java.net.URL; import java.net.URL;
import org.apache.ant.convert.AbstractConverter; import org.apache.ant.convert.AbstractConverter;
import org.apache.avalon.Context;
import org.apache.avalon.framework.context.Context;


/** /**
* String to url converter * String to url converter


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

@@ -13,10 +13,10 @@ import java.net.URL;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet; import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* Method to register a single tasklet. * Method to register a single tasklet.
@@ -25,7 +25,7 @@ import org.apache.avalon.camelot.RegistryException;
*/ */
public abstract class AbstractResourceRegisterer public abstract class AbstractResourceRegisterer
extends AbstractTasklet extends AbstractTasklet
implements Composer
implements Composable
{ {
protected String m_lib; protected String m_lib;
protected String m_name; protected String m_name;
@@ -33,7 +33,7 @@ public abstract class AbstractResourceRegisterer
protected TaskletEngine m_engine; protected TaskletEngine m_engine;
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_engine = (TaskletEngine)componentManager. m_engine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
@@ -54,7 +54,7 @@ public abstract class AbstractResourceRegisterer
m_classname = classname; m_classname = classname;
} }


public void run()
public void execute()
throws AntException throws AntException
{ {
if( null == m_name ) if( null == m_name )


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

@@ -15,12 +15,12 @@ import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.convert.engine.DefaultConverterInfo; import org.apache.ant.convert.engine.DefaultConverterInfo;
import org.apache.ant.tasklet.AbstractTasklet; import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.DefaultLocator;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.camelot.DefaultLocator;
import org.apache.avalon.framework.camelot.DeploymentException;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* Method to register a single converter. * Method to register a single converter.
@@ -29,7 +29,7 @@ import org.apache.avalon.camelot.RegistryException;
*/ */
public class RegisterConverter public class RegisterConverter
extends AbstractTasklet extends AbstractTasklet
implements Composer
implements Composable
{ {
protected String m_sourceType; protected String m_sourceType;
protected String m_destinationType; protected String m_destinationType;
@@ -38,7 +38,7 @@ public class RegisterConverter
protected TaskletEngine m_engine; protected TaskletEngine m_engine;
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_engine = (TaskletEngine)componentManager. m_engine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
@@ -64,7 +64,7 @@ public class RegisterConverter
m_destinationType = destinationType; m_destinationType = destinationType;
} }
public void run()
public void execute()
throws AntException throws AntException
{ {
if( null == m_classname ) if( null == m_classname )


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java View File

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


import java.net.URL; import java.net.URL;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.avalon.camelot.DefaultLocator;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.camelot.DefaultLocator;
import org.apache.avalon.framework.camelot.DeploymentException;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* Method to register a single datatype. * Method to register a single datatype.


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java View File

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


import java.net.URL; import java.net.URL;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.avalon.camelot.DefaultLocator;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.camelot.DefaultLocator;
import org.apache.avalon.framework.camelot.DeploymentException;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* Method to register a single tasklet. * Method to register a single tasklet.


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

@@ -13,10 +13,10 @@ import java.net.URL;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.tasklet.AbstractTasklet; import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.camelot.DeploymentException;


/** /**
* Method to register a tasklib. * Method to register a tasklib.
@@ -25,13 +25,13 @@ import org.apache.avalon.camelot.DeploymentException;
*/ */
public class RegisterTasklib public class RegisterTasklib
extends AbstractTasklet extends AbstractTasklet
implements Composer
implements Composable
{ {
protected String m_lib; protected String m_lib;
protected TaskletEngine m_engine; protected TaskletEngine m_engine;
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_engine = (TaskletEngine)componentManager. m_engine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
@@ -42,7 +42,7 @@ public class RegisterTasklib
m_lib = lib; m_lib = lib;
} }


public void run()
public void execute()
throws AntException throws AntException
{ {
if( null == m_lib ) if( null == m_lib )


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

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


import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.configuration.Configurable;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.tasklet.AbstractTasklet; import org.apache.ant.tasklet.AbstractTasklet;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.ConfigurationException;


/** /**
* This is to test self interpretation of configuration. * This is to test self interpretation of configuration.
@@ -22,7 +22,7 @@ public class ConfigurationTest
extends AbstractTasklet extends AbstractTasklet
implements Configurable implements Configurable
{ {
protected String m_message;
private String m_message;


public void configure( final Configuration configuration ) public void configure( final Configuration configuration )
throws ConfigurationException throws ConfigurationException
@@ -39,7 +39,7 @@ public class ConfigurationTest
} }
} }


public void run()
public void execute()
throws AntException throws AntException
{ {
getLogger().warn( m_message ); getLogger().warn( m_message );


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

@@ -30,7 +30,7 @@ public class ContentTest
} }
*/ */


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


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

@@ -84,7 +84,7 @@ public class PrimitiveTypesTest
getLogger().warn( "setString( " + value + " );" ); getLogger().warn( "setString( " + value + " );" );
} }


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


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

@@ -37,7 +37,7 @@ public class SubElementTest
System.out.println( "addBeeper(" + beep + ");" ); System.out.println( "addBeeper(" + beep + ");" );
} }


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


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

@@ -11,13 +11,13 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.configuration.ConfigurationBuilder;
import org.apache.ant.util.Condition;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.util.StringUtil;
import org.apache.ant.util.Condition;
import org.apache.avalon.framework.ExceptionUtil;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.log.Logger; import org.apache.log.Logger;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@@ -31,11 +31,11 @@ public class DefaultProjectBuilder
extends AbstractLoggable extends AbstractLoggable
implements ProjectBuilder implements ProjectBuilder
{ {
protected ConfigurationBuilder m_builder;
protected DefaultConfigurationBuilder m_builder;


public DefaultProjectBuilder() public DefaultProjectBuilder()
{ {
m_builder = new ConfigurationBuilder();
m_builder = new DefaultConfigurationBuilder();
} }


/** /**
@@ -63,7 +63,7 @@ public class DefaultProjectBuilder


/** /**
* Utility method to build a Configuration tree from a source. * Utility method to build a Configuration tree from a source.
* Overide this in sub-classes if you want to provide extra
* Overide this in sub-classes if you want to provide extra
* functionality (ie xslt/css). * functionality (ie xslt/css).
* *
* @param location the location * @param location the location
@@ -76,7 +76,7 @@ public class DefaultProjectBuilder
{ {
try try
{ {
return (Configuration)m_builder.build( location );
return (Configuration)m_builder.buildFromFile( location );
} }
catch( final SAXException se ) catch( final SAXException se )
{ {
@@ -108,7 +108,7 @@ public class DefaultProjectBuilder
final String projectName = configuration.getAttribute( "name" ); final String projectName = configuration.getAttribute( "name" );


//determine base directory for project //determine base directory for project
final File baseDirectory =
final File baseDirectory =
(new File( file.getParentFile(), baseDirectoryName )).getAbsoluteFile(); (new File( file.getParentFile(), baseDirectoryName )).getAbsoluteFile();


getLogger().debug( "Project " + projectName + " base directory: " + baseDirectory ); getLogger().debug( "Project " + projectName + " base directory: " + baseDirectory );
@@ -116,7 +116,7 @@ public class DefaultProjectBuilder
//create project and ... //create project and ...
final DefaultProject project = new DefaultProject(); final DefaultProject project = new DefaultProject();
project.setDefaultTargetName( defaultTarget ); project.setDefaultTargetName( defaultTarget );
//setup basic context of project //setup basic context of project
final TaskletContext context = project.getContext(); final TaskletContext context = project.getContext();
context.setProperty( TaskletContext.BASE_DIRECTORY, baseDirectory ); context.setProperty( TaskletContext.BASE_DIRECTORY, baseDirectory );
@@ -136,15 +136,15 @@ public class DefaultProjectBuilder
* @param configuration the Configuration * @param configuration the Configuration
* @exception AntException if an error occurs * @exception AntException if an error occurs
*/ */
protected void buildTopLevelProject( final DefaultProject project,
protected void buildTopLevelProject( final DefaultProject project,
final Configuration configuration ) final Configuration configuration )
throws AntException throws AntException
{ {
final Iterator elements = configuration.getChildren();
final Configuration[] children = configuration.getChildren();


while( elements.hasNext() )
for( int i = 0; i < children.length; i++ )
{ {
final Configuration element = (Configuration)elements.next();
final Configuration element = children[ i ];
final String name = element.getName(); final String name = element.getName();


//handle individual elements //handle individual elements
@@ -152,7 +152,7 @@ public class DefaultProjectBuilder
else if( name.equals( "property" ) ) buildImplicitTask( project, element ); else if( name.equals( "property" ) ) buildImplicitTask( project, element );
else else
{ {
throw new AntException( "Unknown top-level element " + name +
throw new AntException( "Unknown top-level element " + name +
" at " + element.getLocation() ); " at " + element.getLocation() );
} }
} }
@@ -173,16 +173,16 @@ public class DefaultProjectBuilder


if( null == name ) if( null == name )
{ {
throw new AntException( "Discovered un-named target at " +
throw new AntException( "Discovered un-named target at " +
target.getLocation() ); target.getLocation() );
}
}


getLogger().debug( "Parsing target: " + name ); getLogger().debug( "Parsing target: " + name );


if( null != ifCondition && null != unlessCondition ) if( null != ifCondition && null != unlessCondition )
{ {
throw new AntException( "Discovered invalid target that has both a if and " + throw new AntException( "Discovered invalid target that has both a if and " +
"unless condition at " + target.getLocation() );
"unless condition at " + target.getLocation() );
} }


Condition condition = null; Condition condition = null;
@@ -203,7 +203,7 @@ public class DefaultProjectBuilder
//apply depends attribute //apply depends attribute
if( null != depends ) if( null != depends )
{ {
final String[] elements = StringUtil.splitString( depends, "," );
final String[] elements = ExceptionUtil.splitString( depends, "," );


for( int i = 0; i < elements.length; i++ ) for( int i = 0; i < elements.length; i++ )
{ {
@@ -211,22 +211,21 @@ public class DefaultProjectBuilder


if( 0 == dependency.length() ) if( 0 == dependency.length() )
{ {
throw new AntException( "Discovered empty dependency in target " +
target.getName() + " at " + target.getLocation() );
throw new AntException( "Discovered empty dependency in target " +
target.getName() + " at " + target.getLocation() );
} }


getLogger().debug( "Target dependency: " + dependency ); getLogger().debug( "Target dependency: " + dependency );
defaultTarget.addDependency( dependency ); defaultTarget.addDependency( dependency );
}
}
} }


//add all the targets from element //add all the targets from element
final Iterator tasks = target.getChildren();
while( tasks.hasNext() )
final Configuration[] tasks = target.getChildren();
for( int i = 0; i < tasks.length; i++ )
{ {
final Configuration task = (Configuration)tasks.next();
getLogger().debug( "Parsed task: " + task.getName() );
defaultTarget.addTask( task );
getLogger().debug( "Parsed task: " + tasks[ i ].getName() );
defaultTarget.addTask( tasks[ i ] );
} }


//add target to project //add target to project
@@ -240,9 +239,9 @@ public class DefaultProjectBuilder
* @param task the configuration * @param task the configuration
*/ */
protected void buildImplicitTask( final DefaultProject project, final Configuration task ) protected void buildImplicitTask( final DefaultProject project, final Configuration task )
{
{
DefaultTarget target = (DefaultTarget)project.getImplicitTarget(); DefaultTarget target = (DefaultTarget)project.getImplicitTarget();
if( null == target ) if( null == target )
{ {
target = new DefaultTarget(); target = new DefaultTarget();


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

@@ -10,35 +10,35 @@ package org.apache.ant.project;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.tasklet.DefaultTaskletContext; import org.apache.ant.tasklet.DefaultTaskletContext;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.ant.tasklet.engine.DefaultTaskletEngine; import org.apache.ant.tasklet.engine.DefaultTaskletEngine;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.ant.util.Condition; import org.apache.ant.util.Condition;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Composer;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
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.component.DefaultComponentManager;
import org.apache.avalon.framework.component.DefaultComponentManager;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.log.Logger; import org.apache.log.Logger;


/** /**
* This is the default implementation of ProjectEngine. * This is the default implementation of ProjectEngine.
*
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public class DefaultProjectEngine public class DefaultProjectEngine
extends AbstractLoggable extends AbstractLoggable
implements ProjectEngine, Composer
implements ProjectEngine, Composable
{ {
protected TaskletEngine m_taskletEngine; protected TaskletEngine m_taskletEngine;
protected ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport(); protected ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport();
protected DefaultComponentManager m_componentManager; protected DefaultComponentManager m_componentManager;
/** /**
* Add a listener to project events. * Add a listener to project events.
* *
@@ -48,7 +48,7 @@ public class DefaultProjectEngine
{ {
m_listenerSupport.addProjectListener( listener ); m_listenerSupport.addProjectListener( listener );
} }
/** /**
* Remove a listener from project events. * Remove a listener from project events.
* *
@@ -58,15 +58,15 @@ public class DefaultProjectEngine
{ {
m_listenerSupport.removeProjectListener( listener ); m_listenerSupport.removeProjectListener( listener );
} }
/** /**
* Retrieve relevent services needed for engine. * Retrieve relevent services needed for engine.
* *
* @param componentManager the ComponentManager * @param componentManager the ComponentManager
* @exception ComponentManagerException if an error occurs
* @exception ComponentException if an error occurs
*/ */
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_componentManager = (DefaultComponentManager)componentManager; m_componentManager = (DefaultComponentManager)componentManager;
m_taskletEngine = (TaskletEngine)componentManager. m_taskletEngine = (TaskletEngine)componentManager.
@@ -80,7 +80,7 @@ public class DefaultProjectEngine
* @param project the Project * @param project the Project
* @param target the name of the target * @param target the name of the target
* @exception AntException if an error occurs * @exception AntException if an error occurs
*/
*/
public void execute( final Project project, final String target ) public void execute( final Project project, final String target )
throws AntException throws AntException
{ {
@@ -125,8 +125,8 @@ public class DefaultProjectEngine
* @param done the list of targets already executed in current run * @param done the list of targets already executed in current run
* @exception AntException if an error occurs * @exception AntException if an error occurs
*/ */
protected void execute( final Project project,
final String targetName,
protected void execute( final Project project,
final String targetName,
final TaskletContext context, final TaskletContext context,
final ArrayList done ) final ArrayList done )
throws AntException throws AntException
@@ -137,7 +137,7 @@ public class DefaultProjectEngine
{ {
throw new AntException( "Unable to find target " + targetName ); throw new AntException( "Unable to find target " + targetName );
} }
//add target to list of targets executed //add target to list of targets executed
done.add( targetName ); done.add( targetName );


@@ -163,8 +163,8 @@ public class DefaultProjectEngine
* @param context the context in which to execute * @param context the context in which to execute
* @exception AntException if an error occurs * @exception AntException if an error occurs
*/ */
protected void executeTarget( final String targetName,
final Target target,
protected void executeTarget( final String targetName,
final Target target,
final TaskletContext context ) final TaskletContext context )
throws AntException throws AntException
{ {
@@ -175,13 +175,13 @@ public class DefaultProjectEngine
//create project context and set target name //create project context and set target name
final TaskletContext targetContext = new DefaultTaskletContext( context ); final TaskletContext targetContext = new DefaultTaskletContext( context );
targetContext.setProperty( Project.TARGET, targetName ); targetContext.setProperty( Project.TARGET, targetName );
//notify listeners //notify listeners
m_listenerSupport.targetStarted( targetName ); m_listenerSupport.targetStarted( targetName );


//actually do the execution work
//actually do the execution work
executeTargetWork( targetName, target, targetContext ); executeTargetWork( targetName, target, targetContext );
//notify listeners //notify listeners
m_listenerSupport.targetFinished(); m_listenerSupport.targetFinished();
} }
@@ -194,8 +194,8 @@ public class DefaultProjectEngine
* @param target the target * @param target the target
* @param context the context * @param context the context
*/ */
protected void executeTargetWork( final String name,
final Target target,
protected void executeTargetWork( final String name,
final Target target,
final TaskletContext context ) final TaskletContext context )
{ {
//check the condition associated with target. //check the condition associated with target.
@@ -205,7 +205,7 @@ public class DefaultProjectEngine
{ {
if( false == condition.evaluate( context ) ) if( false == condition.evaluate( context ) )
{ {
getLogger().debug( "Skipping target " + name +
getLogger().debug( "Skipping target " + name +
" as it does not satisfy condition" ); " as it does not satisfy condition" );
return; return;
} }
@@ -226,7 +226,7 @@ public class DefaultProjectEngine
* Execute a task. * Execute a task.
* *
* @param task the task definition * @param task the task definition
* @param context the context
* @param context the context
* @exception AntException if an error occurs * @exception AntException if an error occurs
*/ */
protected void executeTask( final Configuration task, final TaskletContext context ) protected void executeTask( final Configuration task, final TaskletContext context )


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

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


import org.apache.avalon.util.StringUtil;
import org.apache.avalon.framework.ExceptionUtil;


/** /**
* Default listener that emulates the old ant listener notifications. * Default listener that emulates the old ant listener notifications.
@@ -89,7 +89,7 @@ public class DefaultProjectListener
*/ */
public void log( String message, Throwable throwable ) public void log( String message, Throwable throwable )
{ {
output( message + "\n" + StringUtil.printStackTrace( throwable, 5, true ) );
output( message + "\n" + ExceptionUtil.printStackTrace( throwable, 5, true ) );
} }


/** /**


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

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


import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.util.Condition; import org.apache.ant.util.Condition;
import org.apache.avalon.framework.configuration.Configuration;


/** /**
* Default implementation of target. * Default implementation of target.
@@ -41,7 +41,7 @@ public class DefaultTarget
{ {
this( null ); this( null );
} }
/** /**
* Get condition under which target is executed. * Get condition under which target is executed.
* *


+ 7
- 7
proposal/myrmidon/src/java/org/apache/ant/project/LogTargetToListenerAdapter.java View File

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


import org.apache.log.LogEntry;
import org.apache.log.LogEvent;
import org.apache.log.LogTarget; import org.apache.log.LogTarget;


/** /**
@@ -31,19 +31,19 @@ public class LogTargetToListenerAdapter
} }


/** /**
* Process a log entry.
* Process a log event.
* *
* @param entry the entry
* @param event the event
*/ */
public void processEntry( final LogEntry entry )
public void processEvent( final LogEvent event )
{ {
if( null == entry.getThrowable() )
if( null == event.getThrowable() )
{ {
m_listener.log( entry.getMessage() );
m_listener.log( event.getMessage() );
} }
else else
{ {
m_listener.log( entry.getMessage(), entry.getThrowable() );
m_listener.log( event.getMessage(), event.getThrowable() );
} }
} }
} }

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

@@ -10,7 +10,7 @@ package org.apache.ant.project;
import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.Component;
import org.apache.avalon.framework.component.Component;


/** /**
* Interface through which to interact with projects. * Interface through which to interact with projects.


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/project/ProjectBuilder.java View File

@@ -10,7 +10,7 @@ package org.apache.ant.project;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.avalon.Component;
import org.apache.avalon.framework.component.Component;


/** /**
* Interface implemented by components that build projects from sources. * Interface implemented by components that build projects from sources.


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

@@ -10,7 +10,7 @@ package org.apache.ant.project;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.avalon.Component;
import org.apache.avalon.framework.component.Component;


/** /**
* This is the interface between ProjectEngine and rest of the system. * This is the interface between ProjectEngine and rest of the system.


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/project/Target.java View File

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


import java.util.Iterator; import java.util.Iterator;
import org.apache.ant.util.Condition; import org.apache.ant.util.Condition;
import org.apache.avalon.Component;
import org.apache.avalon.framework.component.Component;


/** /**
* Interface to represent targets in build file. * Interface to represent targets in build file.


+ 5
- 5
proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java View File

@@ -10,9 +10,9 @@ package org.apache.ant.runtime;
import java.util.Properties; import java.util.Properties;
import org.apache.ant.project.ProjectBuilder; import org.apache.ant.project.ProjectBuilder;
import org.apache.ant.project.ProjectEngine; import org.apache.ant.project.ProjectEngine;
import org.apache.avalon.Component;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.component.Component;


/** /**
* Interface to the Ant runtime. * Interface to the Ant runtime.
@@ -23,7 +23,7 @@ public interface AntEngine
extends Component, Initializable, Disposable extends Component, Initializable, Disposable
{ {
/** /**
* Setup basic properties of engine.
* Setup basic properties of engine.
* Called before init() and can be used to specify alternate components in system. * Called before init() and can be used to specify alternate components in system.
* *
* @param properties the properties * @param properties the properties
@@ -37,7 +37,7 @@ public interface AntEngine
* @return the ProjectBuilder * @return the ProjectBuilder
*/ */
ProjectBuilder getProjectBuilder(); ProjectBuilder getProjectBuilder();
/** /**
* Retrieve project engine for runtime. * Retrieve project engine for runtime.
* Valid after init() call * Valid after init() call


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

@@ -18,17 +18,16 @@ import org.apache.ant.tasklet.JavaVersion;
import org.apache.ant.tasklet.engine.DataTypeEngine; import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.ant.tasklet.engine.TaskletEngine;
import org.apache.ant.tasklet.engine.TskDeployer; import org.apache.ant.tasklet.engine.TskDeployer;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Component;
import org.apache.avalon.Composer;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.Initializable;
import org.apache.avalon.camelot.CamelotUtil;
import org.apache.avalon.camelot.DefaultFactory;
import org.apache.avalon.camelot.Deployer;
import org.apache.avalon.camelot.Factory;
import org.apache.avalon.util.ObjectUtil;
import org.apache.avalon.util.io.FileUtil;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.component.DefaultComponentManager;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.camelot.CamelotUtil;
import org.apache.avalon.framework.camelot.DefaultFactory;
import org.apache.avalon.framework.camelot.Deployer;
import org.apache.avalon.framework.camelot.Factory;
import org.apache.avalon.excalibur.io.FileUtil;


/** /**
* Default implementation of Ant runtime. * Default implementation of Ant runtime.
@@ -97,7 +96,7 @@ public class DefaultAntEngine
* *
* @exception Exception if an error occurs * @exception Exception if an error occurs
*/ */
public void init()
public void initialize()
throws Exception throws Exception
{ {
//setup default properties //setup default properties
@@ -193,7 +192,7 @@ public class DefaultAntEngine
componentManager.put( "org.apache.ant.tasklet.engine.DataTypeEngine", m_dataTypeEngine ); componentManager.put( "org.apache.ant.tasklet.engine.DataTypeEngine", m_dataTypeEngine );
componentManager.put( "org.apache.ant.project.ProjectBuilder", m_builder ); componentManager.put( "org.apache.ant.project.ProjectBuilder", m_builder );
componentManager.put( "org.apache.ant.tasklet.engine.TskDeployer", m_deployer ); componentManager.put( "org.apache.ant.tasklet.engine.TskDeployer", m_deployer );
componentManager.put( "org.apache.avalon.camelot.Factory", m_factory );
componentManager.put( "org.apache.avalon.framework.camelot.Factory", m_factory );
componentManager.put( "org.apache.ant.configuration.Configurer", m_configurer ); componentManager.put( "org.apache.ant.configuration.Configurer", m_configurer );


return componentManager; return componentManager;
@@ -260,14 +259,14 @@ public class DefaultAntEngine
{ {
setupLogger( component ); setupLogger( component );


if( component instanceof Composer )
if( component instanceof Composable )
{ {
((Composer)component).compose( m_componentManager );
((Composable)component).compose( m_componentManager );
} }


if( component instanceof Initializable ) if( component instanceof Initializable )
{ {
((Initializable)component).init();
((Initializable)component).initialize();
} }
} }


@@ -383,7 +382,7 @@ public class DefaultAntEngine
{ {
try try
{ {
final Object object = ObjectUtil.createObject( component );
final Object object = Class.forName( component ).newInstance();


if( !clazz.isInstance( object ) ) if( !clazz.isInstance( object ) )
{ {


+ 22
- 25
proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java View File

@@ -8,9 +8,11 @@
package org.apache.ant.tasklet; package org.apache.ant.tasklet;


import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Context;
import org.apache.avalon.Initializable;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLoggable;


/** /**
* This is abstract base class for tasklets. * This is abstract base class for tasklets.
@@ -19,11 +21,9 @@ import org.apache.avalon.Initializable;
*/ */
public abstract class AbstractTasklet public abstract class AbstractTasklet
extends AbstractLoggable extends AbstractLoggable
implements Tasklet, Initializable
implements Tasklet, Contextualizable, Initializable, Disposable
{ {
//the user should set this in constructors of sub-classes
protected JavaVersion m_requiredJavaVersion;

///Variable to hold context for use by sub-classes
private TaskletContext m_context; private TaskletContext m_context;


/** /**
@@ -37,27 +37,24 @@ public abstract class AbstractTasklet
} }


/** /**
* This will be called before run() method and checks any preconditions.
*
* Intially preconditions just include JVM version but in future it
* will automagically also check if all required parameters are present.
* This will be called before execute() method and checks any preconditions.
* *
* @exception AntException if an error occurs
* @exception Exception if an error occurs
*/ */
public void init()
throws AntException
public void initialize()
throws Exception
{ {
if( null != m_requiredJavaVersion )
{
final JavaVersion suppliedVersion = m_context.getJavaVersion();
}


if( m_requiredJavaVersion.isLessThan( suppliedVersion ) )
{
throw new AntException( "Task requires a JavaVersion of at least " +
m_requiredJavaVersion + " but current version is " +
suppliedVersion );
}
}
/**
* This will be called after execute() method.
* Use this to clean up any resources associated with task.
*
* @exception Exception if an error occurs
*/
public void dispose()
throws Exception
{
} }


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


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/tasklet/DataType.java View File

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant.tasklet; package org.apache.ant.tasklet;


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


/** /**
* Base class for those classes that can appear inside the build file * Base class for those classes that can appear inside the build file


+ 27
- 8
proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java View File

@@ -9,10 +9,11 @@ package org.apache.ant.tasklet;


import java.io.File; import java.io.File;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.avalon.DefaultContext;
import org.apache.avalon.util.PropertyException;
import org.apache.avalon.util.PropertyUtil;
import org.apache.avalon.util.io.FileUtil;
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;


/** /**
* Default implementation of TaskletContext. * Default implementation of TaskletContext.
@@ -42,7 +43,7 @@ public class DefaultTaskletContext


if( null != parent ) if( null != parent )
{ {
m_baseDirectory = (File)parent.get( BASE_DIRECTORY );
m_baseDirectory = (File)parent.getBaseDirectory();
} }
} }


@@ -53,7 +54,14 @@ public class DefaultTaskletContext
*/ */
public JavaVersion getJavaVersion() public JavaVersion getJavaVersion()
{ {
return (JavaVersion)get( JAVA_VERSION );
try
{
return (JavaVersion)get( JAVA_VERSION );
}
catch( final ContextException ce )
{
throw new IllegalStateException( "No JavaVersion in Context" );
}
} }


@@ -64,7 +72,14 @@ public class DefaultTaskletContext
*/ */
public String getName() public String getName()
{ {
return (String)get( NAME );
try
{
return (String)get( NAME );
}
catch( final ContextException ce )
{
throw new IllegalStateException( "No Name in Context" );
}
} }


/** /**
@@ -119,7 +134,11 @@ public class DefaultTaskletContext
*/ */
public Object getProperty( final String name ) public Object getProperty( final String name )
{ {
return get( name );
try { return get( name ); }
catch( final ContextException ce )
{
return null;
}
} }


/** /**


+ 1
- 1
proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java View File

@@ -7,7 +7,7 @@
*/ */
package org.apache.ant.tasklet; package org.apache.ant.tasklet;


import org.apache.avalon.util.ValuedEnum;
import org.apache.avalon.framework.ValuedEnum;


/** /**
* Type safe wrapper class for Java Version enums. * Type safe wrapper class for Java Version enums.


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

@@ -7,16 +7,14 @@
*/ */
package org.apache.ant.tasklet; package org.apache.ant.tasklet;


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


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

+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java View File

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


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


/** /**
* This represents the *Context* in which a task can be executed. * This represents the *Context* in which a task can be executed.


+ 5
- 5
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DataTypeEngine.java View File

@@ -8,10 +8,10 @@
package org.apache.ant.tasklet.engine; package org.apache.ant.tasklet.engine;


import org.apache.ant.tasklet.DataType; import org.apache.ant.tasklet.DataType;
import org.apache.avalon.Component;
import org.apache.avalon.camelot.FactoryException;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.camelot.FactoryException;
import org.apache.avalon.framework.camelot.Registry;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* This is basically a engine that can be used to access data-types. * This is basically a engine that can be used to access data-types.
@@ -28,7 +28,7 @@ public interface DataTypeEngine
* *
* @return the registry * @return the registry
*/ */
LocatorRegistry getRegistry();
Registry getRegistry();


/** /**
* Create a data-type of type registered under name. * Create a data-type of type registered under name.


+ 17
- 17
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultDataTypeEngine.java View File

@@ -8,16 +8,16 @@
package org.apache.ant.tasklet.engine; package org.apache.ant.tasklet.engine;


import org.apache.ant.tasklet.DataType; import org.apache.ant.tasklet.DataType;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Composer;
import org.apache.avalon.camelot.DefaultLocatorRegistry;
import org.apache.avalon.camelot.Factory;
import org.apache.avalon.camelot.FactoryException;
import org.apache.avalon.camelot.Locator;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.camelot.DefaultRegistry;
import org.apache.avalon.framework.camelot.Factory;
import org.apache.avalon.framework.camelot.FactoryException;
import org.apache.avalon.framework.camelot.Locator;
import org.apache.avalon.framework.camelot.Registry;
import org.apache.avalon.framework.camelot.RegistryException;


/** /**
* This is basically a engine that can be used to access data-types. * This is basically a engine that can be used to access data-types.
@@ -26,10 +26,10 @@ import org.apache.avalon.camelot.RegistryException;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public class DefaultDataTypeEngine public class DefaultDataTypeEngine
implements DataTypeEngine, Composer
implements DataTypeEngine, Composable
{ {
protected Factory m_factory; protected Factory m_factory;
protected LocatorRegistry m_registry = new DefaultLocatorRegistry();
protected Registry m_registry = new DefaultRegistry( Locator.class );
/** /**
* Retrieve registry of data-types. * Retrieve registry of data-types.
@@ -37,7 +37,7 @@ public class DefaultDataTypeEngine
* *
* @return the registry * @return the registry
*/ */
public LocatorRegistry getRegistry()
public Registry getRegistry()
{ {
return m_registry; return m_registry;
} }
@@ -46,12 +46,12 @@ public class DefaultDataTypeEngine
* Retrieve relevent services needed to deploy. * Retrieve relevent services needed to deploy.
* *
* @param componentManager the ComponentManager * @param componentManager the ComponentManager
* @exception ComponentManagerException if an error occurs
* @exception ComponentException if an error occurs
*/ */
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
m_factory = (Factory)componentManager.lookup( "org.apache.avalon.camelot.Factory" );
m_factory = (Factory)componentManager.lookup( "org.apache.avalon.framework.camelot.Factory" );
} }
/** /**
@@ -65,7 +65,7 @@ public class DefaultDataTypeEngine
public DataType createDataType( final String name ) public DataType createDataType( final String name )
throws RegistryException, FactoryException throws RegistryException, FactoryException
{ {
final Locator locator = m_registry.getLocator( name );
final Locator locator = (Locator)m_registry.getInfo( name, Locator.class );
return (DataType)m_factory.create( locator, DataType.class ); return (DataType)m_factory.create( locator, DataType.class );
} }
} }

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

@@ -9,41 +9,41 @@ package org.apache.ant.tasklet.engine;


import java.util.HashMap; import java.util.HashMap;
import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.configuration.Configurable;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.configuration.Configurer; import org.apache.ant.configuration.Configurer;
import org.apache.ant.configuration.DefaultConfigurer; 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.convert.engine.ConverterEngine;
import org.apache.ant.tasklet.Tasklet; import org.apache.ant.tasklet.Tasklet;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.AbstractLoggable;
import org.apache.avalon.Component;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Context;
import org.apache.avalon.Contextualizable;
import org.apache.avalon.DefaultComponentManager;
import org.apache.avalon.Disposable;
import org.apache.avalon.Initializable;
import org.apache.avalon.Loggable;
import org.apache.avalon.camelot.DefaultFactory;
import org.apache.avalon.camelot.DefaultLocatorRegistry;
import org.apache.avalon.camelot.Factory;
import org.apache.avalon.camelot.FactoryException;
import org.apache.avalon.camelot.Locator;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.logger.AbstractLoggable;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.DefaultComponentManager;
import org.apache.avalon.framework.component.ComponentException;
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.component.DefaultComponentManager;
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.camelot.DefaultFactory;
import org.apache.avalon.framework.camelot.DefaultRegistry;
import org.apache.avalon.framework.camelot.Factory;
import org.apache.avalon.framework.camelot.FactoryException;
import org.apache.avalon.framework.camelot.Locator;
import org.apache.avalon.framework.camelot.Registry;
import org.apache.avalon.framework.camelot.RegistryException;
import org.apache.log.Logger; import org.apache.log.Logger;


public class DefaultTaskletEngine public class DefaultTaskletEngine
extends AbstractLoggable extends AbstractLoggable
implements TaskletEngine, Composer
implements TaskletEngine, Composable
{ {
protected TskDeployer m_tskDeployer; protected TskDeployer m_tskDeployer;
protected Factory m_factory; protected Factory m_factory;
protected LocatorRegistry m_locatorRegistry = new DefaultLocatorRegistry();
protected Registry m_locatorRegistry = new DefaultRegistry( Locator.class );
protected Configurer m_configurer; protected Configurer m_configurer;
protected DataTypeEngine m_dataTypeEngine; protected DataTypeEngine m_dataTypeEngine;
protected ConverterEngine m_converterEngine; protected ConverterEngine m_converterEngine;
@@ -60,7 +60,7 @@ public class DefaultTaskletEngine
return m_converterEngine; return m_converterEngine;
} }


public LocatorRegistry getRegistry()
public Registry getRegistry()
{ {
return m_locatorRegistry; return m_locatorRegistry;
} }
@@ -79,15 +79,15 @@ public class DefaultTaskletEngine
* Retrieve relevent services needed to deploy. * Retrieve relevent services needed to deploy.
* *
* @param componentManager the ComponentManager * @param componentManager the ComponentManager
* @exception ComponentManagerException if an error occurs
* @exception ComponentException if an error occurs
*/ */
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
//cache CM so it can be used while executing tasks //cache CM so it can be used while executing tasks
m_componentManager = componentManager; m_componentManager = componentManager;


m_factory = (Factory)componentManager.lookup( "org.apache.avalon.camelot.Factory" );
m_factory = (Factory)componentManager.lookup( "org.apache.avalon.framework.camelot.Factory" );
m_tskDeployer = (TskDeployer)componentManager. m_tskDeployer = (TskDeployer)componentManager.
lookup( "org.apache.ant.tasklet.engine.TskDeployer" ); lookup( "org.apache.ant.tasklet.engine.TskDeployer" );
m_configurer = (Configurer)componentManager. m_configurer = (Configurer)componentManager.
@@ -118,7 +118,11 @@ public class DefaultTaskletEngine
doInitialize( tasklet, task ); doInitialize( tasklet, task );


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


getLogger().debug( "Disposing" ); getLogger().debug( "Disposing" );
doDispose( tasklet, task ); doDispose( tasklet, task );
@@ -129,7 +133,7 @@ public class DefaultTaskletEngine
{ {
try try
{ {
final Locator locator = m_locatorRegistry.getLocator( name );
final Locator locator = (Locator)m_locatorRegistry.getInfo( name, Locator.class );
return (Tasklet)m_factory.create( locator, Tasklet.class ); return (Tasklet)m_factory.create( locator, Tasklet.class );
} }
catch( final RegistryException re ) catch( final RegistryException re )
@@ -159,9 +163,9 @@ public class DefaultTaskletEngine
protected void doCompose( final Tasklet tasklet, final Configuration task ) protected void doCompose( final Tasklet tasklet, final Configuration task )
throws AntException throws AntException
{ {
if( tasklet instanceof Composer )
if( tasklet instanceof Composable )
{ {
try { ((Composer)tasklet).compose( m_componentManager ); }
try { ((Composable)tasklet).compose( m_componentManager ); }
catch( final Throwable throwable ) catch( final Throwable throwable )
{ {
throw new AntException( "Error composing task " + task.getName() + " at " + throw new AntException( "Error composing task " + task.getName() + " at " +
@@ -176,7 +180,13 @@ public class DefaultTaskletEngine
final TaskletContext context ) final TaskletContext context )
throws AntException throws AntException
{ {
try { tasklet.contextualize( context ); }
try
{
if( tasklet instanceof Contextualizable )
{
((Contextualizable)tasklet).contextualize( context );
}
}
catch( final Throwable throwable ) catch( final Throwable throwable )
{ {
throw new AntException( "Error contextualizing task " + task.getName() + " at " + throw new AntException( "Error contextualizing task " + task.getName() + " at " +
@@ -205,7 +215,7 @@ public class DefaultTaskletEngine
{ {
if( tasklet instanceof Initializable ) if( tasklet instanceof Initializable )
{ {
try { ((Initializable)tasklet).init(); }
try { ((Initializable)tasklet).initialize(); }
catch( final Throwable throwable ) catch( final Throwable throwable )
{ {
throw new AntException( "Error initializing task " + task.getName() + " at " + throw new AntException( "Error initializing task " + task.getName() + " at " +


+ 76
- 51
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java View File

@@ -18,20 +18,20 @@ import java.util.zip.ZipFile;
import org.apache.ant.convert.engine.ConverterEngine; import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.convert.engine.ConverterRegistry; import org.apache.ant.convert.engine.ConverterRegistry;
import org.apache.ant.convert.engine.DefaultConverterInfo; import org.apache.ant.convert.engine.DefaultConverterInfo;
import org.apache.avalon.Component;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.ComponentManagerException;
import org.apache.avalon.Composer;
import org.apache.avalon.Configuration;
import org.apache.avalon.ConfigurationException;
import org.apache.avalon.camelot.AbstractZipDeployer;
import org.apache.avalon.camelot.DefaultLocator;
import org.apache.avalon.camelot.DefaultLocatorRegistry;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.camelot.DeployerUtil;
import org.apache.avalon.camelot.Loader;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.camelot.RegistryException;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.ComponentException;
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.camelot.AbstractDeployer;
import org.apache.avalon.framework.camelot.DefaultLocator;
import org.apache.avalon.framework.camelot.DefaultRegistry;
import org.apache.avalon.framework.camelot.DeploymentException;
import org.apache.avalon.framework.camelot.DeployerUtil;
import org.apache.avalon.framework.camelot.Loader;
import org.apache.avalon.framework.camelot.Registry;
import org.apache.avalon.framework.camelot.RegistryException;
import org.apache.log.Logger; import org.apache.log.Logger;


/** /**
@@ -40,14 +40,14 @@ import org.apache.log.Logger;
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/ */
public class DefaultTskDeployer public class DefaultTskDeployer
extends AbstractZipDeployer
implements Composer, TskDeployer
extends AbstractDeployer
implements Composable, TskDeployer
{ {
protected final static String TSKDEF_FILE = "TASK-LIB/taskdefs.xml"; protected final static String TSKDEF_FILE = "TASK-LIB/taskdefs.xml";


protected LocatorRegistry m_dataTypeRegistry;
protected LocatorRegistry m_taskletRegistry;
protected LocatorRegistry m_converterRegistry;
protected Registry m_dataTypeRegistry;
protected Registry m_taskletRegistry;
protected Registry m_converterRegistry;
protected ConverterRegistry m_converterInfoRegistry; protected ConverterRegistry m_converterInfoRegistry;


/** /**
@@ -64,10 +64,10 @@ public class DefaultTskDeployer
* Retrieve relevent services needed to deploy. * Retrieve relevent services needed to deploy.
* *
* @param componentManager the ComponentManager * @param componentManager the ComponentManager
* @exception ComponentManagerException if an error occurs
* @exception ComponentException if an error occurs
*/ */
public void compose( final ComponentManager componentManager ) public void compose( final ComponentManager componentManager )
throws ComponentManagerException
throws ComponentException
{ {
final TaskletEngine taskletEngine = (TaskletEngine)componentManager. final TaskletEngine taskletEngine = (TaskletEngine)componentManager.
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); lookup( "org.apache.ant.tasklet.engine.TaskletEngine" );
@@ -86,6 +86,37 @@ public class DefaultTskDeployer
m_dataTypeRegistry = dataTypeEngine.getRegistry(); m_dataTypeRegistry = dataTypeEngine.getRegistry();
} }


/**
* Deploy a file.
* Eventually this should be cached for performance reasons.
*
* @param location the location
* @param file the file
* @exception DeploymentException if an error occurs
*/
protected void deployFromFile( final String location, final File file )
throws DeploymentException
{
final ZipFile zipFile = DeployerUtil.getZipFileFor( file );

URL url = null;
try
{
try { url = file.toURL(); }
catch( final MalformedURLException mue )
{
throw new DeploymentException( "Unable to form url", mue );
}
loadResources( zipFile, location, url );
}
finally
{
try { zipFile.close(); }
catch( final IOException ioe ) {}
}
}

protected void loadResources( final ZipFile zipFile, final String location, final URL url ) protected void loadResources( final ZipFile zipFile, final String location, final URL url )
throws DeploymentException throws DeploymentException
{ {
@@ -93,25 +124,22 @@ public class DefaultTskDeployer


try try
{ {
final Iterator tasks = taskdefs.getChildren( "task" );
while( tasks.hasNext() )
final Configuration[] tasks = taskdefs.getChildren( "task" );
for( int i = 0; i < tasks.length; i++ )
{ {
final Configuration task = (Configuration)tasks.next();
handleTasklet( task, url );
handleTasklet( tasks[ i ], url );
} }
final Iterator converters = taskdefs.getChildren( "converter" );
while( converters.hasNext() )
final Configuration[] converters = taskdefs.getChildren( "converter" );
for( int i = 0; i < converters.length; i++ )
{ {
final Configuration converter = (Configuration)converters.next();
handleConverter( converter, url );
handleConverter( converters[ i ], url );
} }


final Iterator datatypes = taskdefs.getChildren( "datatype" );
while( datatypes.hasNext() )
final Configuration[] datatypes = taskdefs.getChildren( "datatype" );
for( int i = 0; i < datatypes.length; i++ )
{ {
final Configuration datatype = (Configuration)datatypes.next();
handleDataType( datatype, url );
handleDataType( datatypes[ i ], url );
} }
} }
catch( final ConfigurationException ce ) catch( final ConfigurationException ce )
@@ -129,13 +157,12 @@ public class DefaultTskDeployer
try try
{ {
final Iterator converters = taskdefs.getChildren( "converter" );
while( converters.hasNext() )
final Configuration[] converters = taskdefs.getChildren( "converter" );
for( int i = 0; i < converters.length; i++ )
{ {
final Configuration converter = (Configuration)converters.next();
if( converter.getAttribute( "classname" ).equals( name ) )
if( converters[ i ].getAttribute( "classname" ).equals( name ) )
{ {
handleConverter( converter, url );
handleConverter( converters[ i ], url );
break; break;
} }
} }
@@ -156,13 +183,12 @@ public class DefaultTskDeployer
try try
{ {
final Iterator datatypes = datatypedefs.getChildren( "datatype" );
while( datatypes.hasNext() )
final Configuration[] datatypes = datatypedefs.getChildren( "datatype" );
for( int i = 0; i < datatypes.length; i++ )
{ {
final Configuration datatype = (Configuration)datatypes.next();
if( datatype.getAttribute( "name" ).equals( name ) )
if( datatypes[ i ].getAttribute( "name" ).equals( name ) )
{ {
handleDataType( datatype, url );
handleDataType( datatypes[ i ], url );
break; break;
} }
} }
@@ -182,13 +208,12 @@ public class DefaultTskDeployer
try try
{ {
final Iterator tasks = taskdefs.getChildren( "task" );
while( tasks.hasNext() )
final Configuration[] tasks = taskdefs.getChildren( "task" );
for( int i = 0; i < tasks.length; i++ )
{ {
final Configuration task = (Configuration)tasks.next();
if( task.getAttribute( "name" ).equals( name ) )
if( tasks[ i ].getAttribute( "name" ).equals( name ) )
{ {
handleTasklet( task, url );
handleTasklet( tasks[ i ], url );
break; break;
} }
} }
@@ -226,7 +251,7 @@ public class DefaultTskDeployer
re ); re );
} }


m_logger.debug( "Registered converter " + name + " that converts from " +
getLogger().debug( "Registered converter " + name + " that converts from " +
source + " to " + destination ); source + " to " + destination );
} }
@@ -245,7 +270,7 @@ public class DefaultTskDeployer
re ); re );
} }
m_logger.debug( "Registered tasklet " + name + " as " + classname );
getLogger().debug( "Registered tasklet " + name + " as " + classname );
} }
protected void handleDataType( final Configuration datatype, final URL url ) protected void handleDataType( final Configuration datatype, final URL url )
@@ -263,6 +288,6 @@ public class DefaultTskDeployer
re ); re );
} }
m_logger.debug( "Registered datatype " + name + " as " + classname );
getLogger().debug( "Registered datatype " + name + " as " + classname );
} }
} }

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

@@ -8,14 +8,14 @@
package org.apache.ant.tasklet.engine; package org.apache.ant.tasklet.engine;


import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.ant.configuration.Configuration;
import org.apache.ant.convert.engine.ConverterEngine; import org.apache.ant.convert.engine.ConverterEngine;
import org.apache.ant.tasklet.engine.DataTypeEngine; import org.apache.ant.tasklet.engine.DataTypeEngine;
import org.apache.ant.tasklet.TaskletContext; import org.apache.ant.tasklet.TaskletContext;
import org.apache.avalon.Component;
import org.apache.avalon.ComponentManager;
import org.apache.avalon.Loggable;
import org.apache.avalon.camelot.LocatorRegistry;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.camelot.Registry;
import org.apache.log.Logger; import org.apache.log.Logger;
/** /**
@@ -38,7 +38,7 @@ public interface TaskletEngine
* *
* @return the LocatorRegistry * @return the LocatorRegistry
*/ */
LocatorRegistry getRegistry();
Registry getRegistry();


/** /**
* Retrieve converter engine. * Retrieve converter engine.


+ 3
- 3
proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java View File

@@ -8,9 +8,9 @@
package org.apache.ant.tasklet.engine; package org.apache.ant.tasklet.engine;


import java.net.URL; import java.net.URL;
import org.apache.avalon.Loggable;
import org.apache.avalon.camelot.Deployer;
import org.apache.avalon.camelot.DeploymentException;
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.camelot.Deployer;
import org.apache.avalon.framework.camelot.DeploymentException;
import org.apache.log.Logger; import org.apache.log.Logger;


/** /**


+ 26
- 17
proposal/myrmidon/src/java/org/apache/ant/util/Condition.java View File

@@ -8,10 +8,11 @@
package org.apache.ant.util; package org.apache.ant.util;


import org.apache.ant.AntException; import org.apache.ant.AntException;
import org.apache.avalon.Component;
import org.apache.avalon.Context;
import org.apache.avalon.util.PropertyException;
import org.apache.avalon.util.PropertyUtil;
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.excalibur.property.PropertyException;
import org.apache.avalon.excalibur.property.PropertyUtil;


/** /**
* Class representing a condition. * Class representing a condition.
@@ -21,8 +22,8 @@ import org.apache.avalon.util.PropertyUtil;
public class Condition public class Condition
implements Component implements Component
{ {
protected String m_condition;
protected boolean m_isIfCondition;
private String m_condition;
private boolean m_isIfCondition;


public Condition( final boolean isIfCondition, final String condition ) public Condition( final boolean isIfCondition, final String condition )
{ {
@@ -42,29 +43,37 @@ public class Condition
public boolean evaluate( final Context context ) public boolean evaluate( final Context context )
{ {
boolean result = false;

try try
{ {
final Object resolved = final Object resolved =
PropertyUtil.resolveProperty( m_condition, context, false );

boolean result = false;
PropertyUtil.resolveProperty( getCondition(), context, false );


if( null != resolved ) if( null != resolved )
{ {
result = ( null != context.get( resolved ) );
}

if( !m_isIfCondition )
{
result = !result;
final Object object = context.get( resolved );
//TODO: Do more than just check for presence????????????
//true as object present
result = true;
} }

return result;
}
catch( final ContextException ce )
{
result = false;
} }
catch( final PropertyException pe ) catch( final PropertyException pe )
{ {
throw new AntException( "Error resolving " + m_condition, pe ); throw new AntException( "Error resolving " + m_condition, pe );
} }

if( !m_isIfCondition )
{
result = !result;
}

return result;
} }
} }




+ 0
- 28
proposal/myrmidon/src/java/org/apache/ant/util/ItemSet.java View File

@@ -1,28 +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.util;

import org.apache.ant.tasklet.DataType;

/**
* Interface for ItemSet.
* An item set contains a number of items. Example item sets include
* PatternSets, FileSets, FilterSets etc.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface ItemSet
extends DataType
{
/**
* Returns an array containing the items(s) contained within set.
*
* Question: should ItemSet be context sensitive????
*/
Object[] getItems( /* Context context??? */ );
}

+ 0
- 35
proposal/myrmidon/src/java/org/apache/ant/util/Mapper.java View File

@@ -1,35 +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.util;

import org.apache.ant.tasklet.DataType;

/**
* Interface for Mappers.
* Mappers are responsible for mapping source items to targets items.
* Example mappers will map source files to destination files
* (ie A.java to A.class).
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public interface Mapper
extends DataType
{
/**
* Returns an array containing the target items(s) for the
* given source file.
*
* <p>if the given rule doesn't apply to the input item,
* implementation must return null. Scanner will then
* omit the item in question.</p>
*
* @param item the item to be mapped
*/
Object[] mapItem( Object item );
}

+ 0
- 20
proposal/myrmidon/src/java/org/apache/ant/util/Scanner.java View File

@@ -1,20 +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.util;

import org.apache.avalon.Component;

/**
* Interface for Scanners.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public interface Scanner
extends Component
{
}

BIN
proposal/myrmidon/tools/lib/ant.jar View File


Loading…
Cancel
Save