diff --git a/proposal/myrmidon/src/java/org/apache/ant/Main.java b/proposal/myrmidon/src/java/org/apache/ant/Main.java index 6f5ccaa1d..c28cb0c25 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/Main.java +++ b/proposal/myrmidon/src/java/org/apache/ant/Main.java @@ -100,8 +100,8 @@ public class Main QUIET_OPT, VERBOSE_OPT, LOG_LEVEL_OPT }; - protected ProjectListener m_listener; - protected File m_homeDir; + private ProjectListener m_listener; + private File m_homeDir; /** * Main entry point called to run standard Ant. @@ -139,9 +139,8 @@ public class Main /** * Initialise the options for command line parser. - * This is called by super-class. */ - protected CLOptionDescriptor[] createCLOptions() + private CLOptionDescriptor[] createCLOptions() { //TODO: localise final CLOptionDescriptor[] options = new CLOptionDescriptor[ 11 ]; 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 a80d51f7e..93f5fcb28 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,7 +9,7 @@ package org.apache.ant.modules.basic; import java.util.Iterator; import org.apache.ant.AntException; -import org.apache.ant.configuration.Configurer; +import org.apache.myrmidon.components.Configurer; import org.apache.ant.convert.Converter; import org.apache.ant.tasklet.DataType; import org.apache.ant.tasklet.engine.DataTypeEngine; @@ -44,7 +44,7 @@ public class Property throws ComponentException { m_configurer = (Configurer)componentManager. - lookup( "org.apache.ant.configuration.Configurer" ); + lookup( "org.apache.myrmidon.components.Configurer" ); m_engine = (DataTypeEngine)componentManager. lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); 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 8ea85a8b2..ee6e308da 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java @@ -10,7 +10,7 @@ package org.apache.ant.runtime; import java.io.File; import java.util.Properties; import org.apache.ant.AntException; -import org.apache.ant.configuration.Configurer; +import org.apache.myrmidon.components.Configurer; import org.apache.ant.convert.engine.ConverterEngine; import org.apache.ant.project.ProjectBuilder; import org.apache.ant.project.ProjectEngine; @@ -170,7 +170,7 @@ public class DefaultAntEngine defaults.setProperty( "ant.comp.deployer", "org.apache.ant.tasklet.engine.DefaultTskDeployer" ); defaults.setProperty( "ant.comp.configurer", - "org.apache.ant.configuration.DefaultConfigurer" ); + "org.apache.myrmidon.components.configurer.DefaultConfigurer" ); return defaults; } @@ -193,7 +193,7 @@ public class DefaultAntEngine componentManager.put( "org.apache.ant.project.ProjectBuilder", m_builder ); componentManager.put( "org.apache.ant.tasklet.engine.TskDeployer", m_deployer ); componentManager.put( "org.apache.avalon.framework.camelot.Factory", m_factory ); - componentManager.put( "org.apache.ant.configuration.Configurer", m_configurer ); + componentManager.put( "org.apache.myrmidon.components.Configurer", m_configurer ); return componentManager; } 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 23d4f22b2..2cf2cf8dc 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,25 +9,9 @@ package org.apache.ant.tasklet.engine; import java.util.HashMap; import org.apache.ant.AntException; -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.myrmidon.api.Task; -import org.apache.myrmidon.api.TaskContext; -import org.apache.avalon.framework.logger.AbstractLoggable; -import org.apache.avalon.framework.component.Component; -import org.apache.avalon.framework.component.ComponentManager; -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; @@ -35,7 +19,23 @@ 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.avalon.framework.component.Component; +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.Configurable; +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.context.Context; +import org.apache.avalon.framework.context.Contextualizable; +import org.apache.avalon.framework.logger.AbstractLoggable; +import org.apache.avalon.framework.logger.Loggable; import org.apache.log.Logger; +import org.apache.myrmidon.api.Task; +import org.apache.myrmidon.api.TaskContext; +import org.apache.myrmidon.components.Configurer; +import org.apache.myrmidon.components.configurer.DefaultConfigurer; public class DefaultTaskletEngine extends AbstractLoggable @@ -74,7 +74,7 @@ public class DefaultTaskletEngine { return m_dataTypeEngine; } - + /** * Retrieve relevent services needed to deploy. * @@ -91,7 +91,7 @@ public class DefaultTaskletEngine m_tskDeployer = (TskDeployer)componentManager. lookup( "org.apache.ant.tasklet.engine.TskDeployer" ); m_configurer = (Configurer)componentManager. - lookup( "org.apache.ant.configuration.Configurer" ); + lookup( "org.apache.myrmidon.components.Configurer" ); m_dataTypeEngine = (DataTypeEngine)componentManager. lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); m_converterEngine = (ConverterEngine)componentManager. @@ -128,7 +128,7 @@ public class DefaultTaskletEngine getLogger().debug( "Disposing" ); doDispose( task, taskData ); } - + protected Task createTask( final String name ) throws AntException { @@ -147,7 +147,7 @@ public class DefaultTaskletEngine } } - protected void doConfigure( final Task task, + protected void doConfigure( final Task task, final Configuration taskData, final TaskContext context ) throws AntException @@ -156,11 +156,11 @@ public class DefaultTaskletEngine catch( final Throwable throwable ) { throw new AntException( "Error configuring task " + taskData.getName() + " at " + - taskData.getLocation() + "(Reason: " + + taskData.getLocation() + "(Reason: " + throwable.getMessage() + ")", throwable ); } } - + protected void doCompose( final Task task, final Configuration taskData ) throws AntException { @@ -170,29 +170,29 @@ public class DefaultTaskletEngine catch( final Throwable throwable ) { throw new AntException( "Error composing task " + taskData.getName() + " at " + - taskData.getLocation() + "(Reason: " + - throwable.getMessage() + ")", throwable ); + taskData.getLocation() + "(Reason: " + + throwable.getMessage() + ")", throwable ); } } } - protected void doContextualize( final Task task, + protected void doContextualize( final Task task, final Configuration taskData, final TaskContext context ) throws AntException { - try - { + try + { if( task instanceof Contextualizable ) { - ((Contextualizable)task).contextualize( context ); + ((Contextualizable)task).contextualize( context ); } } catch( final Throwable throwable ) { throw new AntException( "Error contextualizing task " + taskData.getName() + " at " + - taskData.getLocation() + "(Reason: " + - throwable.getMessage() + ")", throwable ); + taskData.getLocation() + "(Reason: " + + throwable.getMessage() + ")", throwable ); } } @@ -205,7 +205,7 @@ public class DefaultTaskletEngine catch( final Throwable throwable ) { throw new AntException( "Error disposing task " + taskData.getName() + " at " + - taskData.getLocation() + "(Reason: " + + taskData.getLocation() + "(Reason: " + throwable.getMessage() + ")", throwable ); } } diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java similarity index 96% rename from proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java index 50f10e4a2..23b46add0 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/Configurer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java @@ -5,11 +5,11 @@ * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ -package org.apache.ant.configuration; +package org.apache.myrmidon.components; 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.configuration.ConfigurationException; import org.apache.avalon.framework.context.Context; /** diff --git a/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java similarity index 83% rename from proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java index 337fba81b..5f9d48f95 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/configuration/DefaultConfigurer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java @@ -5,7 +5,7 @@ * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ -package org.apache.ant.configuration; +package org.apache.myrmidon.components.configurer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -18,13 +18,14 @@ 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.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.avalon.framework.logger.Loggable; import org.apache.log.Logger; +import org.apache.myrmidon.components.Configurer; /** * Class used to configure tasks. @@ -35,18 +36,27 @@ public class DefaultConfigurer extends AbstractLoggable implements Configurer, Composable, Loggable { - protected final static String RESERVED_ATTRIBUTES[] = + ///Compile time constant to turn on extreme debugging + private final static boolean DEBUG = false; + + /* + * TODO: Should reserved names be "configurable" ? + */ + + ///Attribute names that are reserved + private final static String RESERVED_ATTRIBUTES[] = { - "id" + "id", "logger" }; - protected final static String RESERVED_ELEMENTS[] = + ///Element names that are reserved + private final static String RESERVED_ELEMENTS[] = { "content" }; - protected final static boolean DEBUG = false; - protected Converter m_converter; + ///Converter to use for converting between values + private Converter m_converter; public void compose( final ComponentManager componentManager ) throws ComponentException @@ -62,7 +72,7 @@ public class DefaultConfigurer * and if it does will pass the task the configuration - else it will use * ants rules to map configuration to types * - * @param tasklet the tasklet + * @param object the object * @param configuration the configuration * @param context the Context * @exception ConfigurationException if an error occurs @@ -102,7 +112,7 @@ public class DefaultConfigurer if( DEBUG ) { getLogger().debug( "Configuring attribute name=" + name + - " value=" + value ); + " value=" + value ); } configureAttribute( object, name, value, context ); @@ -147,18 +157,18 @@ public class DefaultConfigurer * @param context the Context * @exception ConfigurationException if an error occurs */ - protected void configureContent( final Object object, - final String content, - final Context context ) + private void configureContent( final Object object, + final String content, + final Context context ) throws ConfigurationException { setValue( object, "addContent", content, context ); } - protected void configureAttribute( final Object object, - final String name, - final String value, - final Context context ) + private void configureAttribute( final Object object, + final String name, + final String value, + final Context context ) throws ConfigurationException { for( int i = 0; i < RESERVED_ATTRIBUTES.length; i++ ) @@ -170,10 +180,10 @@ public class DefaultConfigurer setValue( object, methodName, value, context ); } - protected void setValue( final Object object, - final String methodName, - final String value, - final Context context ) + private void setValue( final Object object, + final String methodName, + final String value, + final Context context ) throws ConfigurationException { // OMFG the rest of this is soooooooooooooooooooooooooooooooo @@ -192,10 +202,10 @@ public class DefaultConfigurer setValue( object, value, context, methods ); } - protected void setValue( final Object object, - final String value, - final Context context, - final Method methods[] ) + private void setValue( final Object object, + final String value, + final Context context, + final Method methods[] ) throws ConfigurationException { try @@ -212,10 +222,10 @@ public class DefaultConfigurer } } - protected void setValue( final Object object, - Object value, - final Method methods[], - final Context context ) + private void setValue( final Object object, + Object value, + final Method methods[], + final Context context ) throws ConfigurationException { final Class sourceClass = value.getClass(); @@ -234,12 +244,12 @@ public class DefaultConfigurer source + " to a matching type" ); } - protected boolean setValue( final Object object, - Object value, - final Method method, - final Class sourceClass, - final String source, - final Context context ) + private boolean setValue( final Object object, + Object value, + final Method method, + final Class sourceClass, + final String source, + final Context context ) throws ConfigurationException { Class parameterType = method.getParameterTypes()[ 0 ]; @@ -289,7 +299,7 @@ public class DefaultConfigurer return true; } - protected Class getComplexTypeFor( final Class clazz ) + private Class getComplexTypeFor( final Class clazz ) { if( String.class == clazz ) return String.class; else if( Integer.TYPE.equals( clazz ) ) return Integer.class; @@ -306,7 +316,7 @@ public class DefaultConfigurer } } - protected Method[] getMethodsFor( final Class clazz, final String methodName ) + private Method[] getMethodsFor( final Class clazz, final String methodName ) { final Method methods[] = clazz.getMethods(); final ArrayList matches = new ArrayList(); @@ -331,7 +341,7 @@ public class DefaultConfigurer return (Method[])matches.toArray( new Method[0] ); } - protected Method[] getCreateMethodsFor( final Class clazz, final String methodName ) + private Method[] getCreateMethodsFor( final Class clazz, final String methodName ) { final Method methods[] = clazz.getMethods(); final ArrayList matches = new ArrayList(); @@ -358,12 +368,12 @@ public class DefaultConfigurer return (Method[])matches.toArray( new Method[0] ); } - protected String getMethodNameFor( final String attribute ) + private String getMethodNameFor( final String attribute ) { return "set" + getJavaNameFor( attribute.toLowerCase() ); } - protected String getJavaNameFor( final String name ) + private String getJavaNameFor( final String name ) { final StringBuffer sb = new StringBuffer(); @@ -387,9 +397,9 @@ public class DefaultConfigurer return sb.toString(); } - protected void configureElement( final Object object, - final Configuration configuration, - final Context context ) + private void configureElement( final Object object, + final Configuration configuration, + final Context context ) throws ConfigurationException { final String name = configuration.getName(); @@ -427,10 +437,10 @@ public class DefaultConfigurer } } - protected void createElement( final Object object, - final Method method, - final Configuration configuration, - final Context context ) + private void createElement( final Object object, + final Method method, + final Configuration configuration, + final Context context ) throws ConfigurationException { try @@ -448,10 +458,10 @@ public class DefaultConfigurer } } - protected void addElement( final Object object, - final Method method, - final Configuration configuration, - final Context context ) + private void addElement( final Object object, + final Method method, + final Configuration configuration, + final Context context ) throws ConfigurationException { try diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/framework/ItemSet.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/ItemSet.java new file mode 100644 index 000000000..5d7af3acc --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/ItemSet.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE file. + */ +package org.apache.myrmidon.framework; + +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/myrmidon/framework/Mapper.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Mapper.java new file mode 100644 index 000000000..50fc0b4db --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Mapper.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE file. + */ +package org.apache.myrmidon.framework; + +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/myrmidon/framework/Scanner.java b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Scanner.java new file mode 100644 index 000000000..fabc8e737 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/framework/Scanner.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE file. + */ +package org.apache.myrmidon.framework; + +import org.apache.avalon.framework.component.Component; + +/** + * Interface for Scanners. + * + * @author Peter Donald + */ +public interface Scanner + extends Component +{ +}