git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278085 13f79535-47bb-0310-9956-ffa450edef68master
@@ -1,354 +0,0 @@ | |||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |||||
<html lang="en"> | |||||
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> | |||||
<head> | |||||
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |||||
<title>Apache Ant - Design Overview</title> | |||||
<link type="text/css" href="../../page.css" rel="stylesheet"> | |||||
<meta name="author" content="Simeon H. K. Fitch"> | |||||
<meta name="email" content="simeon@fitch.net"> | |||||
<meta name="author" content="Christoph Wilhelms"> | |||||
<meta name="email" content="christoph.wilhelms@t-online.de"> | |||||
</head> | |||||
<body> | |||||
<p class="navpath"> | |||||
<script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script> | |||||
</p> | |||||
<div class="logobar"> | |||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |||||
<tr> | |||||
<td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td> | |||||
<td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td> | |||||
<td align="right"> | |||||
<form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> | |||||
<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> | |||||
<tr> | |||||
<td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td nowrap="nowrap" class="searchcaption"> | |||||
<input name="q" type="hidden"> | |||||
<input size="15" id="query" type="text"> | |||||
<img height="1" width="5" alt="" src="../../images/spacer.gif"> | |||||
<input name="Search" value="Search" type="submit"> | |||||
<br> | |||||
the Apache Ant site | |||||
</td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</form> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="tab"> | |||||
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
<td width="8"><img alt="" height="5" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Projects</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="bluebar"></div> | |||||
<div class="menucontainer"> | |||||
<div class="menu"> | |||||
<ul> | |||||
<li class="menuheader">Projects | |||||
<ul> | |||||
<li> | |||||
<a href="../../projects/index.html">Welcome</a> | |||||
</li> | |||||
</ul> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
<img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif"> | |||||
<img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif"> | |||||
</div> | |||||
<div class="lightbluebar"> </div> | |||||
<div class="main"> | |||||
<div class="content"> | |||||
<h1 class="title">Design Overview</h1> | |||||
<h3 class="section"> | |||||
<a name="Introduction"></a> | |||||
Introduction | |||||
</h3> | |||||
<p>The purpose of this document is to communicate the overall | |||||
structure and design patters used in Antidote, the GUI for | |||||
Ant. This document is a work in progress, as well as a living | |||||
document, and it is most likely not be in full synchronization with | |||||
the source code. Therefore, if there is any doubt, view the source | |||||
;-) | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Overview"></a> | |||||
Overview | |||||
</h3> | |||||
<p>The Antidote architecture design aims to provide a high level | |||||
of modularity and extensibility. Ideally the components of | |||||
Antidote will be able to be assembled in different configurations | |||||
to provide the type of application or plug-in desired. | |||||
</p> | |||||
<p>To achieve this modularity, a high level of decoupling is | |||||
necessary. The standard UI design approach of providing separation | |||||
of view (presentation) from model (data) is applied, leveraging | |||||
the built-in Ant data model where possible, as well as the | |||||
predefined Swing model interfaces. Furthermore, the architecture | |||||
is highly event driven, whereby modules communicate via a shared | |||||
communications channel. | |||||
</p> | |||||
<p>To a large extent, the configuration of application modules is | |||||
driven by localized configuration files, allowing new modules or | |||||
data views to be added, as well as providing multi-language | |||||
support. | |||||
</p> | |||||
<p>The diagram below conveys a high altitude view of the | |||||
application's structure. As the application grows, new components | |||||
will be plugged in to what will be described as the <code>EventBus</code> | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Antidote Component Architecture/Event Bus"></a> | |||||
Antidote Component Architecture/Event Bus | |||||
</h3> | |||||
<pre class="code"> | |||||
+---------------+ +----------------+ +-------------+ +-------------+ | |||||
| | | | | | | | | |||||
| ActionManager | | EventResponder | | AntModule | | AntModule | | |||||
| | | | |(ProjectNav) | |(SourceEdit) | | |||||
+---------------+ +----------------+ +-------------+ +-------------+ | |||||
| ^ ^ ^ | |||||
| | | | | |||||
ActionEvent EventObject AntEvent AntEvent | |||||
| | | | | |||||
v v v v | |||||
/---------------------------------------------------------------------\ | |||||
/ \ | |||||
< EventBus > | |||||
\ / | |||||
\---------------------------------------------------------------------/ | |||||
| ^ ^ ^ | |||||
| | | | | |||||
EventObject ChangeEvent BuildEvent EventObject | |||||
| | | | | |||||
v | | v | |||||
+---------------+ +----------------+ +-------------+ +--------------+ | |||||
| | | | | | | | | |||||
| Console | | ProjectProxy | | Ant | | (Your Module)| | |||||
| | | | | | | | | |||||
+---------------+ +----------------+ +-------------+ +--------------+ | |||||
</pre> | |||||
<p>The backbone of the application is the <code>EventBus</code>. Any | |||||
component of the application can post events to the | |||||
<code>EventBus</code>. Components that wish to receive events are | |||||
called <code>BusMember</code>s. | |||||
</p> | |||||
<p>The <code>EventBus</code> will dispatch any object of type | |||||
<code>java.util.Event</code>, which means that Ant <code>BuildEvent</code> | |||||
objects, as well as <code>AWTEvent</code> objects can be posted (if desired). A | |||||
new class of events called <code>AntEvent</code> is defined for Antidote | |||||
specific events, which have the additional capability of being | |||||
canceled mid-dispatch. | |||||
</p> | |||||
<p>Each <code>BusMember</code> must provide a <code>BusFilter</code> instance, | |||||
which is the members' means of telling the bus which | |||||
events it is interested in. This allows a <code>BusMember</code> to, | |||||
say, only receive <code>AntEvent</code> objects. | |||||
</p> | |||||
<p>When a <code>BusMember</code> registers itself with the | |||||
<code>EventBus</code>, it must provide a (so called) <i>interrupt | |||||
level</i> which is a integer value defining a relative ordering | |||||
for dispatching <code>EventObject</code>s to <code>BusMember</code>s. The | |||||
purpose of this is to allow certain <code>BusMember</code> instances | |||||
to see an event before others, and in the case of <code>AntEvent</code> | |||||
objects, keep the event from propagating onward. The | |||||
<code>EventBus</code> class defines the interrupt level constants | |||||
<code>VETOING=1</code>, <code>MONITORING=5</code>, and <code>RESPONDING=10</code> to | |||||
help define categories of members. The implied purpose being that: | |||||
</p> | |||||
<ul> | |||||
<li><code>VETOING</code>: Listens for certain types of events, and | |||||
may process them in a non-default manner to determine if the | |||||
event should be canceled before being dispatched to the | |||||
<code>RESPONDING</code> group. | |||||
</li> | |||||
<li><code>MONITORING</code>: Just listens for events, like a logger | |||||
or status monitor. | |||||
</li> | |||||
<li><code>RESPONDING</code>: Process events in a default manner, | |||||
knowing that the event has passed any <code>VETOING</code> members. | |||||
</li> | |||||
</ul> | |||||
<p>Within a specific interrupt level, the order in which members will | |||||
receive events is undefined. A <code>BusMember</code> may be registered | |||||
at a level that is +/- of one of the defined levels, as long as it | |||||
follows the constraint <code>MONITORING <= interruptLevel <= | |||||
MAX_INTERRUPT</code>. | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Actions and ActionManager"></a> | |||||
Actions and ActionManager | |||||
</h3> | |||||
<p>Extensive use of the <code>javax.swing.Action</code> interface is | |||||
made for defining the set of menu and tool bar options that are | |||||
available. The configuration file <code>action.properties</code> | |||||
exists to define what should appear in the menu and toolbar, how | |||||
it is displayed, and the <code>Action</code> command name that is | |||||
dispatched when the user invokes that action. A class called | |||||
<code>ActionManager</code> exists for not only processing the | |||||
configuration file, but also for dispatching invoked action events | |||||
to the <code>EventBus</code>, and for controlling the enabled state of | |||||
an <code>Action</code>. When a new menu item or toolbar button is | |||||
desired, first it is added to the <code>action.properties</code> file, | |||||
and then the code to respond to it is added to the | |||||
<code>EventResponder</code> (see below). | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Commands and EventResponder"></a> | |||||
Commands and EventResponder | |||||
</h3> | |||||
<p>At some point in the stages of event processing, an event may | |||||
require the data model to be modified, or some other task be | |||||
performed. The <code>Command</code> interface is defined to classify | |||||
code which performs some task or operation. This is distinct from | |||||
an <code>Action</code>, which is a user request for an operation. A | |||||
<code>Command</code> class is the encapsulation of the operation | |||||
itself. | |||||
</p> | |||||
<p>When an <code>Action</code> generates an <code>ActionEvent</code>, the | |||||
event is posted to the <code>EventBus</code> which delivers the event | |||||
to all interested <code>BusMember</code>s. It eventually makes it to | |||||
the <code>EventResponder</code> instance (registered at the | |||||
<code>RESPONDING</code> interrupt level), which is responsible for | |||||
translating specific events into <code>Command</code> objects, and | |||||
then executing the <code>Command</code> object. For example, when the | |||||
user selects the "Open..." menu option, an <code>ActionEvent</code> is | |||||
generated by the Swing <code>MenuItem</code> class, which is then | |||||
posted to the <code>EventBus</code> by the <code>ActionManager</code>. The | |||||
<code>ActionEvent</code> is delivered to the <code>EventResponder</code>, | |||||
which converts the <code>ActionEvent</code> into a <code>Command</code> | |||||
instance. The <code>EventResponder</code> then calls the method | |||||
<code>Command.execute()</code> to invoke the command (which displays a | |||||
dialog for selecting a file to open). | |||||
</p> | |||||
<p>When adding new <code>Action</code>s or general tasks to the | |||||
application, a <code>Command</code> object should be created to | |||||
encapsulate the behavior. This includes most operations which | |||||
modify the state of the data model. | |||||
</p> | |||||
<p>The purpose of this encapsulation is to allow the clean | |||||
separation of making a request, and servicing a request. Due to | |||||
various conditions in the application state, the actually response | |||||
to a request may change, as well as who services it. This | |||||
design approach facilitates that. | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Data Model and Views"></a> | |||||
Data Model and Views | |||||
</h3> | |||||
<p><i>NB: This part of the architecture is not fleshed out very well. There | |||||
needs to be a discussion of the degree to which the Antidote development | |||||
should be able to impose changes on the Ant data model, and to what level | |||||
that model should be mirrored in the Antidote code base. The coupling | |||||
between them should be kept low, and at the same time changes to one should | |||||
affect the other minimally. Still, features like property change events and | |||||
bean introspection (or BeanInfo) may be needed to be added to the Ant data | |||||
model. Right now the data model is encapsulated in the package | |||||
<code>org.apache.tools.ant.gui.acs</code> (where "<code>acs</code>" stands for "Ant Construction Set").</i> | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Application Context"></a> | |||||
Application Context | |||||
</h3> | |||||
<p>In order to keep the coupling among application modules to a | |||||
minimum, a single point of reference is needed for coordination | |||||
and data sharing. The class <code>AppContext</code> is the catch-all | |||||
class for containing the application state. Most modules and | |||||
<code>Command</code> classes require an instance of the | |||||
<code>AppContext</code> class. Because all state information in | |||||
contained in an <code>AppContext</code> instance, multiple instances | |||||
of Antidote can run inside the same JVM as long as each has it's | |||||
own <code>AppContext</code>. (Interestingly, two instances of the | |||||
Antidote could conceivably share an <code>AppContext</code> instance | |||||
through RMI, allowing remote interaction/collaboration.) | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Configuration and ResourceManager"></a> | |||||
Configuration and ResourceManager | |||||
</h3> | |||||
<p>Full "i18n" support should be assumed in modern applications, | |||||
and all user viewable strings should be defined in a configuration | |||||
file. For Antidote this configuration file is | |||||
<code>antidote.properties</code>, which is located (with other UI | |||||
resources) in the sub-package "resources". | |||||
</p> | |||||
<p>To aid in the lookup of text properties, as well as other | |||||
resources like icons, a class called <code>ResourceManager</code> is | |||||
defined. There are various convenience methods attached to this | |||||
class, which will likely grow to make looking up configuration | |||||
values as easy as possible. | |||||
</p> | |||||
<p>The organization of configuration properties is based on the | |||||
fully qualified path of the class that requires the property. For | |||||
example, the "about" box contains a messages, so it looks for the | |||||
property "<code>org.apache.tools.ant.gui.About.message</code>" for the text | |||||
message it should display. Therefore, the <code>ResourceManager</code> | |||||
method <code>getString()</code> takes a <code>Class</code> instance as | |||||
well as a <code>String</code> key. Please see the | |||||
<code>ResourceManager</code> documentation for more information. Given | |||||
this support, no user visible strings should appear in the source | |||||
code itself. | |||||
</p> | |||||
</div> | |||||
</div> | |||||
<p class="copyright"> | |||||
Copyright © 2000-2005 The Apache Software Foundation. All rights reserved. | |||||
<script type="text/javascript" language="JavaScript"><!-- | |||||
document.write(" - "+"Last Published: " + document.lastModified); | |||||
// --> | |||||
</script> | |||||
</p> | |||||
</body> | |||||
</html> | |||||
@@ -1,166 +0,0 @@ | |||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |||||
<html lang="en"> | |||||
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> | |||||
<head> | |||||
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |||||
<title>Apache Ant - About Antidote</title> | |||||
<link type="text/css" href="../../page.css" rel="stylesheet"> | |||||
<meta name="author" content="Christoph Wilhelms"> | |||||
<meta name="email" content="christoph.wilhelms@t-online.de"> | |||||
</head> | |||||
<body> | |||||
<p class="navpath"> | |||||
<script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script> | |||||
</p> | |||||
<div class="logobar"> | |||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |||||
<tr> | |||||
<td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td> | |||||
<td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td> | |||||
<td align="right"> | |||||
<form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> | |||||
<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> | |||||
<tr> | |||||
<td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td nowrap="nowrap" class="searchcaption"> | |||||
<input name="q" type="hidden"> | |||||
<input size="15" id="query" type="text"> | |||||
<img height="1" width="5" alt="" src="../../images/spacer.gif"> | |||||
<input name="Search" value="Search" type="submit"> | |||||
<br> | |||||
the Apache Ant site | |||||
</td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</form> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="tab"> | |||||
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
<td width="8"><img alt="" height="5" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Projects</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="bluebar"></div> | |||||
<div class="menucontainer"> | |||||
<div class="menu"> | |||||
<ul> | |||||
<li class="menuheader">Projects | |||||
<ul> | |||||
<li> | |||||
<a href="../../projects/index.html">Welcome</a> | |||||
</li> | |||||
</ul> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
<img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif"> | |||||
<img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif"> | |||||
</div> | |||||
<div class="lightbluebar"> </div> | |||||
<div class="main"> | |||||
<div class="content"> | |||||
<h1 class="title">About Antidote</h1> | |||||
<h3 class="section"> | |||||
<a name="About"></a> | |||||
About | |||||
</h3> | |||||
<h3>ANTidote is the GUI for Ant...</h3> | |||||
<p>... in fact it is the Ant GUI by the Apache Ant project itself, because, | |||||
as you might know, there are several other graphical user interfaces covering Ant. | |||||
Most of them are integrated in IDEs such as <a href="http://ant.netbeans.org">NetBeans</a> | |||||
or <a href="http://www.eclipse.org">Eclipse</a>. To be honest Antidote | |||||
has started a long time ago (spring 2000) and was designed to become integrable into | |||||
IDEs by it's original Author Simeon H. K. Fitch, who did the most work on Antidote. | |||||
Unfortunately the Antidote community never came really "to speed" and so the IDE-guys | |||||
where faster with their integrations. | |||||
</p> | |||||
<p>With these other Ant GUIs Antidote became less important and it seemed there was not much | |||||
interest in such a tool... | |||||
</p> | |||||
<p>Anyways: The "sleeping beauty" Antidote has been awaken and is now being developed to | |||||
a full featured, stand alone, JFC/Swing-based Ant GUI to graphically create, edit and run | |||||
build-files to be quite useful for the developer who do not use an IDE at all. So one of | |||||
the goals of Antidote development is to make it small, fast and really neat :)! | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Get a glimpse"></a> | |||||
Get a glimpse | |||||
</h3> | |||||
<p> | |||||
<img src="images/screenshot.jpg" width="648" height="595" alt="Screenshot" /> | |||||
</p> | |||||
<p>This is a screenshot of how Antidote looks today. Still there is, of course, a lot to do | |||||
and you are welcome to contribute! It shows Antidote using a custom look and feel called | |||||
"Metouia" which you can find <a href="http://mlf.sourceforge.net">here</a> if you want to try it! | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Get Involved"></a> | |||||
Get Involved | |||||
</h3> | |||||
<p>Antidote is discussed on the main Ant mailing lists you can find here: | |||||
</p> | |||||
<ul> | |||||
<li><a href="http://jakarta.apache.org/getinvolved/getinvolvedindex.html">Get Involved</a></li> | |||||
<li><a href="../../mail.html">Join Mailing Lists</a></li> | |||||
<li><a href="http://marc.theaimsgroup.com/?l=ant-dev&r=1&w=2">Search the Dev Mailing List</a> | |||||
</li> | |||||
<li><a href="http://marc.theaimsgroup.com/?l=ant-user&r=1&w=2">Search the User Mailing List</a> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
</div> | |||||
<p class="copyright"> | |||||
Copyright © 2000-2005 The Apache Software Foundation. All rights reserved. | |||||
<script type="text/javascript" language="JavaScript"><!-- | |||||
document.write(" - "+"Last Published: " + document.lastModified); | |||||
// --> | |||||
</script> | |||||
</p> | |||||
</body> | |||||
</html> | |||||
@@ -1,190 +0,0 @@ | |||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |||||
<html lang="en"> | |||||
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> | |||||
<head> | |||||
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |||||
<title>Apache Ant - Module HOW-TO</title> | |||||
<link type="text/css" href="../../page.css" rel="stylesheet"> | |||||
<meta name="author" content="Simeon H. K. Fitch"> | |||||
<meta name="email" content="simeon@fitch.net"> | |||||
<meta name="author" content="Christoph Wilhelms"> | |||||
<meta name="email" content="christoph.wilhelms@t-online.de"> | |||||
</head> | |||||
<body> | |||||
<p class="navpath"> | |||||
<script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script> | |||||
</p> | |||||
<div class="logobar"> | |||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |||||
<tr> | |||||
<td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td> | |||||
<td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td> | |||||
<td align="right"> | |||||
<form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> | |||||
<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> | |||||
<tr> | |||||
<td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td nowrap="nowrap" class="searchcaption"> | |||||
<input name="q" type="hidden"> | |||||
<input size="15" id="query" type="text"> | |||||
<img height="1" width="5" alt="" src="../../images/spacer.gif"> | |||||
<input name="Search" value="Search" type="submit"> | |||||
<br> | |||||
the Apache Ant site | |||||
</td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</form> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="tab"> | |||||
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
<td width="8"><img alt="" height="5" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Projects</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="bluebar"></div> | |||||
<div class="menucontainer"> | |||||
<div class="menu"> | |||||
<ul> | |||||
<li class="menuheader">Projects | |||||
<ul> | |||||
<li> | |||||
<a href="../../projects/index.html">Welcome</a> | |||||
</li> | |||||
</ul> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
<img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif"> | |||||
<img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif"> | |||||
</div> | |||||
<div class="lightbluebar"> </div> | |||||
<div class="main"> | |||||
<div class="content"> | |||||
<h1 class="title">Module HOW-TO</h1> | |||||
<h3 class="section"> | |||||
<a name="Introduction"></a> | |||||
Introduction | |||||
</h3> | |||||
<p>The purpose of this document is to provide an overview of the | |||||
basic steps one must undertake to add a new module to | |||||
Antidote. Please see <a href="./design.html">The Antidote | |||||
Design Overview</a> for information on what a module is and how it | |||||
fits into Antidote. If you've already got all that, then read | |||||
on! | |||||
</p> | |||||
<p>NB: <i>Please submit updates and criticisms to this, particularly | |||||
areas that were unclear, missing, or difficult to follow.</i> | |||||
</p> | |||||
<h3 class="section"> | |||||
<a name="Step by step"></a> | |||||
Step by step | |||||
</h3> | |||||
<h2>1) Specialize <code>org.apache.tools.ant.gui.core.AntModule</code></h2> | |||||
<p>All modules must inherit from the <code>AntModule</code> | |||||
class. This will probably irritate some of you, but it essentially | |||||
enforces inheritance from <code>javax.swing.JComponent</code> and | |||||
provides encapsulated handling of the <code>AppContext</code> instance | |||||
that is so important to this class. | |||||
</p> | |||||
<p>Your module is required to implement the | |||||
<code>AntModule.contextualize(AppContext)</code> method. The first | |||||
thing this method should do is call | |||||
<code>AntModule.setContext(AppContext)</code>, and then it is safe for | |||||
it to begin constructing its display, using whatever resources it | |||||
needs from the given <code>AppContext</code> instance. Think of this | |||||
in a similar manner to <code>Applet.init()</code> or | |||||
<code>Servlet.init()</code>. | |||||
</p> | |||||
<h2>2) Update | |||||
<code>org/apache/tools/ant/gui/resources/antidote.properties</code></h2> | |||||
<h3>2a) Externalize All Displayable Strings</h3> | |||||
<p>All displayable strings must be externalized to the | |||||
<code>antidote.properties</code> file, and looked up via the | |||||
<code>AppContext.getResources()</code> method after the | |||||
<code>AntModule.contextualize()</code> method has been called. Follow | |||||
the naming convention currently used in the properties file and | |||||
you should have to problems. This task should be done | |||||
<b>during</b> development of your module. Under no circumstances | |||||
should your module be submitted or committed without this task | |||||
being completed. Remember that Antidote has an international | |||||
audience. | |||||
</p> | |||||
<h3>2b) Add Module to List of Auto-Loaded Modules</h3> | |||||
<p>Look for the properties with the format | |||||
<code>org.apache.tools.ant.gui.Antidote.xxx.modules</code> where | |||||
<code>xxx</code> is one of {left | right | top | bottom}. Depending on | |||||
where you want your module to appear, and the order that you want | |||||
it to appear in relationship to the other modules, add the class | |||||
name of your module appropriately. If multiple modules are listed | |||||
for a single property (via a comma delimited list), then each | |||||
module will have it's own tab in a <code>javax.swing.JTabbedPane</code>. | |||||
</p> | |||||
<p>NB:<i>This goofy way of constructing the main screen will probably | |||||
change to something much more general (but not as general as, say | |||||
<a href="http://www.alphaworks.ibm.com/tech/bml">BML</a>).</i> | |||||
</p> | |||||
<h2>Run it!</h2> | |||||
<p>That should be all you need to do, at least to get your module | |||||
plugged in. Check out the source code for | |||||
<code>ProjectNavigator</code> and <code>PropertyEditor</code> for module | |||||
examples that use the various facilities of the Antidote | |||||
framework. | |||||
</p> | |||||
</div> | |||||
</div> | |||||
<p class="copyright"> | |||||
Copyright © 2000-2005 The Apache Software Foundation. All rights reserved. | |||||
<script type="text/javascript" language="JavaScript"><!-- | |||||
document.write(" - "+"Last Published: " + document.lastModified); | |||||
// --> | |||||
</script> | |||||
</p> | |||||
</body> | |||||
</html> | |||||
@@ -1,134 +0,0 @@ | |||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |||||
<html lang="en"> | |||||
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! --> | |||||
<head> | |||||
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | |||||
<title>Apache Ant - News</title> | |||||
<link type="text/css" href="../../page.css" rel="stylesheet"> | |||||
<meta name="author" content="Christoph Wilhelms"> | |||||
<meta name="email" content="christoph.wilhelms@gmx.de"> | |||||
</head> | |||||
<body> | |||||
<p class="navpath"> | |||||
<script src="../../breadcrumbs.js" language="JavaScript" type="text/javascript"></script> | |||||
</p> | |||||
<div class="logobar"> | |||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> | |||||
<tr> | |||||
<td align="left"><img border="0" alt="Apache Ant site" src="../../images/group-logo.gif"></td> | |||||
<td align="center" width="100%"><img alt="Apache Ant logo" border="0" src="../../images/project-logo.gif"></td> | |||||
<td align="right"> | |||||
<form target="_blank" onsubmit="q.value = query.value + ' site:ant.apache.org'" action="http://www.google.com/search" method="get"> | |||||
<table summary="search" border="0" cellspacing="0" cellpadding="0" bgcolor="#4C6C8F"> | |||||
<tr> | |||||
<td colspan="3"><img height="10" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td nowrap="nowrap" class="searchcaption"> | |||||
<input name="q" type="hidden"> | |||||
<input size="15" id="query" type="text"> | |||||
<img height="1" width="5" alt="" src="../../images/spacer.gif"> | |||||
<input name="Search" value="Search" type="submit"> | |||||
<br> | |||||
the Apache Ant site | |||||
</td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
</tr> | |||||
<tr> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-left.gif"></td> | |||||
<td><img height="1" width="1" alt="" src="../../images/spacer.gif"></td> | |||||
<td><img alt="" border="0" height="10" width="9" src="../../images/search-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</form> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="tab"> | |||||
<table summary="tab bar" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td width="5"><img alt="" height="8" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="non selected tab" style="height: 1.4em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-left.gif"></td><td valign="middle" bgcolor="#B2C4E0"><a href="../../index.html"><font size="2" face="Arial, Helvetica, Sans-serif">Home</font></a></td><td valign="top" width="5" bgcolor="#B2C4E0"><img height="5" width="5" alt="" src="../../images/tab-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
<td width="8"><img alt="" height="5" width="8" src="../../images/spacer.gif"></td><td valign="bottom"> | |||||
<table summary="selected tab" style="height: 1.5em" border="0" cellpadding="0" cellspacing="0"> | |||||
<tr> | |||||
<td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-left.gif"></td><td valign="middle" bgcolor="#4C6C8F"><font color="#ffffff" size="2" face="Arial, Helvetica, Sans-serif"><b>Projects</b></font></td><td valign="top" width="5" bgcolor="#4C6C8F"><img height="5" width="5" alt="" src="../../images/tabSel-right.gif"></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</div> | |||||
<div class="bluebar"></div> | |||||
<div class="menucontainer"> | |||||
<div class="menu"> | |||||
<ul> | |||||
<li class="menuheader">Projects | |||||
<ul> | |||||
<li> | |||||
<a href="../../projects/index.html">Welcome</a> | |||||
</li> | |||||
</ul> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
<img style="float: left" height="10" width="10" border="0" alt="" src="../../images/menu-left.gif"> | |||||
<img style="float: right" height="10" width="10" border="0" alt="" src="../../images/menu-right.gif"> | |||||
</div> | |||||
<div class="lightbluebar"> </div> | |||||
<div class="main"> | |||||
<div class="content"> | |||||
<h1 class="title">News</h1> | |||||
<h3 class="section"> | |||||
<a name="German i18n"></a> | |||||
German i18n | |||||
</h3> | |||||
<h3>October 12, 2003 - Antidote German internationalization implemented</h3> | |||||
<p>After English and Japanese, German is the third language Antidote has been | |||||
localized to! Many others may follow!?!</p> | |||||
<h3 class="section"> | |||||
<a name="Antidote News Page"></a> | |||||
Antidote News Page | |||||
</h3> | |||||
<h3>October 12, 2003 - News Page</h3> | |||||
<p>To show, that we are really continue the work on Antidote, I set up this | |||||
news page to inform you all about the progress. Additonally I'd like to encourage | |||||
you to use and test Antidote, or - of course - take part in the development!</p> | |||||
</div> | |||||
</div> | |||||
<p class="copyright"> | |||||
Copyright © 2000-2005 The Apache Software Foundation. All rights reserved. | |||||
<script type="text/javascript" language="JavaScript"><!-- | |||||
document.write(" - "+"Last Published: " + document.lastModified); | |||||
// --> | |||||
</script> | |||||
</p> | |||||
</body> | |||||
</html> | |||||
@@ -1,259 +0,0 @@ | |||||
<?xml version="1.0"?> | |||||
<!-- | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
Licensed under the Apache License, Version 2.0 (the "License"); | |||||
you may not use this file except in compliance with the License. | |||||
You may obtain a copy of the License at | |||||
http://www.apache.org/licenses/LICENSE-2.0 | |||||
Unless required by applicable law or agreed to in writing, software | |||||
distributed under the License is distributed on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
See the License for the specific language governing permissions and | |||||
limitations under the License. | |||||
--> | |||||
<document> | |||||
<properties> | |||||
<index value="1"/> | |||||
<author email="simeon@fitch.net">Simeon H. K. Fitch</author> | |||||
<author email="christoph.wilhelms@t-online.de">Christoph Wilhelms</author> | |||||
<title>Design Overview</title> | |||||
</properties> | |||||
<body> | |||||
<section name="Introduction"> | |||||
<p>The purpose of this document is to communicate the overall | |||||
structure and design patters used in Antidote, the GUI for | |||||
Ant. This document is a work in progress, as well as a living | |||||
document, and it is most likely not be in full synchronization with | |||||
the source code. Therefore, if there is any doubt, view the source | |||||
;-) | |||||
</p> | |||||
</section> | |||||
<section name="Overview"> | |||||
<p>The Antidote architecture design aims to provide a high level | |||||
of modularity and extensibility. Ideally the components of | |||||
Antidote will be able to be assembled in different configurations | |||||
to provide the type of application or plug-in desired. | |||||
</p> | |||||
<p>To achieve this modularity, a high level of decoupling is | |||||
necessary. The standard UI design approach of providing separation | |||||
of view (presentation) from model (data) is applied, leveraging | |||||
the built-in Ant data model where possible, as well as the | |||||
predefined Swing model interfaces. Furthermore, the architecture | |||||
is highly event driven, whereby modules communicate via a shared | |||||
communications channel. | |||||
</p> | |||||
<p>To a large extent, the configuration of application modules is | |||||
driven by localized configuration files, allowing new modules or | |||||
data views to be added, as well as providing multi-language | |||||
support. | |||||
</p> | |||||
<p>The diagram below conveys a high altitude view of the | |||||
application's structure. As the application grows, new components | |||||
will be plugged in to what will be described as the <code>EventBus</code> | |||||
</p> | |||||
</section> | |||||
<section name="Antidote Component Architecture/Event Bus"> | |||||
<source> | |||||
+---------------+ +----------------+ +-------------+ +-------------+<br/> | |||||
| | | | | | | |<br/> | |||||
| ActionManager | | EventResponder | | AntModule | | AntModule |<br/> | |||||
| | | | |(ProjectNav) | |(SourceEdit) |<br/> | |||||
+---------------+ +----------------+ +-------------+ +-------------+<br/> | |||||
| ^ ^ ^<br/> | |||||
| | | |<br/> | |||||
ActionEvent EventObject AntEvent AntEvent<br/> | |||||
| | | |<br/> | |||||
v v v v<br/> | |||||
/---------------------------------------------------------------------\<br/> | |||||
/ \<br/> | |||||
< EventBus ><br/> | |||||
\ /<br/> | |||||
\---------------------------------------------------------------------/<br/> | |||||
| ^ ^ ^<br/> | |||||
| | | |<br/> | |||||
EventObject ChangeEvent BuildEvent EventObject<br/> | |||||
| | | |<br/> | |||||
v | | v<br/> | |||||
+---------------+ +----------------+ +-------------+ +--------------+<br/> | |||||
| | | | | | | |<br/> | |||||
| Console | | ProjectProxy | | Ant | | (Your Module)|<br/> | |||||
| | | | | | | |<br/> | |||||
+---------------+ +----------------+ +-------------+ +--------------+ | |||||
</source> | |||||
<p>The backbone of the application is the <code>EventBus</code>. Any | |||||
component of the application can post events to the | |||||
<code>EventBus</code>. Components that wish to receive events are | |||||
called <code>BusMember</code>s. | |||||
</p> | |||||
<p>The <code>EventBus</code> will dispatch any object of type | |||||
<code>java.util.Event</code>, which means that Ant <code>BuildEvent</code> | |||||
objects, as well as <code>AWTEvent</code> objects can be posted (if desired). A | |||||
new class of events called <code>AntEvent</code> is defined for Antidote | |||||
specific events, which have the additional capability of being | |||||
canceled mid-dispatch. | |||||
</p> | |||||
<p>Each <code>BusMember</code> must provide a <code>BusFilter</code> instance, | |||||
which is the members' means of telling the bus which | |||||
events it is interested in. This allows a <code>BusMember</code> to, | |||||
say, only receive <code>AntEvent</code> objects. | |||||
</p> | |||||
<p>When a <code>BusMember</code> registers itself with the | |||||
<code>EventBus</code>, it must provide a (so called) <i>interrupt | |||||
level</i> which is a integer value defining a relative ordering | |||||
for dispatching <code>EventObject</code>s to <code>BusMember</code>s. The | |||||
purpose of this is to allow certain <code>BusMember</code> instances | |||||
to see an event before others, and in the case of <code>AntEvent</code> | |||||
objects, keep the event from propagating onward. The | |||||
<code>EventBus</code> class defines the interrupt level constants | |||||
<code>VETOING=1</code>, <code>MONITORING=5</code>, and <code>RESPONDING=10</code> to | |||||
help define categories of members. The implied purpose being that: | |||||
</p> | |||||
<ul> | |||||
<li><code>VETOING</code>: Listens for certain types of events, and | |||||
may process them in a non-default manner to determine if the | |||||
event should be canceled before being dispatched to the | |||||
<code>RESPONDING</code> group. | |||||
</li> | |||||
<li><code>MONITORING</code>: Just listens for events, like a logger | |||||
or status monitor. | |||||
</li> | |||||
<li><code>RESPONDING</code>: Process events in a default manner, | |||||
knowing that the event has passed any <code>VETOING</code> members. | |||||
</li> | |||||
</ul> | |||||
<p>Within a specific interrupt level, the order in which members will | |||||
receive events is undefined. A <code>BusMember</code> may be registered | |||||
at a level that is +/- of one of the defined levels, as long as it | |||||
follows the constraint <code>MONITORING <= interruptLevel <= | |||||
MAX_INTERRUPT</code>. | |||||
</p> | |||||
</section> | |||||
<section name="Actions and ActionManager"> | |||||
<p>Extensive use of the <code>javax.swing.Action</code> interface is | |||||
made for defining the set of menu and tool bar options that are | |||||
available. The configuration file <code>action.properties</code> | |||||
exists to define what should appear in the menu and toolbar, how | |||||
it is displayed, and the <code>Action</code> command name that is | |||||
dispatched when the user invokes that action. A class called | |||||
<code>ActionManager</code> exists for not only processing the | |||||
configuration file, but also for dispatching invoked action events | |||||
to the <code>EventBus</code>, and for controlling the enabled state of | |||||
an <code>Action</code>. When a new menu item or toolbar button is | |||||
desired, first it is added to the <code>action.properties</code> file, | |||||
and then the code to respond to it is added to the | |||||
<code>EventResponder</code> (see below). | |||||
</p> | |||||
</section> | |||||
<section name="Commands and EventResponder"> | |||||
<p>At some point in the stages of event processing, an event may | |||||
require the data model to be modified, or some other task be | |||||
performed. The <code>Command</code> interface is defined to classify | |||||
code which performs some task or operation. This is distinct from | |||||
an <code>Action</code>, which is a user request for an operation. A | |||||
<code>Command</code> class is the encapsulation of the operation | |||||
itself. | |||||
</p> | |||||
<p>When an <code>Action</code> generates an <code>ActionEvent</code>, the | |||||
event is posted to the <code>EventBus</code> which delivers the event | |||||
to all interested <code>BusMember</code>s. It eventually makes it to | |||||
the <code>EventResponder</code> instance (registered at the | |||||
<code>RESPONDING</code> interrupt level), which is responsible for | |||||
translating specific events into <code>Command</code> objects, and | |||||
then executing the <code>Command</code> object. For example, when the | |||||
user selects the "Open..." menu option, an <code>ActionEvent</code> is | |||||
generated by the Swing <code>MenuItem</code> class, which is then | |||||
posted to the <code>EventBus</code> by the <code>ActionManager</code>. The | |||||
<code>ActionEvent</code> is delivered to the <code>EventResponder</code>, | |||||
which converts the <code>ActionEvent</code> into a <code>Command</code> | |||||
instance. The <code>EventResponder</code> then calls the method | |||||
<code>Command.execute()</code> to invoke the command (which displays a | |||||
dialog for selecting a file to open). | |||||
</p> | |||||
<p>When adding new <code>Action</code>s or general tasks to the | |||||
application, a <code>Command</code> object should be created to | |||||
encapsulate the behavior. This includes most operations which | |||||
modify the state of the data model. | |||||
</p> | |||||
<p>The purpose of this encapsulation is to allow the clean | |||||
separation of making a request, and servicing a request. Due to | |||||
various conditions in the application state, the actually response | |||||
to a request may change, as well as who services it. This | |||||
design approach facilitates that. | |||||
</p> | |||||
</section> | |||||
<section name="Data Model and Views"> | |||||
<p><i>NB: This part of the architecture is not fleshed out very well. There | |||||
needs to be a discussion of the degree to which the Antidote development | |||||
should be able to impose changes on the Ant data model, and to what level | |||||
that model should be mirrored in the Antidote code base. The coupling | |||||
between them should be kept low, and at the same time changes to one should | |||||
affect the other minimally. Still, features like property change events and | |||||
bean introspection (or BeanInfo) may be needed to be added to the Ant data | |||||
model. Right now the data model is encapsulated in the package | |||||
<code>org.apache.tools.ant.gui.acs</code> (where "<code>acs</code>" stands for "Ant Construction Set").</i> | |||||
</p> | |||||
</section> | |||||
<section name="Application Context"> | |||||
<p>In order to keep the coupling among application modules to a | |||||
minimum, a single point of reference is needed for coordination | |||||
and data sharing. The class <code>AppContext</code> is the catch-all | |||||
class for containing the application state. Most modules and | |||||
<code>Command</code> classes require an instance of the | |||||
<code>AppContext</code> class. Because all state information in | |||||
contained in an <code>AppContext</code> instance, multiple instances | |||||
of Antidote can run inside the same JVM as long as each has it's | |||||
own <code>AppContext</code>. (Interestingly, two instances of the | |||||
Antidote could conceivably share an <code>AppContext</code> instance | |||||
through RMI, allowing remote interaction/collaboration.) | |||||
</p> | |||||
</section> | |||||
<section name="Configuration and ResourceManager"> | |||||
<p>Full "i18n" support should be assumed in modern applications, | |||||
and all user viewable strings should be defined in a configuration | |||||
file. For Antidote this configuration file is | |||||
<code>antidote.properties</code>, which is located (with other UI | |||||
resources) in the sub-package "resources". | |||||
</p> | |||||
<p>To aid in the lookup of text properties, as well as other | |||||
resources like icons, a class called <code>ResourceManager</code> is | |||||
defined. There are various convenience methods attached to this | |||||
class, which will likely grow to make looking up configuration | |||||
values as easy as possible. | |||||
</p> | |||||
<p>The organization of configuration properties is based on the | |||||
fully qualified path of the class that requires the property. For | |||||
example, the "about" box contains a messages, so it looks for the | |||||
property "<code>org.apache.tools.ant.gui.About.message</code>" for the text | |||||
message it should display. Therefore, the <code>ResourceManager</code> | |||||
method <code>getString()</code> takes a <code>Class</code> instance as | |||||
well as a <code>String</code> key. Please see the | |||||
<code>ResourceManager</code> documentation for more information. Given | |||||
this support, no user visible strings should appear in the source | |||||
code itself. | |||||
</p> | |||||
</section> | |||||
</body> | |||||
</document> | |||||
@@ -1,77 +0,0 @@ | |||||
<?xml version="1.0"?> | |||||
<!-- | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
Licensed under the Apache License, Version 2.0 (the "License"); | |||||
you may not use this file except in compliance with the License. | |||||
You may obtain a copy of the License at | |||||
http://www.apache.org/licenses/LICENSE-2.0 | |||||
Unless required by applicable law or agreed to in writing, software | |||||
distributed under the License is distributed on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
See the License for the specific language governing permissions and | |||||
limitations under the License. | |||||
--> | |||||
<document> | |||||
<properties> | |||||
<index value="1"/> | |||||
<author email="christoph.wilhelms@t-online.de">Christoph Wilhelms</author> | |||||
<title>About Antidote</title> | |||||
</properties> | |||||
<body> | |||||
<section name="About"> | |||||
<h3>ANTidote is the GUI for Ant...</h3> | |||||
<p>... in fact it is the Ant GUI by the Apache Ant project itself, because, | |||||
as you might know, there are several other graphical user interfaces covering Ant. | |||||
Most of them are integrated in IDEs such as <a href="http://ant.netbeans.org">NetBeans</a> | |||||
or <a href="http://www.eclipse.org">Eclipse</a>. To be honest Antidote | |||||
has started a long time ago (spring 2000) and was designed to become integrable into | |||||
IDEs by it's original Author Simeon H. K. Fitch, who did the most work on Antidote. | |||||
Unfortunately the Antidote community never came really "to speed" and so the IDE-guys | |||||
where faster with their integrations. | |||||
</p> | |||||
<p>With these other Ant GUIs Antidote became less important and it seemed there was not much | |||||
interest in such a tool... | |||||
</p> | |||||
<p>Anyways: The "sleeping beauty" Antidote has been awaken and is now being developed to | |||||
a full featured, stand alone, JFC/Swing-based Ant GUI to graphically create, edit and run | |||||
build-files to be quite useful for the developer who do not use an IDE at all. So one of | |||||
the goals of Antidote development is to make it small, fast and really neat :)! | |||||
</p> | |||||
</section> | |||||
<section name="Get a glimpse"> | |||||
<p> | |||||
<img src="images/screenshot.jpg" width="648" height="595" alt="Screenshot"/> | |||||
</p> | |||||
<p>This is a screenshot of how Antidote looks today. Still there is, of course, a lot to do | |||||
and you are welcome to contribute! It shows Antidote using a custom look and feel called | |||||
"Metouia" which you can find <a href="http://mlf.sourceforge.net">here</a> if you want to try it! | |||||
</p> | |||||
</section> | |||||
<section name="Get Involved"> | |||||
<p>Antidote is discussed on the main Ant mailing lists you can find here: | |||||
</p> | |||||
<ul> | |||||
<li><a href="http://jakarta.apache.org/getinvolved/getinvolvedindex.html">Get Involved</a></li> | |||||
<li><a href="../../mail.html">Join Mailing Lists</a></li> | |||||
<li><a href="http://marc.theaimsgroup.com/?l=ant-dev&r=1&w=2">Search the Dev Mailing List</a> | |||||
</li> | |||||
<li><a href="http://marc.theaimsgroup.com/?l=ant-user&r=1&w=2">Search the User Mailing List</a> | |||||
</li> | |||||
</ul> | |||||
</section> | |||||
</body> | |||||
</document> | |||||
@@ -1,107 +0,0 @@ | |||||
<?xml version="1.0"?> | |||||
<!-- | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
Licensed under the Apache License, Version 2.0 (the "License"); | |||||
you may not use this file except in compliance with the License. | |||||
You may obtain a copy of the License at | |||||
http://www.apache.org/licenses/LICENSE-2.0 | |||||
Unless required by applicable law or agreed to in writing, software | |||||
distributed under the License is distributed on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
See the License for the specific language governing permissions and | |||||
limitations under the License. | |||||
--> | |||||
<document> | |||||
<properties> | |||||
<index value="1"/> | |||||
<author email="simeon@fitch.net">Simeon H. K. Fitch</author> | |||||
<author email="christoph.wilhelms@t-online.de">Christoph Wilhelms</author> | |||||
<title>Module HOW-TO</title> | |||||
</properties> | |||||
<body> | |||||
<section name="Introduction"> | |||||
<p>The purpose of this document is to provide an overview of the | |||||
basic steps one must undertake to add a new module to | |||||
Antidote. Please see <a href="./design.html">The Antidote | |||||
Design Overview</a> for information on what a module is and how it | |||||
fits into Antidote. If you've already got all that, then read | |||||
on! | |||||
</p> | |||||
<p>NB: <i>Please submit updates and criticisms to this, particularly | |||||
areas that were unclear, missing, or difficult to follow.</i> | |||||
</p> | |||||
</section> | |||||
<section name="Step by step"> | |||||
<h2>1) Specialize <code>org.apache.tools.ant.gui.core.AntModule</code></h2> | |||||
<p>All modules must inherit from the <code>AntModule</code> | |||||
class. This will probably irritate some of you, but it essentially | |||||
enforces inheritance from <code>javax.swing.JComponent</code> and | |||||
provides encapsulated handling of the <code>AppContext</code> instance | |||||
that is so important to this class. | |||||
</p> | |||||
<p>Your module is required to implement the | |||||
<code>AntModule.contextualize(AppContext)</code> method. The first | |||||
thing this method should do is call | |||||
<code>AntModule.setContext(AppContext)</code>, and then it is safe for | |||||
it to begin constructing its display, using whatever resources it | |||||
needs from the given <code>AppContext</code> instance. Think of this | |||||
in a similar manner to <code>Applet.init()</code> or | |||||
<code>Servlet.init()</code>. | |||||
</p> | |||||
<h2>2) Update | |||||
<code>org/apache/tools/ant/gui/resources/antidote.properties</code></h2> | |||||
<h3>2a) Externalize All Displayable Strings</h3> | |||||
<p>All displayable strings must be externalized to the | |||||
<code>antidote.properties</code> file, and looked up via the | |||||
<code>AppContext.getResources()</code> method after the | |||||
<code>AntModule.contextualize()</code> method has been called. Follow | |||||
the naming convention currently used in the properties file and | |||||
you should have to problems. This task should be done | |||||
<b>during</b> development of your module. Under no circumstances | |||||
should your module be submitted or committed without this task | |||||
being completed. Remember that Antidote has an international | |||||
audience. | |||||
</p> | |||||
<h3>2b) Add Module to List of Auto-Loaded Modules</h3> | |||||
<p>Look for the properties with the format | |||||
<code>org.apache.tools.ant.gui.Antidote.xxx.modules</code> where | |||||
<code>xxx</code> is one of {left | right | top | bottom}. Depending on | |||||
where you want your module to appear, and the order that you want | |||||
it to appear in relationship to the other modules, add the class | |||||
name of your module appropriately. If multiple modules are listed | |||||
for a single property (via a comma delimited list), then each | |||||
module will have it's own tab in a <code>javax.swing.JTabbedPane</code>. | |||||
</p> | |||||
<p>NB:<i>This goofy way of constructing the main screen will probably | |||||
change to something much more general (but not as general as, say | |||||
<a href="http://www.alphaworks.ibm.com/tech/bml">BML</a>).</i> | |||||
</p> | |||||
<h2>Run it!</h2> | |||||
<p>That should be all you need to do, at least to get your module | |||||
plugged in. Check out the source code for | |||||
<code>ProjectNavigator</code> and <code>PropertyEditor</code> for module | |||||
examples that use the various facilities of the Antidote | |||||
framework. | |||||
</p> | |||||
</section> | |||||
</body> | |||||
</document> | |||||
@@ -1,40 +0,0 @@ | |||||
<?xml version="1.0"?> | |||||
<!-- | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
Licensed under the Apache License, Version 2.0 (the "License"); | |||||
you may not use this file except in compliance with the License. | |||||
You may obtain a copy of the License at | |||||
http://www.apache.org/licenses/LICENSE-2.0 | |||||
Unless required by applicable law or agreed to in writing, software | |||||
distributed under the License is distributed on an "AS IS" BASIS, | |||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
See the License for the specific language governing permissions and | |||||
limitations under the License. | |||||
--> | |||||
<document> | |||||
<properties> | |||||
<index value="1"/> | |||||
<author email="christoph.wilhelms@gmx.de">Christoph Wilhelms</author> | |||||
<title>News</title> | |||||
</properties> | |||||
<body> | |||||
<section name="German i18n"> | |||||
<h3>October 12, 2003 - Antidote German internationalization implemented</h3> | |||||
<p>After English and Japanese, German is the third language Antidote has been | |||||
localized to! Many others may follow!?!</p> | |||||
</section> | |||||
<section name="Antidote News Page"> | |||||
<h3>October 12, 2003 - News Page</h3> | |||||
<p>To show, that we are really continue the work on Antidote, I set up this | |||||
news page to inform you all about the progress. Additonally I'd like to encourage | |||||
you to use and test Antidote, or - of course - take part in the development!</p> | |||||
</section> | |||||
</body> | |||||
</document> | |||||
@@ -69,12 +69,6 @@ | |||||
<menu name="Projects"> | <menu name="Projects"> | ||||
<item name="Welcome" href="/projects/index.html"/> | <item name="Welcome" href="/projects/index.html"/> | ||||
</menu> | </menu> | ||||
<!--menu name="Antidote"> | |||||
<item name="About Antidote" href="/projects/antidote/index.html"/> | |||||
<item name="News" href="/projects/antidote/news.html"/> | |||||
<item name="Design Overview" href="/projects/antidote/design.html"/> | |||||
<item name="Module HOW-TO" href="/projects/antidote/module.html"/> | |||||
</menu--> | |||||
</menusection> | </menusection> | ||||
</body> | </body> | ||||
</project> | </project> |