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