From 5c3ef04a5aa615b965732a98e722a436e2a74644 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Mon, 18 Dec 2000 14:33:44 +0000 Subject: [PATCH] oops - forgot to add contents of directory ;) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268367 13f79535-47bb-0310-9956-ffa450edef68 --- proposal/frantic/website/Task.html | 471 ++++++++++++++++++ .../frantic/website/images/frantic_logo.gif | Bin 0 -> 20920 bytes .../frantic/website/images/task_hierarchy.gif | Bin 0 -> 2592 bytes proposal/frantic/website/index.html | 217 ++++++++ 4 files changed, 688 insertions(+) create mode 100644 proposal/frantic/website/Task.html create mode 100644 proposal/frantic/website/images/frantic_logo.gif create mode 100644 proposal/frantic/website/images/task_hierarchy.gif create mode 100644 proposal/frantic/website/index.html diff --git a/proposal/frantic/website/Task.html b/proposal/frantic/website/Task.html new file mode 100644 index 000000000..73c808f8a --- /dev/null +++ b/proposal/frantic/website/Task.html @@ -0,0 +1,471 @@ + + + + + + +: Interface Task + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+ +org.apache.ant.tasks +
+Interface Task

+
+
+
public interface Task
+ +

+Task is the core interface for all structures that will be processed by the + TaskEngine. +

+


+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static intEXECUTION_MODE_EXPLICIT + +
+           
+static intEXECUTION_MODE_IMPLICIT + +
+           
+static intEXECUTION_MODE_PRIORITY + +
+           
+static charNAME_SEPARATOR + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidexecute(org.apache.ant.engine.TaskEngine engine) + +
+          Causes the existing Task implementation to execute.
+ java.lang.StringgetAttributeValue(java.lang.String name) + +
+          Each Task will hold its attributes in some manner.
+ Task[]getChildren() + +
+          Returns the an array of Task objects that are subordinate to this Task.
+ intgetExecutionMode() + +
+          Determines whether this Task is executed whenever its parent is executed, + or if its execution must be specifically requested.
+ java.lang.StringgetFullyQualifiedName() + +
+          The "fully-qualified" name of a Task is the Task's name, prepended by its + parent's name, prepended by its parent's name, etc.
+ TaskgetParent() + +
+          Returns this Task's parent Task.
+ TaskgetRootTask() + +
+          Proceed backwards through the nodes until we come across the first Task + in the tree.
+ TaskgetTask(java.lang.String taskPath) + +
+          A mechanism for locating a task relative to the current task.
+ java.lang.StringgetTaskName() + +
+          Just a simple name used to identify a Task.
+ voidinit(org.apache.ant.engine.TaskEngine engine) + +
+          Called when the Task first gets "noticed" by the TaskEngine.
+ booleanisPropertyContainer() + +
+          Determines whether a Task is suitable for holding property values.
+ voidsetParent(Task parent) + +
+          Sets the Task's parent.
+ voidvalidate() + +
+          Each Task should have the ability to validate its state.
+  +

+ + + + + + + + +
+Field Detail
+ +

+EXECUTION_MODE_IMPLICIT

+
+public static final int EXECUTION_MODE_IMPLICIT
+
+
+
+ +

+EXECUTION_MODE_EXPLICIT

+
+public static final int EXECUTION_MODE_EXPLICIT
+
+
+
+ +

+EXECUTION_MODE_PRIORITY

+
+public static final int EXECUTION_MODE_PRIORITY
+
+
+
+ +

+NAME_SEPARATOR

+
+public static final char NAME_SEPARATOR
+
+
+ + + + + + + + + + + +
+Method Detail
+ +

+execute

+
+public void execute(org.apache.ant.engine.TaskEngine engine)
+             throws org.apache.ant.AntException
+
+
Causes the existing Task implementation to execute.
+
+ +

+init

+
+public void init(org.apache.ant.engine.TaskEngine engine)
+          throws org.apache.ant.AntException
+
+
Called when the Task first gets "noticed" by the TaskEngine.
+
+ +

+validate

+
+public void validate()
+              throws org.apache.ant.AntException
+
+
Each Task should have the ability to validate its state. This would be + invoked by the TaskEngine prior to commencing an execution cycle.
+
+ +

+getTaskName

+
+public java.lang.String getTaskName()
+
+
Just a simple name used to identify a Task. This name is only sufficient + for simple debugging and GUI output. It does not uniquely identify a + Task.
+
See Also:
getFullyQualifiedName()
+
+
+
+ +

+getTask

+
+public Task getTask(java.lang.String taskPath)
+
+
A mechanism for locating a task relative to the current task. This + navigation sceme will mimic a typical OS system. '..' will move back + a level in the Task tree. If taskPath begins with '/' then the root node + will be used as a starting point. +

+ Returns null of no task is found at this location.
+
+ +

+getRootTask

+
+public Task getRootTask()
+
+
Proceed backwards through the nodes until we come across the first Task + in the tree. This is the root Task.
+
+ +

+getFullyQualifiedName

+
+public java.lang.String getFullyQualifiedName()
+
+
The "fully-qualified" name of a Task is the Task's name, prepended by its + parent's name, prepended by its parent's name, etc. This method may be + used by the Task's hashCode() method to calculate a hash that will + uniquely identify a Task.
+
+ +

+getExecutionMode

+
+public int getExecutionMode()
+
+
Determines whether this Task is executed whenever its parent is executed, + or if its execution must be specifically requested. +

+
EXECUTION_MODE_EXPLICIT
+
Requires interaction by the TaskEngine in order to execute.
+
EXECUTION_MODE_IMPLICIT
+
This Task is automatically executed when its parent is + executed.
+
EXECUTION_MODE_PRIORITY
+
These Tasks are executed prior to its parent's execution
+

+ The default mode should probably be EXECUTION_MODE_IMPLICIT. In the + build domain of Ant, every Task below a Task will normally be executed. + The major exception to this is the Target. When a Project Task is + executed, all Target Tasks do not automatically fire, however all + Property Tasks do execute.
+
+ +

+isPropertyContainer

+
+public boolean isPropertyContainer()
+
+
Determines whether a Task is suitable for holding property values.
+
+ +

+getAttributeValue

+
+public java.lang.String getAttributeValue(java.lang.String name)
+
+
Each Task will hold its attributes in some manner. This method will allow + the Task implementation to return the value of its attribute.
+
+ +

+getParent

+
+public Task getParent()
+
+
Returns this Task's parent Task. If this Task is the root Task, then this + method will return null.
+
+ +

+setParent

+
+public void setParent(Task parent)
+
+
Sets the Task's parent.
+
+ +

+getChildren

+
+public Task[] getChildren()
+
+
Returns the an array of Task objects that are subordinate to this Task.
+ +
+ + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + diff --git a/proposal/frantic/website/images/frantic_logo.gif b/proposal/frantic/website/images/frantic_logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe40da48c5c81cbdf3a3e0fd1877aed721ea0af4 GIT binary patch literal 20920 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 literal 0 HcmV?d00001 diff --git a/proposal/frantic/website/images/task_hierarchy.gif b/proposal/frantic/website/images/task_hierarchy.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff8db9404ac0e65313ed2df97c7693120a016901 GIT binary patch literal 2592 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 uArodmG`HXF!&BOSZ0lXLE#4gjj + +Ant Proposal - Frantic + + + + + +

Ant + 2.0 Proposal

+

Code Name - Frantic

+

Frantic hardly describes the proposal process...more like my coding and design + efforts! I am relatively new to Ant and the mail list, and I have posted several + emails recently regarding the use of DOM in the future of Ant. Once I discovered + the mail archive (thanks Simeon), I had a chance to notice that many of my questions + were asked before. My extemporaneous emails were not without consequence it + seems. After writing one of them it set some wheels in motion for what I hope + is a useful addition to the current (and growing) number of proposals for Ant + 2.0.

+
+ + + + +
+ + + + +
+

I think the concept behind Ant should be changed to be a "Task + Execution Engine", and the concept of Project and Target can be + generalized into a specific form of a Task.

+
+
+
+

 

+

The email list has received some requests from developers to extend Ant to + support different problem domains. Peter Donald has latched onto this issue + and I understand that he has incorporated some of these ideas into his Ant proposal. + I also have seen some very impressive DOM support integrated into Antidote, + an elegant basis for a GUI editor crafted by Simeon Fitch. Sim achieves a great + deal of flexibility by using the W3C DOM as a superclass to his Project/Target/Task + objects. He has, in effect, abstracted each of these "core" Ant objects + until they are simply DOM nodes.

+

Peter's and Sim's ideas struck a chord and I thought that Peter's desire to + allow Ant to break free from the Build domain and into Install domains by extending + Ant, could be achieved by looking at the problem from a different point of view. + As I stated in my email, we can achieve a much higher degree of flexibility + in Ant by generalizing more.

+

Design Proposal

+

I believe that Ant 2.0 should be re-termed a Task Execution Engine, + and the core of Ant becomes the Engine and the Task. This seems a little radical + considering that the Project/Target/Task object model has served us so well + in Ant 1.x, however it is very clear that Project and Target are simple another + type of Task.

+

An enormous amount of code has been added to maintain Project and Target as + separate classes with distinct, hard-coded behaviors. From the proof-of-concept + code that I have been developing, I am inspired by how much more elegant the + code becomes when this simplified model is realized.

+ +

Having a base Task interface that all Tasks implement will also offer a generalized + approach that benefits GUI's in much the same manner that the DOM has helped + Antidote. Also, by making Task an interface instead of a class, we can finally + free ourselves of implementation specifics.

+

As I was writing the concept code, it struck me that I was too worried about + the XML. Simeon Fitch mentioned in an email in early December, the possibility + of storing build scripts in a database. I think this, along with various comments + about DOM dependencies from Peter Donald, Jose Alberto Fernandez, and Stefan + Bodewig made me realize that Core Ant shouldn't care where the build script + lives or in which format it is stored. It is the object model that is primarily + important.

+

The Task

+

The cornerstone of this proposal hinges on the Task + Interface. It is the only type of external object that the Execution Engine + knows how to handle. It is in this simplicity that the most powerful Ant can + be realized.

+

The Task is an object that is aware of it's place in ahierarchy. To this end + it is aware of its parent and its children. Please note that this is a runtime + dependency and a scripting language (or the Task itself) can dynamically change + the relationship of Tasks.

+ + + + + + + +
+
Figure 1
+
+

Key to being able to manipulate Tasks at runtime is some sort of naming conventions. + Currently in the Frantic design is the concept of a Task name. Tasks, being + hierarchical, can be thought of as a directory structure (see figure 1). If + each Task is assigned a name that is unique among its siblings, we can then + have a powerful means of locating and referencing a particular Task anywhere + in the hierarchy.

+

For example, the Property Task below the Target named "build" has + a name of "prop3", however its "fully-qualified" name is + /root/build/prop3. The root of a Task execution list is "/" and the + tag name, in our example /root. In the concept source code I use this principal + of hierarchical naming to support dependencies. Currently, I am treating these + Task names as directories and not as files. This should perhaps change slightly + to the filename approach. In the directory-based approach, a sibling is named + "../sibling". It would be more convenient to not require the "../". + In fact, I think I have convinced myself of this.

+

Task Discovery

+

I haven't coded this portion, however I plan on basing it on Duncan's idea + of using the Jar manifests to locate and identify tasks on the classpath. I + was first exposed to this technique in the OpenTools API of Borland's JBuilder + IDE, and I have since used it on a large project for a consulting customer.

+

The classpath is scanned at runtime to locate all directories and jar files. + These directories and jar files will have a manifest file that will contain + manifest entries that serve to tie a string token to the Task implementation + class responsible for that token. Directories cannot have manifests per se, + but we will utilize a file, one-level up from the directory, with a name "directory-name.mf". + This file will be in the format of a manifest file. This will allow developers + to create and test new Tasks without the burden of having to make a Jar archive + every time.

+

Attribute Validation

+

Brett McLaughlin introduced a very interesting techique to perform object validation + using XML Schema in a series of JavaWorld + articles. I can see this technique applied to Tasks as well. The user could + include a schema with a special name in the jar file that accompanies the Tasks. + This schema could be used at runtime to validate a Task's attributes.

+

I would imagine that this feature would be outside of what is considered "core" + Ant.

+

The Execution Engine

+

The engine only knows how to process Task objects, and that is what makes it + extremely efficient. It is modeled after how I believe a compiler, or command + interpreter would function. It contains a call stack which I call a task + stack, and this task stack is under complete control of the engine. + This is not to say that Tasks cannot manipulate the task stack at runtime, because + they do. However, all of this access takes place under the watchful eye of the + execution engine.

+

Properties

+

Keeping track of properties is closely tied to the execution engine, and I + modeled it in a manner consistent with how I believe compilers must work. I + use the concept of a hierarchical series of hashtables that support the concept + of scope in property lists.

+

I had originally put the concept of a property into a Task and completely implemented + the bugger. It turned out during testing that my logic was flawed. It seemed + to work well at first...a property defined in a Task would be available to all + child Tasks, but unavailable to any ancestors. When a Task requested the latest + data on a property, it would look in its property list. If it wasn't found there, + it would look in its parent's list, and so on. Instant scope.

+

However, it became quickly apparent that properties are a "runtime" + consideration. This is something that Jose Alberto Fernandez will not let any + of us forget for long. :-) What I needed was to move this hierarchical chain + of property lists into the engine. For each new Task executed, a new property + list is created and also pushed onto the stack. It seems to work like a champ.

+

I also coded up key substitution into the getParameterValue() events. They + seem to work fine, although I haven't worked up enough test cases to be sure.

+

One additional cool feature is that parameters need not only hold Strings. + I thought that there would be occasions where properties will hold Tasks as + well. I believe this will turn out to be a prime mechanism for creating reference + id Tasks like the current FileSet objects and referring to them in other Tasks + just as you would any property value.

+

Attributes

+

I haven't spent any time addresing what is currently referred to a Task's attributes + in Ant 1.x. I still need to think about this concept some more, but as I dwell + on what an attribute is, I keep coming back to the properties. Just like a property + functions as a scoped variable, an attribute is the same thing. Albeit, its + scope is limited to the Task that uses it, but so what.

+

Execution Events

+

The execution engine also supports a few key events that can occur during the + execution lifecycle. Currently events exist for execution start/finish, task + start/execute/finish, exceptions, and simple messaging. The messaging event + allows Tasks to communicate in a standard way that will leverage the engine's + event system to allow various front-ends to intelligently and appropriately + process the output.

+

Scripting

+

I have no experience with incorporating a scripting engine into an engine, + but I do know that this proposal should address the primary issues that surround + such an integration. I think that two features which are absolutely essential + are:

+

Provide some sort of naming convention such that a particular Task can be + found given an absolute name or a name relative to another Task. This is complete + and working in the concept code.

+

Leave all decisions regarding property evaluation and Task's knowledge of these + properties until the last possible moment.

+

Recursive Tasks

+

I realize that Ant 1.x spent some clock cycles dedicated to resolving circular + references in the Task definitions. I didn't spend any time on that intentionally. + I am not so sure that the elimination of circular references is a good idea. + Especially moving forward, with the incorporation of a scripting language, I + can envision Tasks the assembler wants to execute repeatedly, perhaps even recursively. + I think we should treat this the same way that any modern computer language + would — caveat emptor.

+

Summary

+

There is a lot more to do with this proposal and the concept code. It has been + an exciting weekend getting these thoughts down and trying to back them up. + I look forward to collaborating with others on the list if they wish to help + me, even though I am in proposal phase. I certainly don't know much about XML + parsing and I could use some ideas on how to further my starting model. I would + love to show the Ant core model built in a Builder agnostic manner. Basically, + I want XML to be an option, not a requirement.

+

I would also be interested in perhaps building an adapter task that will allow + Ant 1.x tasks to be reused unchanged in the Frantic proposal. The concept of + a Task hasn't changed much, so perhaps this is a possibility.

+

As always, your feedback is welcome. I expect that I have missed some major + holes and I would like the opportunity to work with others to plug them up!

+

Jim Cook
+ Visual XS

+ +