diff --git a/proposal/myrmidon/build.bat b/proposal/myrmidon/build.bat deleted file mode 100755 index d6eddb22d..000000000 --- a/proposal/myrmidon/build.bat +++ /dev/null @@ -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= diff --git a/proposal/myrmidon/build.sh b/proposal/myrmidon/build.sh index 5f69d904d..2eef1eb13 100644 --- a/proposal/myrmidon/build.sh +++ b/proposal/myrmidon/build.sh @@ -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 $@ diff --git a/proposal/myrmidon/build.xml b/proposal/myrmidon/build.xml index a54f70fbb..ba3b73486 100644 --- a/proposal/myrmidon/build.xml +++ b/proposal/myrmidon/build.xml @@ -46,111 +46,39 @@ Legal: - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - + - - - - + - + - - + + - + - - - - - @@ -203,32 +113,29 @@ Legal: - - - - + + + + + - - - + + + - + + + + + @@ -246,20 +153,7 @@ Legal: - - - - - - + @@ -268,15 +162,4 @@ Legal: - - - - - - - diff --git a/proposal/myrmidon/lib/avalon-container.jar b/proposal/myrmidon/lib/avalon-container.jar new file mode 100644 index 000000000..d5633d25a Binary files /dev/null and b/proposal/myrmidon/lib/avalon-container.jar differ diff --git a/proposal/myrmidon/lib/avalon-excalibur.jar b/proposal/myrmidon/lib/avalon-excalibur.jar new file mode 100644 index 000000000..1465c5e51 Binary files /dev/null and b/proposal/myrmidon/lib/avalon-excalibur.jar differ diff --git a/proposal/myrmidon/lib/avalon-framework.jar b/proposal/myrmidon/lib/avalon-framework.jar new file mode 100644 index 000000000..85ef2939e Binary files /dev/null and b/proposal/myrmidon/lib/avalon-framework.jar differ diff --git a/proposal/myrmidon/lib/avalonapi.jar b/proposal/myrmidon/lib/avalonapi.jar deleted file mode 100644 index 61ba2634e..000000000 Binary files a/proposal/myrmidon/lib/avalonapi.jar and /dev/null differ diff --git a/proposal/myrmidon/lib/logkit.jar b/proposal/myrmidon/lib/logkit.jar new file mode 100644 index 000000000..a0b53e9b0 Binary files /dev/null and b/proposal/myrmidon/lib/logkit.jar differ diff --git a/proposal/myrmidon/src/java/org/apache/ant/AntException.java b/proposal/myrmidon/src/java/org/apache/ant/AntException.java index c5651124b..45d75df54 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/AntException.java +++ b/proposal/myrmidon/src/java/org/apache/ant/AntException.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/Main.java b/proposal/myrmidon/src/java/org/apache/ant/Main.java index f6788cec9..bd6507e96 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/Main.java +++ b/proposal/myrmidon/src/java/org/apache/ant/Main.java @@ -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 Peter Donald */ 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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurable.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurable.java deleted file mode 100644 index 44903516e..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurable.java +++ /dev/null @@ -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. - *
- * - * The contract surrounding a Configurable is that the - * instantiating entity must call the configure - * method before it is valid. The configure method - * must be called after the constructor, and before any other method. - * - * @author Federico Barbieri - * @author Pierpaolo Fumagalli - * @author Stefano Mazzocchi - * @author Berin Loritsch - * @author Peter Donald - */ -public interface Configurable -{ - /** - * Pass the Configuration to the Configurable - * 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; -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configuration.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/Configuration.java deleted file mode 100644 index f696f4847..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configuration.java +++ /dev/null @@ -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 Peter Donald - */ -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(); -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/ConfigurationBuilder.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/ConfigurationBuilder.java deleted file mode 100644 index b2d39f260..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/ConfigurationBuilder.java +++ /dev/null @@ -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 Peter Donald - */ -public class ConfigurationBuilder - extends org.apache.avalon.DefaultConfigurationBuilder -{ - protected org.apache.avalon.SAXConfigurationHandler getHandler() - { - return new SAXConfigurationHandler(); - } -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java index 9bb25c288..50f10e4a2 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java +++ b/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java @@ -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 Peter Donald */ 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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfiguration.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfiguration.java deleted file mode 100644 index 1bcd88f3a..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfiguration.java +++ /dev/null @@ -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 Peter Donald - */ -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(); - } -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java index 151650634..337fba81b 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java +++ b/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java @@ -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 Peter Donald */ 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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/SAXConfigurationHandler.java b/proposal/myrmidon/src/java/org/apache/ant/configuration/SAXConfigurationHandler.java deleted file mode 100644 index 6802bdb0f..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/SAXConfigurationHandler.java +++ /dev/null @@ -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 Peter Donald - */ -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 ); - } -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/AbstractConverter.java b/proposal/myrmidon/src/java/org/apache/ant/convert/AbstractConverter.java index f1f21e06e..63b35fce2 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/AbstractConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/AbstractConverter.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java b/proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java index 97bf38992..efb003a8f 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/Converter.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterEngine.java b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterEngine.java index 11337a707..3205d9c8e 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterEngine.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterInfo.java b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterInfo.java index d69dc3c93..4e8683913 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterInfo.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterInfo.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterRegistry.java b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterRegistry.java index d0478be4a..b00fe3db9 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterRegistry.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/ConverterRegistry.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterEngine.java b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterEngine.java index 7845fa0f4..b079a53d3 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterEngine.java @@ -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 ); } diff --git a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterRegistry.java b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterRegistry.java index 99c87c674..dfb6bfaa4 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterRegistry.java +++ b/proposal/myrmidon/src/java/org/apache/ant/convert/engine/DefaultConverterRegistry.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java b/proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java index b1ea3a26d..33807fb90 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java +++ b/proposal/myrmidon/src/java/org/apache/ant/launcher/AntLoader.java @@ -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" ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java index f333737ab..21bc9f219 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java @@ -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 ); diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java index f3c06c547..a405d0aa1 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Echo.java @@ -25,7 +25,7 @@ public class Echo m_message = message; } - public void run() + public void execute() throws AntException { getLogger().warn( m_message ); diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java index 2be4e8b68..d920281c1 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java @@ -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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java index 0db19847d..e3a73ec42 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToByteConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java index 254f58734..dccb17f06 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToClassConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java index 067353578..64f705652 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToDoubleConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java index 24b1d8be0..136399e77 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFileConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java index fab3e8b3a..2d4e36ea9 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToFloatConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java index d807666fd..9e98c406c 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToIntegerConverter.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java index 0b61fe330..603a2d145 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToLongConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java index 7919e648e..491df831a 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToShortConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java index 9ec3faded..8bb07e43d 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/basic/StringToURLConverter.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java index a42b4ee30..553a2b0ac 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/AbstractResourceRegisterer.java @@ -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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java index 08e6888e8..cf216d9e3 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterConverter.java @@ -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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java index dcf325bea..e247e7583 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterDataType.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java index 3f276fddd..48d2a1579 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklet.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java index 0fedc8da9..652135905 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/core/RegisterTasklib.java @@ -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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java b/proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java index 3090fc155..dcfdfb418 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/test/ConfigurationTest.java @@ -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 ); diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java b/proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java index 4cc24b290..cb1a5c177 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/test/ContentTest.java @@ -30,7 +30,7 @@ public class ContentTest } */ - public void run() + public void execute() throws AntException { } diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java b/proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java index 87a078b4a..598dcc9a8 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/test/PrimitiveTypesTest.java @@ -84,7 +84,7 @@ public class PrimitiveTypesTest getLogger().warn( "setString( " + value + " );" ); } - public void run() + public void execute() throws AntException { } diff --git a/proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java b/proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java index c02123e5b..dc9c105c8 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java +++ b/proposal/myrmidon/src/java/org/apache/ant/modules/test/SubElementTest.java @@ -37,7 +37,7 @@ public class SubElementTest System.out.println( "addBeeper(" + beep + ");" ); } - public void run() + public void execute() throws AntException { } diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java index 35898a415..6d4407d72 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java @@ -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(); diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java index a44aa96c2..4a2d20bc4 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java @@ -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 Peter Donald */ 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 ) diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java index 8d250afe0..845e50f12 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectListener.java @@ -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 ) ); } /** diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultTarget.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultTarget.java index 14389381b..1a5187a74 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultTarget.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultTarget.java @@ -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. * diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/LogTargetToListenerAdapter.java b/proposal/myrmidon/src/java/org/apache/ant/project/LogTargetToListenerAdapter.java index 38e0a66b0..668a44830 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/LogTargetToListenerAdapter.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/LogTargetToListenerAdapter.java @@ -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() ); } } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/Project.java b/proposal/myrmidon/src/java/org/apache/ant/project/Project.java index a580e93ce..1ccb84604 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/Project.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/Project.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectBuilder.java b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectBuilder.java index a6a97c164..fe09b9460 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectBuilder.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectBuilder.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java index 6902568f1..805f490f0 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/Target.java b/proposal/myrmidon/src/java/org/apache/ant/project/Target.java index 84acdf8ff..46efb96c0 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/Target.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/Target.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java b/proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java index dd1f9ab8e..30ea0c291 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java b/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java index ece06a96e..678a606f8 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java @@ -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 ) ) { diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java index ad4bf2333..4899f10e5 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/AbstractTasklet.java @@ -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; } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/DataType.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/DataType.java index 65f044851..07e4445df 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/DataType.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/DataType.java @@ -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 diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java index 7df0f01fd..343efea62 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/DefaultTaskletContext.java @@ -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; + } } /** diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java index e4ab6a706..21ad3a5f8 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/JavaVersion.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java index dbc441848..740e07828 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/Tasklet.java @@ -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 Peter Donald */ public interface Tasklet - extends Component, Loggable, Contextualizable, Runnable + extends Component { + void execute() + throws Exception; } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java index bc7c8c13f..c83a7bf67 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/TaskletContext.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DataTypeEngine.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DataTypeEngine.java index ba880d6c4..e04ce99e7 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DataTypeEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DataTypeEngine.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultDataTypeEngine.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultDataTypeEngine.java index 9105e2061..96b5906a4 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultDataTypeEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultDataTypeEngine.java @@ -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 Peter Donald */ 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 ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java index ed144154c..4b8da3c4b 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java @@ -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 " + diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java index 12a21542f..64174700c 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTskDeployer.java @@ -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 Peter Donald */ 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 ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java index 558f031d7..f2e6c2275 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TaskletEngine.java @@ -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. diff --git a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java index 89d706acb..0331623bb 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java +++ b/proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/TskDeployer.java @@ -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; /** diff --git a/proposal/myrmidon/src/java/org/apache/ant/util/Condition.java b/proposal/myrmidon/src/java/org/apache/ant/util/Condition.java index eab77aaa9..bf74327c4 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/util/Condition.java +++ b/proposal/myrmidon/src/java/org/apache/ant/util/Condition.java @@ -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; } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/util/ItemSet.java b/proposal/myrmidon/src/java/org/apache/ant/util/ItemSet.java deleted file mode 100644 index 685e8b03b..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/util/ItemSet.java +++ /dev/null @@ -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 Peter Donald - */ -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??? */ ); -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/util/Mapper.java b/proposal/myrmidon/src/java/org/apache/ant/util/Mapper.java deleted file mode 100644 index a7dea8405..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/util/Mapper.java +++ /dev/null @@ -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 Peter Donald - * @author Stefan Bodewig - */ -public interface Mapper - extends DataType -{ - /** - * Returns an array containing the target items(s) for the - * given source file. - * - *

if the given rule doesn't apply to the input item, - * implementation must return null. Scanner will then - * omit the item in question.

- * - * @param item the item to be mapped - */ - Object[] mapItem( Object item ); -} diff --git a/proposal/myrmidon/src/java/org/apache/ant/util/Scanner.java b/proposal/myrmidon/src/java/org/apache/ant/util/Scanner.java deleted file mode 100644 index 9bffef5b0..000000000 --- a/proposal/myrmidon/src/java/org/apache/ant/util/Scanner.java +++ /dev/null @@ -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 Peter Donald - */ -public interface Scanner - extends Component -{ -} diff --git a/proposal/myrmidon/tools/lib/ant.jar b/proposal/myrmidon/tools/lib/ant.jar index f9bb3a72d..91947a529 100644 Binary files a/proposal/myrmidon/tools/lib/ant.jar and b/proposal/myrmidon/tools/lib/ant.jar differ