rename some methods git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272876 13f79535-47bb-0310-9956-ffa450edef68master
@@ -98,6 +98,7 @@ | |||||
<exclude name="org/apache/tools/ant/taskdefs/TStampTest.java"/> | <exclude name="org/apache/tools/ant/taskdefs/TStampTest.java"/> | ||||
<exclude name="org/apache/tools/ant/taskdefs/TaskdefTest.java"/> | <exclude name="org/apache/tools/ant/taskdefs/TaskdefTest.java"/> | ||||
<exclude name="org/apache/tools/ant/taskdefs/TypedefTest.java"/> | <exclude name="org/apache/tools/ant/taskdefs/TypedefTest.java"/> | ||||
<exclude name="org/apache/tools/ant/taskdefs/optional/sitraka/XMLReportTest.java"/> | |||||
</patternset> | </patternset> | ||||
<fileset id="ant1src_tocopy" dir="${ant1java.dir}"> | <fileset id="ant1src_tocopy" dir="${ant1java.dir}"> | ||||
@@ -65,7 +65,7 @@ import org.apache.ant.antcore.xml.ParseContext; | |||||
import org.apache.ant.antcore.xml.XMLParseException; | import org.apache.ant.antcore.xml.XMLParseException; | ||||
import org.apache.ant.common.util.CircularDependencyChecker; | import org.apache.ant.common.util.CircularDependencyChecker; | ||||
import org.apache.ant.common.util.CircularDependencyException; | import org.apache.ant.common.util.CircularDependencyException; | ||||
import org.apache.ant.init.InitConfig; | |||||
import org.apache.ant.init.AntEnvironment; | |||||
import org.apache.ant.init.LoaderUtils; | import org.apache.ant.init.LoaderUtils; | ||||
/** | /** | ||||
@@ -90,7 +90,7 @@ public class AntLibManager { | |||||
private boolean remoteAllowed; | private boolean remoteAllowed; | ||||
/** The Ant initialization config - location of vital components */ | /** The Ant initialization config - location of vital components */ | ||||
private InitConfig initConfig; | |||||
private AntEnvironment antEnv; | |||||
/** | /** | ||||
* This map stores a list of additional paths for each library indexed by | * This map stores a list of additional paths for each library indexed by | ||||
@@ -101,13 +101,13 @@ public class AntLibManager { | |||||
/** | /** | ||||
* Constructor for the AntLibManager object | * Constructor for the AntLibManager object | ||||
* | * | ||||
* @param initConfig the init config of the system. | |||||
* @param antEnv the init config of the system. | |||||
* @param remoteAllowed true if remote libraries can be used and | * @param remoteAllowed true if remote libraries can be used and | ||||
* configured | * configured | ||||
*/ | */ | ||||
public AntLibManager(InitConfig initConfig, boolean remoteAllowed) { | |||||
public AntLibManager(AntEnvironment antEnv, boolean remoteAllowed) { | |||||
this.remoteAllowed = remoteAllowed; | this.remoteAllowed = remoteAllowed; | ||||
this.initConfig = initConfig; | |||||
this.antEnv = antEnv; | |||||
} | } | ||||
/** | /** | ||||
@@ -335,12 +335,12 @@ public class AntLibManager { | |||||
urlsList.add(librarySpec.getLibraryURL()); | urlsList.add(librarySpec.getLibraryURL()); | ||||
} | } | ||||
if (librarySpec.isToolsJarRequired() | if (librarySpec.isToolsJarRequired() | ||||
&& initConfig.getToolsJarURL() != null) { | |||||
urlsList.add(initConfig.getToolsJarURL()); | |||||
&& antEnv.getToolsJarURL() != null) { | |||||
urlsList.add(antEnv.getToolsJarURL()); | |||||
} | } | ||||
if (librarySpec.usesAntXML()) { | if (librarySpec.usesAntXML()) { | ||||
URL[] parserURLs = initConfig.getParserURLs(); | |||||
URL[] parserURLs = antEnv.getParserURLs(); | |||||
for (int i = 0; i < parserURLs.length; ++i) { | for (int i = 0; i < parserURLs.length; ++i) { | ||||
urlsList.add(parserURLs[i]); | urlsList.add(parserURLs[i]); | ||||
} | } | ||||
@@ -357,7 +357,7 @@ public class AntLibManager { | |||||
antLibrary.setExtendsLibrary(extendsLibrary); | antLibrary.setExtendsLibrary(extendsLibrary); | ||||
} | } | ||||
antLibrary.setParentLoader(initConfig.getCommonLoader()); | |||||
antLibrary.setParentLoader(antEnv.getCommonLoader()); | |||||
newLibraries.put(libraryId, antLibrary); | newLibraries.put(libraryId, antLibrary); | ||||
if (libPathsMap != null) { | if (libPathsMap != null) { | ||||
@@ -78,7 +78,7 @@ public class AntConfigHandler extends ElementHandler { | |||||
public static final String GLOBAL_TASKS_ELEMENT = "global-tasks"; | public static final String GLOBAL_TASKS_ELEMENT = "global-tasks"; | ||||
/** The per-frame tasks element */ | /** The per-frame tasks element */ | ||||
public static final String PERFRAME_TASKS_ELEMENT = "frame-tasks"; | |||||
public static final String PERFRAME_TASKS_ELEMENT = "project-tasks"; | |||||
/** The list of allowed Attributes */ | /** The list of allowed Attributes */ | ||||
public static final String[] ALLOWED_ATTRIBUTES | public static final String[] ALLOWED_ATTRIBUTES | ||||
@@ -77,7 +77,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
* The listeners attached to the object which contains this support | * The listeners attached to the object which contains this support | ||||
* object | * object | ||||
*/ | */ | ||||
private List listeners = new ArrayList(); | |||||
private ArrayList listeners = new ArrayList(); | |||||
/** Records the latest task to be executed on a thread (Thread to Task). */ | /** Records the latest task to be executed on a thread (Thread to Task). */ | ||||
private Map threadTasks = new HashMap(); | private Map threadTasks = new HashMap(); | ||||
@@ -87,8 +87,8 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
* | * | ||||
* @return the listeners value | * @return the listeners value | ||||
*/ | */ | ||||
public Iterator getListeners() { | |||||
return listeners.iterator(); | |||||
public List getListeners() { | |||||
return (List) listeners.clone(); | |||||
} | } | ||||
/** | /** | ||||
@@ -116,6 +116,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
*/ | */ | ||||
public void fireBuildStarted(ModelElement element) { | public void fireBuildStarted(ModelElement element) { | ||||
BuildEvent event = new BuildEvent(element, BuildEvent.BUILD_STARTED); | BuildEvent event = new BuildEvent(element, BuildEvent.BUILD_STARTED); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.buildStarted(event); | listener.buildStarted(event); | ||||
@@ -132,6 +133,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
Throwable cause) { | Throwable cause) { | ||||
BuildEvent event = new BuildEvent(element, BuildEvent.BUILD_FINISHED, | BuildEvent event = new BuildEvent(element, BuildEvent.BUILD_FINISHED, | ||||
cause); | cause); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.buildFinished(event); | listener.buildFinished(event); | ||||
@@ -145,6 +147,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
*/ | */ | ||||
public void fireTargetStarted(ModelElement element) { | public void fireTargetStarted(ModelElement element) { | ||||
BuildEvent event = new BuildEvent(element, BuildEvent.TARGET_STARTED); | BuildEvent event = new BuildEvent(element, BuildEvent.TARGET_STARTED); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.targetStarted(event); | listener.targetStarted(event); | ||||
@@ -161,6 +164,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
Throwable cause) { | Throwable cause) { | ||||
BuildEvent event = new BuildEvent(element, BuildEvent.TARGET_FINISHED, | BuildEvent event = new BuildEvent(element, BuildEvent.TARGET_FINISHED, | ||||
cause); | cause); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.targetFinished(event); | listener.targetFinished(event); | ||||
@@ -177,6 +181,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
threadTasks.put(Thread.currentThread(), task); | threadTasks.put(Thread.currentThread(), task); | ||||
} | } | ||||
BuildEvent event = new BuildEvent(task, BuildEvent.TASK_STARTED); | BuildEvent event = new BuildEvent(task, BuildEvent.TASK_STARTED); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.taskStarted(event); | listener.taskStarted(event); | ||||
@@ -198,6 +203,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
} | } | ||||
BuildEvent event = new BuildEvent(task, BuildEvent.TASK_FINISHED, | BuildEvent event = new BuildEvent(task, BuildEvent.TASK_FINISHED, | ||||
cause); | cause); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.taskFinished(event); | listener.taskFinished(event); | ||||
@@ -214,6 +220,7 @@ public class BuildEventSupport implements DemuxOutputReceiver { | |||||
public void fireMessageLogged(Object source, | public void fireMessageLogged(Object source, | ||||
String message, int priority) { | String message, int priority) { | ||||
BuildEvent event = new BuildEvent(source, message, priority); | BuildEvent event = new BuildEvent(source, message, priority); | ||||
List listeners = getListeners(); | |||||
for (Iterator i = listeners.iterator(); i.hasNext();) { | for (Iterator i = listeners.iterator(); i.hasNext();) { | ||||
BuildListener listener = (BuildListener) i.next(); | BuildListener listener = (BuildListener) i.next(); | ||||
listener.messageLogged(event); | listener.messageLogged(event); | ||||
@@ -80,6 +80,8 @@ import org.apache.ant.common.service.ComponentService; | |||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.util.Location; | import org.apache.ant.common.util.Location; | ||||
import org.apache.ant.init.LoaderUtils; | import org.apache.ant.init.LoaderUtils; | ||||
import org.apache.ant.common.util.AttributeCollection; | |||||
import org.apache.ant.common.constants.Namespace; | |||||
/** | /** | ||||
* The instance of the ComponentServices made available by the core to the ant | * The instance of the ComponentServices made available by the core to the ant | ||||
@@ -684,7 +686,7 @@ public class ComponentManager implements ComponentService { | |||||
// is there a polymorph indicator - look in Ant aspects | // is there a polymorph indicator - look in Ant aspects | ||||
String typeName | String typeName | ||||
= model.getAspectAttributeValue(Constants.ANT_ASPECT, "type"); | |||||
= model.getNamespaceAttributeValue(Namespace.ANT_META_URI, "type"); | |||||
Object typeInstance = null; | Object typeInstance = null; | ||||
if (typeName != null) { | if (typeName != null) { | ||||
@@ -767,13 +769,14 @@ public class ComponentManager implements ComponentService { | |||||
* @exception AntException if the object does not support an | * @exception AntException if the object does not support an | ||||
* attribute in the map. | * attribute in the map. | ||||
*/ | */ | ||||
public void configureAttributes(Object object, Map attributeValues, | |||||
public void configureAttributes(Object object, | |||||
AttributeCollection attributeValues, | |||||
boolean ignoreUnsupported) | boolean ignoreUnsupported) | ||||
throws AntException { | throws AntException { | ||||
Setter setter = getSetter(object.getClass()); | Setter setter = getSetter(object.getClass()); | ||||
for (Iterator i = attributeValues.keySet().iterator(); i.hasNext();) { | |||||
for (Iterator i = attributeValues.getAttributeNames(); i.hasNext();) { | |||||
String attributeName = (String) i.next(); | String attributeName = (String) i.next(); | ||||
String attributeValue = (String) attributeValues.get(attributeName); | |||||
String attributeValue = attributeValues.getAttribute(attributeName); | |||||
if (!setter.supportsAttribute(attributeName)) { | if (!setter.supportsAttribute(attributeName)) { | ||||
if (!ignoreUnsupported) { | if (!ignoreUnsupported) { | ||||
throw new ExecutionException(object.getClass().getName() | throw new ExecutionException(object.getClass().getName() | ||||
@@ -62,8 +62,5 @@ package org.apache.ant.antcore.execution; | |||||
public abstract class Constants { | public abstract class Constants { | ||||
/** The prefix for library ids that are automatically imported */ | /** The prefix for library ids that are automatically imported */ | ||||
public static final String ANT_LIB_PREFIX = "ant."; | public static final String ANT_LIB_PREFIX = "ant."; | ||||
/** The Ant aspect used to identify Ant metadata */ | |||||
public static final String ANT_ASPECT = "ant"; | |||||
} | } | ||||
@@ -54,7 +54,6 @@ | |||||
package org.apache.ant.antcore.execution; | package org.apache.ant.antcore.execution; | ||||
import java.io.File; | import java.io.File; | ||||
import java.net.MalformedURLException; | import java.net.MalformedURLException; | ||||
import java.util.HashMap; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import org.apache.ant.antcore.modelparser.XMLProjectParser; | import org.apache.ant.antcore.modelparser.XMLProjectParser; | ||||
@@ -64,9 +63,8 @@ import org.apache.ant.common.antlib.AntContext; | |||||
import org.apache.ant.common.model.Project; | import org.apache.ant.common.model.Project; | ||||
import org.apache.ant.common.model.BuildElement; | import org.apache.ant.common.model.BuildElement; | ||||
import org.apache.ant.common.service.ExecService; | import org.apache.ant.common.service.ExecService; | ||||
import org.apache.ant.common.service.BuildKey; | |||||
import org.apache.ant.init.InitUtils; | import org.apache.ant.init.InitUtils; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
import org.apache.ant.common.event.BuildListener; | import org.apache.ant.common.event.BuildListener; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
@@ -81,10 +79,6 @@ public class CoreExecService implements ExecService { | |||||
/** The Frame this service instance is working for */ | /** The Frame this service instance is working for */ | ||||
private Frame frame; | private Frame frame; | ||||
/** A map of subbuild keys to the frame of the subbuild. */ | |||||
private Map subBuilds = new HashMap(); | |||||
/** | /** | ||||
* Constructor | * Constructor | ||||
* | * | ||||
@@ -106,11 +100,11 @@ public class CoreExecService implements ExecService { | |||||
ExecutionContext execContext = getTaskExecutionContext(task); | ExecutionContext execContext = getTaskExecutionContext(task); | ||||
BuildElement model = execContext.getModel(); | BuildElement model = execContext.getModel(); | ||||
AspectValueCollection aspectValues = null; | |||||
NamespaceValueCollection namespaceValues = null; | |||||
if (model != null) { | if (model != null) { | ||||
aspectValues = model.getAspectAttributes(); | |||||
namespaceValues = model.getNamespaceAttributes(); | |||||
} | } | ||||
frame.executeTask(task, aspectValues); | |||||
frame.executeTask(task, namespaceValues); | |||||
} | } | ||||
/** | /** | ||||
@@ -144,7 +138,7 @@ public class CoreExecService implements ExecService { | |||||
* @param aspectValues the aspect attribute values. | * @param aspectValues the aspect attribute values. | ||||
* @exception AntException if there is an execution problem | * @exception AntException if there is an execution problem | ||||
*/ | */ | ||||
public void executeTask(Task task, AspectValueCollection aspectValues) | |||||
public void executeTask(Task task, NamespaceValueCollection aspectValues) | |||||
throws AntException { | throws AntException { | ||||
ExecutionContext execContext = getTaskExecutionContext(task); | ExecutionContext execContext = getTaskExecutionContext(task); | ||||
@@ -184,24 +178,6 @@ public class CoreExecService implements ExecService { | |||||
} | } | ||||
/** | |||||
* Gets the Frame for a subbuild based on the key | |||||
* | |||||
* @param key Description of the Parameter | |||||
* @return the subbuild's Frame | |||||
* @exception ExecutionException if the build cannot be found. | |||||
*/ | |||||
private Frame getSubbuildFrame(Object key) throws ExecutionException { | |||||
Frame subFrame = (Frame) subBuilds.get(key); | |||||
if (subFrame == null) { | |||||
throw new ExecutionException("Could not find execution frame " | |||||
+ "for subbuild"); | |||||
} | |||||
return subFrame; | |||||
} | |||||
/** | /** | ||||
* Handle subbuild output. | * Handle subbuild output. | ||||
* | * | ||||
@@ -212,7 +188,8 @@ public class CoreExecService implements ExecService { | |||||
*/ | */ | ||||
public void handleBuildOutput(Object subbuildKey, String line, | public void handleBuildOutput(Object subbuildKey, String line, | ||||
boolean isErr) throws ExecutionException { | boolean isErr) throws ExecutionException { | ||||
getSubbuildFrame(subbuildKey).threadOutput(line, isErr); | |||||
Frame subFrame = (Frame) subbuildKey; | |||||
subFrame.threadOutput(line, isErr); | |||||
} | } | ||||
@@ -224,9 +201,9 @@ public class CoreExecService implements ExecService { | |||||
* @param libraryId the id of the library to be initialized. | * @param libraryId the id of the library to be initialized. | ||||
* @exception AntException if the build cannot be run | * @exception AntException if the build cannot be run | ||||
*/ | */ | ||||
public void initializeBuildLibrary(BuildKey key, String libraryId) | |||||
public void initializeBuildLibrary(Object key, String libraryId) | |||||
throws AntException { | throws AntException { | ||||
Frame subFrame = getSubbuildFrame(key); | |||||
Frame subFrame = (Frame) key; | |||||
subFrame.initializeLibrary(libraryId); | subFrame.initializeLibrary(libraryId); | ||||
} | } | ||||
@@ -238,9 +215,10 @@ public class CoreExecService implements ExecService { | |||||
* | * | ||||
* @exception ExecutionException if the build cannot be found. | * @exception ExecutionException if the build cannot be found. | ||||
*/ | */ | ||||
public void addBuildListener(BuildKey key, BuildListener listener) | |||||
public void addBuildListener(Object key, BuildListener listener) | |||||
throws ExecutionException { | throws ExecutionException { | ||||
getSubbuildFrame(key).addBuildListener(listener); | |||||
Frame subFrame = (Frame) key; | |||||
subFrame.addBuildListener(listener); | |||||
} | } | ||||
@@ -251,20 +229,9 @@ public class CoreExecService implements ExecService { | |||||
* @param key Description of the Parameter | * @param key Description of the Parameter | ||||
* @exception AntException if the build cannot be run | * @exception AntException if the build cannot be run | ||||
*/ | */ | ||||
public void runBuild(BuildKey key, List targets) throws AntException { | |||||
getSubbuildFrame(key).runBuild(targets); | |||||
} | |||||
/** | |||||
* Release a subbuild that is no longer in use. | |||||
* | |||||
* @param key the BuildKey identifiying the subbuild. | |||||
* | |||||
* @exception ExecutionException if the build was not registered. | |||||
*/ | |||||
public void releaseBuild(BuildKey key) throws ExecutionException { | |||||
subBuilds.remove(key); | |||||
public void runBuild(Object key, List targets) throws AntException { | |||||
Frame subFrame = (Frame) key; | |||||
subFrame.runBuild(targets); | |||||
} | } | ||||
@@ -316,7 +283,7 @@ public class CoreExecService implements ExecService { | |||||
* @return Description of the Return Value | * @return Description of the Return Value | ||||
* @exception AntException if the subbuild cannot be run | * @exception AntException if the subbuild cannot be run | ||||
*/ | */ | ||||
public BuildKey setupBuild(Project model, Map properties, | |||||
public Object setupBuild(Project model, Map properties, | |||||
boolean addListeners) | boolean addListeners) | ||||
throws AntException { | throws AntException { | ||||
Frame newFrame = frame.createFrame(model); | Frame newFrame = frame.createFrame(model); | ||||
@@ -325,11 +292,7 @@ public class CoreExecService implements ExecService { | |||||
} | } | ||||
newFrame.initialize(properties); | newFrame.initialize(properties); | ||||
// create an anonymous inner class key. | |||||
BuildKey key = new BuildKey() {}; | |||||
subBuilds.put(key, newFrame); | |||||
return key; | |||||
return newFrame; | |||||
} | } | ||||
@@ -342,7 +305,7 @@ public class CoreExecService implements ExecService { | |||||
* @return Description of the Return Value | * @return Description of the Return Value | ||||
* @exception AntException if the subbuild cannot be run | * @exception AntException if the subbuild cannot be run | ||||
*/ | */ | ||||
public BuildKey setupBuild(Map properties, boolean addListeners) | |||||
public Object setupBuild(Map properties, boolean addListeners) | |||||
throws AntException { | throws AntException { | ||||
return setupBuild(frame.getProject(), properties, addListeners); | return setupBuild(frame.getProject(), properties, addListeners); | ||||
} | } | ||||
@@ -72,7 +72,7 @@ import org.apache.ant.common.model.BuildElement; | |||||
import org.apache.ant.common.model.ModelException; | import org.apache.ant.common.model.ModelException; | ||||
import org.apache.ant.common.model.Project; | import org.apache.ant.common.model.Project; | ||||
import org.apache.ant.common.model.Target; | import org.apache.ant.common.model.Target; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
import org.apache.ant.common.service.ComponentService; | import org.apache.ant.common.service.ComponentService; | ||||
import org.apache.ant.common.service.DataService; | import org.apache.ant.common.service.DataService; | ||||
import org.apache.ant.common.service.EventService; | import org.apache.ant.common.service.EventService; | ||||
@@ -84,7 +84,7 @@ import org.apache.ant.common.util.DemuxOutputReceiver; | |||||
import org.apache.ant.common.util.FileUtils; | import org.apache.ant.common.util.FileUtils; | ||||
import org.apache.ant.common.util.Location; | import org.apache.ant.common.util.Location; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.init.InitConfig; | |||||
import org.apache.ant.init.AntEnvironment; | |||||
import org.apache.ant.init.LoaderUtils; | import org.apache.ant.init.LoaderUtils; | ||||
/** | /** | ||||
@@ -129,7 +129,7 @@ public class Frame implements DemuxOutputReceiver { | |||||
* Ant's initialization configuration with information on the location of | * Ant's initialization configuration with information on the location of | ||||
* Ant and its libraries. | * Ant and its libraries. | ||||
*/ | */ | ||||
private InitConfig initConfig; | |||||
private AntEnvironment antEnv; | |||||
/** BuildEvent support used to fire events and manage listeners */ | /** BuildEvent support used to fire events and manage listeners */ | ||||
private BuildEventSupport eventSupport = new BuildEventSupport(); | private BuildEventSupport eventSupport = new BuildEventSupport(); | ||||
@@ -176,26 +176,26 @@ public class Frame implements DemuxOutputReceiver { | |||||
* Create the main or root Execution Frame. | * Create the main or root Execution Frame. | ||||
* | * | ||||
* @param config the user config to use for this execution of Ant | * @param config the user config to use for this execution of Ant | ||||
* @param initConfig Ant's initialisation config | |||||
* @param antEnv Ant's initialisation config | |||||
*/ | */ | ||||
public Frame(InitConfig initConfig, AntConfig config) { | |||||
public Frame(AntEnvironment antEnv, AntConfig config) { | |||||
this.config = config; | this.config = config; | ||||
this.initConfig = initConfig; | |||||
this.antEnv = antEnv; | |||||
this.parent = null; | this.parent = null; | ||||
this.libManager | this.libManager | ||||
= new AntLibManager(initConfig, config.isRemoteLibAllowed()); | |||||
= new AntLibManager(antEnv, config.isRemoteLibAllowed()); | |||||
} | } | ||||
/** | /** | ||||
* Create an Execution Frame. | * Create an Execution Frame. | ||||
* | * | ||||
* @param config the user config to use for this execution of Ant | * @param config the user config to use for this execution of Ant | ||||
* @param initConfig Ant's initialisation config | |||||
* @param antEnv Ant's initialisation config | |||||
* @param parent the frame creating this frame. | * @param parent the frame creating this frame. | ||||
*/ | */ | ||||
private Frame(InitConfig initConfig, AntConfig config, Frame parent) { | |||||
private Frame(AntEnvironment antEnv, AntConfig config, Frame parent) { | |||||
this.config = config; | this.config = config; | ||||
this.initConfig = initConfig; | |||||
this.antEnv = antEnv; | |||||
this.parent = parent; | this.parent = parent; | ||||
this.libManager = parent.libManager; | this.libManager = parent.libManager; | ||||
} | } | ||||
@@ -396,7 +396,7 @@ public class Frame implements DemuxOutputReceiver { | |||||
*/ | */ | ||||
protected void setMagicProperties() throws AntException { | protected void setMagicProperties() throws AntException { | ||||
// ant.home | // ant.home | ||||
URL antHomeURL = initConfig.getAntHome(); | |||||
URL antHomeURL = antEnv.getAntHome(); | |||||
String antHomeString = null; | String antHomeString = null; | ||||
if (antHomeURL.getProtocol().equals("file")) { | if (antHomeURL.getProtocol().equals("file")) { | ||||
@@ -500,8 +500,8 @@ public class Frame implements DemuxOutputReceiver { | |||||
* | * | ||||
* @return Ant's initialization configuration | * @return Ant's initialization configuration | ||||
*/ | */ | ||||
protected InitConfig getInitConfig() { | |||||
return initConfig; | |||||
protected AntEnvironment getAntEnvironment() { | |||||
return antEnv; | |||||
} | } | ||||
@@ -726,7 +726,7 @@ public class Frame implements DemuxOutputReceiver { | |||||
protected Frame createFrame(Project project) | protected Frame createFrame(Project project) | ||||
throws ModelException { | throws ModelException { | ||||
Frame newFrame | Frame newFrame | ||||
= new Frame(initConfig, config, this); | |||||
= new Frame(antEnv, config, this); | |||||
newFrame.setProject(project); | newFrame.setProject(project); | ||||
@@ -740,7 +740,8 @@ public class Frame implements DemuxOutputReceiver { | |||||
* will be added. | * will be added. | ||||
*/ | */ | ||||
protected void addListeners(Frame subFrame) { | protected void addListeners(Frame subFrame) { | ||||
for (Iterator j = eventSupport.getListeners(); j.hasNext();) { | |||||
List listeners = eventSupport.getListeners(); | |||||
for (Iterator j = listeners.iterator(); j.hasNext();) { | |||||
BuildListener listener = (BuildListener) j.next(); | BuildListener listener = (BuildListener) j.next(); | ||||
subFrame.addBuildListener(listener); | subFrame.addBuildListener(listener); | ||||
@@ -863,6 +864,10 @@ public class Frame implements DemuxOutputReceiver { | |||||
} | } | ||||
String fullProjectName = getFullProjectName(fullTargetName); | String fullProjectName = getFullProjectName(fullTargetName); | ||||
Frame frame = getContainingFrame(fullTargetName); | Frame frame = getContainingFrame(fullTargetName); | ||||
if (frame == null) { | |||||
throw new ExecutionException("No project available under the " | |||||
+ "referenced name \"" + fullTargetName, targetRefLocation); | |||||
} | |||||
String localTargetName = getNameInFrame(fullTargetName); | String localTargetName = getNameInFrame(fullTargetName); | ||||
Target target = frame.getProject().getTarget(localTargetName); | Target target = frame.getProject().getTarget(localTargetName); | ||||
if (target == null) { | if (target == null) { | ||||
@@ -930,17 +935,18 @@ public class Frame implements DemuxOutputReceiver { | |||||
* Execute a task with the given aspect values. | * Execute a task with the given aspect values. | ||||
* | * | ||||
* @param task the task to be executed. | * @param task the task to be executed. | ||||
* @param aspectValues the collection of aspect attribute values. | |||||
* @param namespaceValues the collection of namespace attribute values. | |||||
* @exception AntException if the task has a problem. | * @exception AntException if the task has a problem. | ||||
*/ | */ | ||||
protected void executeTask(Task task, AspectValueCollection aspectValues) | |||||
protected void executeTask(Task task, | |||||
NamespaceValueCollection namespaceValues) | |||||
throws AntException { | throws AntException { | ||||
List aspects = componentManager.getAspects(); | List aspects = componentManager.getAspects(); | ||||
Map aspectContexts = new HashMap(); | Map aspectContexts = new HashMap(); | ||||
for (Iterator i = aspects.iterator(); i.hasNext();) { | for (Iterator i = aspects.iterator(); i.hasNext();) { | ||||
Aspect aspect = (Aspect) i.next(); | Aspect aspect = (Aspect) i.next(); | ||||
Object aspectContext = aspect.preExecuteTask(task, aspectValues); | |||||
Object aspectContext = aspect.preExecuteTask(task, namespaceValues); | |||||
if (aspectContext != null) { | if (aspectContext != null) { | ||||
aspectContexts.put(aspect, aspectContext); | aspectContexts.put(aspect, aspectContext); | ||||
} | } | ||||
@@ -1156,14 +1162,14 @@ public class Frame implements DemuxOutputReceiver { | |||||
try { | try { | ||||
// load system ant lib | // load system ant lib | ||||
URL systemLibs | URL systemLibs | ||||
= new URL(initConfig.getLibraryURL(), "syslibs/"); | |||||
= new URL(antEnv.getLibraryURL(), "syslibs/"); | |||||
componentManager.loadLib(systemLibs, false); | componentManager.loadLib(systemLibs, false); | ||||
importStandardComponents(); | importStandardComponents(); | ||||
executeTasks(config.getGlobalTasks()); | executeTasks(config.getGlobalTasks()); | ||||
// now load other system libraries | // now load other system libraries | ||||
URL antLibs = new URL(initConfig.getLibraryURL(), "antlibs/"); | |||||
URL antLibs = new URL(antEnv.getLibraryURL(), "antlibs/"); | |||||
componentManager.loadLib(antLibs, false); | componentManager.loadLib(antLibs, false); | ||||
runBuild(targets); | runBuild(targets); | ||||
@@ -87,13 +87,13 @@ public class BuildElementHandler extends ModelElementHandler { | |||||
buildElement | buildElement | ||||
= new BuildElement(getLocation(), elementName); | = new BuildElement(getLocation(), elementName); | ||||
setModelElement(buildElement); | setModelElement(buildElement); | ||||
for (Iterator i = getAttributes(); i.hasNext();) { | for (Iterator i = getAttributes(); i.hasNext();) { | ||||
String attributeName = (String) i.next(); | String attributeName = (String) i.next(); | ||||
buildElement.addAttribute(attributeName, | buildElement.addAttribute(attributeName, | ||||
getAttribute(attributeName)); | getAttribute(attributeName)); | ||||
} | } | ||||
buildElement.addAspectAttributes(getAspectAttributes()); | |||||
addNamespaceAttributes(); | |||||
} | } | ||||
@@ -110,6 +110,7 @@ public class BuildElementHandler extends ModelElementHandler { | |||||
public void startElement(String uri, String localName, String qualifiedName, | public void startElement(String uri, String localName, String qualifiedName, | ||||
Attributes attributes) | Attributes attributes) | ||||
throws SAXParseException { | throws SAXParseException { | ||||
// everything within a task element is also a task element | // everything within a task element is also a task element | ||||
BuildElementHandler nestedHandler | BuildElementHandler nestedHandler | ||||
= new BuildElementHandler(); | = new BuildElementHandler(); | ||||
@@ -55,6 +55,8 @@ package org.apache.ant.antcore.modelparser; | |||||
import org.apache.ant.antcore.xml.ElementHandler; | import org.apache.ant.antcore.xml.ElementHandler; | ||||
import org.apache.ant.common.model.ModelElement; | import org.apache.ant.common.model.ModelElement; | ||||
import java.util.Iterator; | |||||
import org.apache.ant.common.util.AttributeCollection; | |||||
/** | /** | ||||
* A BuildElementHandler parses the task elements of a build. Task elements | * A BuildElementHandler parses the task elements of a build. Task elements | ||||
@@ -84,5 +86,18 @@ public abstract class ModelElementHandler extends ElementHandler { | |||||
modelElement.setEndLocation(getLocation()); | modelElement.setEndLocation(getLocation()); | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Add all attributes which belong to namespaces rather than the default | |||||
* namespace for the build files. | |||||
*/ | |||||
protected void addNamespaceAttributes() { | |||||
for (Iterator i = getNamespaces(); i.hasNext();) { | |||||
String uri = (String) i.next(); | |||||
AttributeCollection namespaceValues = getNamespaceAttributes(uri); | |||||
modelElement.addNamespaceAttributes(uri, namespaceValues); | |||||
} | |||||
} | |||||
} | } | ||||
@@ -77,10 +77,10 @@ public class ProjectHandler extends ModelElementHandler { | |||||
/** The name of the element used to define references */ | /** The name of the element used to define references */ | ||||
public static final String REF_ELEMENT = "ant:ref"; | public static final String REF_ELEMENT = "ant:ref"; | ||||
/** The name of the element used to define references */ | /** The name of the element used to define references */ | ||||
public static final String INCLUDE_ELEMENT = "ant:include"; | public static final String INCLUDE_ELEMENT = "ant:include"; | ||||
/** The name of the element used to define references */ | /** The name of the element used to define references */ | ||||
public static final String TARGET_ELEMENT = "target"; | public static final String TARGET_ELEMENT = "target"; | ||||
@@ -129,11 +129,11 @@ public class ProjectHandler extends ModelElementHandler { | |||||
if (project == null) { | if (project == null) { | ||||
project = new Project(getElementSource(), getLocation()); | project = new Project(getElementSource(), getLocation()); | ||||
setModelElement(project); | setModelElement(project); | ||||
project.setDefaultTarget(getAttribute(DEFAULT_ATTR)); | project.setDefaultTarget(getAttribute(DEFAULT_ATTR)); | ||||
project.setBase(getAttribute(BASEDIR_ATTR)); | project.setBase(getAttribute(BASEDIR_ATTR)); | ||||
project.setName(getAttribute(NAME_ATTR)); | project.setName(getAttribute(NAME_ATTR)); | ||||
project.addAspectAttributes(getAspectAttributes()); | |||||
addNamespaceAttributes(); | |||||
} | } | ||||
} | } | ||||
@@ -76,7 +76,7 @@ public class TargetHandler extends ModelElementHandler { | |||||
/** The if attribute name */ | /** The if attribute name */ | ||||
public static final String IF_ATTR = "if"; | public static final String IF_ATTR = "if"; | ||||
/** The unless attribute name */ | /** The unless attribute name */ | ||||
public static final String UNLESS_ATTR = "unless"; | public static final String UNLESS_ATTR = "unless"; | ||||
@@ -105,7 +105,7 @@ public class TargetHandler extends ModelElementHandler { | |||||
target = new Target(getLocation(), getAttribute(NAME_ATTR)); | target = new Target(getLocation(), getAttribute(NAME_ATTR)); | ||||
setModelElement(target); | setModelElement(target); | ||||
target.setDescription(getAttribute(DESC_ATTR)); | target.setDescription(getAttribute(DESC_ATTR)); | ||||
target.addAspectAttributes(getAspectAttributes()); | |||||
addNamespaceAttributes(); | |||||
String depends = getAttribute(DEPENDS_ATTR); | String depends = getAttribute(DEPENDS_ATTR); | ||||
if (depends != null) { | if (depends != null) { | ||||
@@ -151,9 +151,9 @@ public class TargetHandler extends ModelElementHandler { | |||||
protected void validateAttribute(String attributeName, | protected void validateAttribute(String attributeName, | ||||
String attributeValue) | String attributeValue) | ||||
throws SAXParseException { | throws SAXParseException { | ||||
if (!attributeName.equals(NAME_ATTR) | |||||
&& !attributeName.equals(DEPENDS_ATTR) | |||||
&& !attributeName.equals(DESC_ATTR) | |||||
if (!attributeName.equals(NAME_ATTR) | |||||
&& !attributeName.equals(DEPENDS_ATTR) | |||||
&& !attributeName.equals(DESC_ATTR) | |||||
&& !attributeName.equals(IF_ATTR) | && !attributeName.equals(IF_ATTR) | ||||
&& !attributeName.equals(UNLESS_ATTR)) { | && !attributeName.equals(UNLESS_ATTR)) { | ||||
throwInvalidAttribute(attributeName); | throwInvalidAttribute(attributeName); | ||||
@@ -78,6 +78,7 @@ public class XMLProjectParser { | |||||
throws XMLParseException { | throws XMLParseException { | ||||
try { | try { | ||||
ParseContext context = new ParseContext(); | ParseContext context = new ParseContext(); | ||||
context.declareNamespace("ant", "http://jakarta.apache.org/ant"); | |||||
ProjectHandler projectHandler = new ProjectHandler(); | ProjectHandler projectHandler = new ProjectHandler(); | ||||
context.parse(buildSource, "project", projectHandler); | context.parse(buildSource, "project", projectHandler); | ||||
@@ -58,6 +58,7 @@ import java.util.Iterator; | |||||
import java.util.Map; | import java.util.Map; | ||||
import org.apache.ant.common.util.Location; | import org.apache.ant.common.util.Location; | ||||
import org.apache.ant.common.util.AttributeCollection; | |||||
import org.xml.sax.Attributes; | import org.xml.sax.Attributes; | ||||
import org.xml.sax.ContentHandler; | import org.xml.sax.ContentHandler; | ||||
import org.xml.sax.Locator; | import org.xml.sax.Locator; | ||||
@@ -98,10 +99,13 @@ public abstract class ElementHandler extends DefaultHandler { | |||||
private String elementName; | private String elementName; | ||||
/** The attributes read from this element */ | /** The attributes read from this element */ | ||||
private Map elementAttributes; | |||||
private AttributeCollection elementAttributes; | |||||
/** The aspect attributes read from the element definition */ | |||||
private Map aspectAttributes; | |||||
/** | |||||
* This map contains a set of attribute collections for each namespace | |||||
* encountered. | |||||
*/ | |||||
private Map namespaces; | |||||
/** The content of this element */ | /** The content of this element */ | ||||
private String content; | private String content; | ||||
@@ -115,6 +119,29 @@ public abstract class ElementHandler extends DefaultHandler { | |||||
return source; | return source; | ||||
} | } | ||||
/** | |||||
* Get an interator over the namespace URIs encountered in the processing | |||||
* of the element | |||||
* | |||||
* @return an iterator over the namespace URIs. | |||||
*/ | |||||
public Iterator getNamespaces() { | |||||
return namespaces.keySet().iterator(); | |||||
} | |||||
/** | |||||
* Get the collection of namespace attributes for a given namespace. | |||||
* | |||||
* @param uri the URI of the namespace from which the attribute collection | |||||
* is required. | |||||
* | |||||
* @return an attribute collection if any attributes of the requested | |||||
* namespace have beebn encountered - otherwise null. | |||||
*/ | |||||
public AttributeCollection getNamespaceAttributes(String uri) { | |||||
return (AttributeCollection) namespaces.get(uri); | |||||
} | |||||
/** | /** | ||||
* Gets the attributeValue attribute of the ElementHandler object | * Gets the attributeValue attribute of the ElementHandler object | ||||
* | * | ||||
@@ -123,7 +150,7 @@ public abstract class ElementHandler extends DefaultHandler { | |||||
* snot defined. | * snot defined. | ||||
*/ | */ | ||||
public String getAttribute(String attributeName) { | public String getAttribute(String attributeName) { | ||||
return (String) elementAttributes.get(attributeName); | |||||
return elementAttributes.getAttribute(attributeName); | |||||
} | } | ||||
/** | /** | ||||
@@ -135,23 +162,14 @@ public abstract class ElementHandler extends DefaultHandler { | |||||
protected boolean getBooleanAttribute(String attributeName) { | protected boolean getBooleanAttribute(String attributeName) { | ||||
return PropertyUtils.toBoolean(getAttribute(attributeName)); | return PropertyUtils.toBoolean(getAttribute(attributeName)); | ||||
} | } | ||||
/** | /** | ||||
* Get an iterator to this elements attributes | * Get an iterator to this elements attributes | ||||
* | * | ||||
* @return an iterator over the attribute names | * @return an iterator over the attribute names | ||||
*/ | */ | ||||
public Iterator getAttributes() { | public Iterator getAttributes() { | ||||
return elementAttributes.keySet().iterator(); | |||||
} | |||||
/** | |||||
* Get the aspect attributes of this element. | |||||
* | |||||
* @return The aspect attributes. | |||||
*/ | |||||
public Map getAspectAttributes() { | |||||
return aspectAttributes; | |||||
return elementAttributes.getAttributeNames(); | |||||
} | } | ||||
/** | /** | ||||
@@ -313,17 +331,35 @@ public abstract class ElementHandler extends DefaultHandler { | |||||
*/ | */ | ||||
protected final void processAttributes(Attributes attributes) | protected final void processAttributes(Attributes attributes) | ||||
throws SAXParseException { | throws SAXParseException { | ||||
aspectAttributes = new HashMap(); | |||||
elementAttributes = new HashMap(); | |||||
int length = attributes.getLength(); | |||||
namespaces = new HashMap(); | |||||
elementAttributes = new AttributeCollection(); | |||||
int length = attributes.getLength(); | |||||
for (int i = 0; i < length; ++i) { | for (int i = 0; i < length; ++i) { | ||||
String attributeName = attributes.getQName(i); | |||||
String uri = attributes.getURI(i); | |||||
if (uri != null && uri.trim().length() == 0) { | |||||
uri = null; | |||||
} | |||||
String localName = attributes.getLocalName(i); | |||||
String qName = attributes.getQName(i); | |||||
if (uri == null && qName.indexOf(":") != -1) { | |||||
// try to resolve through known namespaces | |||||
uri = context.resolveNamespace(qName); | |||||
localName = qName.substring(qName.indexOf(":") + 1); | |||||
} | |||||
String attributeValue = attributes.getValue(i); | String attributeValue = attributes.getValue(i); | ||||
if (attributeName.indexOf(":") != -1) { | |||||
aspectAttributes.put(attributeName, attributeValue); | |||||
if (uri != null) { | |||||
AttributeCollection namespaceAttributes | |||||
= (AttributeCollection) namespaces.get(uri); | |||||
if (namespaceAttributes == null) { | |||||
namespaceAttributes = new AttributeCollection(); | |||||
namespaces.put(uri, namespaceAttributes); | |||||
} | |||||
namespaceAttributes.putAttribute(localName, attributeValue); | |||||
} else { | } else { | ||||
validateAttribute(attributeName, attributeValue); | |||||
elementAttributes.put(attributeName, attributeValue); | |||||
validateAttribute(localName, attributeValue); | |||||
elementAttributes.putAttribute(localName, attributeValue); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -54,6 +54,8 @@ | |||||
package org.apache.ant.antcore.xml; | package org.apache.ant.antcore.xml; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.util.Map; | |||||
import java.util.HashMap; | |||||
import java.net.URL; | import java.net.URL; | ||||
import javax.xml.parsers.ParserConfigurationException; | import javax.xml.parsers.ParserConfigurationException; | ||||
import javax.xml.parsers.SAXParser; | import javax.xml.parsers.SAXParser; | ||||
@@ -73,6 +75,9 @@ import org.xml.sax.XMLReader; | |||||
* @created 9 January 2002 | * @created 9 January 2002 | ||||
*/ | */ | ||||
public class ParseContext { | public class ParseContext { | ||||
/** These are namespace to URIs which need not be declared in the XML */ | |||||
private Map knownNamespaces = new HashMap(); | |||||
/** | /** | ||||
* Used to check if we are trying to parse a build file within its own | * Used to check if we are trying to parse a build file within its own | ||||
* context. | * context. | ||||
@@ -145,5 +150,29 @@ public class ParseContext { | |||||
throw new XMLParseException(e); | throw new XMLParseException(e); | ||||
} | } | ||||
} | } | ||||
/** | |||||
* Given an XML qName, this method tries to resolve a name into a URI | |||||
* using the map of well known namespaces. | |||||
* | |||||
* @param qName the XML qName | |||||
* @return the namespace URI for the given name. If the namespace | |||||
* prefix is unknown the prefix is returned. | |||||
*/ | |||||
public String resolveNamespace(String qName) { | |||||
String namespaceId = qName.substring(0, qName.indexOf(":")); | |||||
String namespaceURI = (String) knownNamespaces.get(namespaceId); | |||||
return namespaceURI == null ? namespaceId : namespaceURI; | |||||
} | |||||
/** | |||||
* Declare a namespace | |||||
* | |||||
* @param prefix the prefix that is used in the XML for the namespace. | |||||
* @param uri the namespace's unique URI. | |||||
*/ | |||||
public void declareNamespace(String prefix, String uri) { | |||||
knownNamespaces.put(prefix, uri); | |||||
} | |||||
} | } | ||||
@@ -1,18 +1,21 @@ | |||||
<antlib libid="ant.ant1compat" | |||||
<antlib libid="ant.ant1compat" | |||||
home="http://jakarta.apache.org/ant" | home="http://jakarta.apache.org/ant" | ||||
reqxml="true" reqtools="true" | reqxml="true" reqtools="true" | ||||
extends="ant.system"> | extends="ant.system"> | ||||
<factory classname="org.apache.tools.ant.Ant1Factory"/> | <factory classname="org.apache.tools.ant.Ant1Factory"/> | ||||
<converter classname="org.apache.tools.ant.Ant1Converter"/> | |||||
<!-- typedefs --> | |||||
<converter classname="org.apache.tools.ant.Ant1Converter"/> | |||||
<!-- taskdefs --> | |||||
<taskdef name="WsdlToDotnet" classname="org.apache.tools.ant.taskdefs.optional.dotnet.WsdlToDotnet"/> | |||||
<taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR"/> | <taskdef name="antlr" classname="org.apache.tools.ant.taskdefs.optional.ANTLR"/> | ||||
<taskdef name="antstructure" classname="org.apache.tools.ant.taskdefs.AntStructure"/> | <taskdef name="antstructure" classname="org.apache.tools.ant.taskdefs.AntStructure"/> | ||||
<taskdef name="apply" classname="org.apache.tools.ant.taskdefs.Transform"/> | <taskdef name="apply" classname="org.apache.tools.ant.taskdefs.Transform"/> | ||||
<taskdef name="available" classname="org.apache.tools.ant.taskdefs.Available"/> | <taskdef name="available" classname="org.apache.tools.ant.taskdefs.Available"/> | ||||
<taskdef name="basename" classname="org.apache.tools.ant.taskdefs.Basename"/> | |||||
<taskdef name="blgenclient" classname="org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient"/> | <taskdef name="blgenclient" classname="org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient"/> | ||||
<taskdef name="buildnumber" classname="org.apache.tools.ant.taskdefs.BuildNumber"/> | |||||
<taskdef name="bunzip2" classname="org.apache.tools.ant.taskdefs.BUnzip2"/> | <taskdef name="bunzip2" classname="org.apache.tools.ant.taskdefs.BUnzip2"/> | ||||
<taskdef name="bzip2" classname="org.apache.tools.ant.taskdefs.BZip2"/> | <taskdef name="bzip2" classname="org.apache.tools.ant.taskdefs.BZip2"/> | ||||
<taskdef name="cab" classname="org.apache.tools.ant.taskdefs.optional.Cab"/> | <taskdef name="cab" classname="org.apache.tools.ant.taskdefs.optional.Cab"/> | ||||
@@ -27,15 +30,19 @@ | |||||
<taskdef name="ccupdate" classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate"/> | <taskdef name="ccupdate" classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate"/> | ||||
<taskdef name="checksum" classname="org.apache.tools.ant.taskdefs.Checksum"/> | <taskdef name="checksum" classname="org.apache.tools.ant.taskdefs.Checksum"/> | ||||
<taskdef name="chmod" classname="org.apache.tools.ant.taskdefs.Chmod"/> | <taskdef name="chmod" classname="org.apache.tools.ant.taskdefs.Chmod"/> | ||||
<taskdef name="concat" classname="org.apache.tools.ant.taskdefs.Concat"/> | |||||
<taskdef name="condition" classname="org.apache.tools.ant.taskdefs.ConditionTask"/> | <taskdef name="condition" classname="org.apache.tools.ant.taskdefs.ConditionTask"/> | ||||
<taskdef name="copy" classname="org.apache.tools.ant.taskdefs.Copy"/> | <taskdef name="copy" classname="org.apache.tools.ant.taskdefs.Copy"/> | ||||
<taskdef name="csc" classname="org.apache.tools.ant.taskdefs.optional.dotnet.CSharp"/> | <taskdef name="csc" classname="org.apache.tools.ant.taskdefs.optional.dotnet.CSharp"/> | ||||
<taskdef name="cvs" classname="org.apache.tools.ant.taskdefs.Cvs"/> | <taskdef name="cvs" classname="org.apache.tools.ant.taskdefs.Cvs"/> | ||||
<taskdef name="cvschangelog" classname="org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask"/> | |||||
<taskdef name="cvspass" classname="org.apache.tools.ant.taskdefs.CVSPass"/> | <taskdef name="cvspass" classname="org.apache.tools.ant.taskdefs.CVSPass"/> | ||||
<taskdef name="cvstagdiff" classname="org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff"/> | |||||
<taskdef name="ddcreator" classname="org.apache.tools.ant.taskdefs.optional.ejb.DDCreator"/> | <taskdef name="ddcreator" classname="org.apache.tools.ant.taskdefs.optional.ejb.DDCreator"/> | ||||
<taskdef name="delete" classname="org.apache.tools.ant.taskdefs.Delete"/> | <taskdef name="delete" classname="org.apache.tools.ant.taskdefs.Delete"/> | ||||
<taskdef name="depend" classname="org.apache.tools.ant.taskdefs.optional.depend.Depend"/> | <taskdef name="depend" classname="org.apache.tools.ant.taskdefs.optional.depend.Depend"/> | ||||
<taskdef name="dependset" classname="org.apache.tools.ant.taskdefs.DependSet"/> | <taskdef name="dependset" classname="org.apache.tools.ant.taskdefs.DependSet"/> | ||||
<taskdef name="dirname" classname="org.apache.tools.ant.taskdefs.Dirname"/> | |||||
<taskdef name="ear" classname="org.apache.tools.ant.taskdefs.Ear"/> | <taskdef name="ear" classname="org.apache.tools.ant.taskdefs.Ear"/> | ||||
<taskdef name="echo" classname="org.apache.tools.ant.taskdefs.Echo"/> | <taskdef name="echo" classname="org.apache.tools.ant.taskdefs.Echo"/> | ||||
<taskdef name="echoproperties" classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"/> | <taskdef name="echoproperties" classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"/> | ||||
@@ -56,6 +63,10 @@ | |||||
<taskdef name="input" classname="org.apache.tools.ant.taskdefs.Input"/> | <taskdef name="input" classname="org.apache.tools.ant.taskdefs.Input"/> | ||||
<taskdef name="iplanet-ejbc" classname="org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask"/> | <taskdef name="iplanet-ejbc" classname="org.apache.tools.ant.taskdefs.optional.ejb.IPlanetEjbcTask"/> | ||||
<taskdef name="jar" classname="org.apache.tools.ant.taskdefs.Jar"/> | <taskdef name="jar" classname="org.apache.tools.ant.taskdefs.Jar"/> | ||||
<taskdef name="jarlib-available" classname="org.apache.tools.ant.taskdefs.optional.extension.JarLibAvailableTask"/> | |||||
<taskdef name="jarlib-display" classname="org.apache.tools.ant.taskdefs.optional.extension.JarLibDisplayTask"/> | |||||
<taskdef name="jarlib-manifest" classname="org.apache.tools.ant.taskdefs.optional.extension.JarLibManifestTask"/> | |||||
<taskdef name="jarlib-resolve" classname="org.apache.tools.ant.taskdefs.optional.extension.JarLibResolveTask"/> | |||||
<taskdef name="java" classname="org.apache.tools.ant.taskdefs.Java"/> | <taskdef name="java" classname="org.apache.tools.ant.taskdefs.Java"/> | ||||
<taskdef name="javac" classname="org.apache.tools.ant.taskdefs.Javac"/> | <taskdef name="javac" classname="org.apache.tools.ant.taskdefs.Javac"/> | ||||
<taskdef name="javacc" classname="org.apache.tools.ant.taskdefs.optional.javacc.JavaCC"/> | <taskdef name="javacc" classname="org.apache.tools.ant.taskdefs.optional.javacc.JavaCC"/> | ||||
@@ -65,13 +76,13 @@ | |||||
<taskdef name="jjtree" classname="org.apache.tools.ant.taskdefs.optional.javacc.JJTree"/> | <taskdef name="jjtree" classname="org.apache.tools.ant.taskdefs.optional.javacc.JJTree"/> | ||||
<taskdef name="jlink" classname="org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask"/> | <taskdef name="jlink" classname="org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask"/> | ||||
<taskdef name="jpcoverage" classname="org.apache.tools.ant.taskdefs.optional.sitraka.Coverage"/> | <taskdef name="jpcoverage" classname="org.apache.tools.ant.taskdefs.optional.sitraka.Coverage"/> | ||||
<taskdef name="jpcovmerge" classname="org.apache.tools.ant.taskdefs.optional.sitraka.CovMerge"/> | |||||
<taskdef name="jpcovreport" classname="org.apache.tools.ant.taskdefs.optional.sitraka.CovReport"/> | <taskdef name="jpcovreport" classname="org.apache.tools.ant.taskdefs.optional.sitraka.CovReport"/> | ||||
<taskdef name="jspc" classname="org.apache.tools.ant.taskdefs.optional.jsp.JspC"/> | <taskdef name="jspc" classname="org.apache.tools.ant.taskdefs.optional.jsp.JspC"/> | ||||
<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/> | <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/> | ||||
<taskdef name="junitreport" classname="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator"/> | <taskdef name="junitreport" classname="org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator"/> | ||||
<taskdef name="loadfile" classname="org.apache.tools.ant.taskdefs.LoadFile"/> | <taskdef name="loadfile" classname="org.apache.tools.ant.taskdefs.LoadFile"/> | ||||
<taskdef name="mail" classname="org.apache.tools.ant.taskdefs.SendEmail"/> | |||||
<taskdef name="loadproperties" classname="org.apache.tools.ant.taskdefs.LoadProperties"/> | |||||
<taskdef name="mail" classname="org.apache.tools.ant.taskdefs.email.EmailTask"/> | |||||
<taskdef name="manifest" classname="org.apache.tools.ant.taskdefs.Manifest"/> | <taskdef name="manifest" classname="org.apache.tools.ant.taskdefs.Manifest"/> | ||||
<taskdef name="maudit" classname="org.apache.tools.ant.taskdefs.optional.metamata.MAudit"/> | <taskdef name="maudit" classname="org.apache.tools.ant.taskdefs.optional.metamata.MAudit"/> | ||||
<taskdef name="mimemail" classname="org.apache.tools.ant.taskdefs.optional.net.MimeMail"/> | <taskdef name="mimemail" classname="org.apache.tools.ant.taskdefs.optional.net.MimeMail"/> | ||||
@@ -101,6 +112,8 @@ | |||||
<taskdef name="rmic" classname="org.apache.tools.ant.taskdefs.Rmic"/> | <taskdef name="rmic" classname="org.apache.tools.ant.taskdefs.Rmic"/> | ||||
<taskdef name="rpm" classname="org.apache.tools.ant.taskdefs.optional.Rpm"/> | <taskdef name="rpm" classname="org.apache.tools.ant.taskdefs.optional.Rpm"/> | ||||
<taskdef name="script" classname="org.apache.tools.ant.taskdefs.optional.Script"/> | <taskdef name="script" classname="org.apache.tools.ant.taskdefs.optional.Script"/> | ||||
<taskdef name="serverdeploy" classname="org.apache.tools.ant.taskdefs.optional.j2ee.ServerDeploy"/> | |||||
<taskdef name="setproxy" classname="org.apache.tools.ant.taskdefs.optional.net.SetProxy"/> | |||||
<taskdef name="signjar" classname="org.apache.tools.ant.taskdefs.SignJar"/> | <taskdef name="signjar" classname="org.apache.tools.ant.taskdefs.SignJar"/> | ||||
<taskdef name="sleep" classname="org.apache.tools.ant.taskdefs.Sleep"/> | <taskdef name="sleep" classname="org.apache.tools.ant.taskdefs.Sleep"/> | ||||
<taskdef name="soscheckin" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin"/> | <taskdef name="soscheckin" classname="org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin"/> | ||||
@@ -119,6 +132,7 @@ | |||||
<taskdef name="tar" classname="org.apache.tools.ant.taskdefs.Tar"/> | <taskdef name="tar" classname="org.apache.tools.ant.taskdefs.Tar"/> | ||||
<taskdef name="taskdef" classname="org.apache.tools.ant.taskdefs.Taskdef"/> | <taskdef name="taskdef" classname="org.apache.tools.ant.taskdefs.Taskdef"/> | ||||
<taskdef name="telnet" classname="org.apache.tools.ant.taskdefs.optional.net.TelnetTask"/> | <taskdef name="telnet" classname="org.apache.tools.ant.taskdefs.optional.net.TelnetTask"/> | ||||
<taskdef name="tempfile" classname="org.apache.tools.ant.taskdefs.TempFile"/> | |||||
<taskdef name="test" classname="org.apache.tools.ant.taskdefs.optional.Test"/> | <taskdef name="test" classname="org.apache.tools.ant.taskdefs.optional.Test"/> | ||||
<taskdef name="touch" classname="org.apache.tools.ant.taskdefs.Touch"/> | <taskdef name="touch" classname="org.apache.tools.ant.taskdefs.Touch"/> | ||||
<taskdef name="translate" classname="org.apache.tools.ant.taskdefs.optional.i18n.Translate"/> | <taskdef name="translate" classname="org.apache.tools.ant.taskdefs.optional.i18n.Translate"/> | ||||
@@ -132,8 +146,11 @@ | |||||
<taskdef name="vajexport" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJExport"/> | <taskdef name="vajexport" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJExport"/> | ||||
<taskdef name="vajimport" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJImport"/> | <taskdef name="vajimport" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJImport"/> | ||||
<taskdef name="vajload" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJLoadProjects"/> | <taskdef name="vajload" classname="org.apache.tools.ant.taskdefs.optional.ide.VAJLoadProjects"/> | ||||
<taskdef name="vssadd" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSADD"/> | |||||
<taskdef name="vsscheckin" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN"/> | <taskdef name="vsscheckin" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN"/> | ||||
<taskdef name="vsscheckout" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT"/> | <taskdef name="vsscheckout" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT"/> | ||||
<taskdef name="vsscp" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCP"/> | |||||
<taskdef name="vsscreate" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSCREATE"/> | |||||
<taskdef name="vssget" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET"/> | <taskdef name="vssget" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET"/> | ||||
<taskdef name="vsshistory" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY"/> | <taskdef name="vsshistory" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY"/> | ||||
<taskdef name="vsslabel" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL"/> | <taskdef name="vsslabel" classname="org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL"/> | ||||
@@ -142,28 +159,36 @@ | |||||
<taskdef name="wljspc" classname="org.apache.tools.ant.taskdefs.optional.jsp.WLJspc"/> | <taskdef name="wljspc" classname="org.apache.tools.ant.taskdefs.optional.jsp.WLJspc"/> | ||||
<taskdef name="wlrun" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLRun"/> | <taskdef name="wlrun" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLRun"/> | ||||
<taskdef name="wlstop" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/> | <taskdef name="wlstop" classname="org.apache.tools.ant.taskdefs.optional.ejb.WLStop"/> | ||||
<taskdef name="wsdltodotnet" classname="org.apache.tools.ant.taskdefs.optional.dotnet.WsdlToDotnet"/> | |||||
<taskdef name="xmlproperty" classname="org.apache.tools.ant.taskdefs.XmlProperty"/> | |||||
<taskdef name="xmlvalidate" classname="org.apache.tools.ant.taskdefs.optional.XMLValidateTask"/> | <taskdef name="xmlvalidate" classname="org.apache.tools.ant.taskdefs.optional.XMLValidateTask"/> | ||||
<taskdef name="xslt" classname="org.apache.tools.ant.taskdefs.XSLTProcess"/> | |||||
<taskdef name="zip" classname="org.apache.tools.ant.taskdefs.Zip"/> | <taskdef name="zip" classname="org.apache.tools.ant.taskdefs.Zip"/> | ||||
<!-- Deprecated tasks --> | <!-- Deprecated tasks --> | ||||
<taskdef name="copydir" classname="org.apache.tools.ant.taskdefs.Copydir"/> | <taskdef name="copydir" classname="org.apache.tools.ant.taskdefs.Copydir"/> | ||||
<taskdef name="copyfile" classname="org.apache.tools.ant.taskdefs.Copyfile"/> | <taskdef name="copyfile" classname="org.apache.tools.ant.taskdefs.Copyfile"/> | ||||
<taskdef name="deltree" classname="org.apache.tools.ant.taskdefs.Deltree"/> | <taskdef name="deltree" classname="org.apache.tools.ant.taskdefs.Deltree"/> | ||||
<taskdef name="rename" classname="org.apache.tools.ant.taskdefs.Rename"/> | <taskdef name="rename" classname="org.apache.tools.ant.taskdefs.Rename"/> | ||||
<taskdef name="starteam" classname="org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut"/> | |||||
<!-- typedefs --> | |||||
<typedef name="path" classname="org.apache.tools.ant.types.Path"/> | |||||
<typedef name="fileset" classname="org.apache.tools.ant.types.FileSet"/> | |||||
<!-- typedefs --> | |||||
<typedef name="classfileset" classname="org.apache.tools.ant.types.optional.depend.ClassfileSet"/> | |||||
<typedef name="description" classname="org.apache.tools.ant.types.Description"/> | |||||
<typedef name="dirset" classname="org.apache.tools.ant.types.DirSet"/> | |||||
<typedef name="extension" classname="org.apache.tools.ant.taskdefs.optional.extension.ExtensionAdapter"/> | |||||
<typedef name="extensionSet" classname="org.apache.tools.ant.taskdefs.optional.extension.ExtensionSet"/> | |||||
<typedef name="filelist" classname="org.apache.tools.ant.types.FileList"/> | <typedef name="filelist" classname="org.apache.tools.ant.types.FileList"/> | ||||
<typedef name="patternset" classname="org.apache.tools.ant.types.PatternSet"/> | |||||
<typedef name="mapper" classname="org.apache.tools.ant.types.Mapper"/> | |||||
<typedef name="fileset" classname="org.apache.tools.ant.types.FileSet"/> | |||||
<typedef name="filterchain" classname="org.apache.tools.ant.types.FilterChain"/> | <typedef name="filterchain" classname="org.apache.tools.ant.types.FilterChain"/> | ||||
<typedef name="filterreader" classname="org.apache.tools.ant.types.AntFilterReader"/> | <typedef name="filterreader" classname="org.apache.tools.ant.types.AntFilterReader"/> | ||||
<typedef name="filterset" classname="org.apache.tools.ant.types.FilterSet"/> | <typedef name="filterset" classname="org.apache.tools.ant.types.FilterSet"/> | ||||
<typedef name="description" classname="org.apache.tools.ant.types.Description"/> | |||||
<typedef name="classfileset" classname="org.apache.tools.ant.types.optional.depend.ClassfileSet"/> | |||||
<typedef name="substitution" classname="org.apache.tools.ant.types.Substitution"/> | |||||
<typedef name="libfileset" classname="org.apache.tools.ant.taskdefs.optional.extension.LibFileSet"/> | |||||
<typedef name="mapper" classname="org.apache.tools.ant.types.Mapper"/> | |||||
<typedef name="path" classname="org.apache.tools.ant.types.Path"/> | |||||
<typedef name="patternset" classname="org.apache.tools.ant.types.PatternSet"/> | |||||
<typedef name="regexp" classname="org.apache.tools.ant.types.RegularExpression"/> | <typedef name="regexp" classname="org.apache.tools.ant.types.RegularExpression"/> | ||||
<typedef name="regularexpression" classname="org.apache.tools.ant.types.RegularExpression"/> | |||||
<typedef name="selector" classname="org.apache.tools.ant.types.selectors.SelectSelector"/> | |||||
<typedef name="substitution" classname="org.apache.tools.ant.types.Substitution"/> | |||||
<typedef name="xmlcatalog" classname="org.apache.tools.ant.types.XMLCatalog"/> | <typedef name="xmlcatalog" classname="org.apache.tools.ant.types.XMLCatalog"/> | ||||
</antlib> | </antlib> |
@@ -68,7 +68,6 @@ import java.util.Vector; | |||||
import org.apache.ant.common.antlib.AntContext; | import org.apache.ant.common.antlib.AntContext; | ||||
import org.apache.ant.common.antlib.AntLibFactory; | import org.apache.ant.common.antlib.AntLibFactory; | ||||
import org.apache.ant.common.event.MessageLevel; | import org.apache.ant.common.event.MessageLevel; | ||||
import org.apache.ant.common.service.BuildKey; | |||||
import org.apache.ant.common.service.ComponentService; | import org.apache.ant.common.service.ComponentService; | ||||
import org.apache.ant.common.service.DataService; | import org.apache.ant.common.service.DataService; | ||||
import org.apache.ant.common.service.ExecService; | import org.apache.ant.common.service.ExecService; | ||||
@@ -197,7 +196,7 @@ public class Project implements org.apache.ant.common.event.BuildListener { | |||||
/** | /** | ||||
* The build key used to control the proxied build. | * The build key used to control the proxied build. | ||||
*/ | */ | ||||
private BuildKey proxyBuildKey; | |||||
private Object proxyBuildKey; | |||||
/** | /** | ||||
* The subordinate project if proxying | * The subordinate project if proxying | ||||
@@ -57,7 +57,7 @@ import org.apache.ant.common.antlib.AbstractAspect; | |||||
import org.apache.ant.common.antlib.Task; | import org.apache.ant.common.antlib.Task; | ||||
import org.apache.ant.common.antlib.AntContext; | import org.apache.ant.common.antlib.AntContext; | ||||
import org.apache.ant.common.model.BuildElement; | import org.apache.ant.common.model.BuildElement; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.event.MessageLevel; | import org.apache.ant.common.event.MessageLevel; | ||||
import java.util.Date; | import java.util.Date; | ||||
@@ -97,8 +97,8 @@ public class MonitorAspect extends AbstractAspect { | |||||
* This join point is activated just prior to task execution. | * This join point is activated just prior to task execution. | ||||
* | * | ||||
* @param task the task being executed. | * @param task the task being executed. | ||||
* @param aspectValues a collection of aspect attribute values for use | |||||
* during the task execution - may be null if no aspect values are | |||||
* @param namespaceValues a collection of namesapce attribute values for use | |||||
* during the task execution - may be null if no namespace values are | |||||
* provided. | * provided. | ||||
* @return an object which indicates that this aspect wishes to | * @return an object which indicates that this aspect wishes to | ||||
* be notified after execution has been completed, in which case the obkect | * be notified after execution has been completed, in which case the obkect | ||||
@@ -106,7 +106,8 @@ public class MonitorAspect extends AbstractAspect { | |||||
* the aspect's postExecuteTask method will not be invoked. | * the aspect's postExecuteTask method will not be invoked. | ||||
* @exception AntException if the aspect cannot process the task. | * @exception AntException if the aspect cannot process the task. | ||||
*/ | */ | ||||
public Object preExecuteTask(Task task, AspectValueCollection aspectValues) | |||||
public Object preExecuteTask(Task task, | |||||
NamespaceValueCollection namespaceValues) | |||||
throws AntException { | throws AntException { | ||||
System.gc(); | System.gc(); | ||||
AntContext taskContext = task.getAntContext(); | AntContext taskContext = task.getAntContext(); | ||||
@@ -57,7 +57,6 @@ import java.io.PrintStream; | |||||
import java.io.FileOutputStream; | import java.io.FileOutputStream; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import org.apache.ant.common.model.Project; | import org.apache.ant.common.model.Project; | ||||
import org.apache.ant.common.service.BuildKey; | |||||
import org.apache.ant.common.service.ExecService; | import org.apache.ant.common.service.ExecService; | ||||
import org.apache.ant.common.service.FileService; | import org.apache.ant.common.service.FileService; | ||||
import org.apache.ant.common.service.MagicProperties; | import org.apache.ant.common.service.MagicProperties; | ||||
@@ -137,7 +136,7 @@ public class Ant extends AntBase { | |||||
ExecService execService = getExecService(); | ExecService execService = getExecService(); | ||||
Project model = execService.parseXMLBuildFile(antFile); | Project model = execService.parseXMLBuildFile(antFile); | ||||
BuildKey key = execService.setupBuild(model, getProperties(), true); | |||||
Object key = execService.setupBuild(model, getProperties(), true); | |||||
setSubBuildKey(key); | setSubBuildKey(key); | ||||
@@ -166,7 +165,7 @@ public class Ant extends AntBase { | |||||
} | } | ||||
execService.runBuild(key, getTargets()); | execService.runBuild(key, getTargets()); | ||||
execService.releaseBuild(key); | |||||
setSubBuildKey(null); | |||||
} | } | ||||
} | } | ||||
@@ -53,7 +53,6 @@ | |||||
*/ | */ | ||||
package org.apache.ant.antlib.system; | package org.apache.ant.antlib.system; | ||||
import java.util.Map; | |||||
import org.apache.ant.common.antlib.AbstractAspect; | import org.apache.ant.common.antlib.AbstractAspect; | ||||
import org.apache.ant.common.antlib.AntContext; | import org.apache.ant.common.antlib.AntContext; | ||||
import org.apache.ant.common.antlib.Task; | import org.apache.ant.common.antlib.Task; | ||||
@@ -62,7 +61,9 @@ import org.apache.ant.common.service.DataService; | |||||
import org.apache.ant.common.service.ComponentService; | import org.apache.ant.common.service.ComponentService; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.model.BuildElement; | import org.apache.ant.common.model.BuildElement; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
import org.apache.ant.common.util.AttributeCollection; | |||||
import org.apache.ant.common.constants.Namespace; | |||||
/** | /** | ||||
* The Ant aspect - handles all ant aspects | * The Ant aspect - handles all ant aspects | ||||
@@ -70,9 +71,6 @@ import org.apache.ant.common.model.AspectValueCollection; | |||||
* @author Conor MacNeill | * @author Conor MacNeill | ||||
*/ | */ | ||||
public class AntAspect extends AbstractAspect { | public class AntAspect extends AbstractAspect { | ||||
/** The Ant aspect used to identify Ant metadata */ | |||||
public static final String ANT_ASPECT = "ant"; | |||||
/** The core's data service implementation */ | /** The core's data service implementation */ | ||||
private DataService dataService = null; | private DataService dataService = null; | ||||
@@ -107,7 +105,8 @@ public class AntAspect extends AbstractAspect { | |||||
*/ | */ | ||||
public Object preCreateComponent(Object component, BuildElement model) | public Object preCreateComponent(Object component, BuildElement model) | ||||
throws AntException { | throws AntException { | ||||
String refId = model.getAspectAttributeValue(ANT_ASPECT, "refid"); | |||||
String refId | |||||
= model.getNamespaceAttributeValue(Namespace.ANT_META_URI, "refid"); | |||||
if (refId != null) { | if (refId != null) { | ||||
if (model.getAttributeNames().hasNext() || | if (model.getAttributeNames().hasNext() || | ||||
model.getNestedElements().hasNext() || | model.getNestedElements().hasNext() || | ||||
@@ -141,7 +140,8 @@ public class AntAspect extends AbstractAspect { | |||||
*/ | */ | ||||
public Object postCreateComponent(Object component, BuildElement model) | public Object postCreateComponent(Object component, BuildElement model) | ||||
throws AntException { | throws AntException { | ||||
String typeId = model.getAspectAttributeValue(ANT_ASPECT, "id"); | |||||
String typeId | |||||
= model.getNamespaceAttributeValue(Namespace.ANT_META_URI, "id"); | |||||
if (typeId != null) { | if (typeId != null) { | ||||
dataService.setMutableDataValue(typeId, component); | dataService.setMutableDataValue(typeId, component); | ||||
@@ -154,7 +154,7 @@ public class AntAspect extends AbstractAspect { | |||||
* This join point is activated just prior to task execution. | * This join point is activated just prior to task execution. | ||||
* | * | ||||
* @param task the task being executed. | * @param task the task being executed. | ||||
* @param aspectValues a collection of aspect attribute values for use | |||||
* @param namespaceValues a collection of namespace attribute values for use | |||||
* during the task execution. | * during the task execution. | ||||
* | * | ||||
* @return an objectwhich indicates that this aspect wishes to | * @return an objectwhich indicates that this aspect wishes to | ||||
@@ -163,10 +163,12 @@ public class AntAspect extends AbstractAspect { | |||||
* the aspect's postExecuteTask method will not be invoked. | * the aspect's postExecuteTask method will not be invoked. | ||||
* @exception AntException if the aspect cannot process the task. | * @exception AntException if the aspect cannot process the task. | ||||
*/ | */ | ||||
public Object preExecuteTask(Task task, AspectValueCollection aspectValues) | |||||
public Object preExecuteTask(Task task, | |||||
NamespaceValueCollection namespaceValues) | |||||
throws AntException { | throws AntException { | ||||
AntAspectContext aspectContext = new AntAspectContext(); | AntAspectContext aspectContext = new AntAspectContext(); | ||||
Map antAspectValues = aspectValues.getAttributes(ANT_ASPECT); | |||||
AttributeCollection antAspectValues | |||||
= namespaceValues.getAttributes(Namespace.ANT_META_URI); | |||||
if (antAspectValues == null) { | if (antAspectValues == null) { | ||||
return null; | return null; | ||||
} | } | ||||
@@ -56,7 +56,6 @@ import java.util.ArrayList; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.service.BuildKey; | |||||
/** | /** | ||||
* Common Base class for the Ant and AntCall tasks | * Common Base class for the Ant and AntCall tasks | ||||
@@ -81,7 +80,7 @@ public abstract class AntBase extends SubBuild { | |||||
/** | /** | ||||
* The key to the subbuild with which the Ant task can manage the subbuild | * The key to the subbuild with which the Ant task can manage the subbuild | ||||
*/ | */ | ||||
private BuildKey subbuildKey; | |||||
private Object subbuildKey; | |||||
/** The name of the target to be evaluated in the sub-build */ | /** The name of the target to be evaluated in the sub-build */ | ||||
private String targetName; | private String targetName; | ||||
@@ -181,7 +180,7 @@ public abstract class AntBase extends SubBuild { | |||||
* | * | ||||
* @param key the key returned by the Ant core for managing the subbuild | * @param key the key returned by the Ant core for managing the subbuild | ||||
*/ | */ | ||||
protected void setSubBuildKey(BuildKey key) { | |||||
protected void setSubBuildKey(Object key) { | |||||
this.subbuildKey = key; | this.subbuildKey = key; | ||||
} | } | ||||
@@ -54,7 +54,6 @@ | |||||
package org.apache.ant.antlib.system; | package org.apache.ant.antlib.system; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.service.MagicProperties; | import org.apache.ant.common.service.MagicProperties; | ||||
import org.apache.ant.common.service.BuildKey; | |||||
/** | /** | ||||
* The Ant task - used to execute a different build file | * The Ant task - used to execute a different build file | ||||
@@ -72,10 +71,10 @@ public class AntCall extends AntBase { | |||||
setProperty(MagicProperties.BASEDIR, | setProperty(MagicProperties.BASEDIR, | ||||
getExecService().getBaseDir().getAbsolutePath()); | getExecService().getBaseDir().getAbsolutePath()); | ||||
BuildKey key = getExecService().setupBuild(getProperties(), true); | |||||
Object key = getExecService().setupBuild(getProperties(), true); | |||||
setSubBuildKey(key); | setSubBuildKey(key); | ||||
getExecService().runBuild(key, getTargets()); | getExecService().runBuild(key, getTargets()); | ||||
getExecService().releaseBuild(key); | |||||
setSubBuildKey(null); | |||||
} | } | ||||
/** | /** | ||||
@@ -51,13 +51,27 @@ | |||||
* information on the Apache Software Foundation, please see | * information on the Apache Software Foundation, please see | ||||
* <http://www.apache.org/>. | * <http://www.apache.org/>. | ||||
*/ | */ | ||||
package org.apache.ant.common.service; | |||||
package org.apache.ant.common.constants; | |||||
/** | /** | ||||
* Opaque key used to refer to builds setup in the core. | |||||
* Namespace constants | |||||
* | * | ||||
* @author Conor MacNeill | * @author Conor MacNeill | ||||
* @created 14 June 2002 | |||||
*/ | */ | ||||
public interface BuildKey { | |||||
public class Namespace { | |||||
/** The Ant namespace used to identify Ant metadata */ | |||||
public static final String ANT_META_URI | |||||
= "http://jakarta.apache.org/ant/meta"; | |||||
/** The namespace id that is predeclared for the Ant metadata namespace */ | |||||
public static final String ANT_META_PREFIX = "ant"; | |||||
/** The XML Schema namespace */ | |||||
public static final String XSI_URI | |||||
= "http://www.w3.org/2001/XMLSchema-instance"; | |||||
/** The namespace id that is predeclared for the Ant metadata namespace */ | |||||
public static final String XSI_PREFIX = "xsi"; | |||||
} | } | ||||
@@ -55,7 +55,7 @@ package org.apache.ant.common.antlib; | |||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.model.BuildElement; | import org.apache.ant.common.model.BuildElement; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
/** | /** | ||||
* An implementation of the Aspect interface providing default behaviour. | * An implementation of the Aspect interface providing default behaviour. | ||||
@@ -126,8 +126,8 @@ public class AbstractAspect implements Aspect { | |||||
* This join point is activated just prior to task execution. | * This join point is activated just prior to task execution. | ||||
* | * | ||||
* @param task the task being executed. | * @param task the task being executed. | ||||
* @param aspectValues a collection of aspect attribute values for use | |||||
* during the task execution - may be null if no aspect values are | |||||
* @param namespaceValues a collection of namespace attribute values for use | |||||
* during the task execution - may be null if no namespace values are | |||||
* provided. | * provided. | ||||
* @return an object which indicates that this aspect wishes to | * @return an object which indicates that this aspect wishes to | ||||
* be notified after execution has been completed, in which case the obkect | * be notified after execution has been completed, in which case the obkect | ||||
@@ -135,7 +135,8 @@ public class AbstractAspect implements Aspect { | |||||
* the aspect's postExecuteTask method will not be invoked. | * the aspect's postExecuteTask method will not be invoked. | ||||
* @exception AntException if the aspect cannot process the task. | * @exception AntException if the aspect cannot process the task. | ||||
*/ | */ | ||||
public Object preExecuteTask(Task task, AspectValueCollection aspectValues) | |||||
public Object preExecuteTask(Task task, | |||||
NamespaceValueCollection namespaceValues) | |||||
throws AntException { | throws AntException { | ||||
return null; | return null; | ||||
} | } | ||||
@@ -55,7 +55,7 @@ package org.apache.ant.common.antlib; | |||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.model.BuildElement; | import org.apache.ant.common.model.BuildElement; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
/** | /** | ||||
* An aspect is a component which is activated across all task and | * An aspect is a component which is activated across all task and | ||||
@@ -108,8 +108,8 @@ public interface Aspect { | |||||
* This join point is activated just prior to task execution. | * This join point is activated just prior to task execution. | ||||
* | * | ||||
* @param task the task being executed. | * @param task the task being executed. | ||||
* @param aspectValues a collection of aspect attribute values for use | |||||
* during the task execution - may be null if no aspect values are | |||||
* @param namespaceValues a collection of namespace attribute values for use | |||||
* during the task execution - may be null if no namespace values are | |||||
* provided. | * provided. | ||||
* @return an object which indicates that this aspect wishes to | * @return an object which indicates that this aspect wishes to | ||||
* be notified after execution has been completed, in which case the obkect | * be notified after execution has been completed, in which case the obkect | ||||
@@ -117,7 +117,7 @@ public interface Aspect { | |||||
* the aspect's postExecuteTask method will not be invoked. | * the aspect's postExecuteTask method will not be invoked. | ||||
* @exception AntException if the aspect cannot process the task. | * @exception AntException if the aspect cannot process the task. | ||||
*/ | */ | ||||
Object preExecuteTask(Task task, AspectValueCollection aspectValues) | |||||
Object preExecuteTask(Task task, NamespaceValueCollection namespaceValues) | |||||
throws AntException; | throws AntException; | ||||
/** | /** | ||||
@@ -54,9 +54,9 @@ | |||||
package org.apache.ant.common.model; | package org.apache.ant.common.model; | ||||
import java.util.Iterator; | import java.util.Iterator; | ||||
import java.util.Map; | |||||
import org.apache.ant.common.util.Location; | import org.apache.ant.common.util.Location; | ||||
import org.apache.ant.common.util.AttributeCollection; | |||||
/** | /** | ||||
* A ModelElement is an element of a build model. A location may be | * A ModelElement is an element of a build model. A location may be | ||||
@@ -68,11 +68,12 @@ import org.apache.ant.common.util.Location; | |||||
*/ | */ | ||||
public abstract class ModelElement { | public abstract class ModelElement { | ||||
/** The aspectValues defined for this element. */ | /** The aspectValues defined for this element. */ | ||||
private AspectValueCollection aspectValues = new AspectValueCollection(); | |||||
private NamespaceValueCollection namespaceValues | |||||
= new NamespaceValueCollection(); | |||||
/** The starting location of this element */ | /** The starting location of this element */ | ||||
private Location location = Location.UNKNOWN_LOCATION; | private Location location = Location.UNKNOWN_LOCATION; | ||||
/** The ending location of this element */ | /** The ending location of this element */ | ||||
private Location endLocation = Location.UNKNOWN_LOCATION; | private Location endLocation = Location.UNKNOWN_LOCATION; | ||||
@@ -105,15 +106,17 @@ public abstract class ModelElement { | |||||
public void setEndLocation(Location endLocation) { | public void setEndLocation(Location endLocation) { | ||||
this.endLocation = endLocation; | this.endLocation = endLocation; | ||||
} | } | ||||
/** | /** | ||||
* Adds aspect related attributes of this element | |||||
* Adds attributes of a given namespace detected for this element. | |||||
* | * | ||||
* @param aspectAttributes a Map of aspect realted attributes that pertain | |||||
* to this model element. | |||||
* @param uri the namespace's URI. | |||||
* @param attributes the attribute collection of the namespace's attribute | |||||
* values. | |||||
*/ | */ | ||||
public void addAspectAttributes(Map aspectAttributes) { | |||||
aspectValues.addAttributes(aspectAttributes); | |||||
public void addNamespaceAttributes(String uri, | |||||
AttributeCollection attributes) { | |||||
namespaceValues.addAttributes(uri, attributes); | |||||
} | } | ||||
/** | /** | ||||
@@ -144,44 +147,45 @@ public abstract class ModelElement { | |||||
} | } | ||||
/** | /** | ||||
* Get an iterator on the aspectValues which have been given values on this | |||||
* Get an iterator on the namespaces which have been given values on this | |||||
* element | * element | ||||
* | * | ||||
* @return an iterator of Strings , being the aspectValues which have been | |||||
* @return an iterator of Strings, being the namespaces which have been | |||||
* given values on this element. | * given values on this element. | ||||
*/ | */ | ||||
public Iterator getAspectNames() { | |||||
return aspectValues.getNames(); | |||||
public Iterator getNamespaceURIs() { | |||||
return namespaceValues.getNames(); | |||||
} | } | ||||
/** | /** | ||||
* Get the set of attribute values related to the given aspect | |||||
* Get the set of attribute values related to the given namespace | |||||
* | * | ||||
* @param aspectName the aspect identifier | |||||
* @return a map of the attribute values for the given aspect. | |||||
* @param namespaceURI the namesace URI. | |||||
* @return a map of the attribute values for the given namespace. | |||||
*/ | */ | ||||
public Map getAspectAttributes(String aspectName) { | |||||
return aspectValues.getAttributes(aspectName); | |||||
public AttributeCollection getNamespaceAttributes(String namespaceURI) { | |||||
return namespaceValues.getAttributes(namespaceURI); | |||||
} | } | ||||
/** | /** | ||||
* Get the value of a single aspect attribute | |||||
* Get the value of a single namespace attribute | |||||
* | * | ||||
* @param aspectName the aspect name | |||||
* @param namepaceURI the aspect name | |||||
* @param keyName the attribute name | * @param keyName the attribute name | ||||
* @return the aspect value | * @return the aspect value | ||||
*/ | */ | ||||
public String getAspectAttributeValue(String aspectName, String keyName) { | |||||
return aspectValues.getAttributeValue(aspectName, keyName); | |||||
public String getNamespaceAttributeValue(String namepaceURI, | |||||
String keyName) { | |||||
return namespaceValues.getAttributeValue(namepaceURI, keyName); | |||||
} | } | ||||
/** | /** | ||||
* Get the complete collection of aspect attribute values. | |||||
* Get the complete collection of namespace attribute values. | |||||
* | * | ||||
* @return an AspectValueCollection instance. | |||||
* @return an NamespaceValueCollection instance. | |||||
*/ | */ | ||||
public AspectValueCollection getAspectAttributes() { | |||||
return aspectValues; | |||||
public NamespaceValueCollection getNamespaceAttributes() { | |||||
return namespaceValues; | |||||
} | } | ||||
} | } | ||||
@@ -55,80 +55,77 @@ package org.apache.ant.common.model; | |||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.Iterator; | import java.util.Iterator; | ||||
import java.util.Map; | import java.util.Map; | ||||
import org.apache.ant.common.util.AttributeCollection; | |||||
/** | /** | ||||
* The AspectValueCollection holds aspect values for a range of aspects. | |||||
* Values can be retrieved for a particular aspect attribute or all attributes | |||||
* of a given aspect. | |||||
* | |||||
* The NamespaceValueCollection holds namespace values for a range of | |||||
* namespaces. Values can be retrieved for a particular namespace attribute | |||||
* or all attributes of a given namespace. | |||||
* | |||||
* @author Conor MacNeill | * @author Conor MacNeill | ||||
* @created 11 January 2002 | * @created 11 January 2002 | ||||
*/ | */ | ||||
public class AspectValueCollection { | |||||
/** The aspects defined for this element. */ | |||||
private Map aspectMaps = new HashMap(); | |||||
public class NamespaceValueCollection { | |||||
/** | |||||
* The namespaces defined for this collection. Each entry is an attribute | |||||
* collection keyed by the namespace URI. | |||||
*/ | |||||
private Map namespaces = new HashMap(); | |||||
/** | /** | ||||
* Set the aspect attribute values. | |||||
* Add the attributes of a given namespace to this collection. | |||||
* | * | ||||
* The attributes are sorted into their various aspects | |||||
* | |||||
* @param attributes a Map of aspect attributes values. The keys are the | |||||
* aspect | |||||
* @param uri the namespace's URI. | |||||
* @param attributes the collection of attributes for the given namespace. | |||||
*/ | */ | ||||
public void addAttributes(Map attributes) { | |||||
for (Iterator i = attributes.keySet().iterator(); i.hasNext();) { | |||||
public void addAttributes(String uri, AttributeCollection attributes) { | |||||
AttributeCollection currentCollection | |||||
= (AttributeCollection) namespaces.get(uri); | |||||
if (currentCollection == null) { | |||||
currentCollection = new AttributeCollection(); | |||||
namespaces.put(uri, currentCollection); | |||||
} | |||||
for (Iterator i = attributes.getAttributeNames(); i.hasNext();) { | |||||
String attributeName = (String) i.next(); | String attributeName = (String) i.next(); | ||||
int separator = attributeName.indexOf(":"); | |||||
if (separator != -1) { | |||||
String aspectName = attributeName.substring(0, separator); | |||||
String name = attributeName.substring(separator + 1); | |||||
if (aspectName.length() != 0 && name.length() != 0) { | |||||
Map prefixMap = (Map) aspectMaps.get(aspectName); | |||||
if (prefixMap == null) { | |||||
prefixMap = new HashMap(); | |||||
aspectMaps.put(aspectName, prefixMap); | |||||
} | |||||
prefixMap.put(name, attributes.get(attributeName)); | |||||
} | |||||
} | |||||
currentCollection.putAttribute(attributeName, | |||||
attributes.getAttribute(attributeName)); | |||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Get an iterator on the aspects which have been given values on this | |||||
* element | |||||
* Get an iterator on the namespaces which have been given values on this | |||||
* collection | |||||
* | * | ||||
* @return an iterator of Strings , being the aspects which have been | |||||
* @return an iterator of Strings, being the namespaces which have been | |||||
* given values on this element. | * given values on this element. | ||||
*/ | */ | ||||
public Iterator getNames() { | public Iterator getNames() { | ||||
return aspectMaps.keySet().iterator(); | |||||
return namespaces.keySet().iterator(); | |||||
} | } | ||||
/** | /** | ||||
* Get the set of attribute values related to the given aspect | |||||
* Get the set of attribute values related to the given namespace | |||||
* | * | ||||
* @param aspectName the aspect name | |||||
* @return a map of the attribute values for the given aspect. | |||||
* @param namespaceURI the namespace URI | |||||
* @return an attribute collection | |||||
*/ | */ | ||||
public Map getAttributes(String aspectName) { | |||||
return (Map) aspectMaps.get(aspectName); | |||||
public AttributeCollection getAttributes(String namespaceURI) { | |||||
return (AttributeCollection) namespaces.get(namespaceURI); | |||||
} | } | ||||
/** | /** | ||||
* Get the value of a single aspect attribute | |||||
* Get the value of a single namespace attribute | |||||
* | * | ||||
* @param aspectName the prefix which identifies the aspectr | |||||
* @param namespaceURI the namespace URI | |||||
* @param keyName the attribute name | * @param keyName the attribute name | ||||
* @return the aspect value | |||||
* @return the namespace attribute value | |||||
*/ | */ | ||||
public String getAttributeValue(String aspectName, String keyName) { | |||||
Map aspectAttributes = getAttributes(aspectName); | |||||
if (aspectAttributes == null) { | |||||
public String getAttributeValue(String namespaceURI, String keyName) { | |||||
AttributeCollection namespaceAttributes = getAttributes(namespaceURI); | |||||
if (namespaceAttributes == null) { | |||||
return null; | return null; | ||||
} | } | ||||
return (String) aspectAttributes.get(keyName); | |||||
return namespaceAttributes.getAttribute(keyName); | |||||
} | } | ||||
} | } | ||||
@@ -53,9 +53,9 @@ | |||||
*/ | */ | ||||
package org.apache.ant.common.service; | package org.apache.ant.common.service; | ||||
import java.net.URL; | import java.net.URL; | ||||
import java.util.Map; | |||||
import org.apache.ant.common.antlib.AntLibFactory; | import org.apache.ant.common.antlib.AntLibFactory; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.util.AttributeCollection; | |||||
/** | /** | ||||
@@ -197,7 +197,7 @@ public interface ComponentService { | |||||
* @exception AntException if the object does not support an | * @exception AntException if the object does not support an | ||||
* attribute in the map. | * attribute in the map. | ||||
*/ | */ | ||||
void configureAttributes(Object object, Map attributeValues, | |||||
void configureAttributes(Object object, AttributeCollection attributeValues, | |||||
boolean ignoreUnsupported) | boolean ignoreUnsupported) | ||||
throws AntException; | throws AntException; | ||||
} | } | ||||
@@ -58,7 +58,7 @@ import java.util.Map; | |||||
import org.apache.ant.common.antlib.Task; | import org.apache.ant.common.antlib.Task; | ||||
import org.apache.ant.common.model.Project; | import org.apache.ant.common.model.Project; | ||||
import org.apache.ant.common.util.AntException; | import org.apache.ant.common.util.AntException; | ||||
import org.apache.ant.common.model.AspectValueCollection; | |||||
import org.apache.ant.common.model.NamespaceValueCollection; | |||||
import org.apache.ant.common.event.BuildListener; | import org.apache.ant.common.event.BuildListener; | ||||
/** | /** | ||||
@@ -101,7 +101,7 @@ public interface ExecService { | |||||
* @return a key to the build allowing it to be executed and managed | * @return a key to the build allowing it to be executed and managed | ||||
* @exception AntException if the subbuild cannot be setup | * @exception AntException if the subbuild cannot be setup | ||||
*/ | */ | ||||
BuildKey setupBuild(Project model, Map properties, boolean addListeners) | |||||
Object setupBuild(Project model, Map properties, boolean addListeners) | |||||
throws AntException; | throws AntException; | ||||
@@ -114,7 +114,7 @@ public interface ExecService { | |||||
* @return a key to the build allowing it to be executed and managed | * @return a key to the build allowing it to be executed and managed | ||||
* @exception AntException if the subbuild cannot be setup | * @exception AntException if the subbuild cannot be setup | ||||
*/ | */ | ||||
BuildKey setupBuild(Map properties, boolean addListeners) | |||||
Object setupBuild(Map properties, boolean addListeners) | |||||
throws AntException; | throws AntException; | ||||
@@ -126,7 +126,7 @@ public interface ExecService { | |||||
* @param libraryId the id of the library to be initialized. | * @param libraryId the id of the library to be initialized. | ||||
* @exception AntException if the build cannot be run | * @exception AntException if the build cannot be run | ||||
*/ | */ | ||||
void initializeBuildLibrary(BuildKey key, String libraryId) | |||||
void initializeBuildLibrary(Object key, String libraryId) | |||||
throws AntException; | throws AntException; | ||||
/** | /** | ||||
@@ -137,31 +137,21 @@ public interface ExecService { | |||||
* | * | ||||
* @exception AntException if the build cannot be found. | * @exception AntException if the build cannot be found. | ||||
*/ | */ | ||||
public void addBuildListener(BuildKey key, BuildListener listener) | |||||
void addBuildListener(Object key, BuildListener listener) | |||||
throws AntException; | throws AntException; | ||||
/** | /** | ||||
* Run a build which have been previously setup | * Run a build which have been previously setup | ||||
* | * | ||||
* @param buildKey the buildKey returned previously when the build was | |||||
* @param key the key returned previously when the build was | |||||
* setup | * setup | ||||
* @param targets A list of targets to be run | * @param targets A list of targets to be run | ||||
* @exception AntException if the build cannot be run | * @exception AntException if the build cannot be run | ||||
*/ | */ | ||||
void runBuild(BuildKey buildKey, List targets) | |||||
void runBuild(Object key, List targets) | |||||
throws AntException; | throws AntException; | ||||
/** | |||||
* Release a subbuild that is no longer in use. | |||||
* | |||||
* @param key the BuildKey identifiying the subbuild. | |||||
* | |||||
* @exception AntException if the build was not registered. | |||||
*/ | |||||
void releaseBuild(BuildKey key) throws AntException; | |||||
/** | /** | ||||
* execute a task. The task should have already been initialised by the | * execute a task. The task should have already been initialised by the | ||||
* core | * core | ||||
@@ -180,10 +170,10 @@ public interface ExecService { | |||||
* by their nature, aspect values are not part of the task configuration. | * by their nature, aspect values are not part of the task configuration. | ||||
* | * | ||||
* @param task the task to be executed | * @param task the task to be executed | ||||
* @param aspectValues the aspect attribute values. | |||||
* @param namespaceValues the namespace attribute values. | |||||
* @exception AntException if there is an execution problem | * @exception AntException if there is an execution problem | ||||
*/ | */ | ||||
void executeTask(Task task, AspectValueCollection aspectValues) | |||||
void executeTask(Task task, NamespaceValueCollection namespaceValues) | |||||
throws AntException; | throws AntException; | ||||
@@ -0,0 +1,99 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, if | |||||
* any, must include the following acknowlegement: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowlegement may appear in the software itself, | |||||
* if and wherever such third-party acknowlegements normally appear. | |||||
* | |||||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||||
* Foundation" must not be used to endorse or promote products derived | |||||
* from this software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache" | |||||
* nor may "Apache" appear in their names without prior written | |||||
* permission of the Apache Group. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ | |||||
package org.apache.ant.common.util; | |||||
import java.util.HashMap; | |||||
import java.util.Iterator; | |||||
import java.util.Map; | |||||
/** | |||||
* An Attribute collection is a simple collection of named values | |||||
* | |||||
* @author Conor MacNeill | |||||
* @created 14 June 2002 | |||||
*/ | |||||
public class AttributeCollection { | |||||
/** The attribute values */ | |||||
private Map attributes = new HashMap(); | |||||
/** | |||||
* Get the value of an attribute given its name | |||||
* | |||||
* @param attributeName the attribute name | |||||
* @return the attribute value or null if there is no such attribute. | |||||
*/ | |||||
public String getAttribute(String attributeName) { | |||||
return (String) attributes.get(attributeName); | |||||
} | |||||
/** | |||||
* Set the value of an attribute. | |||||
* | |||||
* @param attributeName the name of the attribute. | |||||
* @param attributeValue the value of the attribute. | |||||
*/ | |||||
public void putAttribute(String attributeName, String attributeValue) { | |||||
attributes.put(attributeName, attributeValue); | |||||
} | |||||
/** | |||||
* Get an iterator over the names of all the attributes in the collection. | |||||
* | |||||
* @return an iterator of attribute names. | |||||
*/ | |||||
public Iterator getAttributeNames() { | |||||
return attributes.keySet().iterator(); | |||||
} | |||||
} | |||||
@@ -75,7 +75,7 @@ import org.apache.ant.common.model.Project; | |||||
import org.apache.ant.common.util.DemuxOutputStream; | import org.apache.ant.common.util.DemuxOutputStream; | ||||
import org.apache.ant.common.logger.DefaultLogger; | import org.apache.ant.common.logger.DefaultLogger; | ||||
import org.apache.ant.common.logger.BuildLogger; | import org.apache.ant.common.logger.BuildLogger; | ||||
import org.apache.ant.init.InitConfig; | |||||
import org.apache.ant.init.AntEnvironment; | |||||
import org.apache.ant.init.InitUtils; | import org.apache.ant.init.InitUtils; | ||||
import org.apache.ant.frontend.FrontendUtils; | import org.apache.ant.frontend.FrontendUtils; | ||||
import org.apache.ant.frontend.FrontendException; | import org.apache.ant.frontend.FrontendException; | ||||
@@ -88,7 +88,7 @@ import org.apache.ant.frontend.FrontendException; | |||||
*/ | */ | ||||
public class Commandline { | public class Commandline { | ||||
/** The initialisation configuration for Ant */ | /** The initialisation configuration for Ant */ | ||||
private InitConfig initConfig; | |||||
private AntEnvironment antEnv; | |||||
/** Stream that we are using for logging */ | /** Stream that we are using for logging */ | ||||
private PrintStream out = System.out; | private PrintStream out = System.out; | ||||
@@ -133,7 +133,7 @@ public class Commandline { | |||||
* @param args the commandline arguments | * @param args the commandline arguments | ||||
* @param config the initialisation configuration | * @param config the initialisation configuration | ||||
*/ | */ | ||||
public static void start(String[] args, InitConfig config) { | |||||
public static void start(String[] args, AntEnvironment config) { | |||||
// create a command line and use it to run ant | // create a command line and use it to run ant | ||||
Commandline commandline = new Commandline(); | Commandline commandline = new Commandline(); | ||||
commandline.process(args, config); | commandline.process(args, config); | ||||
@@ -203,10 +203,10 @@ public class Commandline { | |||||
* Start the command line front end for mutant. | * Start the command line front end for mutant. | ||||
* | * | ||||
* @param args the commandline arguments | * @param args the commandline arguments | ||||
* @param initConfig Ant's initialization configuration | |||||
* @param antEnv Ant's initialization configuration | |||||
*/ | */ | ||||
private void process(String[] args, InitConfig initConfig) { | |||||
this.initConfig = initConfig; | |||||
private void process(String[] args, AntEnvironment antEnv) { | |||||
this.antEnv = antEnv; | |||||
Frame mainFrame = null; | Frame mainFrame = null; | ||||
Project project = null; | Project project = null; | ||||
try { | try { | ||||
@@ -216,9 +216,9 @@ public class Commandline { | |||||
AntConfig config = new AntConfig(); | AntConfig config = new AntConfig(); | ||||
AntConfig userConfig = | AntConfig userConfig = | ||||
FrontendUtils.getAntConfig(initConfig.getUserConfigArea()); | |||||
FrontendUtils.getAntConfig(antEnv.getUserConfigArea()); | |||||
AntConfig systemConfig | AntConfig systemConfig | ||||
= FrontendUtils.getAntConfig(initConfig.getSystemConfigArea()); | |||||
= FrontendUtils.getAntConfig(antEnv.getSystemConfigArea()); | |||||
if (systemConfig != null) { | if (systemConfig != null) { | ||||
config.merge(systemConfig); | config.merge(systemConfig); | ||||
@@ -243,7 +243,7 @@ public class Commandline { | |||||
project = parseProject(); | project = parseProject(); | ||||
// create the execution manager to execute the build | // create the execution manager to execute the build | ||||
mainFrame = new Frame(initConfig, config); | |||||
mainFrame = new Frame(antEnv, config); | |||||
OutputStream demuxOut | OutputStream demuxOut | ||||
= new DemuxOutputStream(mainFrame, false); | = new DemuxOutputStream(mainFrame, false); | ||||
OutputStream demuxErr | OutputStream demuxErr | ||||
@@ -59,13 +59,13 @@ import java.net.URL; | |||||
import java.net.URLClassLoader; | import java.net.URLClassLoader; | ||||
/** | /** | ||||
* InitConfig is the initialization configuration created to start Ant. This | |||||
* is passed to the front end when Ant is started. | |||||
* AntEnvironment describes the environment in which Ant is operating. | |||||
* It provides the locations of a number of key Ant components. | |||||
* | * | ||||
* @author Conor MacNeill | * @author Conor MacNeill | ||||
* @created 9 January 2002 | * @created 9 January 2002 | ||||
*/ | */ | ||||
public class InitConfig { | |||||
public class AntEnvironment { | |||||
/** The default name of the jar containing the XML parser */ | /** The default name of the jar containing the XML parser */ | ||||
public static final String DEFAULT_PARSER_JAR = "crimson.jar"; | public static final String DEFAULT_PARSER_JAR = "crimson.jar"; | ||||
@@ -114,12 +114,19 @@ public class InitConfig { | |||||
private File userConfigArea; | private File userConfigArea; | ||||
/** | /** | ||||
* Constructor for the Initialization configuration | |||||
* Create an unconfigured AntEnvironment which will be configured manually | |||||
* by the user | |||||
*/ | |||||
public AntEnvironment() { | |||||
} | |||||
/** | |||||
* Create and automatically configure the Ant Environment | |||||
* | * | ||||
* @param libraryClass - a class loaded from the Ant library area. | * @param libraryClass - a class loaded from the Ant library area. | ||||
* @exception InitException if the configuration cannot be initialized | * @exception InitException if the configuration cannot be initialized | ||||
*/ | */ | ||||
public InitConfig(Class libraryClass) throws InitException { | |||||
public AntEnvironment(Class libraryClass) throws InitException { | |||||
try { | try { | ||||
URL antLibURL = getAntLibURL(libraryClass); | URL antLibURL = getAntLibURL(libraryClass); | ||||
setLibraryURL(antLibURL); | setLibraryURL(antLibURL); | ||||
@@ -195,7 +202,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Sets the systemLoader of the InitConfig | |||||
* Sets the systemLoader of the AntEnvironment | |||||
* | * | ||||
* @param systemLoader the new systemLoader value | * @param systemLoader the new systemLoader value | ||||
*/ | */ | ||||
@@ -204,7 +211,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Sets the commonLoader of the InitConfig | |||||
* Sets the commonLoader of the AntEnvironment | |||||
* | * | ||||
* @param commonLoader the new commonLoader value | * @param commonLoader the new commonLoader value | ||||
*/ | */ | ||||
@@ -213,7 +220,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Sets the coreLoader of the InitConfig | |||||
* Sets the coreLoader of the AntEnvironment | |||||
* | * | ||||
* @param coreLoader the new coreLoader value | * @param coreLoader the new coreLoader value | ||||
*/ | */ | ||||
@@ -222,7 +229,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Sets the toolsJarURL of the InitConfig | |||||
* Sets the toolsJarURL of the AntEnvironment | |||||
* | * | ||||
* @param toolsJarURL the new toolsJarURL value | * @param toolsJarURL the new toolsJarURL value | ||||
*/ | */ | ||||
@@ -231,7 +238,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Sets the parserURLs of the InitConfig | |||||
* Sets the parserURLs of the AntEnvironment | |||||
* | * | ||||
* @param parserURLs the new parserURLs value | * @param parserURLs the new parserURLs value | ||||
*/ | */ | ||||
@@ -240,7 +247,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Sets the libraryURL of the InitConfig | |||||
* Sets the libraryURL of the AntEnvironment | |||||
* | * | ||||
* @param libraryURL the new libraryURL value | * @param libraryURL the new libraryURL value | ||||
*/ | */ | ||||
@@ -276,7 +283,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Gets the systemLoader of the InitConfig | |||||
* Gets the systemLoader of the AntEnvironment | |||||
* | * | ||||
* @return the systemLoader value | * @return the systemLoader value | ||||
*/ | */ | ||||
@@ -285,7 +292,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Gets the commonLoader of the InitConfig | |||||
* Gets the commonLoader of the AntEnvironment | |||||
* | * | ||||
* @return the commonLoader value | * @return the commonLoader value | ||||
*/ | */ | ||||
@@ -294,7 +301,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Gets the coreLoader of the InitConfig | |||||
* Gets the coreLoader of the AntEnvironment | |||||
* | * | ||||
* @return the coreLoader value | * @return the coreLoader value | ||||
*/ | */ | ||||
@@ -303,7 +310,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Gets the toolsJarURL of the InitConfig | |||||
* Gets the toolsJarURL of the AntEnvironment | |||||
* | * | ||||
* @return the toolsJarURL value | * @return the toolsJarURL value | ||||
*/ | */ | ||||
@@ -312,7 +319,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Gets the parserURLs of the InitConfig | |||||
* Gets the parserURLs of the AntEnvironment | |||||
* | * | ||||
* @return the parserURLs value | * @return the parserURLs value | ||||
*/ | */ | ||||
@@ -321,7 +328,7 @@ public class InitConfig { | |||||
} | } | ||||
/** | /** | ||||
* Gets the libraryURL of the InitConfig | |||||
* Gets the libraryURL of the AntEnvironment | |||||
* | * | ||||
* @return the libraryURL value | * @return the libraryURL value | ||||
*/ | */ | ||||
@@ -334,7 +341,7 @@ public class InitConfig { | |||||
* | * | ||||
* @param libraryClass - a class loaded from the Ant library area. | * @param libraryClass - a class loaded from the Ant library area. | ||||
* @return the URL for the Ant library directory | * @return the URL for the Ant library directory | ||||
* @throws MalformedURLException if there is a problem constructing the | |||||
* @throws MalformedURLException if there is a problem constructing the | |||||
* library URL | * library URL | ||||
*/ | */ | ||||
private URL getAntLibURL(Class libraryClass) throws MalformedURLException { | private URL getAntLibURL(Class libraryClass) throws MalformedURLException { |
@@ -60,7 +60,7 @@ import java.net.URLClassLoader; | |||||
import java.util.jar.Attributes; | import java.util.jar.Attributes; | ||||
import java.util.jar.JarInputStream; | import java.util.jar.JarInputStream; | ||||
import java.util.jar.Manifest; | import java.util.jar.Manifest; | ||||
import org.apache.ant.init.InitConfig; | |||||
import org.apache.ant.init.AntEnvironment; | |||||
import org.apache.ant.init.InitException; | import org.apache.ant.init.InitException; | ||||
import java.io.File; | import java.io.File; | ||||
@@ -128,21 +128,21 @@ public class Main { | |||||
* | * | ||||
* @param frontend the frontend jar to launch | * @param frontend the frontend jar to launch | ||||
* @param args commandline arguments | * @param args commandline arguments | ||||
* @param defaultClass the default class to use if it cannot be determined | |||||
* @param defaultClass the default class to use if it cannot be determined | |||||
* from the jar itself | * from the jar itself | ||||
* @exception InitException if the front end cannot be started | * @exception InitException if the front end cannot be started | ||||
*/ | */ | ||||
public void start(String frontend, String defaultClass, String[] args) | public void start(String frontend, String defaultClass, String[] args) | ||||
throws InitException { | throws InitException { | ||||
try { | |||||
InitConfig config = new InitConfig(getClass()); | |||||
try { | |||||
AntEnvironment config = new AntEnvironment(getClass()); | |||||
URL frontendJar = new URL(config.getLibraryURL(), | URL frontendJar = new URL(config.getLibraryURL(), | ||||
"frontend/" + frontend + ".jar"); | "frontend/" + frontend + ".jar"); | ||||
URL[] frontendJars = new URL[]{frontendJar}; | URL[] frontendJars = new URL[]{frontendJar}; | ||||
ClassLoader frontEndLoader | ClassLoader frontEndLoader | ||||
= new URLClassLoader(frontendJars, config.getCoreLoader()); | = new URLClassLoader(frontendJars, config.getCoreLoader()); | ||||
//System.out.println("Front End Loader config"); | //System.out.println("Front End Loader config"); | ||||
//LoaderUtils.dumpLoader(System.out, frontEndLoader); | //LoaderUtils.dumpLoader(System.out, frontEndLoader); | ||||
@@ -154,26 +154,26 @@ public class Main { | |||||
} | } | ||||
} | } | ||||
String mainClass = getMainClass(frontendJar); | String mainClass = getMainClass(frontendJar); | ||||
if (mainClass == null) { | if (mainClass == null) { | ||||
mainClass = defaultClass; | mainClass = defaultClass; | ||||
} | } | ||||
if (mainClass == null) { | if (mainClass == null) { | ||||
throw new InitException("Unable to determine main class " | throw new InitException("Unable to determine main class " | ||||
+ " for \"" + frontend + "\" frontend"); | + " for \"" + frontend + "\" frontend"); | ||||
} | } | ||||
// Now start the front end by reflection. | // Now start the front end by reflection. | ||||
Class frontendClass = Class.forName(mainClass, true, | Class frontendClass = Class.forName(mainClass, true, | ||||
frontEndLoader); | frontEndLoader); | ||||
final Class[] param = {Class.forName("[Ljava.lang.String;"), | final Class[] param = {Class.forName("[Ljava.lang.String;"), | ||||
InitConfig.class}; | |||||
AntEnvironment.class}; | |||||
final Method startMethod | final Method startMethod | ||||
= frontendClass.getMethod("start", param); | = frontendClass.getMethod("start", param); | ||||
final Object[] argument = {args, config}; | final Object[] argument = {args, config}; | ||||
startMethod.invoke(null, argument); | startMethod.invoke(null, argument); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
throw new InitException(e); | throw new InitException(e); | ||||