Browse Source

Improved Ant1 compatability by removing some facades

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271213 13f79535-47bb-0310-9956-ffa450edef68
master
Conor MacNeill 23 years ago
parent
commit
132115ec2f
13 changed files with 479 additions and 357 deletions
  1. +6
    -3
      proposal/mutant/ant1compat.xml
  2. +1
    -1
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibDefinition.java
  3. +23
    -0
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrary.java
  4. +42
    -0
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java
  5. +40
    -5
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java
  6. +2
    -0
      proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionFrame.java
  7. +5
    -0
      proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Factory.java
  8. +0
    -329
      proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/AntClassLoader.java
  9. +279
    -8
      proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java
  10. +42
    -0
      proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Target.java
  11. +0
    -2
      proposal/mutant/src/java/antlibs/system/antlib.xml
  12. +21
    -0
      proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java
  13. +18
    -9
      proposal/mutant/src/java/common/org/apache/ant/common/service/EventService.java

+ 6
- 3
proposal/mutant/ant1compat.xml View File

@@ -29,9 +29,9 @@
<exclude name="org/apache/tools/ant/taskdefs/optional/sound/*.java"/>
<exclude name="org/apache/tools/ant/taskdefs/optional/Native2Ascii.java"/>
<exclude name="org/apache/tools/ant/taskdefs/optional/Javah.java"/>
<exclude name="org/apache/tools/ant/taskdefs/Typedef.java"/>
<exclude name="org/apache/tools/ant/taskdefs/Taskdef.java"/>
<exclude name="org/apache/tools/ant/taskdefs/Definer.java"/>
<!-- <exclude name="org/apache/tools/ant/taskdefs/Typedef.java"/> -->
<!-- <exclude name="org/apache/tools/ant/taskdefs/Taskdef.java"/> -->
<!-- <exclude name="org/apache/tools/ant/taskdefs/Definer.java"/> -->
<exclude name="org/apache/tools/ant/taskdefs/Parallel.java"/>
<exclude name="org/apache/tools/ant/taskdefs/Sequential.java"/>
<exclude name="org/apache/tools/ant/taskdefs/optional/ejb/**/*.java"/>
@@ -61,6 +61,9 @@
<include name="org/apache/tools/ant/FileScanner.java"/>
<include name="org/apache/tools/ant/TaskAdapter.java"/>
<include name="org/apache/tools/ant/Location.java"/>
<include name="org/apache/tools/ant/AntClassLoader.java"/>
<include name="org/apache/tools/ant/BuildEvent.java"/>
<include name="org/apache/tools/ant/BuildListener.java"/>
<patternset refid="deprecated"/>
<patternset refid="toohard"/>
<patternset refid="converted"/>


+ 1
- 1
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibDefinition.java View File

@@ -60,7 +60,7 @@ package org.apache.ant.antcore.antlib;
* @created 19 January 2002
*/
public class AntLibDefinition {
/** The tpye of element being defined int his definition */
/** The type of element being defined int his definition */
private int definitionType;
/** The default name for the defintion */
private String definitionName;


+ 23
- 0
proposal/mutant/src/java/antcore/org/apache/ant/antcore/antlib/AntLibrary.java View File

@@ -55,6 +55,7 @@ package org.apache.ant.antcore.antlib;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -68,10 +69,13 @@ import org.apache.ant.common.util.ExecutionException;
* @created 14 January 2002
*/
public class AntLibrary {

/** constant indicating a taskdef definition */
public final static int TASKDEF = 1;
/** constant indicating a typedef definition */
public final static int TYPEDEF = 2;
/** A counter for generating unique ids */
private static int implicitLibCount = 0;

/**
* This is the globally unique name of this library. It uses the same
@@ -124,6 +128,25 @@ public class AntLibrary {
this.definitionURL = spec.getLibraryURL();
}

/**
* Create an Ant library to wrap around an existing class
*
* @param componentName the name of the component to be wrapped
* @param componentClass the class to be wrapped
* @param defType the type of definition being defined
*/
public AntLibrary(int defType, String componentName, Class componentClass) {
this.libraryId = "_internal" + (implicitLibCount++);
this.definitions = new HashMap();
AntLibDefinition definition = new AntLibDefinition(defType,
componentName, componentClass.getName());
this.definitions.put(componentName, definition);
this.isolated = false;
this.factoryClassName = null;
this.definitionURL = null;
loader = componentClass.getClassLoader();
}

/**
* Sets the Library which this library extends
*


+ 42
- 0
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ComponentManager.java View File

@@ -198,6 +198,30 @@ public class ComponentManager implements ComponentService {
runBuild(frame.getProject(), properties, targets);
}

/**
* Experimental - define a new task
*
* @param taskName the name by which this task will be referred
* @param taskClass the class of the task
* @exception ExecutionException if the task cannot be defined
*/
public void taskdef(String taskName, Class taskClass)
throws ExecutionException {
defineComponent(AntLibrary.TASKDEF, taskName, taskClass);
}

/**
* Experimental - define a new type
*
* @param typeName the name by which this type will be referred
* @param typeClass the class of the type
* @exception ExecutionException if the type cannot be defined
*/
public void typedef(String typeName, Class typeClass)
throws ExecutionException {
defineComponent(AntLibrary.TYPEDEF, typeName, typeClass);
}

/**
* Set the standard libraries (i.e. those which are independent of the
* build files) to be used in this component manager
@@ -295,6 +319,24 @@ public class ComponentManager implements ComponentService {
addLibraryConverters(library);
}

/**
* Experimental - define a new component
*
* @param componentName the name this component will take
* @param componentClass the component's class
* @param defType the type of component being defined
* @exception ExecutionException if the component cannot be defined
*/
private void defineComponent(int defType, String componentName,
Class componentClass)
throws ExecutionException {
AntLibrary wrapperLibrary
= new AntLibrary(defType, componentName, componentClass);
String libraryId = wrapperLibrary.getLibraryId();
antLibraries.put(libraryId, wrapperLibrary);
importLibrary(libraryId);
}

/**
* Add the converters from the given library to those managed by this
* frame.


proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/BuildListener.java → proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/CoreEventService.java View File

@@ -51,15 +51,50 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant;
package org.apache.ant.antcore.execution;
import org.apache.ant.common.event.BuildListener;
import org.apache.ant.common.service.EventService;
import org.apache.ant.common.util.ExecutionException;

/**
* BuildListener facade
* Core implementation of the event service
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
* @created 31 January 2002
* @created 7 February 2002
*/
public interface BuildListener
extends org.apache.ant.common.event.BuildListener {
public class CoreEventService implements EventService {
/** The ExecutionFrame this service instance is working for */
private ExecutionFrame frame;

/**
* Constructor
*
* @param frame the frame for which this instance is providing service
*/
public CoreEventService(ExecutionFrame frame) {
this.frame = frame;
}

/**
* Add a build listener to the current frame
*
* @param listener the lister which will receive build events
* @exception ExecutionException if the listener cannot be added
*/
public void addBuildListener(BuildListener listener)
throws ExecutionException {
frame.addBuildListener(listener);
}

/**
* Remove a listener from the current frame
*
* @param listener the listener to be removed
* @exception ExecutionException if the listener could not be removed
*/
public void removeBuildListener(BuildListener listener)
throws ExecutionException {
frame.removeBuildListener(listener);
}
}


+ 2
- 0
proposal/mutant/src/java/antcore/org/apache/ant/antcore/execution/ExecutionFrame.java View File

@@ -72,6 +72,7 @@ import org.apache.ant.common.model.Target;
import org.apache.ant.common.service.ComponentService;
import org.apache.ant.common.service.DataService;
import org.apache.ant.common.service.FileService;
import org.apache.ant.common.service.EventService;
import org.apache.ant.common.service.MagicProperties;
import org.apache.ant.common.util.AntException;
import org.apache.ant.common.util.ConfigException;
@@ -764,6 +765,7 @@ public class ExecutionFrame {
services.put(FileService.class, fileService);
services.put(ComponentService.class, componentManager);
services.put(DataService.class, dataService);
services.put(EventService.class, new CoreEventService(this));
}

/**


+ 5
- 0
proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Ant1Factory.java View File

@@ -56,6 +56,7 @@ import org.apache.ant.common.antlib.AntContext;
import org.apache.ant.common.antlib.Converter;
import org.apache.ant.common.antlib.StandardLibFactory;
import org.apache.ant.common.util.ExecutionException;
import org.apache.ant.common.service.EventService;
import org.apache.ant.init.LoaderUtils;

/**
@@ -89,6 +90,10 @@ public class Ant1Factory extends StandardLibFactory {

project = new Project();
project.init(context);
EventService eventService =
(EventService)context.getCoreService(EventService.class);
eventService.addBuildListener(project);
}




+ 0
- 329
proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/AntClassLoader.java View File

@@ -1,329 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import org.apache.ant.common.event.BuildEvent;
import org.apache.ant.init.InitUtils;
import org.apache.tools.ant.types.Path;

/**
* AntClassLoader facade
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
* @created 2 February 2002
*/
public class AntClassLoader extends URLClassLoader
implements BuildListener {
/**
* The context loader saved when setting the thread's current context
* loader.
*/
private ClassLoader savedContextLoader = null;

/**
* Flag which indicates if this loader is currently set as the thread's
* context loader
*/
private boolean isContextLoaderSaved = false;

/**
* indicates this loader should load classes by delegating to the parent
* loader first
*/
private boolean parentFirst = true;

/** label used in debugging messages */
private String debugLabel = null;

/** flag to indicate of debugging is turned on */
private boolean debug = false;

/**
* Create an AntClassLoader
*
* @param project Project instance this loader is associated with
* @param classpath the classpath to use in searching for classes
*/
public AntClassLoader(Project project, Path classpath) {
super(new URL[0]);
addPath(classpath);
}

/**
* Constructor for the AntClassLoader object
*
* @param project Project instance this loader is associated with
* @param classpath the classpath to use in searching for classes
* @param parentFirst true if this loader should delagate to its parent
* loader
*/
public AntClassLoader(Project project, Path classpath,
boolean parentFirst) {
this(project, classpath);
this.parentFirst = parentFirst;
}

/**
* Constructor for the AntClassLoader object
*
* @param parent the parent classloader
* @param project Project instance this loader is associated with
* @param classpath the classpath to use in searching for classes
* @param parentFirst true if this loader should delagate to its parent
* loader
*/
public AntClassLoader(ClassLoader parent, Project project, Path classpath,
boolean parentFirst) {
super(new URL[0], parent);
addPath(classpath);
this.parentFirst = parentFirst;
}

/**
* Initialize the given class
*
* @param theClass the class to be initialised
*/
public static void initializeClass(Class theClass) {
// do nothing in Ant2
}

/**
* Set this classloader to operate in isolated mode
*
* @param isolated true if this loader should isolate it from other
* classes in the VM
*/
public void setIsolated(boolean isolated) {
}

/**
* Set the current thread's context loader to this classloader, storing
* the current loader value for later resetting
*/
public void setThreadContextLoader() {
if (isContextLoaderSaved) {
throw new BuildException("Context loader has not been reset");
}
Thread currentThread = Thread.currentThread();
savedContextLoader = currentThread.getContextClassLoader();
currentThread.setContextClassLoader(this);
isContextLoaderSaved = true;
}

/**
* sets this loader to debug mode
*
* @param debug true if loads should be debugged
*/
public void setDebug(boolean debug) {
this.debug = debug;
dumpURLs();
}

/**
* Sets the debugLabel of the AntClassLoader
*
* @param debugLabel the label to use in debug statements
*/
public void setDebugLabel(String debugLabel) {
this.debugLabel = debugLabel;
}

/** Cleanup this loader */
public void cleanup() {
}

/**
* Force a class to be loaded by this loader
*
* @param classname the name of the class to be loaded
* @return an instance of the requested class
* @exception ClassNotFoundException if the class cannot be found
*/
public Class forceLoadClass(String classname)
throws ClassNotFoundException {
return super.loadClass(classname);
}

/** Reset the thread's class loader to its original value */
public void resetThreadContextLoader() {
if (!isContextLoaderSaved) {
throw new BuildException("Context loader is not currently set");
}
Thread currentThread = Thread.currentThread();
currentThread.setContextClassLoader(savedContextLoader);
isContextLoaderSaved = false;
}

/**
* build started event
*
* @param event build started event
*/
public void buildStarted(BuildEvent event) {
}

/**
* build finished event
*
* @param event build finished event
*/
public void buildFinished(BuildEvent event) {
cleanup();
}

/**
* target started event.
*
* @param event target started event.
*/
public void targetStarted(BuildEvent event) {
}

/**
* target finished event
*
* @param event target finished event
*/
public void targetFinished(BuildEvent event) {
}

/**
* task started event
*
* @param event task started event
*/
public void taskStarted(BuildEvent event) {
}

/**
* task finished event
*
* @param event task finished event
*/
public void taskFinished(BuildEvent event) {
}

/**
* message logged event
*
* @param event message logged event
*/
public void messageLogged(BuildEvent event) {
}

/**
* Add a path to this loader
*
* @param path the path to be added to this loader
*/
private void addPath(Path path) {
try {
String[] pathElements = path.list();
for (int i = 0; i < pathElements.length; ++i) {
File elementFile = new File(pathElements[i]);
URL elementURL = InitUtils.getFileURL(elementFile);
addURL(elementURL);
}
} catch (MalformedURLException e) {
throw new BuildException(e);
}
}

/** Dump the URLs being used for this loader */
private void dumpURLs() {
if (debug && debugLabel != null) {
System.out.println(debugLabel + ": loader URLs");
URL[] urls = getURLs();
for (int i = 0; i < urls.length; ++i) {
System.out.println(debugLabel + ": URL: " + urls[i]);
}
}
}

/*
protected Class loadClass(String name, boolean resolve)
throws ClassNotFoundException {
if (debug && debugLabel != null) {
System.out.println(debugLabel + ": Trying to load class " + name);
}
Class c = findLoadedClass(name);
if (c == null) {
try {
c = findClass(name);
if (debug && debugLabel != null) {
System.out.println(debugLabel + ": Found class "
+ name + " in this loader");
}
} catch (ClassNotFoundException e) {
c = super.loadClass(name, resolve);
if (debug && debugLabel != null) {
System.out.println(debugLabel + ": Found class "
+ name + " in parent loader");
}
return c;
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
*/
}


+ 279
- 8
proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Project.java View File

@@ -60,7 +60,10 @@ import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Stack;
import java.util.Vector;
import org.apache.ant.common.antlib.AntContext;
import org.apache.ant.common.service.ComponentService;
import org.apache.ant.common.service.DataService;
import org.apache.ant.common.service.FileService;
import org.apache.ant.common.util.ExecutionException;
@@ -76,7 +79,7 @@ import org.apache.tools.ant.util.FileUtils;
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
* @created 30 January 2002
*/
public class Project {
public class Project implements org.apache.ant.common.event.BuildListener {

/** String which indicates Java version 1.0 */
public final static String JAVA_1_0 = "1.0";
@@ -133,12 +136,21 @@ public class Project {
/** The core's DataService instance */
private DataService dataService;

/** Ant1 FileUtils instance fro manipulating files */
/** The core's Component Service instance */
private ComponentService componentService;

/** Ant1 FileUtils instance for manipulating files */
private FileUtils fileUtils;
/** The collection of global filters */
private FilterSetCollection globalFilters
= new FilterSetCollection(globalFilterSet);

/** This project's listeners */
private Vector listeners = new Vector();

/** the target's we have seen */
private Stack targetStack = new Stack();

static {

// Determine the Java version by looking at available classes
@@ -272,6 +284,15 @@ public class Project {
}
}

/**
* Gets the buildListeners of the Project
*
* @return A Vector of BuildListener instances
*/
public Vector getBuildListeners() {
return listeners;
}

/**
* Gets the AntContext of the Project
*
@@ -409,6 +430,91 @@ public class Project {
return result;
}

/**
* build started event
*
* @param event build started event
*/
public void buildStarted(org.apache.ant.common.event.BuildEvent event) {
fireBuildStarted();
}

/**
* build finished event
*
* @param event build finished event
*/
public void buildFinished(org.apache.ant.common.event.BuildEvent event) {
fireBuildFinished(event.getCause());
}

/**
* target started event.
*
* @param event target started event.
*/
public void targetStarted(org.apache.ant.common.event.BuildEvent event) {
Target newTarget = new Target(this);
org.apache.ant.common.model.Target realTarget =
(org.apache.ant.common.model.Target)event.getModelElement();
newTarget.setName(realTarget.getName());
targetStack.push(newTarget);
fireTargetStarted(newTarget);
}

/**
* target finished event
*
* @param event target finished event
*/
public void targetFinished(org.apache.ant.common.event.BuildEvent event) {
Target currentTarget = (Target)targetStack.pop();
fireTargetFinished(currentTarget, event.getCause());
currentTarget = null;
}

/**
* task started event
*
* @param event task started event
*/
public void taskStarted(org.apache.ant.common.event.BuildEvent event) {
}

/**
* task finished event
*
* @param event task finished event
*/
public void taskFinished(org.apache.ant.common.event.BuildEvent event) {
}

/**
* message logged event
*
* @param event message logged event
*/
public void messageLogged(org.apache.ant.common.event.BuildEvent event) {
}

/**
* add a build listener to this project
*
* @param listener the listener to be added to the project
*/
public void addBuildListener(BuildListener listener) {
listeners.addElement(listener);
}

/**
* remove a build listener from this project
*
* @param listener the listener to be removed
*/
public void removeBuildListener(BuildListener listener) {
listeners.removeElement(listener);
}

/**
* Add a reference to an object. NOte that in Ant2 objects and
* properties occupy the same namespace.
@@ -577,6 +683,8 @@ public class Project {
this.context = context;
fileService = (FileService)context.getCoreService(FileService.class);
dataService = (DataService)context.getCoreService(DataService.class);
componentService
= (ComponentService)context.getCoreService(ComponentService.class);

String defs = "/org/apache/tools/ant/taskdefs/defaults.properties";

@@ -701,12 +809,35 @@ public class Project {
}

/**
* add a build listener to this project
* define a new task
*
* @param listener the listener to be added to the project
* @param taskName the anme of the task in build files
* @param taskClass the class that implements the task
* @exception BuildException if the task cannot be defined
*/
public void addBuildListener(BuildListener listener) {
// XXX do nothing for now
public void addTaskDefinition(String taskName, Class taskClass)
throws BuildException {
try {
componentService.taskdef(taskName, taskClass);
taskClassDefinitions.put(taskName, taskClass);
} catch (ExecutionException e) {
throw new BuildException(e);
}
}

/**
* Add a new type definition
*
* @param typeName the name of the type
* @param typeClass the class which implements the type
*/
public void addDataTypeDefinition(String typeName, Class typeClass) {
try {
componentService.typedef(typeName, typeClass);
dataClassDefinitions.put(typeName, typeClass);
} catch (ExecutionException e) {
throw new BuildException(e);
}
}

/**
@@ -719,12 +850,12 @@ public class Project {
public Task createTask(String taskType) {
// we piggy back the task onto the current context
Task task = null;
Class c = (Class) taskClassDefinitions.get(taskType);
Class c = (Class)taskClassDefinitions.get(taskType);

if (c == null) {
return null;
}
try {
task = (Task)c.newInstance();
task.setProject(this);
@@ -734,5 +865,145 @@ public class Project {
throw new BuildException(e);
}
}

/** send build started event to the listeners */
protected void fireBuildStarted() {
BuildEvent event = new BuildEvent(this);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.buildStarted(event);
}
}

/**
* send build finished event to the listeners
*
* @param exception exception which indicates failure if not null
*/
protected void fireBuildFinished(Throwable exception) {
BuildEvent event = new BuildEvent(this);
event.setException(exception);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.buildFinished(event);
}
}


/**
* send target started event to the listeners
*
* @param target the target which has started
*/
protected void fireTargetStarted(Target target) {
BuildEvent event = new BuildEvent(target);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.targetStarted(event);
}
}

/**
* send build finished event to the listeners
*
* @param exception exception which indicates failure if not null
* @param target the target which is just finished
*/
protected void fireTargetFinished(Target target, Throwable exception) {
BuildEvent event = new BuildEvent(target);
event.setException(exception);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.targetFinished(event);
}
}

/**
* fire a task started event
*
* @param task the task which has started
*/
protected void fireTaskStarted(Task task) {
// register this as the current task on the current thread.
// threadTasks.put(Thread.currentThread(), task);
BuildEvent event = new BuildEvent(task);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.taskStarted(event);
}
}

/**
* Fire a task finished event
*
* @param task the task which has finsihed
* @param exception the exception associated with the task
*/
protected void fireTaskFinished(Task task, Throwable exception) {
// threadTasks.remove(Thread.currentThread());
//System.out.flush();
// System.err.flush();
BuildEvent event = new BuildEvent(task);
event.setException(exception);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.taskFinished(event);
}
}

/**
* Fire a message event from the project
*
* @param project the project sending the event
* @param message the message
* @param priority the messsage priority
*/
protected void fireMessageLogged(Project project, String message,
int priority) {
BuildEvent event = new BuildEvent(project);
fireMessageLoggedEvent(event, message, priority);
}

/**
* Fire a message event from the project
*
* @param message the message
* @param priority the messsage priority
* @param target the target sending the message
*/
protected void fireMessageLogged(Target target, String message,
int priority) {
BuildEvent event = new BuildEvent(target);
fireMessageLoggedEvent(event, message, priority);
}

/**
* Fire a message event from the project
*
* @param message the message
* @param priority the messsage priority
* @param task the task sending the message
*/
protected void fireMessageLogged(Task task, String message,
int priority) {
BuildEvent event = new BuildEvent(task);
fireMessageLoggedEvent(event, message, priority);
}

/**
* Fire a message event from the project
*
* @param message the message
* @param priority the messsage priority
* @param event the message event
*/
private void fireMessageLoggedEvent(BuildEvent event, String message,
int priority) {
event.setMessage(message, priority);
for (int i = 0; i < listeners.size(); i++) {
BuildListener listener = (BuildListener)listeners.elementAt(i);
listener.messageLogged(event);
}
}
}


+ 42
- 0
proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/Target.java View File

@@ -60,5 +60,47 @@ package org.apache.tools.ant;
* @created 31 January 2002
*/
public class Target {
/** The project to which this target belongs */
private Project project;

/** The name of this target */
private String name;

/**
* Construct a Target that is part of the project
*
* @param project the target's project
*/
public Target(Project project) {
this.project = project;
}

/**
* set the name of the target
*
* @param name the new name value
*/
public void setName(String name) {
this.name = name;
}

/**
* get the project to which this target belongs
*
* @return the target's project.
*/
public Project getProject() {
return project;
}

/**
* Gets the name of the Target
*
* @return the target's name
*/
public String getName() {
return name;
}

}


+ 0
- 2
proposal/mutant/src/java/antlibs/system/antlib.xml View File

@@ -3,8 +3,6 @@

<taskdef name="import" classname="org.apache.ant.antlib.system.Import"/>
<taskdef name="libpath" classname="org.apache.ant.antlib.system.LibPath"/>
<taskdef name="taskdef" classname="org.apache.ant.antlib.system.TaskDef"/>
<taskdef name="typedef" classname="org.apache.ant.antlib.system.TypeDef"/>
<taskdef name="loadlib" classname="org.apache.ant.antlib.system.LoadLib"/>

<taskdef name="ant" classname="org.apache.ant.antlib.system.Ant"/>


+ 21
- 0
proposal/mutant/src/java/common/org/apache/ant/common/service/ComponentService.java View File

@@ -116,5 +116,26 @@ public interface ComponentService {
*/
void callTarget(Map properties, List targets)
throws ExecutionException;

/**
* Experimental - define a new type
*
* @param typeName the name by which this type will be referred
* @param typeClass the class of the type
* @exception ExecutionException if the type cannot be defined
*/
void typedef(String typeName, Class typeClass)
throws ExecutionException;
/**
* Experimental - define a new task
*
* @param taskName the name by which this task will be referred
* @param taskClass the class of the task
* @exception ExecutionException if the task cannot be defined
*/
void taskdef(String taskName, Class taskClass)
throws ExecutionException;

}


proposal/mutant/src/java/antlibs/ant1compat/org/apache/tools/ant/BuildEvent.java → proposal/mutant/src/java/common/org/apache/ant/common/service/EventService.java View File

@@ -51,22 +51,31 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant;
package org.apache.ant.common.service;
import org.apache.ant.common.event.BuildListener;
import org.apache.ant.common.util.ExecutionException;

/**
* BuildEvent facade
* Core service to manage receiving of events by components within Ant.
*
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a>
* @created 31 January 2002
* @created 7 February 2002
*/
public class BuildEvent extends org.apache.ant.common.event.BuildEvent {
public interface EventService {
/**
* Construct a BuildEvent for a task level event
* Add a build listener to the current frame
*
* @param task the task that emitted the event.
* @param listener the lister which will receive build events
* @exception ExecutionException if the listener cannot be added
*/
public BuildEvent(Task task) {
super(task.getContext().getModelElement(), MESSAGE);
}
void addBuildListener(BuildListener listener) throws ExecutionException;

/**
* Remove a listener from the current frame
*
* @param listener the listener to be removed
* @exception ExecutionException if the listener could not be removed
*/
void removeBuildListener(BuildListener listener) throws ExecutionException;
}


Loading…
Cancel
Save