git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269047 13f79535-47bb-0310-9956-ffa450edef68master
@@ -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= |
@@ -4,9 +4,12 @@ echo | |||
echo "Ant Build System" | |||
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 $@ |
@@ -46,111 +46,39 @@ Legal: | |||
<property name="build.lib" value="${build.dir}/lib"/> | |||
<property name="build.src" value="${build.dir}/src"/> | |||
<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="manifest.dir" value="${src.base}/manifest"/> | |||
<property name="xdocs.dir" value="${src.base}/xdocs"/> | |||
<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="lib.dir" value="lib"/> | |||
<property name="dist.name" value="${Name}-${version}"/> | |||
<!-- <property name="dist.dir" value="${dist.name}"/> --> | |||
<property name="dist.dir" value="dist"/> | |||
<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.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"/> | |||
<!-- | |||
=================================================================== | |||
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/> | |||
<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}"/> | |||
<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="@@DATE@@" value="${TODAY}" /> | |||
</target> | |||
<!-- | |||
=================================================================== | |||
Compiles the source code | |||
=================================================================== | |||
--> | |||
<target name="compile" depends="prepare-src,prepare-lib"> | |||
<mkdir dir="${build.classes}"/> | |||
<javac srcdir="${java.dir}" | |||
@@ -158,43 +86,25 @@ Legal: | |||
debug="${debug}" | |||
optimize="${optimize}" | |||
deprecation="${deprecation}"> | |||
<classpath refid="project.class.path"/> | |||
<exclude name="org/apache/ant/gui/**"/> | |||
<exclude name="${constants.file}"/> | |||
<src path="${build.src}" /> | |||
</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" | |||
basedir="${build.classes}" | |||
manifest="${manifest.dir}/ant-manifest.mf"> | |||
<include name="org/apache/ant/launcher/*" /> | |||
</jar> | |||
</target> | |||
<!-- | |||
=================================================================== | |||
Creates the myrmidon.jar file | |||
=================================================================== | |||
--> | |||
<target name="jar-myrmidon" depends="compile"> | |||
<jar jarfile="${build.lib}/myrmidon.jar" | |||
basedir="${build.classes}" | |||
manifest="${manifest.dir}/myrmidon-manifest.mf"> | |||
@@ -203,32 +113,29 @@ Legal: | |||
<exclude name="org/apache/ant/tasks/**" /> | |||
<exclude name="org/apache/ant/convert/core/**" /> | |||
</jar> | |||
</target> | |||
<!-- | |||
=================================================================== | |||
Creates the ant.jar file | |||
=================================================================== | |||
--> | |||
<target name="jar-core" depends="compile"> | |||
<jar jarfile="${build.lib}/core.tsk" basedir="${build.classes}"> | |||
<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> | |||
</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.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="StyleBook*" /> | |||
</fileset> | |||
@@ -246,20 +153,7 @@ Legal: | |||
</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"> | |||
<delete dir="${build.dir}"/> | |||
<delete dir="${dist.dir}"/> | |||
@@ -268,15 +162,4 @@ Legal: | |||
</delete> | |||
</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> |
@@ -7,7 +7,7 @@ | |||
*/ | |||
package org.apache.ant; | |||
import org.apache.avalon.CascadingRuntimeException; | |||
import org.apache.avalon.framework.CascadingRuntimeException; | |||
/** | |||
* AntException thrown when a problem with tasks etc. | |||
@@ -33,34 +33,35 @@ import org.apache.ant.runtime.DefaultAntEngine; | |||
import org.apache.ant.tasklet.JavaVersion; | |||
import org.apache.ant.tasklet.TaskletContext; | |||
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.LogTarget; | |||
import org.apache.log.Priority; | |||
/** | |||
* The class to kick the tires and light the fires. | |||
* Starts ant, loads ProjectBuilder, builds project then uses ProjectEngine | |||
* to run project. | |||
* | |||
* | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public class Main | |||
extends AbstractMain | |||
extends AbstractLoggable | |||
{ | |||
//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; | |||
//default log level | |||
@@ -69,7 +70,7 @@ public class Main | |||
//Some defaults for file locations/names | |||
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"; | |||
//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 INCREMENTAL_OPT = 6; | |||
private static final int HOME_DIR_OPT = 7; | |||
//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, | |||
DEFINE_OPT //TASKLIB_DIR_OPT, HOME_DIR_OPT | |||
}; | |||
//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 | |||
}; | |||
@@ -110,21 +111,32 @@ public class Main | |||
public static void main( final String[] args ) | |||
{ | |||
final Main main = new Main(); | |||
main.setLogger( LogKit.getLoggerFor( "default" ) ); | |||
main.setLogger( Hierarchy.getDefaultHierarchy().getLoggerFor( "default" ) ); | |||
try { main.execute( args ); } | |||
catch( final AntException ae ) | |||
{ | |||
main.getLogger().error( "Error: " + ae.getMessage() ); | |||
main.getLogger().debug( "Exception..." + StringUtil.printStackTrace( ae ) ); | |||
main.getLogger().debug( "Exception..." + ExceptionUtil.printStackTrace( ae ) ); | |||
} | |||
catch( final Throwable 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. | |||
* This is called by super-class. | |||
@@ -140,7 +152,7 @@ public class Main | |||
HELP_OPT, | |||
"display this help message", | |||
INFO_OPT_INCOMPAT ); | |||
options[1] = | |||
new CLOptionDescriptor( "file", | |||
CLOptionDescriptor.ARGUMENT_REQUIRED, | |||
@@ -206,14 +218,19 @@ public class Main | |||
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 | |||
{ | |||
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 ArrayList targets = new ArrayList(); | |||
String filename = null; | |||
@@ -224,25 +241,25 @@ public class Main | |||
boolean incremental = false; | |||
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 ); | |||
switch( option.getId() ) | |||
{ | |||
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 FILE_OPT: filename = option.getArgument(); break; | |||
case HOME_DIR_OPT: homeDir = option.getArgument(); break; | |||
case TASKLIB_DIR_OPT: taskLibDir = option.getArgument(); break; | |||
case VERBOSE_OPT: logLevel = "INFO"; 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 INCREMENTAL_OPT: incremental = true; break; | |||
case DEFINE_OPT: | |||
case DEFINE_OPT: | |||
defines.put( option.getArgument( 0 ), option.getArgument( 1 ) ); | |||
break; | |||
} | |||
@@ -255,7 +272,7 @@ public class Main | |||
//handle logging... | |||
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. | |||
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" ); | |||
} | |||
//setup classloader so that it will correctly load | |||
//the Project/ProjectBuilder/ProjectEngine and all dependencies | |||
final ClassLoader classLoader = createClassLoader( libDir ); | |||
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().info( "Ant Home Directory: " + m_homeDir ); | |||
@@ -295,7 +312,7 @@ public class Main | |||
final AntEngine antEngine = new DefaultAntEngine(); | |||
setupLogger( antEngine ); | |||
antEngine.setProperties( properties ); | |||
antEngine.init(); | |||
antEngine.initialize(); | |||
final ProjectBuilder builder = antEngine.getProjectBuilder(); | |||
@@ -324,9 +341,9 @@ public class Main | |||
} | |||
String line = reader.readLine(); | |||
if( line.equalsIgnoreCase( "no" ) ) break; | |||
} | |||
antEngine.dispose(); | |||
@@ -339,14 +356,14 @@ public class Main | |||
* @param project the project | |||
* @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 ) | |||
{ | |||
try | |||
{ | |||
final int targetCount = targets.size(); | |||
//if we didn't specify a target on CLI then choose default | |||
if( 0 == targetCount ) | |||
{ | |||
@@ -363,10 +380,10 @@ public class Main | |||
catch( final AntException ae ) | |||
{ | |||
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. | |||
* | |||
@@ -378,15 +395,19 @@ public class Main | |||
throws AntException | |||
{ | |||
final String logLevelCapitalized = logLevel.toUpperCase(); | |||
final Priority.Enum priority = LogKit.getPriorityForName( logLevelCapitalized ); | |||
final Priority priority = Priority.getPriorityForName( logLevelCapitalized ); | |||
if( !priority.getName().equals( logLevelCapitalized ) ) | |||
{ | |||
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; | |||
try { result = (ProjectListener)ObjectUtil.createObject( listenerName ); } | |||
try { result = (ProjectListener)Class.forName( listenerName ).newInstance(); } | |||
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 ); | |||
} | |||
getLogger().addLogTarget( new LogTargetToListenerAdapter( result ) ); | |||
final LogTarget target = new LogTargetToListenerAdapter( result ); | |||
getLogger().setLogTargets( new LogTarget[] { target } ); | |||
return result; | |||
} | |||
@@ -420,41 +443,41 @@ public class Main | |||
protected ClassLoader createClassLoader( final File libDir ) | |||
{ | |||
final ClassLoader candidate = getClass().getClassLoader(); | |||
if( !(candidate instanceof AntClassLoader) ) | |||
{ | |||
getLogger().warn( "Warning: Unable to add entries from " + | |||
getLogger().warn( "Warning: Unable to add entries from " + | |||
"lib-path to classloader" ); | |||
return candidate; | |||
} | |||
final AntClassLoader classLoader = (AntClassLoader)candidate; | |||
final ExtensionFileFilter filter = | |||
final ExtensionFileFilter filter = | |||
new ExtensionFileFilter( new String[] { ".jar", ".zip" } ); | |||
final File[] files = libDir.listFiles( filter ); | |||
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 | |||
final String name = files[ i ].getName(); | |||
if( !name.equals( "ant.jar" ) && | |||
!name.equals( "myrmidon.jar" ) && | |||
!name.equals( "avalonapi.jar" ) ) | |||
{ | |||
{ | |||
try { classLoader.addURL( files[ i ].toURL() ); } | |||
catch( final MalformedURLException mue ) {} | |||
} | |||
} | |||
} | |||
return classLoader; | |||
} | |||
/** | |||
* 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. | |||
* | |||
* @param project the project | |||
@@ -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; | |||
} |
@@ -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(); | |||
} |
@@ -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(); | |||
} | |||
} |
@@ -7,13 +7,14 @@ | |||
*/ | |||
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. | |||
* | |||
* | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public interface Configurer | |||
@@ -21,7 +22,7 @@ public interface Configurer | |||
{ | |||
/** | |||
* 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. | |||
* | |||
* @param object the object | |||
@@ -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(); | |||
} | |||
} |
@@ -13,32 +13,34 @@ import java.util.ArrayList; | |||
import java.util.Iterator; | |||
import org.apache.ant.convert.Converter; | |||
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; | |||
/** | |||
* Class used to configure tasks. | |||
* | |||
* | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public class DefaultConfigurer | |||
extends AbstractLoggable | |||
implements Configurer, Composer, Loggable | |||
implements Configurer, Composable, Loggable | |||
{ | |||
protected final static String RESERVED_ATTRIBUTES[] = | |||
protected final static String RESERVED_ATTRIBUTES[] = | |||
{ | |||
"id" | |||
}; | |||
protected final static String RESERVED_ELEMENTS[] = | |||
protected final static String RESERVED_ELEMENTS[] = | |||
{ | |||
"content" | |||
}; | |||
@@ -47,16 +49,16 @@ public class DefaultConfigurer | |||
protected Converter m_converter; | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_converter = (Converter)componentManager.lookup( "org.apache.ant.convert.Converter" ); | |||
} | |||
/** | |||
* 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 | |||
* ants rules to map configuration to types | |||
* | |||
@@ -65,59 +67,59 @@ public class DefaultConfigurer | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
public void configure( final Object object, | |||
public void configure( final Object object, | |||
final Configuration configuration, | |||
final Context context ) | |||
throws ConfigurationException | |||
{ | |||
if( DEBUG ) | |||
{ | |||
m_logger.debug( "Configuring " + object ); | |||
getLogger().debug( "Configuring " + object ); | |||
} | |||
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 ); | |||
} | |||
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 ); | |||
if( DEBUG ) | |||
if( DEBUG ) | |||
{ | |||
m_logger.debug( "Configuring attribute name=" + name + | |||
getLogger().debug( "Configuring attribute name=" + name + | |||
" value=" + value ); | |||
} | |||
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 ); | |||
@@ -126,11 +128,11 @@ public class DefaultConfigurer | |||
{ | |||
if( !content.trim().equals( "" ) ) | |||
{ | |||
if( DEBUG ) | |||
if( DEBUG ) | |||
{ | |||
m_logger.debug( "Configuring content " + content ); | |||
getLogger().debug( "Configuring content " + content ); | |||
} | |||
configureContent( object, content, context ); | |||
} | |||
} | |||
@@ -145,7 +147,7 @@ public class DefaultConfigurer | |||
* @param context the Context | |||
* @exception ConfigurationException if an error occurs | |||
*/ | |||
protected void configureContent( final Object object, | |||
protected void configureContent( final Object object, | |||
final String content, | |||
final Context context ) | |||
throws ConfigurationException | |||
@@ -153,8 +155,8 @@ public class DefaultConfigurer | |||
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 Context context ) | |||
throws ConfigurationException | |||
@@ -168,7 +170,7 @@ public class DefaultConfigurer | |||
setValue( object, methodName, value, context ); | |||
} | |||
protected void setValue( final Object object, | |||
protected void setValue( final Object object, | |||
final String methodName, | |||
final String value, | |||
final Context context ) | |||
@@ -182,8 +184,8 @@ public class DefaultConfigurer | |||
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" ); | |||
} | |||
@@ -198,7 +200,7 @@ public class DefaultConfigurer | |||
{ | |||
try | |||
{ | |||
final Object objectValue = | |||
final Object objectValue = | |||
PropertyUtil.resolveProperty( value, context, false ); | |||
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 Context context ) | |||
throws ConfigurationException | |||
@@ -226,14 +228,14 @@ public class DefaultConfigurer | |||
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" ); | |||
} | |||
protected boolean setValue( final Object object, | |||
Object value, | |||
protected boolean setValue( final Object object, | |||
Object value, | |||
final Method method, | |||
final Class sourceClass, | |||
final String source, | |||
@@ -245,7 +247,7 @@ public class DefaultConfigurer | |||
{ | |||
parameterType = getComplexTypeFor( parameterType ); | |||
} | |||
try | |||
{ | |||
value = m_converter.convert( parameterType, value, context ); | |||
@@ -254,18 +256,18 @@ public class DefaultConfigurer | |||
{ | |||
if( DEBUG ) | |||
{ | |||
m_logger.debug( "Failed to find converter ", ce ); | |||
getLogger().debug( "Failed to find converter ", ce ); | |||
} | |||
return false; | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new ConfigurationException( "Error converting attribute for " + | |||
throw new ConfigurationException( "Error converting attribute for " + | |||
method.getName(), | |||
e ); | |||
} | |||
try | |||
{ | |||
method.invoke( object, new Object[] { value } ); | |||
@@ -273,13 +275,13 @@ public class DefaultConfigurer | |||
catch( final IllegalAccessException iae ) | |||
{ | |||
//should never happen .... | |||
throw new ConfigurationException( "Error retrieving methods with " + | |||
throw new ConfigurationException( "Error retrieving methods with " + | |||
"correct access specifiers", | |||
iae ); | |||
} | |||
catch( final InvocationTargetException ite ) | |||
{ | |||
throw new ConfigurationException( "Error calling method attribute " + | |||
throw new ConfigurationException( "Error calling method attribute " + | |||
method.getName(), | |||
ite ); | |||
} | |||
@@ -308,11 +310,11 @@ public class DefaultConfigurer | |||
{ | |||
final Method methods[] = clazz.getMethods(); | |||
final ArrayList matches = new ArrayList(); | |||
for( int i = 0; i < methods.length; i++ ) | |||
{ | |||
final Method method = methods[ i ]; | |||
if( methodName.equals( method.getName() ) && | |||
if( methodName.equals( method.getName() ) && | |||
Method.PUBLIC == (method.getModifiers() & Method.PUBLIC) ) | |||
{ | |||
if( method.getReturnType().equals( Void.TYPE ) ) | |||
@@ -333,11 +335,11 @@ public class DefaultConfigurer | |||
{ | |||
final Method methods[] = clazz.getMethods(); | |||
final ArrayList matches = new ArrayList(); | |||
for( int i = 0; i < methods.length; i++ ) | |||
{ | |||
final Method method = methods[ i ]; | |||
if( methodName.equals( method.getName() ) && | |||
if( methodName.equals( method.getName() ) && | |||
Method.PUBLIC == (method.getModifiers() & Method.PUBLIC) ) | |||
{ | |||
final Class returnType = method.getReturnType(); | |||
@@ -352,7 +354,7 @@ public class DefaultConfigurer | |||
} | |||
} | |||
} | |||
return (Method[])matches.toArray( new Method[0] ); | |||
} | |||
@@ -364,10 +366,10 @@ public class DefaultConfigurer | |||
protected String getJavaNameFor( final String name ) | |||
{ | |||
final StringBuffer sb = new StringBuffer(); | |||
int index = name.indexOf( '-' ); | |||
int last = 0; | |||
while( -1 != index ) | |||
{ | |||
final String word = name.substring( last, index ).toLowerCase(); | |||
@@ -376,16 +378,16 @@ public class DefaultConfigurer | |||
last = index + 1; | |||
index = name.indexOf( '-', last ); | |||
} | |||
index = name.length(); | |||
final String word = name.substring( last, index ).toLowerCase(); | |||
sb.append( Character.toUpperCase( word.charAt( 0 ) ) ); | |||
sb.append( word.substring( 1, word.length() ) ); | |||
return sb.toString(); | |||
} | |||
} | |||
protected void configureElement( final Object object, | |||
protected void configureElement( final Object object, | |||
final Configuration configuration, | |||
final Context context ) | |||
throws ConfigurationException | |||
@@ -403,7 +405,7 @@ public class DefaultConfigurer | |||
// slow. Need to cache results per class etc. | |||
final Class clazz = object.getClass(); | |||
Method methods[] = getMethodsFor( clazz, "add" + javaName ); | |||
if( 0 != methods.length ) | |||
{ | |||
//guess it is first method ???? | |||
@@ -415,8 +417,8 @@ public class DefaultConfigurer | |||
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" ); | |||
} | |||
@@ -425,7 +427,7 @@ public class DefaultConfigurer | |||
} | |||
} | |||
protected void createElement( final Object object, | |||
protected void createElement( final Object object, | |||
final Method method, | |||
final Configuration configuration, | |||
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 Configuration configuration, | |||
final Context context ) | |||
@@ -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 ); | |||
} | |||
} |
@@ -7,7 +7,7 @@ | |||
*/ | |||
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. | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
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. | |||
@@ -8,8 +8,8 @@ | |||
package org.apache.ant.convert.engine; | |||
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. | |||
@@ -24,7 +24,7 @@ public interface ConverterEngine | |||
* | |||
* @return the LocatorRegistry | |||
*/ | |||
LocatorRegistry getRegistry(); | |||
Registry getRegistry(); | |||
/** | |||
* Get registry for converterInfo objects. | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
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. | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
package org.apache.ant.convert.engine; | |||
import org.apache.avalon.camelot.Registry; | |||
import org.apache.avalon.framework.camelot.Registry; | |||
/** | |||
* Interface for registry for ConverterInfos. | |||
@@ -10,16 +10,16 @@ package org.apache.ant.convert.engine; | |||
import org.apache.ant.AntException; | |||
import org.apache.ant.convert.Converter; | |||
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. | |||
@@ -28,12 +28,12 @@ import org.apache.avalon.camelot.LocatorRegistry; | |||
*/ | |||
public class DefaultConverterEngine | |||
extends AbstractLoggable | |||
implements ConverterEngine, Composer | |||
implements ConverterEngine, Composable | |||
{ | |||
protected final static boolean DEBUG = false; | |||
protected Factory m_factory; | |||
protected LocatorRegistry m_registry = new DefaultLocatorRegistry(); | |||
protected Registry m_registry = new DefaultRegistry( Locator.class ); | |||
protected ConverterRegistry m_infoRegistry = new DefaultConverterRegistry(); | |||
/** | |||
@@ -41,7 +41,7 @@ public class DefaultConverterEngine | |||
* | |||
* @return the LocatorRegistry | |||
*/ | |||
public LocatorRegistry getRegistry() | |||
public Registry getRegistry() | |||
{ | |||
return m_registry; | |||
} | |||
@@ -60,12 +60,12 @@ public class DefaultConverterEngine | |||
* Retrieve relevent services needed to deploy. | |||
* | |||
* @param componentManager the ComponentManager | |||
* @exception ComponentManagerException if an error occurs | |||
* @exception ComponentException if an error occurs | |||
*/ | |||
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 ) | |||
{ | |||
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 | |||
@@ -106,7 +106,7 @@ public class DefaultConverterEngine | |||
} | |||
//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 ); | |||
return converter.convert( destination, original, context ); | |||
} | |||
@@ -8,9 +8,9 @@ | |||
package org.apache.ant.convert.engine; | |||
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. | |||
@@ -8,10 +8,11 @@ | |||
package org.apache.ant.launcher; | |||
import java.io.File; | |||
import java.lang.reflect.Method; | |||
import java.lang.reflect.InvocationTargetException; | |||
import java.lang.reflect.Method; | |||
import java.net.URL; | |||
import java.net.URLClassLoader; | |||
import java.util.ArrayList; | |||
import java.util.StringTokenizer; | |||
/** | |||
@@ -26,12 +27,12 @@ public final class AntLoader | |||
/** | |||
* Magic entry point. | |||
* | |||
* @param argsthe CLI arguments | |||
* @param args the CLI arguments | |||
* @exception Exception if an error occurs | |||
*/ | |||
public final static void main( final String[] args ) | |||
public final static void main( final String[] args ) | |||
throws Exception | |||
{ | |||
{ | |||
try | |||
{ | |||
//actually try to discover the install directory based on where | |||
@@ -40,40 +41,67 @@ public final class AntLoader | |||
System.setProperty( "ant.home", installDirectory.toString() ); | |||
//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. | |||
final Class clazz = classLoader.loadClass( "org.apache.ant.Main" ); | |||
final Method method = clazz.getMethod( "main", new Class[] { args.getClass() } ); | |||
//kick the tires and light the fires.... | |||
method.invoke( null, new Object[] { args } ); | |||
} | |||
catch( final InvocationTargetException ite ) | |||
catch( final InvocationTargetException ite ) | |||
{ | |||
System.err.println( "Error: " + ite.getTargetException().getMessage() ); | |||
ite.getTargetException().printStackTrace(); | |||
} | |||
catch( final Throwable throwable ) | |||
catch( final Throwable throwable ) | |||
{ | |||
System.err.println( "Error: " + throwable.getMessage() ); | |||
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. | |||
*/ | |||
protected final static File findInstallDir() | |||
private final static File findInstallDir() | |||
throws Exception | |||
{ | |||
final String classpath = System.getProperty( "java.class.path" ); | |||
final String pathSeparator = System.getProperty( "path.separator" ); | |||
final StringTokenizer tokenizer = new StringTokenizer( classpath, pathSeparator ); | |||
while( tokenizer.hasMoreTokens() ) | |||
{ | |||
final String element = tokenizer.nextToken(); | |||
@@ -82,16 +110,16 @@ public final class AntLoader | |||
{ | |||
File file = (new File( element )).getAbsoluteFile(); | |||
file = file.getParentFile(); | |||
if( null != file ) | |||
{ | |||
file = file.getParentFile(); | |||
} | |||
return file; | |||
return file; | |||
} | |||
} | |||
throw new Exception( "Unable to locate ant.jar in classpath" ); | |||
} | |||
} |
@@ -14,10 +14,10 @@ import org.apache.ant.project.ProjectEngine; | |||
import org.apache.ant.tasklet.AbstractTasklet; | |||
import org.apache.ant.tasklet.DefaultTaskletContext; | |||
import org.apache.ant.tasklet.TaskletContext; | |||
import org.apache.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. | |||
@@ -26,7 +26,7 @@ import org.apache.avalon.Context; | |||
*/ | |||
public class AntCall | |||
extends AbstractTasklet | |||
implements Composer | |||
implements Composable | |||
{ | |||
protected ProjectEngine m_projectEngine; | |||
protected Project m_project; | |||
@@ -42,7 +42,7 @@ public class AntCall | |||
} | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_componentManager = componentManager; | |||
m_projectEngine = (ProjectEngine)componentManager. | |||
@@ -66,7 +66,7 @@ public class AntCall | |||
return property; | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
if( null == m_target ) | |||
@@ -78,7 +78,7 @@ public class AntCall | |||
for( int i = 0; i < size; i++ ) | |||
{ | |||
final Property property = (Property)m_properties.get( i ); | |||
property.run(); | |||
property.execute(); | |||
} | |||
getLogger().info( "Calling target " + m_target ); | |||
@@ -25,7 +25,7 @@ public class Echo | |||
m_message = message; | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
getLogger().warn( m_message ); | |||
@@ -9,8 +9,6 @@ package org.apache.ant.modules.basic; | |||
import java.util.Iterator; | |||
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.convert.Converter; | |||
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.TaskletContext; | |||
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. | |||
@@ -31,7 +31,7 @@ import org.apache.avalon.Resolvable; | |||
*/ | |||
public class Property | |||
extends AbstractTasklet | |||
implements Configurable, Composer | |||
implements Configurable, Composable | |||
{ | |||
protected String m_name; | |||
protected Object m_value; | |||
@@ -41,7 +41,7 @@ public class Property | |||
protected Configurer m_configurer; | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_configurer = (Configurer)componentManager. | |||
lookup( "org.apache.ant.configuration.Configurer" ); | |||
@@ -55,11 +55,11 @@ public class Property | |||
public void configure( final Configuration configuration ) | |||
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 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 | |||
{ | |||
@@ -144,7 +145,7 @@ public class Property | |||
m_localScope = localScope; | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
if( null == m_name ) | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to byte converter | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to class converter | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to double converter | |||
@@ -10,7 +10,7 @@ package org.apache.ant.modules.basic; | |||
import java.io.File; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.ant.tasklet.TaskletContext; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to file converter | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to float converter | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to integer converter. | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to long converter | |||
@@ -8,7 +8,7 @@ | |||
package org.apache.ant.modules.basic; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to short converter | |||
@@ -9,7 +9,7 @@ package org.apache.ant.modules.basic; | |||
import java.net.URL; | |||
import org.apache.ant.convert.AbstractConverter; | |||
import org.apache.avalon.Context; | |||
import org.apache.avalon.framework.context.Context; | |||
/** | |||
* String to url converter | |||
@@ -13,10 +13,10 @@ import java.net.URL; | |||
import org.apache.ant.AntException; | |||
import org.apache.ant.tasklet.AbstractTasklet; | |||
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. | |||
@@ -25,7 +25,7 @@ import org.apache.avalon.camelot.RegistryException; | |||
*/ | |||
public abstract class AbstractResourceRegisterer | |||
extends AbstractTasklet | |||
implements Composer | |||
implements Composable | |||
{ | |||
protected String m_lib; | |||
protected String m_name; | |||
@@ -33,7 +33,7 @@ public abstract class AbstractResourceRegisterer | |||
protected TaskletEngine m_engine; | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_engine = (TaskletEngine)componentManager. | |||
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); | |||
@@ -54,7 +54,7 @@ public abstract class AbstractResourceRegisterer | |||
m_classname = classname; | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
if( null == m_name ) | |||
@@ -15,12 +15,12 @@ import org.apache.ant.convert.engine.ConverterEngine; | |||
import org.apache.ant.convert.engine.DefaultConverterInfo; | |||
import org.apache.ant.tasklet.AbstractTasklet; | |||
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. | |||
@@ -29,7 +29,7 @@ import org.apache.avalon.camelot.RegistryException; | |||
*/ | |||
public class RegisterConverter | |||
extends AbstractTasklet | |||
implements Composer | |||
implements Composable | |||
{ | |||
protected String m_sourceType; | |||
protected String m_destinationType; | |||
@@ -38,7 +38,7 @@ public class RegisterConverter | |||
protected TaskletEngine m_engine; | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_engine = (TaskletEngine)componentManager. | |||
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); | |||
@@ -64,7 +64,7 @@ public class RegisterConverter | |||
m_destinationType = destinationType; | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
if( null == m_classname ) | |||
@@ -9,9 +9,9 @@ package org.apache.ant.modules.core; | |||
import java.net.URL; | |||
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. | |||
@@ -9,9 +9,9 @@ package org.apache.ant.modules.core; | |||
import java.net.URL; | |||
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. | |||
@@ -13,10 +13,10 @@ import java.net.URL; | |||
import org.apache.ant.AntException; | |||
import org.apache.ant.tasklet.AbstractTasklet; | |||
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. | |||
@@ -25,13 +25,13 @@ import org.apache.avalon.camelot.DeploymentException; | |||
*/ | |||
public class RegisterTasklib | |||
extends AbstractTasklet | |||
implements Composer | |||
implements Composable | |||
{ | |||
protected String m_lib; | |||
protected TaskletEngine m_engine; | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_engine = (TaskletEngine)componentManager. | |||
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); | |||
@@ -42,7 +42,7 @@ public class RegisterTasklib | |||
m_lib = lib; | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
if( null == m_lib ) | |||
@@ -8,10 +8,10 @@ | |||
package org.apache.ant.modules.test; | |||
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.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. | |||
@@ -22,7 +22,7 @@ public class ConfigurationTest | |||
extends AbstractTasklet | |||
implements Configurable | |||
{ | |||
protected String m_message; | |||
private String m_message; | |||
public void configure( final Configuration configuration ) | |||
throws ConfigurationException | |||
@@ -39,7 +39,7 @@ public class ConfigurationTest | |||
} | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
getLogger().warn( m_message ); | |||
@@ -30,7 +30,7 @@ public class ContentTest | |||
} | |||
*/ | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
} | |||
@@ -84,7 +84,7 @@ public class PrimitiveTypesTest | |||
getLogger().warn( "setString( " + value + " );" ); | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
} | |||
@@ -37,7 +37,7 @@ public class SubElementTest | |||
System.out.println( "addBeeper(" + beep + ");" ); | |||
} | |||
public void run() | |||
public void execute() | |||
throws AntException | |||
{ | |||
} | |||
@@ -11,13 +11,13 @@ import java.io.File; | |||
import java.io.IOException; | |||
import java.util.Iterator; | |||
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.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.xml.sax.InputSource; | |||
import org.xml.sax.SAXException; | |||
@@ -31,11 +31,11 @@ public class DefaultProjectBuilder | |||
extends AbstractLoggable | |||
implements ProjectBuilder | |||
{ | |||
protected ConfigurationBuilder m_builder; | |||
protected DefaultConfigurationBuilder m_builder; | |||
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. | |||
* 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). | |||
* | |||
* @param location the location | |||
@@ -76,7 +76,7 @@ public class DefaultProjectBuilder | |||
{ | |||
try | |||
{ | |||
return (Configuration)m_builder.build( location ); | |||
return (Configuration)m_builder.buildFromFile( location ); | |||
} | |||
catch( final SAXException se ) | |||
{ | |||
@@ -108,7 +108,7 @@ public class DefaultProjectBuilder | |||
final String projectName = configuration.getAttribute( "name" ); | |||
//determine base directory for project | |||
final File baseDirectory = | |||
final File baseDirectory = | |||
(new File( file.getParentFile(), baseDirectoryName )).getAbsoluteFile(); | |||
getLogger().debug( "Project " + projectName + " base directory: " + baseDirectory ); | |||
@@ -116,7 +116,7 @@ public class DefaultProjectBuilder | |||
//create project and ... | |||
final DefaultProject project = new DefaultProject(); | |||
project.setDefaultTargetName( defaultTarget ); | |||
//setup basic context of project | |||
final TaskletContext context = project.getContext(); | |||
context.setProperty( TaskletContext.BASE_DIRECTORY, baseDirectory ); | |||
@@ -136,15 +136,15 @@ public class DefaultProjectBuilder | |||
* @param configuration the Configuration | |||
* @exception AntException if an error occurs | |||
*/ | |||
protected void buildTopLevelProject( final DefaultProject project, | |||
protected void buildTopLevelProject( final DefaultProject project, | |||
final Configuration configuration ) | |||
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(); | |||
//handle individual elements | |||
@@ -152,7 +152,7 @@ public class DefaultProjectBuilder | |||
else if( name.equals( "property" ) ) buildImplicitTask( project, element ); | |||
else | |||
{ | |||
throw new AntException( "Unknown top-level element " + name + | |||
throw new AntException( "Unknown top-level element " + name + | |||
" at " + element.getLocation() ); | |||
} | |||
} | |||
@@ -173,16 +173,16 @@ public class DefaultProjectBuilder | |||
if( null == name ) | |||
{ | |||
throw new AntException( "Discovered un-named target at " + | |||
throw new AntException( "Discovered un-named target at " + | |||
target.getLocation() ); | |||
} | |||
} | |||
getLogger().debug( "Parsing target: " + name ); | |||
if( null != ifCondition && null != unlessCondition ) | |||
{ | |||
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; | |||
@@ -203,7 +203,7 @@ public class DefaultProjectBuilder | |||
//apply depends attribute | |||
if( null != depends ) | |||
{ | |||
final String[] elements = StringUtil.splitString( depends, "," ); | |||
final String[] elements = ExceptionUtil.splitString( depends, "," ); | |||
for( int i = 0; i < elements.length; i++ ) | |||
{ | |||
@@ -211,22 +211,21 @@ public class DefaultProjectBuilder | |||
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 ); | |||
defaultTarget.addDependency( dependency ); | |||
} | |||
} | |||
} | |||
//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 | |||
@@ -240,9 +239,9 @@ public class DefaultProjectBuilder | |||
* @param task the configuration | |||
*/ | |||
protected void buildImplicitTask( final DefaultProject project, final Configuration task ) | |||
{ | |||
{ | |||
DefaultTarget target = (DefaultTarget)project.getImplicitTarget(); | |||
if( null == target ) | |||
{ | |||
target = new DefaultTarget(); | |||
@@ -10,35 +10,35 @@ package org.apache.ant.project; | |||
import java.util.ArrayList; | |||
import java.util.Iterator; | |||
import org.apache.ant.AntException; | |||
import org.apache.ant.configuration.Configuration; | |||
import org.apache.ant.tasklet.DefaultTaskletContext; | |||
import org.apache.ant.tasklet.TaskletContext; | |||
import org.apache.ant.tasklet.engine.DefaultTaskletEngine; | |||
import org.apache.ant.tasklet.engine.TaskletEngine; | |||
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; | |||
/** | |||
* This is the default implementation of ProjectEngine. | |||
* | |||
* | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public class DefaultProjectEngine | |||
extends AbstractLoggable | |||
implements ProjectEngine, Composer | |||
implements ProjectEngine, Composable | |||
{ | |||
protected TaskletEngine m_taskletEngine; | |||
protected ProjectListenerSupport m_listenerSupport = new ProjectListenerSupport(); | |||
protected DefaultComponentManager m_componentManager; | |||
/** | |||
* Add a listener to project events. | |||
* | |||
@@ -48,7 +48,7 @@ public class DefaultProjectEngine | |||
{ | |||
m_listenerSupport.addProjectListener( listener ); | |||
} | |||
/** | |||
* Remove a listener from project events. | |||
* | |||
@@ -58,15 +58,15 @@ public class DefaultProjectEngine | |||
{ | |||
m_listenerSupport.removeProjectListener( listener ); | |||
} | |||
/** | |||
* Retrieve relevent services needed for engine. | |||
* | |||
* @param componentManager the ComponentManager | |||
* @exception ComponentManagerException if an error occurs | |||
* @exception ComponentException if an error occurs | |||
*/ | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
m_componentManager = (DefaultComponentManager)componentManager; | |||
m_taskletEngine = (TaskletEngine)componentManager. | |||
@@ -80,7 +80,7 @@ public class DefaultProjectEngine | |||
* @param project the Project | |||
* @param target the name of the target | |||
* @exception AntException if an error occurs | |||
*/ | |||
*/ | |||
public void execute( final Project project, final String target ) | |||
throws AntException | |||
{ | |||
@@ -125,8 +125,8 @@ public class DefaultProjectEngine | |||
* @param done the list of targets already executed in current run | |||
* @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 ArrayList done ) | |||
throws AntException | |||
@@ -137,7 +137,7 @@ public class DefaultProjectEngine | |||
{ | |||
throw new AntException( "Unable to find target " + targetName ); | |||
} | |||
//add target to list of targets executed | |||
done.add( targetName ); | |||
@@ -163,8 +163,8 @@ public class DefaultProjectEngine | |||
* @param context the context in which to execute | |||
* @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 ) | |||
throws AntException | |||
{ | |||
@@ -175,13 +175,13 @@ public class DefaultProjectEngine | |||
//create project context and set target name | |||
final TaskletContext targetContext = new DefaultTaskletContext( context ); | |||
targetContext.setProperty( Project.TARGET, targetName ); | |||
//notify listeners | |||
m_listenerSupport.targetStarted( targetName ); | |||
//actually do the execution work | |||
//actually do the execution work | |||
executeTargetWork( targetName, target, targetContext ); | |||
//notify listeners | |||
m_listenerSupport.targetFinished(); | |||
} | |||
@@ -194,8 +194,8 @@ public class DefaultProjectEngine | |||
* @param target the target | |||
* @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 ) | |||
{ | |||
//check the condition associated with target. | |||
@@ -205,7 +205,7 @@ public class DefaultProjectEngine | |||
{ | |||
if( false == condition.evaluate( context ) ) | |||
{ | |||
getLogger().debug( "Skipping target " + name + | |||
getLogger().debug( "Skipping target " + name + | |||
" as it does not satisfy condition" ); | |||
return; | |||
} | |||
@@ -226,7 +226,7 @@ public class DefaultProjectEngine | |||
* Execute a task. | |||
* | |||
* @param task the task definition | |||
* @param context the context | |||
* @param context the context | |||
* @exception AntException if an error occurs | |||
*/ | |||
protected void executeTask( final Configuration task, final TaskletContext context ) | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
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. | |||
@@ -89,7 +89,7 @@ public class DefaultProjectListener | |||
*/ | |||
public void log( String message, Throwable throwable ) | |||
{ | |||
output( message + "\n" + StringUtil.printStackTrace( throwable, 5, true ) ); | |||
output( message + "\n" + ExceptionUtil.printStackTrace( throwable, 5, true ) ); | |||
} | |||
/** | |||
@@ -9,8 +9,8 @@ package org.apache.ant.project; | |||
import java.util.ArrayList; | |||
import java.util.Iterator; | |||
import org.apache.ant.configuration.Configuration; | |||
import org.apache.ant.util.Condition; | |||
import org.apache.avalon.framework.configuration.Configuration; | |||
/** | |||
* Default implementation of target. | |||
@@ -41,7 +41,7 @@ public class DefaultTarget | |||
{ | |||
this( null ); | |||
} | |||
/** | |||
* Get condition under which target is executed. | |||
* | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
package org.apache.ant.project; | |||
import org.apache.log.LogEntry; | |||
import org.apache.log.LogEvent; | |||
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 | |||
{ | |||
m_listener.log( entry.getMessage(), entry.getThrowable() ); | |||
m_listener.log( event.getMessage(), event.getThrowable() ); | |||
} | |||
} | |||
} |
@@ -10,7 +10,7 @@ package org.apache.ant.project; | |||
import java.util.Iterator; | |||
import org.apache.ant.AntException; | |||
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. | |||
@@ -10,7 +10,7 @@ package org.apache.ant.project; | |||
import java.io.File; | |||
import java.io.IOException; | |||
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. | |||
@@ -10,7 +10,7 @@ package org.apache.ant.project; | |||
import org.apache.ant.AntException; | |||
import org.apache.ant.tasklet.TaskletContext; | |||
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. | |||
@@ -9,7 +9,7 @@ package org.apache.ant.project; | |||
import java.util.Iterator; | |||
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. | |||
@@ -10,9 +10,9 @@ package org.apache.ant.runtime; | |||
import java.util.Properties; | |||
import org.apache.ant.project.ProjectBuilder; | |||
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. | |||
@@ -23,7 +23,7 @@ public interface AntEngine | |||
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. | |||
* | |||
* @param properties the properties | |||
@@ -37,7 +37,7 @@ public interface AntEngine | |||
* @return the ProjectBuilder | |||
*/ | |||
ProjectBuilder getProjectBuilder(); | |||
/** | |||
* Retrieve project engine for runtime. | |||
* Valid after init() call | |||
@@ -18,17 +18,16 @@ import org.apache.ant.tasklet.JavaVersion; | |||
import org.apache.ant.tasklet.engine.DataTypeEngine; | |||
import org.apache.ant.tasklet.engine.TaskletEngine; | |||
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. | |||
@@ -97,7 +96,7 @@ public class DefaultAntEngine | |||
* | |||
* @exception Exception if an error occurs | |||
*/ | |||
public void init() | |||
public void initialize() | |||
throws Exception | |||
{ | |||
//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.project.ProjectBuilder", m_builder ); | |||
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 ); | |||
return componentManager; | |||
@@ -260,14 +259,14 @@ public class DefaultAntEngine | |||
{ | |||
setupLogger( component ); | |||
if( component instanceof Composer ) | |||
if( component instanceof Composable ) | |||
{ | |||
((Composer)component).compose( m_componentManager ); | |||
((Composable)component).compose( m_componentManager ); | |||
} | |||
if( component instanceof Initializable ) | |||
{ | |||
((Initializable)component).init(); | |||
((Initializable)component).initialize(); | |||
} | |||
} | |||
@@ -383,7 +382,7 @@ public class DefaultAntEngine | |||
{ | |||
try | |||
{ | |||
final Object object = ObjectUtil.createObject( component ); | |||
final Object object = Class.forName( component ).newInstance(); | |||
if( !clazz.isInstance( object ) ) | |||
{ | |||
@@ -8,9 +8,11 @@ | |||
package org.apache.ant.tasklet; | |||
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. | |||
@@ -19,11 +21,9 @@ import org.apache.avalon.Initializable; | |||
*/ | |||
public abstract class AbstractTasklet | |||
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; | |||
/** | |||
@@ -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 | |||
*/ | |||
protected TaskletContext getContext() | |||
protected final TaskletContext getContext() | |||
{ | |||
return m_context; | |||
} | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
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 | |||
@@ -9,10 +9,11 @@ package org.apache.ant.tasklet; | |||
import java.io.File; | |||
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. | |||
@@ -42,7 +43,7 @@ public class DefaultTaskletContext | |||
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() | |||
{ | |||
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() | |||
{ | |||
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 ) | |||
{ | |||
return get( name ); | |||
try { return get( name ); } | |||
catch( final ContextException ce ) | |||
{ | |||
return null; | |||
} | |||
} | |||
/** | |||
@@ -7,7 +7,7 @@ | |||
*/ | |||
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. | |||
@@ -7,16 +7,14 @@ | |||
*/ | |||
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. | |||
* Particular instances can also implement Initializable | |||
* and/or Disposable, in which case init()/dispose() will | |||
* be called at appropriate time. | |||
* The task can also implement Composer in which case required | |||
* The task can also implement Composable in which case required | |||
* facilities will be passed via a ComponentManager. The actual | |||
* facilties is determined by particular task engine but will usually | |||
* include ProjectEngine and TaskEngine. | |||
@@ -24,6 +22,8 @@ import org.apache.avalon.Loggable; | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public interface Tasklet | |||
extends Component, Loggable, Contextualizable, Runnable | |||
extends Component | |||
{ | |||
void execute() | |||
throws Exception; | |||
} |
@@ -8,9 +8,9 @@ | |||
package org.apache.ant.tasklet; | |||
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. | |||
@@ -8,10 +8,10 @@ | |||
package org.apache.ant.tasklet.engine; | |||
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. | |||
@@ -28,7 +28,7 @@ public interface DataTypeEngine | |||
* | |||
* @return the registry | |||
*/ | |||
LocatorRegistry getRegistry(); | |||
Registry getRegistry(); | |||
/** | |||
* Create a data-type of type registered under name. | |||
@@ -8,16 +8,16 @@ | |||
package org.apache.ant.tasklet.engine; | |||
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. | |||
@@ -26,10 +26,10 @@ import org.apache.avalon.camelot.RegistryException; | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public class DefaultDataTypeEngine | |||
implements DataTypeEngine, Composer | |||
implements DataTypeEngine, Composable | |||
{ | |||
protected Factory m_factory; | |||
protected LocatorRegistry m_registry = new DefaultLocatorRegistry(); | |||
protected Registry m_registry = new DefaultRegistry( Locator.class ); | |||
/** | |||
* Retrieve registry of data-types. | |||
@@ -37,7 +37,7 @@ public class DefaultDataTypeEngine | |||
* | |||
* @return the registry | |||
*/ | |||
public LocatorRegistry getRegistry() | |||
public Registry getRegistry() | |||
{ | |||
return m_registry; | |||
} | |||
@@ -46,12 +46,12 @@ public class DefaultDataTypeEngine | |||
* Retrieve relevent services needed to deploy. | |||
* | |||
* @param componentManager the ComponentManager | |||
* @exception ComponentManagerException if an error occurs | |||
* @exception ComponentException if an error occurs | |||
*/ | |||
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 ) | |||
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 ); | |||
} | |||
} |
@@ -9,41 +9,41 @@ package org.apache.ant.tasklet.engine; | |||
import java.util.HashMap; | |||
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.DefaultConfigurer; | |||
import org.apache.avalon.framework.configuration.Configuration; | |||
import org.apache.avalon.framework.configuration.Configurable; | |||
import org.apache.ant.convert.engine.ConverterEngine; | |||
import org.apache.ant.tasklet.Tasklet; | |||
import org.apache.ant.tasklet.TaskletContext; | |||
import org.apache.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; | |||
public class DefaultTaskletEngine | |||
extends AbstractLoggable | |||
implements TaskletEngine, Composer | |||
implements TaskletEngine, Composable | |||
{ | |||
protected TskDeployer m_tskDeployer; | |||
protected Factory m_factory; | |||
protected LocatorRegistry m_locatorRegistry = new DefaultLocatorRegistry(); | |||
protected Registry m_locatorRegistry = new DefaultRegistry( Locator.class ); | |||
protected Configurer m_configurer; | |||
protected DataTypeEngine m_dataTypeEngine; | |||
protected ConverterEngine m_converterEngine; | |||
@@ -60,7 +60,7 @@ public class DefaultTaskletEngine | |||
return m_converterEngine; | |||
} | |||
public LocatorRegistry getRegistry() | |||
public Registry getRegistry() | |||
{ | |||
return m_locatorRegistry; | |||
} | |||
@@ -79,15 +79,15 @@ public class DefaultTaskletEngine | |||
* Retrieve relevent services needed to deploy. | |||
* | |||
* @param componentManager the ComponentManager | |||
* @exception ComponentManagerException if an error occurs | |||
* @exception ComponentException if an error occurs | |||
*/ | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
//cache CM so it can be used while executing tasks | |||
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. | |||
lookup( "org.apache.ant.tasklet.engine.TskDeployer" ); | |||
m_configurer = (Configurer)componentManager. | |||
@@ -118,7 +118,11 @@ public class DefaultTaskletEngine | |||
doInitialize( tasklet, task ); | |||
getLogger().debug( "Running" ); | |||
tasklet.run(); | |||
try { tasklet.execute(); } | |||
catch( final Exception e ) | |||
{ | |||
throw new AntException( "Error executing task", e ); | |||
} | |||
getLogger().debug( "Disposing" ); | |||
doDispose( tasklet, task ); | |||
@@ -129,7 +133,7 @@ public class DefaultTaskletEngine | |||
{ | |||
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 ); | |||
} | |||
catch( final RegistryException re ) | |||
@@ -159,9 +163,9 @@ public class DefaultTaskletEngine | |||
protected void doCompose( final Tasklet tasklet, final Configuration task ) | |||
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 ) | |||
{ | |||
throw new AntException( "Error composing task " + task.getName() + " at " + | |||
@@ -176,7 +180,13 @@ public class DefaultTaskletEngine | |||
final TaskletContext context ) | |||
throws AntException | |||
{ | |||
try { tasklet.contextualize( context ); } | |||
try | |||
{ | |||
if( tasklet instanceof Contextualizable ) | |||
{ | |||
((Contextualizable)tasklet).contextualize( context ); | |||
} | |||
} | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new AntException( "Error contextualizing task " + task.getName() + " at " + | |||
@@ -205,7 +215,7 @@ public class DefaultTaskletEngine | |||
{ | |||
if( tasklet instanceof Initializable ) | |||
{ | |||
try { ((Initializable)tasklet).init(); } | |||
try { ((Initializable)tasklet).initialize(); } | |||
catch( final Throwable throwable ) | |||
{ | |||
throw new AntException( "Error initializing task " + task.getName() + " at " + | |||
@@ -18,20 +18,20 @@ import java.util.zip.ZipFile; | |||
import org.apache.ant.convert.engine.ConverterEngine; | |||
import org.apache.ant.convert.engine.ConverterRegistry; | |||
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; | |||
/** | |||
@@ -40,14 +40,14 @@ import org.apache.log.Logger; | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
public class DefaultTskDeployer | |||
extends AbstractZipDeployer | |||
implements Composer, TskDeployer | |||
extends AbstractDeployer | |||
implements Composable, TskDeployer | |||
{ | |||
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; | |||
/** | |||
@@ -64,10 +64,10 @@ public class DefaultTskDeployer | |||
* Retrieve relevent services needed to deploy. | |||
* | |||
* @param componentManager the ComponentManager | |||
* @exception ComponentManagerException if an error occurs | |||
* @exception ComponentException if an error occurs | |||
*/ | |||
public void compose( final ComponentManager componentManager ) | |||
throws ComponentManagerException | |||
throws ComponentException | |||
{ | |||
final TaskletEngine taskletEngine = (TaskletEngine)componentManager. | |||
lookup( "org.apache.ant.tasklet.engine.TaskletEngine" ); | |||
@@ -86,6 +86,37 @@ public class DefaultTskDeployer | |||
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 ) | |||
throws DeploymentException | |||
{ | |||
@@ -93,25 +124,22 @@ public class DefaultTskDeployer | |||
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 ) | |||
@@ -129,13 +157,12 @@ public class DefaultTskDeployer | |||
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; | |||
} | |||
} | |||
@@ -156,13 +183,12 @@ public class DefaultTskDeployer | |||
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; | |||
} | |||
} | |||
@@ -182,13 +208,12 @@ public class DefaultTskDeployer | |||
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; | |||
} | |||
} | |||
@@ -226,7 +251,7 @@ public class DefaultTskDeployer | |||
re ); | |||
} | |||
m_logger.debug( "Registered converter " + name + " that converts from " + | |||
getLogger().debug( "Registered converter " + name + " that converts from " + | |||
source + " to " + destination ); | |||
} | |||
@@ -245,7 +270,7 @@ public class DefaultTskDeployer | |||
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 ) | |||
@@ -263,6 +288,6 @@ public class DefaultTskDeployer | |||
re ); | |||
} | |||
m_logger.debug( "Registered datatype " + name + " as " + classname ); | |||
getLogger().debug( "Registered datatype " + name + " as " + classname ); | |||
} | |||
} |
@@ -8,14 +8,14 @@ | |||
package org.apache.ant.tasklet.engine; | |||
import org.apache.ant.AntException; | |||
import org.apache.ant.configuration.Configuration; | |||
import org.apache.ant.convert.engine.ConverterEngine; | |||
import org.apache.ant.tasklet.engine.DataTypeEngine; | |||
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; | |||
/** | |||
@@ -38,7 +38,7 @@ public interface TaskletEngine | |||
* | |||
* @return the LocatorRegistry | |||
*/ | |||
LocatorRegistry getRegistry(); | |||
Registry getRegistry(); | |||
/** | |||
* Retrieve converter engine. | |||
@@ -8,9 +8,9 @@ | |||
package org.apache.ant.tasklet.engine; | |||
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; | |||
/** | |||
@@ -8,10 +8,11 @@ | |||
package org.apache.ant.util; | |||
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. | |||
@@ -21,8 +22,8 @@ import org.apache.avalon.util.PropertyUtil; | |||
public class Condition | |||
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 ) | |||
{ | |||
@@ -42,29 +43,37 @@ public class Condition | |||
public boolean evaluate( final Context context ) | |||
{ | |||
boolean result = false; | |||
try | |||
{ | |||
final Object resolved = | |||
PropertyUtil.resolveProperty( m_condition, context, false ); | |||
boolean result = false; | |||
PropertyUtil.resolveProperty( getCondition(), context, false ); | |||
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 ) | |||
{ | |||
throw new AntException( "Error resolving " + m_condition, pe ); | |||
} | |||
if( !m_isIfCondition ) | |||
{ | |||
result = !result; | |||
} | |||
return result; | |||
} | |||
} | |||
@@ -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??? */ ); | |||
} |
@@ -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 ); | |||
} |
@@ -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 | |||
{ | |||
} |