From ce225a0e46c3cb76bd99b45b24c5da3b7f126ed0 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Mon, 28 May 2001 09:06:51 +0000 Subject: [PATCH] Removed instance data from Project object. This allows reuse of Project objects ... is this required ??? git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269050 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/java/org/apache/ant/Main.java | 20 ++++-- .../org/apache/ant/modules/basic/AntCall.java | 3 +- .../apache/ant/modules/basic/Property.java | 36 +++++------ .../apache/ant/project/DefaultProject.java | 64 ++++++++++++------- .../ant/project/DefaultProjectBuilder.java | 13 ++-- .../ant/project/DefaultProjectEngine.java | 4 +- .../java/org/apache/ant/project/Project.java | 15 ++--- .../org/apache/ant/project/ProjectEngine.java | 13 +--- .../apache/ant/runtime/DefaultAntEngine.java | 4 +- .../tasklet/engine/DefaultTaskletEngine.java | 5 +- .../{ => configurer}/Configurer.java | 2 +- .../configurer/DefaultConfigurer.java | 1 - 12 files changed, 94 insertions(+), 86 deletions(-) rename proposal/myrmidon/src/java/org/apache/myrmidon/components/{ => configurer}/Configurer.java (95%) diff --git a/proposal/myrmidon/src/java/org/apache/ant/Main.java b/proposal/myrmidon/src/java/org/apache/ant/Main.java index c28cb0c25..9afc3e095 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/Main.java +++ b/proposal/myrmidon/src/java/org/apache/ant/Main.java @@ -32,6 +32,7 @@ import org.apache.ant.runtime.AntEngine; import org.apache.ant.runtime.DefaultAntEngine; import org.apache.myrmidon.api.JavaVersion; import org.apache.myrmidon.api.TaskContext; +import org.apache.myrmidon.api.DefaultTaskContext; import org.apache.ant.tasklet.engine.TaskletEngine; import org.apache.avalon.excalibur.cli.CLArgsParser; import org.apache.avalon.excalibur.cli.CLOption; @@ -317,7 +318,6 @@ public class Main //create the project final Project project = builder.build( buildFile ); - setupProjectContext( project, defines ); final ProjectEngine engine = antEngine.getProjectEngine(); engine.addProjectListener( listener ); @@ -328,7 +328,14 @@ public class Main while( true ) { //actually do the build ... - doBuild( engine, project, targets ); + final TaskContext context = new DefaultTaskContext(); + setupContext( context, defines ); + + context.setProperty( TaskContext.BASE_DIRECTORY, project.getBaseDirectory() ); + context.setProperty( Project.PROJECT_FILE, buildFile ); + //context.setProperty( Project.PROJECT, projectName ); + + doBuild( engine, project, context, targets ); if( !incremental ) break; @@ -357,6 +364,7 @@ public class Main */ protected void doBuild( final ProjectEngine engine, final Project project, + final TaskContext context, final ArrayList targets ) { try @@ -366,13 +374,13 @@ public class Main //if we didn't specify a target on CLI then choose default if( 0 == targetCount ) { - engine.execute( project, project.getDefaultTargetName() ); + engine.executeTarget( project, project.getDefaultTargetName(), context ); } else { for( int i = 0; i < targetCount; i++ ) { - engine.execute( project, (String)targets.get( i ) ); + engine.executeTarget( project, (String)targets.get( i ), context ); } } } @@ -483,7 +491,7 @@ public class Main * @param defines the defines * @exception AntException if an error occurs */ - protected void setupProjectContext( final Project project, final HashMap defines ) + protected void setupContext( final TaskContext context, final HashMap defines ) throws AntException { //put these values into defines so that they overide @@ -494,7 +502,7 @@ public class Main //defines.put( AntContextResources.TASKLIB_DIR, m_taskLibDir ); //defines.put( TaskletContext.JAVA_VERSION, getJavaVersion() ); - final TaskContext context = project.getContext(); + //final TaskContext context = project.getContext(); addToContext( context, defines ); //Add system properties second so that they overide user-defined properties 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 c61f9063c..8e86cc6d7 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 @@ -82,6 +82,7 @@ public class AntCall } getLogger().info( "Calling target " + m_target ); - m_projectEngine.execute( m_project, m_target, m_childContext ); + //This calls startProject() which is probably not wanted??? + m_projectEngine.executeTarget( m_project, m_target, m_childContext ); } } 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 93f5fcb28..bef0bb3ff 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,27 +9,27 @@ package org.apache.ant.modules.basic; import java.util.Iterator; import org.apache.ant.AntException; -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; -import org.apache.myrmidon.api.AbstractTask; -import org.apache.myrmidon.api.TaskContext; import org.apache.ant.tasklet.engine.TaskletEngine; -import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.ComponentException; +import org.apache.avalon.framework.component.ComponentManager; 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.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.context.Resolvable; +import org.apache.myrmidon.api.AbstractTask; +import org.apache.myrmidon.api.TaskContext; +import org.apache.myrmidon.components.configurer.Configurer; /** * This is the property "task" to declare a binding of a datatype to a name. - * + * * @author Peter Donald */ -public class Property +public class Property extends AbstractTask implements Configurable, Composable { @@ -39,12 +39,12 @@ public class Property protected DataTypeEngine m_engine; protected Converter m_converter; protected Configurer m_configurer; - + public void compose( final ComponentManager componentManager ) throws ComponentException { m_configurer = (Configurer)componentManager. - lookup( "org.apache.myrmidon.components.Configurer" ); + lookup( "org.apache.myrmidon.components.configurer.Configurer" ); m_engine = (DataTypeEngine)componentManager. lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); @@ -71,9 +71,9 @@ public class Property if( name.equals( "name" ) ) { - try + try { - final String convertedValue = + final String convertedValue = (String)m_converter.convert( String.class, object, getContext() ); setName( convertedValue ); } @@ -86,13 +86,13 @@ public class Property { setValue( object ); } - else if( name.equals( "local-scope" ) ) + else if( name.equals( "local-scope" ) ) { - try + try { - final Boolean localScope = + final Boolean localScope = (Boolean)m_converter.convert( Boolean.class, object, getContext() ); - setLocalScope( Boolean.TRUE == localScope ); + setLocalScope( Boolean.TRUE == localScope ); } catch( final Exception e ) { @@ -128,7 +128,7 @@ public class Property { m_name = name; } - + public void setValue( final Object value ) throws AntException { @@ -139,7 +139,7 @@ public class Property m_value = value; } - + public void setLocalScope( final boolean localScope ) { m_localScope = localScope; diff --git a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java index 8f59780ee..cc02bd0f0 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java @@ -24,19 +24,35 @@ import org.apache.myrmidon.api.TaskContext; public class DefaultProject implements Project { - protected final TaskContext m_baseContext = new DefaultTaskContext(); - protected final HashMap m_targets = new HashMap(); - protected Target m_implicitTarget; - protected String m_defaultTarget; + ///The targets contained by this project + private final HashMap m_targets = new HashMap(); + + ///The implicit target (not present in m_targets) + private Target m_implicitTarget; + + ///The name of the default target + private String m_defaultTarget; + + ///The base directory of project + private File m_baseDirectory; + + /** + * Retrieve base directory of project. + * + * @return the projects base directory + */ + public final File getBaseDirectory() + { + return m_baseDirectory; + } /** * Retrieve implicit target. - * The implicit target is top level tasks. - * Currently restricted to property tasks. + * The implicit target contains all the top level tasks. * * @return the Target */ - public Target getImplicitTarget() + public final Target getImplicitTarget() { return m_implicitTarget; } @@ -46,7 +62,7 @@ public class DefaultProject * * @param target the implicit target */ - public void setImplicitTarget( final Target target ) + public final void setImplicitTarget( final Target target ) { m_implicitTarget = target; } @@ -57,7 +73,7 @@ public class DefaultProject * @param name the name of target * @return the Target or null if no target exists with name */ - public Target getTarget( final String targetName ) + public final Target getTarget( final String targetName ) { return (Target)m_targets.get( targetName ); } @@ -67,7 +83,7 @@ public class DefaultProject * * @return the default target name */ - public String getDefaultTargetName() + public final String getDefaultTargetName() { return m_defaultTarget; } @@ -75,31 +91,31 @@ public class DefaultProject /** * Retrieve names of all targets in project. * - * @return the iterator of project names + * @return an array target names */ - public Iterator getTargetNames() + public final String[] getTargetNames() { - return m_targets.keySet().iterator(); + return (String[])m_targets.keySet().toArray( new String[ 0 ] ); } - + /** - * Get project (top-level) context. + * Set DefaultTargetName. * - * @return the context - */ - public TaskContext getContext() + * @param defaultTarget the default target name + */ + public final void setDefaultTargetName( final String defaultTarget ) { - return m_baseContext; + m_defaultTarget = defaultTarget; } /** - * Set DefaultTargetName. + * Retrieve base directory of project. * - * @param defaultTarget the default target name + * @return the projects base directory */ - public void setDefaultTargetName( final String defaultTarget ) + public final void setBaseDirectory( final File baseDirectory ) { - m_defaultTarget = defaultTarget; + m_baseDirectory = baseDirectory; } /** @@ -109,7 +125,7 @@ public class DefaultProject * @param target the Target * @exception AntException if an error occurs */ - public void addTarget( final String name, final Target target ) + public final void addTarget( final String name, final Target target ) throws AntException { if( null != m_targets.get( name ) ) 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 e97a35340..87077ff69 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java @@ -105,23 +105,20 @@ public class DefaultProjectBuilder //get project-level attributes final String baseDirectoryName = configuration.getAttribute( "basedir" ); final String defaultTarget = configuration.getAttribute( "default" ); - final String projectName = configuration.getAttribute( "name" ); + + //Ignore Project name in the future ok?? + //final String projectName = configuration.getAttribute( "name" ); //determine base directory for project final File baseDirectory = (new File( file.getParentFile(), baseDirectoryName )).getAbsoluteFile(); - getLogger().debug( "Project " + projectName + " base directory: " + baseDirectory ); + getLogger().debug( "Project " + file + " base directory: " + baseDirectory ); //create project and ... final DefaultProject project = new DefaultProject(); project.setDefaultTargetName( defaultTarget ); - - //setup basic context of project - final TaskContext context = project.getContext(); - context.setProperty( TaskContext.BASE_DIRECTORY, baseDirectory ); - context.setProperty( Project.PROJECT_FILE, file ); - context.setProperty( Project.PROJECT, projectName ); + project.setBaseDirectory( baseDirectory ); //build using all top-level attributes buildTopLevelProject( project, configuration ); 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 43a027bde..c2755fb8b 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java @@ -81,13 +81,13 @@ public class DefaultProjectEngine * @param target the name of the target * @exception AntException if an error occurs */ - public void execute( final Project project, final String target ) + public void executeTarget( final Project project, final String target, final TaskContext context ) throws AntException { //HACK: should do this a better way !!!!!! m_componentManager.put( "org.apache.ant.project.Project", project ); - final TaskContext context = project.getContext(); + //final TaskContext context = project.getContext(); final String projectName = (String)context.getProperty( Project.PROJECT ); 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 ff05548dd..d08b16572 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/Project.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/Project.java @@ -7,13 +7,12 @@ */ package org.apache.ant.project; -import java.util.Iterator; -import org.apache.ant.AntException; -import org.apache.myrmidon.api.TaskContext; +import java.io.File; import org.apache.avalon.framework.component.Component; /** - * Interface through which to interact with projects. + * Abstraction used to interact with projects. + * Implementations may choose to structure it anyway they choose. * * @author Peter Donald */ @@ -58,12 +57,12 @@ public interface Project * * @return the iterator of project names */ - Iterator getTargetNames(); + String[] getTargetNames(); /** - * Get project (top-level) context. + * Retrieve base directory of project. * - * @return the context + * @return the projects base directory */ - TaskContext getContext(); + File getBaseDirectory(); } 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 a28732af8..b4a535773 100644 --- a/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java +++ b/proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java @@ -36,17 +36,6 @@ public interface ProjectEngine */ void removeProjectListener( ProjectListener listener ); - /** - * Execute a target in a particular project. - * Execute in the project context. - * - * @param project the Project - * @param target the name of the target - * @exception AntException if an error occurs - */ - void execute( Project project, String target ) - throws AntException; - /** * Execute a target in a particular project, in a particular context. * @@ -55,6 +44,6 @@ public interface ProjectEngine * @param context the context * @exception AntException if an error occurs */ - void execute( Project project, String target, TaskContext context ) + void executeTarget( Project project, String target, TaskContext context ) throws AntException; } 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 ee6e308da..65beb9bb4 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.myrmidon.components.Configurer; +import org.apache.myrmidon.components.configurer.Configurer; import org.apache.ant.convert.engine.ConverterEngine; import org.apache.ant.project.ProjectBuilder; import org.apache.ant.project.ProjectEngine; @@ -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.myrmidon.components.Configurer", m_configurer ); + componentManager.put( "org.apache.myrmidon.components.configurer.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 2cf2cf8dc..822184100 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 @@ -34,8 +34,7 @@ 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; +import org.apache.myrmidon.components.configurer.Configurer; public class DefaultTaskletEngine extends AbstractLoggable @@ -91,7 +90,7 @@ public class DefaultTaskletEngine m_tskDeployer = (TskDeployer)componentManager. lookup( "org.apache.ant.tasklet.engine.TskDeployer" ); m_configurer = (Configurer)componentManager. - lookup( "org.apache.myrmidon.components.Configurer" ); + lookup( "org.apache.myrmidon.components.configurer.Configurer" ); m_dataTypeEngine = (DataTypeEngine)componentManager. lookup( "org.apache.ant.tasklet.engine.DataTypeEngine" ); m_converterEngine = (ConverterEngine)componentManager. diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/Configurer.java similarity index 95% rename from proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java rename to proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/Configurer.java index 23b46add0..258153fd5 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/Configurer.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.myrmidon.components; +package org.apache.myrmidon.components.configurer; import org.apache.avalon.framework.component.Component; import org.apache.avalon.framework.configuration.Configuration; diff --git a/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java b/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java index 5f9d48f95..f7a815747 100644 --- a/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java +++ b/proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java @@ -25,7 +25,6 @@ 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.