Browse Source

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
master
Peter Donald 24 years ago
parent
commit
ce225a0e46
12 changed files with 94 additions and 86 deletions
  1. +14
    -6
      proposal/myrmidon/src/java/org/apache/ant/Main.java
  2. +2
    -1
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/AntCall.java
  3. +18
    -18
      proposal/myrmidon/src/java/org/apache/ant/modules/basic/Property.java
  4. +40
    -24
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java
  5. +5
    -8
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java
  6. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectEngine.java
  7. +7
    -8
      proposal/myrmidon/src/java/org/apache/ant/project/Project.java
  8. +1
    -12
      proposal/myrmidon/src/java/org/apache/ant/project/ProjectEngine.java
  9. +2
    -2
      proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java
  10. +2
    -3
      proposal/myrmidon/src/java/org/apache/ant/tasklet/engine/DefaultTaskletEngine.java
  11. +1
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/Configurer.java
  12. +0
    -1
      proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java

+ 14
- 6
proposal/myrmidon/src/java/org/apache/ant/Main.java View File

@@ -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


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

@@ -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 );
}
}

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

@@ -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 <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
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;


+ 40
- 24
proposal/myrmidon/src/java/org/apache/ant/project/DefaultProject.java View File

@@ -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 ) )


+ 5
- 8
proposal/myrmidon/src/java/org/apache/ant/project/DefaultProjectBuilder.java View File

@@ -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 );


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

@@ -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 );



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

@@ -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 <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
@@ -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();
}

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

@@ -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;
}

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

@@ -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;
}


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

@@ -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.


proposal/myrmidon/src/java/org/apache/myrmidon/components/Configurer.java → proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/Configurer.java View File

@@ -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;

+ 0
- 1
proposal/myrmidon/src/java/org/apache/myrmidon/components/configurer/DefaultConfigurer.java View File

@@ -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.


Loading…
Cancel
Save