|
- // ---------------------------------------------------------------------
- // (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;
- }
- }
|