diff --git a/proposal/anteater/README b/proposal/anteater/README
deleted file mode 100644
index 4fc1737ea..000000000
--- a/proposal/anteater/README
+++ /dev/null
@@ -1,14 +0,0 @@
-README for Ant(Eater)
----------------------------------------------------------------------------------
-
-Execution:
-
- ant [args] target
-
-Args:
-
- -help
- -quiet
- -verbose
- -taskpath [path]
- -antfile [file]
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java b/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java
deleted file mode 100644
index cead59f17..000000000
--- a/proposal/anteater/source/coretasks/buildtarget/org/apache/ant/buildtarget/BuildTargetTask.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.apache.ant.buildtarget;
-
-import org.apache.ant.*;
-
-/**
- * A simple task that builds a target if a property is set to true
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class BuildTargetTask extends AbstractTask {
-
- // -----------------------------------------------------------------
- // PRIVATE DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- * Data to echo
- */
- private String ifProperty;
-
- /**
- * Target to execute
- */
- private String targetName;
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Executes this task.
- */
- public boolean execute() throws AntException {
- // XXX should really check internal state before proceeding! Target
- // has to be set...
-
- // XXX oh, and we should really check to see if the target exists
- // and fail out if it doesn't. :)
-
- if (ifProperty != null) {
- String ifPropertyValue = project.getProperty(ifProperty);
- if (ifPropertyValue.equals("true")) {
- project.startBuild(targetName);
- return true;
- } else {
- return true;
- }
- } else {
- project.startBuild(targetName);
- return true;
- }
- }
-
- /**
- * Sets the property that will be examined
- */
- public void setIf(String ifProperty) {
- this.ifProperty = ifProperty;
- }
-
- /**
- * Sets the target to be executed
- */
- public void setTarget(String targetName) {
- this.targetName = targetName;
- }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/buildtarget/taskdef.properties b/proposal/anteater/source/coretasks/buildtarget/taskdef.properties
deleted file mode 100644
index ecc450666..000000000
--- a/proposal/anteater/source/coretasks/buildtarget/taskdef.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# taskdef.properties for Echo task
-
-tasks=buildtarget
-task.buildtarget.class=org.apache.ant.buildtarget.BuildTargetTask
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/echo/org/apache/ant/echo/EchoTask.java b/proposal/anteater/source/coretasks/echo/org/apache/ant/echo/EchoTask.java
deleted file mode 100644
index f4ce40d87..000000000
--- a/proposal/anteater/source/coretasks/echo/org/apache/ant/echo/EchoTask.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.ant.echo;
-
-import org.apache.ant.*;
-
-/**
- * A very simple task that takes a bit of text and echos it back out
- * when it is executed. This is useful for troubleshooting properties
- * in buildfiles, letting the user know that something is going to happen
- * and as a very simple example that can be copied to create other tasks.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class EchoTask extends AbstractTask {
-
- // -----------------------------------------------------------------
- // PRIVATE DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- * Data to echo
- */
- private String text;
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Executes this task.
- */
- public boolean execute() throws AntException {
- project.getFrontEnd().writeMessage(text);
- return true;
- }
-
- /**
- * Sets the text that this task will echo.
- */
- public void setText(String text) {
- this.text = text;
- }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/coretasks/echo/taskdef.properties b/proposal/anteater/source/coretasks/echo/taskdef.properties
deleted file mode 100644
index 8949070db..000000000
--- a/proposal/anteater/source/coretasks/echo/taskdef.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# taskdef.properties for Echo task
-
-tasks=echo
-task.echo.class=org.apache.ant.echo.EchoTask
\ No newline at end of file
diff --git a/proposal/anteater/source/main.ant b/proposal/anteater/source/main.ant
deleted file mode 100644
index d56ee636d..000000000
--- a/proposal/anteater/source/main.ant
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
- Primary buildfile for building Ant itself
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/AbstractTask.java b/proposal/anteater/source/main/org/apache/ant/AbstractTask.java
deleted file mode 100644
index a4cfc2e51..000000000
--- a/proposal/anteater/source/main/org/apache/ant/AbstractTask.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.ant;
-
-import java.io.*;
-import java.util.*;
-import java.lang.reflect.*;
-import java.beans.*;
-
-/**
- * Superclass of all Tasks. All tasks extend from this.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public abstract class AbstractTask {
-
- // -----------------------------------------------------------------
- // PROTECTED DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- protected Project project;
-
- // -----------------------------------------------------------------
- // ABSTRACT PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- public abstract boolean execute() throws AntException;
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Used by the system to set the attributes which then get reflected
- * into the particular implementation class
- */
- public void setAttributes(Hashtable attributes) {
- Class clazz = this.getClass();
- BeanInfo bi;
- try {
- bi = Introspector.getBeanInfo(clazz);
- } catch (IntrospectionException ie) {
- System.out.println("Can't reflect on: " + clazz);
- // XXX exception out
- return;
- }
- PropertyDescriptor[] pda = bi.getPropertyDescriptors();
- for (int i = 0; i < pda.length; i++) {
- PropertyDescriptor pd = pda[i];
- String property = pd.getName();
- Object o = attributes.get(property);
- if (o != null) {
- String value = (String)o;
- Method setMethod = pd.getWriteMethod();
- if (setMethod != null) {
- Class[] ma = setMethod.getParameterTypes();
- if (ma.length == 1) {
- Class c = ma[0];
- if (c.getName().equals("java.lang.String")) {
- try {
- setMethod.invoke(this, new String[] {value});
- } catch (Exception e) {
- // XXX bad bad bad -- narrow to exact exceptions
- System.out.println("OUCH: " + e);
- // XXX exception out.
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Used by system to set the project.
- */
- public void setProject(Project project) {
- this.project = project;
- }
-
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/AntException.java b/proposal/anteater/source/main/org/apache/ant/AntException.java
deleted file mode 100644
index 16d7a6995..000000000
--- a/proposal/anteater/source/main/org/apache/ant/AntException.java
+++ /dev/null
@@ -1,138 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-/**
- * Signals a problem while setting up or executing a build.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class AntException extends Exception {
-
- // -----------------------------------------------------------------
- // PRIVATE MEMBERS
- // -----------------------------------------------------------------
-
- /**
- * The cause of this exception.
- */
- private Throwable cause;
-
- /**
- * Project within which this exception occured, if applicable.
- */
- private Project project;
-
- /**
- * Target within which this exception occurred, if applicable.
- */
- private Target target;
-
- /**
- * Task within which this exception occurred, if applicable.
- */
- private Task task;
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
- /**
- * Constructs a new AntException with no message.
- */
- public AntException() {
- super();
- }
-
- /**
- * Constructs a new AntException with the given message.
- */
- public AntException(String msg) {
- super(msg);
- }
-
- /**
- * Constructs a new AntException with the given message and cause.
- */
- public AntException(String msg, Throwable cause) {
- super(msg);
- this.cause = cause;
- }
-
- /**
- * Constructs a new AntException with the given cause and a
- * detailed message of (cause==null ? null : cause.toString())
- */
- public AntException(Throwable cause) {
- super(cause==null ? null : cause.toString());
- this.cause = cause;
- }
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Returns the cause of this exception.
- */
- public Throwable getCause() {
- return cause;
- }
-
- /**
- * Returns the Project within the scope of which this exception occurred,
- * if applicable. Otherwise null.
- */
- public Project getProject() {
- return project;
- }
-
- /**
- * Returns the Target within the scope of which this exception occurred,
- * if applicable. Otherwise null.
- */
- public Target getTarget() {
- return target;
- }
-
- /**
- * Returns the Task wihtin the scope of which this exception occurred,
- * if applicable. Otherwise null.
- */
- public Task getTask() {
- return task;
- }
-
- // -----------------------------------------------------------------
- // PACKAGE METHODS
- // -----------------------------------------------------------------
-
- /**
- * Sets the project within the scope of which this exception occurred.
- * This method is called by the internal error handling mechanism of
- * Ant before it is propogated out.
- */
- void setProject(Project project) {
- this.project = project;
- }
-
- /**
- * Sets the target within the scope of which this exception occurred.
- * This method is called by the internal error handling mechansim of
- * Ant before it is propogated out.
- */
- void setTarget(Target target) {
- this.target = target;
- }
-
- /**
- * Sets the task within the scope of which this exception occurred.
- * This method is called by the internal error handling mechanism of
- * Ant before it is propogated out.
- */
- void setTask(Task task) {
- this.task = task;
- }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/AntFrontEnd.java b/proposal/anteater/source/main/org/apache/ant/AntFrontEnd.java
deleted file mode 100644
index 9e3081418..000000000
--- a/proposal/anteater/source/main/org/apache/ant/AntFrontEnd.java
+++ /dev/null
@@ -1,103 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-/**
- * Abstract class that lets Ant talk to a front end such as a CLI front end,
- * GUI front end, Servlet front end, or some other front end.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public abstract class AntFrontEnd {
-
- // -----------------------------------------------------------------
- // CONSTANTS
- // -----------------------------------------------------------------
-
- /**
- * Indicates that an associated message has a low importance.
- */
- public static final int MSG_LEVEL_LOW = 1;
-
- /**
- * Indicates that an associated message has a medium importance.
- */
- public static final int MSG_LEVEL_MED = 2;
-
- /**
- * Indicates that an associated message has a high importance.
- */
- public static final int MSG_LEVEL_HIGH = 3;
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Send notification to the FrontEnd that execution has moved into
- * the scope of a particular project. The default implementation
- * does nothing.
- */
- public void notifyProjectStart(Project project) {
-
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved out
- * of the scope of a particular Project. The default implementation
- * does nothing.
- */
- public void notifyProjectEnd(Project project) {
-
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved into
- * the scope of a particular target. The default implementation does
- * nothing.
- */
- public void notifyTargetStart(Target target) {
-
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved out of
- * the scope of a particular target. The default implementation does
- * nothing.
- */
- public void notifyTargetEnd(Target target) {
-
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved into the
- * scope of a particular task. The default implementation does nothing.
- */
- public void notifyTaskStart(Task task) {
-
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved out of
- * the scope of a particular task. The default implementation does
- * nothing.
- */
- public void notifyTaskEnd(Task task) {
-
- }
-
- /**
- * Writes a message to the front end with a medium importance.
- */
- public void writeMessage(String message) {
- writeMessage(message, MSG_LEVEL_MED);
- }
-
- /**
- * Writes a message to the front end.
- */
- public abstract void writeMessage(String message, int level);
-
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/Project.java b/proposal/anteater/source/main/org/apache/ant/Project.java
deleted file mode 100644
index 63e2d4d38..000000000
--- a/proposal/anteater/source/main/org/apache/ant/Project.java
+++ /dev/null
@@ -1,286 +0,0 @@
-// ---------------------------------------------------------------------
-// (c)2000 Apache Software Foundation
-//
-// ---------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.io.*;
-import java.util.*;
-
-/**
- * In memory container for an Ant project.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class Project {
-
- // -----------------------------------------------------------------
- // PRIVATE DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- //private Ant ant;
-
- /**
- * Base directory of this project. Usually this value is the directory
- * where the project file was found, but can be different.
- */
- private File baseDir;
-
- /**
- *
- */
- private String defaultTargetName;
-
- /**
- * Short description of the project.
- */
- private String description;
-
- /**
- * Front end that this project communicates to.
- */
- private AntFrontEnd frontEnd;
-
- /**
- * Properties of this project.
- */
- private Properties properties = new Properties();
-
- /**
- * Parent project to this project, if one exists.
- */
- private Project parentProject = null;
-
- /**
- *
- */
- private String name;
-
- /**
- * Hashtable containing all of the targets that are part of this
- * project. Targets are stored in this hashtable using the name
- * of the target as the key and the Target object for the target
- * as the value.
- */
- private Hashtable targets = new Hashtable();
-
- /**
- * TaskManager for this project.
- */
- private TaskManager taskManager;
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
- /**
- * Creates a new Project object with the given FrontEnd and TaskManager
- */
- public Project(AntFrontEnd frontEnd, TaskManager taskManager) {
- this.frontEnd = frontEnd;
- this.taskManager = taskManager;
- }
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Adds a target to this project.
- */
- public void addTarget(Target target) {
- // XXX check out for name, if null, reject!
- targets.put(target.getName(), target);
- }
-
- /**
- * Returns the base directory of this project.
- */
- public File getBaseDir() {
- return baseDir;
- }
-
- /**
- * Returns the default target for this project, if there is one. Otherwise
- * it returns null.
- */
- public String getDefaultTargetName() {
- return defaultTargetName;
- }
-
- /**
- * Returns a short description of this project, if any. If not, returns
- * null.
- */
- public String getDescription() {
- return description;
- }
-
- /**
- * Gets the front end that is running this project.
- */
- public AntFrontEnd getFrontEnd() {
- return frontEnd;
- }
-
- /**
- * Returns the parent Project object to this Project if a parent
- * project exists. If there is not a parent Project object, null
- * is returned.
- */
- public Project getParent() {
- return parentProject;
- }
-
- /**
- * Returns the target identified with the given name. If no target
- * is known by the given name, then null is returned.
- */
- public Target getTarget(String name) {
- return (Target)targets.get(name);
- }
-
- /**
- * Gets an exumeration of all the targets that are part of this project.
- */
- public Enumeration getTargets() {
- return targets.elements();
- }
-
- /**
- * Gets the name of this project.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Returns the value of a property. Returns null if the property does
- * not exist.
- */
- public String getProperty(String propertyName) {
- return properties.getProperty(propertyName);
- }
-
- /**
- *
- */
- //public void setAnt(Ant ant) {
- // this.ant = ant;
- //}
-
- /**
- * Sets the base dir for this project.
- */
- public void setBaseDir(File dir) {
- // XXX should check this to make sure it's a dir!
- baseDir = dir;
- }
-
- /**
- * Sets the default target for this project.
- */
- public void setDefaultTargetName(String targetName) {
- defaultTargetName = targetName;
- }
-
- /**
- * Sets the description for this project.
- */
- public void setDescription(String description) {
- this.description = description;
- }
-
- /**
- * Sets the front end for this project.
- */
- public void setFrontEnd(AntFrontEnd frontEnd) {
- this.frontEnd = frontEnd;
- }
-
- /**
- * Sets the name of this project.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Sets a property on this project. If the property is already
- * set, this method will override it.
- */
- public void setProperty(String propertyName, String propertyValue) {
- properties.put(propertyName, propertyValue);
- }
-
- /**
- * Starts a build of this project using the default target if one
- * is set.
- */
- public void startBuild() throws AntException {
- // XXX need to do something if the default target isn't set..
- // maybe look for target name 'default', then bail?
- startBuild(defaultTargetName);
- }
-
- /**
- * Starts a build of this project with the entry point at the given
- * target.
- */
- public void startBuild(String targetName) throws AntException {
-
- // notify AntFrontEnd that we are starting a build on a project
-
- frontEnd.notifyProjectStart(this);
-
- Target target = getTarget(targetName);
-
- frontEnd.notifyTargetStart(target);
-
- // XXX don't forget to execute dependancies first!
-
- Enumeration enum = target.getTasks().elements();
- while (enum.hasMoreElements()) {
- Task task = (Task)enum.nextElement();
- frontEnd.notifyTaskStart(task);
- try {
- AbstractTask aTask = taskManager.getTaskInstance(task.getType());
- aTask.setProject(this);
- aTask.setAttributes(task.getAttributes());
- boolean b = aTask.execute();
- if (!b) {
- String msg = "Task " + task.getType() + " failed";
- AntException ae = new AntException(msg);
- throw ae;
- }
- } catch (Exception e) {
- AntException ae;
- if (!(e instanceof AntException)) {
- ae = new AntException(e);
- } else {
- ae = (AntException)e;
- }
- ae.setProject(this);
- ae.setTarget(target);
- ae.setTask(task);
- throw ae;
- }
- frontEnd.notifyTaskEnd(task);
- }
-
- // notify frontEnd that we are done
- frontEnd.notifyTargetEnd(target);
- frontEnd.notifyProjectEnd(this);
- }
-
- /**
- * Givens a string representation of this object. Useful for debugging.
- */
- public String toString() {
- return "Project name=" + name;
- }
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/ProjectBuilder.java b/proposal/anteater/source/main/org/apache/ant/ProjectBuilder.java
deleted file mode 100644
index ea2eb13d7..000000000
--- a/proposal/anteater/source/main/org/apache/ant/ProjectBuilder.java
+++ /dev/null
@@ -1,307 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.io.*;
-import java.util.*;
-import javax.xml.parsers.*;
-import org.xml.sax.*;
-
-/**
- * Helper class to build Project object trees.
- *
- * XXX right now this class only deals with the primary levels (project/target/task)
- * and nothing else. Also, it only supports attributes....
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class ProjectBuilder {
-
- // -----------------------------------------------------------------
- // PRIVATE MEMBERS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- private AntFrontEnd frontEnd;
-
- /**
- *
- */
- private SAXParserFactory parserFactory;
-
- /**
- *
- */
- private TaskManager taskManager;
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
-
- /**
- * Creates a new project builder that will build projects for the given
- * Ant.
- */
- public ProjectBuilder(AntFrontEnd frontEnd) {
- this.frontEnd = frontEnd;
- taskManager = new TaskManager(frontEnd);
- parserFactory = SAXParserFactory.newInstance();
- parserFactory.setValidating(false);
- }
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Builds a project from the given file.
- */
- public Project buildFromFile(File file) throws AntException {
- try {
- SAXParser parser = parserFactory.newSAXParser();
- BuilderHandlerBase bhb = new BuilderHandlerBase();
- bhb.setProjectFileLocation(file);
- parser.parse(file, bhb);
- Project project = bhb.getProject();
- project.setFrontEnd(frontEnd);
- return project;
- } catch (ParserConfigurationException pce) {
- throw new AntException(pce);
- } catch (SAXException se) {
- Exception e = se.getException();
- if (e != null && e instanceof AntException) {
- // it's one of our own thrown from inside the parser to stop it
- throw (AntException)e;
- }
- throw new AntException(se);
- } catch (IOException ioe) {
- throw new AntException(ioe);
- }
- }
-
- /**
- * Returns the TaskManager associated with this ProjectBuilder and
- * the projects that it builds
- */
- public TaskManager getTaskManager() {
- return taskManager;
- }
-
- // -----------------------------------------------------------------
- // INNER CLASSES
- // -----------------------------------------------------------------
-
- /**
- * Inner class that implements the needed SAX methods to get all the
- * data needed out of a build file.
- */
- class BuilderHandlerBase extends HandlerBase {
-
- private static final int STATE_START = 0;
- private static final int STATE_PROJECT = 1;
- private static final int STATE_TARGET = 2;
- private static final int STATE_TASK = 3;
- private static final int STATE_DESCRIPTION = 4;
- private static final int STATE_PROPERTY = 5;
- private static final int STATE_FINISHED = 99;
-
- private int state = STATE_START;
-
- private Vector tagCharDataStack = new Vector();
-
- private Target currentTarget;
- private Task currentTask;
-
- Project project = new Project(frontEnd, taskManager);
-
- Project getProject() {
- return project;
- }
-
- void setProjectFileLocation(File file) {
- project.setBaseDir(file.getParentFile());
- }
-
- public void startElement(String name, AttributeList atts) throws SAXException {
-
- StringBuffer tagCharData = new StringBuffer();
- tagCharDataStack.insertElementAt(tagCharData, 0);
-
- switch (state) {
-
- case STATE_START:
- if (name.equals("project")) {
- state = STATE_PROJECT;
- String projectName = atts.getValue("name");
- if (projectName != null) {
- project.setName(projectName);
- } else {
- String msg = "Project element doesn't contain a name attribute";
- AntException ae = new AntException(msg);
- throw new SAXException(ae);
- }
- String defaultTarget = atts.getValue("default");
- if (defaultTarget != null) {
- project.setDefaultTargetName(defaultTarget);
- }
- String baseDirName = atts.getValue("basedir");
- if (baseDirName != null) {
- // XXX need to check to see if base dir exists
- project.setBaseDir(new File(baseDirName));
- }
- } else {
- String msg = "Project file doesn't contain a project element as " +
- "its root node";
- AntException ae = new AntException(msg);
- throw new SAXException(ae);
- }
- break;
-
- case STATE_PROJECT:
-
- // valid tags in a project object are: description, property, and target
-
- if (name.equals("description")) {
- state = STATE_DESCRIPTION;
- } else if (name.equals("property")) {
- state = STATE_PROPERTY;
- String propertyName = atts.getValue("name");
- String propertyValue = atts.getValue("value");
- if (propertyName == null) {
- String msg = "Name attribute must be present on property";
- AntException ae = new AntException(msg);
- throw new SAXException(ae);
- } else if (propertyValue == null) {
- String msg = "Value attribute must be present on property";
- AntException ae = new AntException(msg);
- throw new SAXException(ae);
- } else {
- project.setProperty(propertyName, propertyValue);
- }
- } else if (name.equals("target")) {
- state = STATE_TARGET;
- String targetName = atts.getValue("name");
- if (targetName != null) {
- currentTarget = new Target(targetName);
- project.addTarget(currentTarget);
- } else {
- // XXX figure out which target we're talking about!
- // Like a location
- String msg = "Target element doesn't contain a name attribute";
- AntException ae = new AntException(msg);
- throw new SAXException(ae);
- }
- String depends = atts.getValue("depends");
- if (depends != null) {
- StringTokenizer tok = new StringTokenizer(depends, ",", false);
- while(tok.hasMoreTokens()) {
- currentTarget.addDependancy(tok.nextToken().trim());
- }
- }
-
- // XXX add dependency checks
- } else {
- System.out.println("Expecting target, got: " + name);
- // XXX exception out
- }
- break;
-
- case STATE_TARGET:
-
- // Valid tags inside target: task
-
- state = STATE_TASK;
- //System.out.println("Getting task: " + name + " for target " +
- // currentTarget);
- // XXX need to validate that task type (name) exists in system
- // else exception out.
- currentTask = new Task(name);
- currentTarget.addTask(currentTask);
- for (int i = 0; i < atts.getLength(); i++) {
- String atName = atts.getName(i);
- String atValue = atts.getValue(i);
- currentTask.addAttribute(atName, atValue);
- }
- break;
-
- case STATE_TASK:
-
- // data in here needs to be reflected into tasks
-
- System.out.println("Not yet supporting tags inside of tasks!");
- System.out.println("The project build will probably bust right here");
-
- break;
-
- default:
- System.out.println("I'm not sure, but we're off base here: " + name);
- // XXX exception out
- }
- }
-
- public void characters(char ch[], int start, int length) throws SAXException {
- StringBuffer buf = (StringBuffer)tagCharDataStack.elementAt(0);
- buf.append(ch, start, length);
- }
-
- public void endElement(String name) throws SAXException {
-
- StringBuffer elementData = (StringBuffer)tagCharDataStack.elementAt(0);
- tagCharDataStack.removeElementAt(0);
-
- switch (state) {
-
- case STATE_TASK:
- state = STATE_TARGET;
- break;
-
- case STATE_TARGET:
- if (name.equals("target")) {
- state = STATE_PROJECT;
- } else {
- System.out.println("Expecting to get an end of target, got: " + name);
- // XXX exception out.
- }
- break;
-
- case STATE_DESCRIPTION:
- if (name.equals("description")) {
- state = STATE_PROJECT;
- project.setDescription(elementData.toString().trim());
- } else {
- System.out.println("Expecting to get an end of description, got: " +
- name);
- // XXX exception out.
- }
- break;
-
- case STATE_PROPERTY:
- if (name.equals("property")) {
- state = STATE_PROJECT;
- } else {
- System.out.println("Expecting to get end of property, got: " + name);
- // XXX exception out
- }
- break;
-
- case STATE_PROJECT:
- if (name.equals("project")) {
- state = STATE_FINISHED;
- } else {
- System.out.println("Expecting to get end of project, got: " + name);
- // XXX exception out;
- }
- break;
-
- default:
- System.out.println("I'm not sure what we are ending here: " + name);
- // XXX exception out;
- }
- }
- }
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/Target.java b/proposal/anteater/source/main/org/apache/ant/Target.java
deleted file mode 100644
index 4d5c98afc..000000000
--- a/proposal/anteater/source/main/org/apache/ant/Target.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// ---------------------------------------------------------------------
-// (c)2000 Apache Software Foundation
-//
-// ---------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.util.*;
-
-/**
- * In memory container for an Ant target.
- */
-public class Target {
-
- // -----------------------------------------------------------------
- // PRIVATE DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- * String containing the name of the target. This name must be
- * unique withing a project.
- */
- private String name;
-
- /**
- * Vector containing the names of the targets that this target
- * depends on.
- */
- private Vector dependsList = new Vector();
-
- /**
- * Vector containing the tasks that are part of this target.
- */
- private Vector tasks = new Vector();
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
- /**
- * Constructs a new Target object with the given name.
- */
- public Target(String name) {
- this.name = name;
- }
-
- // -----------------------------------------------------------------
- // PUBLIC ACCESSOR METHODS
- // -----------------------------------------------------------------
-
- /**
- * Adds a dependancy to this task.
- */
- public void addDependancy(String targetName) {
- dependsList.addElement(targetName);
- }
-
- /**
- *
- */
- public void addTask(Task task) {
- tasks.addElement(task);
- }
-
- /**
- * Returns a String containing the name of this Target.
- */
- public String getName() {
- return name;
- }
-
- /**
- *
- */
- public String toString() {
- return "TARGET: " + name;
- }
-
- /**
- * Returns a Vector of Tasks contained in this Target.
- *
- * Please use caution when using this method. I am not happy
- * about exposing this data as something other than a
- * Collection, but don't want to use 1.1 collections. So,
- * this method may change in the future. You have been warned.
- */
- public Vector getTasks() {
- return tasks;
- }
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/Task.java b/proposal/anteater/source/main/org/apache/ant/Task.java
deleted file mode 100644
index 363c80106..000000000
--- a/proposal/anteater/source/main/org/apache/ant/Task.java
+++ /dev/null
@@ -1,86 +0,0 @@
-// ---------------------------------------------------------------------
-// (c)2000 Apache Software Foundation
-//
-// ---------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.util.*;
-
-/**
- * In memory container for an Ant target.
- *
- * XXX need a way to query which attributes are valid for this particular
- * task type... Like into Ant object to do this?
- */
-public class Task {
-
- // -----------------------------------------------------------------
- // PRIVATE DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- private Hashtable attributes = new Hashtable();
-
- /**
- * String containing the type of the task.
- */
- private String type;
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
- /**
- * Constructs a new Target object with the given name.
- */
- public Task(String type) {
- this.type = type;
- }
-
- // -----------------------------------------------------------------
- // PUBLIC ACCESSOR METHODS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- public void addAttribute(String name, String value) {
- attributes.put(name, value);
- }
-
- public String getAttribute(String name) {
- return (String)attributes.get(name);
- }
-
- /**
- *
- */
- public Hashtable getAttributes() {
- return attributes;
- }
-
- /**
- *
- */
- public Enumeration getAttributeNames() {
- return attributes.keys();
- }
-
- /**
- * Returns a String containing the name of this Target.
- */
- public String getType() {
- return type;
- }
-
- /**
- *
- */
- public String toString() {
- return "TASK: " + type;
- }
-
-}
\ No newline at end of file
diff --git a/proposal/anteater/source/main/org/apache/ant/TaskManager.java b/proposal/anteater/source/main/org/apache/ant/TaskManager.java
deleted file mode 100644
index 9ffc7e959..000000000
--- a/proposal/anteater/source/main/org/apache/ant/TaskManager.java
+++ /dev/null
@@ -1,268 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import java.util.zip.*;
-
-/**
- * Manager of tasks and all things related to tasks. Tasks can be found in a
- * wide number of locations -- and most of these locations require class loading
- * help. As well, new nodes on the task search path may be added at any time.
- * When these are added, new tasks should be scanned for.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class TaskManager {
-
- // -----------------------------------------------------------------
- // PRIVATE DATA MEMBERS
- // -----------------------------------------------------------------
-
- /**
- * FrontEnd that this TaskManager can communicate through.
- */
- private AntFrontEnd frontEnd;
-
- /**
- * Data structure where all the Class definition for all known tasks are
- * held.
- */
- private Hashtable taskClasses = new Hashtable();
-
- /**
- * Data structure that holds all the nodes where tasks are picked up from.
- */
- private Vector taskPathNodes = new Vector();
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
- /**
- * Creates a new TaskManager.
- */
- TaskManager(AntFrontEnd frontEnd) {
- this.frontEnd = frontEnd;
- }
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Adds a node to the task path
- */
- public void addTaskPathNode(File file) throws AntException {
- taskPathNodes.addElement(file);
- processTaskPathNode(file);
- }
-
- // -----------------------------------------------------------------
- // PACKAGE METHODS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- AbstractTask getTaskInstance(String taskName) throws AntException {
- Class clazz = (Class)taskClasses.get(taskName);
- try {
- return (AbstractTask)clazz.newInstance();
- } catch (Exception e) {
- String msg = "Can't instantiate task: " + taskName;
- AntException ae = new AntException(msg, e);
- throw ae;
- }
- }
-
- // -----------------------------------------------------------------
- // PRIVATE METHODS
- // -----------------------------------------------------------------
-
- /**
- * Returns an enum of the task names that are defined in a given
- * properties file.
- */
- private Enumeration getTaskNames(Properties props) {
- Vector v = new Vector();
- String s = props.getProperty("tasks");
- StringTokenizer tok = new StringTokenizer(s, ",", false);
- while (tok.hasMoreTokens()) {
- String taskName = tok.nextToken().trim();
- v.addElement(taskName);
- }
- return v.elements();
- }
-
- /**
- * Processes a directory to get class defintions from it
- */
- private void processDir(File dir) {
- frontEnd.writeMessage("Scanning " + dir + " for tasks",
- AntFrontEnd.MSG_LEVEL_LOW);
- File file = new File(dir, "taskdef.properties");
- if (file.exists()) {
- try {
- InputStream in = new FileInputStream(file);
- Properties props = new Properties();
- props.load(in);
- in.close();
-
- Enumeration enum = getTaskNames(props);
- while (enum.hasMoreElements()) {
- String taskName = (String)enum.nextElement();
- String taskClass = props.getProperty("task." + taskName + ".class");
- URLClassLoader loader = new URLClassLoader(new URL[] {dir.toURL()});
- try {
- Class clazz = loader.loadClass(taskClass);
- frontEnd.writeMessage("Got Task: " + taskName +
- clazz, AntFrontEnd.MSG_LEVEL_LOW);
- taskClasses.put(taskName, clazz);
- } catch (ClassNotFoundException cnfe) {
- System.out.println("Couldn't load task: " + taskName);
- System.out.println(cnfe);
- // XXX error out and stop....
- }
- }
- } catch (IOException ioe) {
- System.out.println("Could not work with dir: " + dir);
- System.out.println(ioe);
- // XXX error out and stop the build
- }
- }
- }
-
- /**
- * Processes a jar file to get class definitions from it
- */
- private void processJar(File file) throws AntException {
- frontEnd.writeMessage("Scanning " + file + " for tasks",
- AntFrontEnd.MSG_LEVEL_LOW);
- try {
- ZipFile zipFile = new ZipFile(file);
- ZipEntry zipEntry = zipFile.getEntry("taskdef.properties");
- if (zipEntry != null) {
- InputStream in = zipFile.getInputStream(zipEntry);
- Properties props = new Properties();
- props.load(in);
- in.close();
-
- Enumeration enum = getTaskNames(props);
- while (enum.hasMoreElements()) {
-
- String taskName = (String)enum.nextElement();
- String taskClass = props.getProperty("task." + taskName + ".class");
- if (taskClass == null) {
- String msg = "No class definition for task " + taskName +
- "in jar file " + file;
- throw new AntException(msg);
- }
- URLClassLoader loader = new URLClassLoader(new URL[] {file.toURL()});
- try {
- Class clazz = loader.loadClass(taskClass);
- frontEnd.writeMessage("Got Task: " + taskName +
- clazz, AntFrontEnd.MSG_LEVEL_LOW);
- taskClasses.put(taskName, clazz);
- } catch (ClassNotFoundException cnfe) {
- System.out.println("Couldn't load task: " + taskName);
- System.out.println(cnfe);
- // XXX error out and stop....
- }
- }
- }
- // make sure to not leave resources hanging
- zipFile.close();
- } catch (IOException ioe) {
- System.out.println("Couldn't work with file: " + file);
- System.out.println(ioe);
- // XXX need to exception out of here properly to stop things
- }
- }
-
- /**
- * Processes a node of the task path searching for task definitions there
- * and adding them to the list of known tasks
- */
- private void processTaskPathNode(File file) throws AntException {
-
- // task path nodes can be any of the following:
- // * jar file
- // * directory of jar files
- // * directory holding class files
-
- if(file.isDirectory()) {
- // first look for all jar files here
- // second look for a taskdefs.properties here to see if we should
- // treat the directory as a classpath
-
- String[] files = file.list();
- for (int i = 0; i < files.length; i++) {
- if (files[i].endsWith(".jar")) {
- processJar(new File(file, files[i]));
- } else if (files[i].equals("taskdef.properties")) {
- processDir(file);
- }
- }
- } else if (file.getName().endsWith(".jar")) {
- processJar(file);
- }
- }
-
- /**
- * Sets up the taskpath based on the currently running operating
- * system. In general, the ordering of the taskpath is: user directory,
- * system directory, and then installation. This allows users or
- * system admins to override or add tasks.
- */
- private void setUpTaskPath() throws AntException {
-
- // 1st, add user's home dir.
-
- File f;
-
- String userHome = System.getProperty("user.home");
-
- // generic unix
- f = new File(userHome + ".ant", "tasks");
- if (f.exists() && f.isDirectory()) {
- addTaskPathNode(f);
- }
-
- // macos x
- f = new File(userHome + "/Library/Ant", "Tasks");
- if (f.exists() && f.isDirectory()) {
- addTaskPathNode(f);
- }
-
- // windows -- todo
-
- // 2nd, add system local dir.
-
- // generic unix
- f = new File("/usr/local/ant/tasks");
- if (f.exists() && f.isDirectory()) {
- addTaskPathNode(f);
- }
-
- // macos x
- f = new File("/Library/Ant/Tasks");
- if (f.exists() && f.isDirectory()) {
- addTaskPathNode(f);
- }
-
- // windows -- todo
-
- // 3rd, add installation local dir.
-
- //System.out.println("BASE: " + this.getClass().getResource("/"));
-
- // XXX ---- not really sure how the best way of getting this info is...
- // hafta think about it.
- }
-
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java b/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
deleted file mode 100644
index 91cb8f3bf..000000000
--- a/proposal/anteater/source/main/org/apache/ant/cli/CLIFrontEnd.java
+++ /dev/null
@@ -1,307 +0,0 @@
-// -------------------------------------------------------------------------------
-// Copyright (c)2000 Apache Software Foundation
-// -------------------------------------------------------------------------------
-
-package org.apache.ant.cli;
-
-import java.io.*;
-import java.util.*;
-import org.apache.ant.*;
-
-/**
- * Front end for the Command Line Interface that gets passed to Ant so that
- * it can communicate information to the CLI.
- *
- * @author James Duncan Davidson (duncan@apache.org)
- */
-public class CLIFrontEnd extends AntFrontEnd {
-
- // -----------------------------------------------------------------
- // PRIVATE MEMBERS
- // -----------------------------------------------------------------
-
- /**
- *
- */
- private String[] args;
-
- /**
- * ProjectBuilder that is associated with this frontEnd.
- */
- private ProjectBuilder projectBuilder;
-
- /**
- *
- */
- private int msgLevelFilter = MSG_LEVEL_MED;
-
- /**
- * TaskManager instance that we can set taskpaths and such on.
- */
- private TaskManager taskManager;
-
- // -----------------------------------------------------------------
- // CONSTRUCTORS
- // -----------------------------------------------------------------
-
- /**
- * Creates a new CLIFrontEnd that can drive an Ant build from the Command
- * Line.
- */
- public CLIFrontEnd() {
- projectBuilder = new ProjectBuilder(this);
- taskManager = projectBuilder.getTaskManager();
- }
-
- // -----------------------------------------------------------------
- // PUBLIC METHODS
- // -----------------------------------------------------------------
-
- /**
- * Send notification to the FrontEnd that execution has moved into
- * the scope of a particular project. The default implementation
- * does nothing.
- */
- public void notifyProjectStart(Project project) {
- writeMessage("Project Start: " + project.getName(), MSG_LEVEL_LOW);
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved out
- * of the scope of a particular Project. The default implementation
- * does nothing.
- */
- public void notifyProjectEnd(Project project) {
- writeMessage("Project End: " + project.getName(), MSG_LEVEL_LOW);
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved into
- * the scope of a particular target. The default implementation does
- * nothing.
- */
- public void notifyTargetStart(Target target) {
- writeMessage("Target Start: " + target.getName(), MSG_LEVEL_LOW);
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved out of
- * the scope of a particular target. The default implementation does
- * nothing.
- */
- public void notifyTargetEnd(Target target) {
- writeMessage("Target End: " + target.getName(), MSG_LEVEL_LOW);
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved into the
- * scope of a particular task. The default implementation does nothing.
- */
- public void notifyTaskStart(Task task) {
- writeMessage("Task Start: " + task.getType(), MSG_LEVEL_LOW);
- }
-
- /**
- * Send notification to the FrontEnd that execution has moved out of
- * the scope of a particular task. The default implementation does
- * nothing.
- */
- public void notifyTaskEnd(Task task) {
- writeMessage("Task End: " + task.getType(), MSG_LEVEL_LOW);
- }
-
- /**
- *
- */
- public void run(String[] args) {
- this.args = args;
- String target = "";
- File buildFile = null;
- writeMessage("Ant(Eater) -- Proposed Ant 2.0");
-
- // process through the args set
-
- if (isArg("help")) {
- printHelp();
- return;
- }
-
- if (isArg("quiet")) {
- msgLevelFilter = MSG_LEVEL_HIGH;
- }
-
- if (isArg("verbose")) {
- msgLevelFilter = MSG_LEVEL_LOW;
- }
-
- String argTaskpath = getArgValue("taskpath");
- if (argTaskpath != null) {
- if (argTaskpath.equals("")) {
- writeMessage("Must give a value for -taskpath");
- return;
- } else {
- // XXX need to separate on path seps so that real paths can be taken
- try {
- taskManager.addTaskPathNode(new File(argTaskpath));
- } catch (AntException ae) {
- System.out.println(ae);
- System.out.println(ae.getMessage());
- ae.printStackTrace(System.out);
- return;
- }
- }
- }
-
- String argBuildfile = getArgValue("buildfile");
- if (argBuildfile != null) {
- if (argBuildfile.equals("")) {
- writeMessage("Must give a value for -buildfile");
- return;
- } else {
- //try {
- buildFile = new File(argBuildfile);
- //ant.setBuildfile(new File(argBuildfile));
- //} catch (AntException ae) {
- // writeMessage("Can't set buildfile");
- // writeMessage(ae.toString());
- // return;
- //}
- }
- }
-
- target = getTargetArg();
-
- // XXX do something if we dont' have a buildfile set!
-
- // XXX really should check to make sure that the target is set to something
- // like get the default...
-
- try {
- Project project = projectBuilder.buildFromFile(buildFile);
-
- project.setFrontEnd(this);
- project.startBuild(target);
- } catch (AntException ae) {
-
- //XXX this whole write a string at a time message handling
- // sucks and needs to be improved...
-
- writeMessage("Build Stopped");
- writeMessage(" Project: " + ae.getProject().getName());
- writeMessage(" Target: " + ae.getTarget().getName());
- writeMessage(" Task Type: " + ae.getTask().getType());
- writeMessage("Details Follow");
- writeMessage("");
- writeMessage(ae.getMessage());
- ae.printStackTrace(System.out);
- Throwable t = ae.getCause();
- if (t != null) {
- writeMessage("");
- writeMessage("Cause Exception: " + t.toString());
- writeMessage(t.getMessage());
- t.printStackTrace(System.out);
- }
- }
- }
-
- /**
- * Writes a message to the front end.
- */
- public void writeMessage(String message, int level) {
- if (level >= msgLevelFilter) {
- System.out.println(message);
- }
- }
-
- // -----------------------------------------------------------------
- // PRIVATE METHODS
- // -----------------------------------------------------------------
-
- /**
- * Returns the value for a given argument name, null if the argument
- * name isn't in the argument set, or "" if the argument doesn't have
- * a value.
- */
- private String getArgValue(String argName) {
- for (int i = 0; i < args.length; i++) {
- if (args[i].equals("-" + argName)) {
- if (i != args.length - 1) {
- return args[i + 1];
- } else {
- return "";
- }
- }
- }
- return null;
- }
-
- /**
- * Returns the target that was requested to be built, if any. If no
- * target is determined, returns null.
- */
- public String getTargetArg() {
- String possibleTarget = getArgValue("target");
- if (possibleTarget != null) {
- if (possibleTarget.equals("")) {
- writeMessage("Must give a value for -target");
- } else {
- return possibleTarget;
- }
- }
-
- possibleTarget = args[args.length - 1];
- if (possibleTarget.startsWith("-")) {
- return null;
- }
- if (args[args.length - 2].startsWith("-")) {
- // our possible target might be an arg value instead of a target
- // XXX ugh -- there has to be a better way here. We need to hold
- // a list of all args that don't have values somewhere.
- if (args[args.length - 2].equals("-help") ||
- args[args.length - 2].equals("-verbose") ||
- args[args.length - 2].equals("-quiet")) {
- // we're ok, the arg before the possible target doesn't have a value
- return possibleTarget;
- } else {
- return null;
- }
- } else {
- return possibleTarget;
- }
- }
-
- /**
- * Indicates whether or not a given argument name exists in the argument
- * set.
- */
- private boolean isArg(String argName) {
- for (int i = 0; i < args.length; i++) {
- if (args[i].equals("-" + argName)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Prints help to System.out
- */
- private void printHelp() {
-
- // XXX resource bundle this.
-
- String ls = System.getProperty("line.separator");
- String msg = "Usage: ant [args] [target]" + ls +
- " Arguments can be any of the following:" + ls +
- " -help" + ls +
- " -taskpath [path]" + ls +
- " -buildfile [file]" +ls +
- " -verbose" + ls +
- " -quiet" + ls + ls +
- " Note that if no buildfile argument is given, Ant will"+ls+
- " try to find one in the current directory. If there are"+ls+
- " two or more buildfiles in the current directory, it" +ls+
- " will bail.";
- writeMessage(msg);
- }
-}
diff --git a/proposal/anteater/source/main/org/apache/ant/cli/Main.java b/proposal/anteater/source/main/org/apache/ant/cli/Main.java
deleted file mode 100644
index 7a81b89b2..000000000
Binary files a/proposal/anteater/source/main/org/apache/ant/cli/Main.java and /dev/null differ