Browse Source

Antidote officially moved to the CVS module jakarta-ant-antidote.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268948 13f79535-47bb-0310-9956-ffa450edef68
master
metasim 24 years ago
parent
commit
0fbdf21385
100 changed files with 0 additions and 14771 deletions
  1. +0
    -153
      src/antidote/ChangeLog
  2. +0
    -68
      src/antidote/README
  3. +0
    -69
      src/antidote/TODO
  4. +0
    -48
      src/antidote/bin/antidote
  5. +0
    -48
      src/antidote/bin/antidote.bat
  6. +0
    -214
      src/antidote/build.xml
  7. +0
    -253
      src/antidote/docs/design-overview.html
  8. +0
    -335
      src/antidote/docs/gui-ideas.txt
  9. +0
    -250
      src/antidote/docs/gui-requirements.html
  10. +0
    -89
      src/antidote/docs/new-module-howto.html
  11. +0
    -44
      src/antidote/docs/uml/index.html
  12. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-acs.gif
  13. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-command.gif
  14. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-core.gif
  15. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-customizer.gif
  16. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-event.gif
  17. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-ide.gif
  18. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-modules-console.gif
  19. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-modules-edit.gif
  20. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-modules.gif
  21. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui-util.gif
  22. BIN
      src/antidote/docs/uml/org-apache-tools-ant-gui.gif
  23. +0
    -4
      src/antidote/etc/manifest
  24. +0
    -142
      src/antidote/org/apache/tools/ant/gui/About.java
  25. +0
    -147
      src/antidote/org/apache/tools/ant/gui/Antidote.java
  26. +0
    -161
      src/antidote/org/apache/tools/ant/gui/Args.java
  27. +0
    -155
      src/antidote/org/apache/tools/ant/gui/Main.java
  28. +0
    -73
      src/antidote/org/apache/tools/ant/gui/acs/ACSBeanDescriptor.java
  29. +0
    -73
      src/antidote/org/apache/tools/ant/gui/acs/ACSDefaultElement.java
  30. +0
    -504
      src/antidote/org/apache/tools/ant/gui/acs/ACSDocumentType.java
  31. +0
    -103
      src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedAttributes.java
  32. +0
    -329
      src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java
  33. +0
    -139
      src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElementBeanInfo.java
  34. +0
    -153
      src/antidote/org/apache/tools/ant/gui/acs/ACSElement.java
  35. +0
    -299
      src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java
  36. +0
    -75
      src/antidote/org/apache/tools/ant/gui/acs/ACSInfoProvider.java
  37. +0
    -127
      src/antidote/org/apache/tools/ant/gui/acs/ACSNamedElement.java
  38. +0
    -167
      src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java
  39. +0
    -136
      src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElementBeanInfo.java
  40. +0
    -154
      src/antidote/org/apache/tools/ant/gui/acs/ACSPropertyElement.java
  41. +0
    -132
      src/antidote/org/apache/tools/ant/gui/acs/ACSPropertyElementBeanInfo.java
  42. +0
    -182
      src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElement.java
  43. +0
    -153
      src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElementBeanInfo.java
  44. +0
    -153
      src/antidote/org/apache/tools/ant/gui/acs/ACSTaskElement.java
  45. +0
    -134
      src/antidote/org/apache/tools/ant/gui/acs/ACSTaskElementBeanInfo.java
  46. +0
    -71
      src/antidote/org/apache/tools/ant/gui/acs/ACSTreeNodeElement.java
  47. +0
    -159
      src/antidote/org/apache/tools/ant/gui/acs/BaseBeanInfo.java
  48. +0
    -312
      src/antidote/org/apache/tools/ant/gui/acs/ElementTreeModel.java
  49. +0
    -103
      src/antidote/org/apache/tools/ant/gui/acs/ElementTreeSelectionModel.java
  50. +0
    -14
      src/antidote/org/apache/tools/ant/gui/acs/acs-element.properties
  51. +0
    -9
      src/antidote/org/apache/tools/ant/gui/acs/package.html
  52. +0
    -255
      src/antidote/org/apache/tools/ant/gui/acs/project-ext.dtd
  53. +0
    -424
      src/antidote/org/apache/tools/ant/gui/acs/project.dtd
  54. +0
    -118
      src/antidote/org/apache/tools/ant/gui/acs/share.dtd
  55. +0
    -84
      src/antidote/org/apache/tools/ant/gui/command/AboutCmd.java
  56. +0
    -91
      src/antidote/org/apache/tools/ant/gui/command/AbstractCommand.java
  57. +0
    -128
      src/antidote/org/apache/tools/ant/gui/command/BuildCmd.java
  58. +0
    -81
      src/antidote/org/apache/tools/ant/gui/command/ChangeLookAndFeelCmd.java
  59. +0
    -111
      src/antidote/org/apache/tools/ant/gui/command/CloseCmd.java
  60. +0
    -72
      src/antidote/org/apache/tools/ant/gui/command/Command.java
  61. +0
    -106
      src/antidote/org/apache/tools/ant/gui/command/DeleteElementCmd.java
  62. +0
    -164
      src/antidote/org/apache/tools/ant/gui/command/DisplayErrorCmd.java
  63. +0
    -91
      src/antidote/org/apache/tools/ant/gui/command/EmacsNotifyCmd.java
  64. +0
    -86
      src/antidote/org/apache/tools/ant/gui/command/ExitCmd.java
  65. +0
    -119
      src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java
  66. +0
    -159
      src/antidote/org/apache/tools/ant/gui/command/NewElementCmd.java
  67. +0
    -429
      src/antidote/org/apache/tools/ant/gui/command/NewElementDlg.java
  68. +0
    -92
      src/antidote/org/apache/tools/ant/gui/command/NewProjectCmd.java
  69. +0
    -93
      src/antidote/org/apache/tools/ant/gui/command/NewPropertyCmd.java
  70. +0
    -94
      src/antidote/org/apache/tools/ant/gui/command/NewTargetCmd.java
  71. +0
    -94
      src/antidote/org/apache/tools/ant/gui/command/NewTaskCmd.java
  72. +0
    -78
      src/antidote/org/apache/tools/ant/gui/command/NoOpCmd.java
  73. +0
    -98
      src/antidote/org/apache/tools/ant/gui/command/OpenCmd.java
  74. +0
    -181
      src/antidote/org/apache/tools/ant/gui/command/SaveAsCmd.java
  75. +0
    -79
      src/antidote/org/apache/tools/ant/gui/command/SaveCmd.java
  76. +0
    -147
      src/antidote/org/apache/tools/ant/gui/command/ShowOrHideConsoleCmd.java
  77. +0
    -424
      src/antidote/org/apache/tools/ant/gui/core/ActionManager.java
  78. +0
    -369
      src/antidote/org/apache/tools/ant/gui/core/AntAction.java
  79. +0
    -122
      src/antidote/org/apache/tools/ant/gui/core/AntModule.java
  80. +0
    -164
      src/antidote/org/apache/tools/ant/gui/core/AppContext.java
  81. +0
    -158
      src/antidote/org/apache/tools/ant/gui/core/BuildEventForwarder.java
  82. +0
    -106
      src/antidote/org/apache/tools/ant/gui/core/EventDebugMonitor.java
  83. +0
    -178
      src/antidote/org/apache/tools/ant/gui/core/EventResponder.java
  84. +0
    -177
      src/antidote/org/apache/tools/ant/gui/core/EventToActionMapper.java
  85. +0
    -384
      src/antidote/org/apache/tools/ant/gui/core/ProjectManager.java
  86. +0
    -177
      src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java
  87. +0
    -322
      src/antidote/org/apache/tools/ant/gui/core/ResourceManager.java
  88. +0
    -147
      src/antidote/org/apache/tools/ant/gui/core/SelectionManager.java
  89. +0
    -102
      src/antidote/org/apache/tools/ant/gui/core/XMLFileFilter.java
  90. +0
    -28
      src/antidote/org/apache/tools/ant/gui/customizer/.wrapper
  91. +0
    -246
      src/antidote/org/apache/tools/ant/gui/customizer/AbstractPropertyEditor.java
  92. +0
    -170
      src/antidote/org/apache/tools/ant/gui/customizer/DoublePropertyEditor.java
  93. +0
    -608
      src/antidote/org/apache/tools/ant/gui/customizer/DynamicCustomizer.java
  94. +0
    -215
      src/antidote/org/apache/tools/ant/gui/customizer/FilePropertyEditor.java
  95. +0
    -172
      src/antidote/org/apache/tools/ant/gui/customizer/IntegerPropertyEditor.java
  96. +0
    -313
      src/antidote/org/apache/tools/ant/gui/customizer/ObjectPropertyEditor.java
  97. +0
    -308
      src/antidote/org/apache/tools/ant/gui/customizer/PropertiesPropertyEditor.java
  98. +0
    -179
      src/antidote/org/apache/tools/ant/gui/customizer/StringArrayPropertyEditor.java
  99. +0
    -165
      src/antidote/org/apache/tools/ant/gui/customizer/StringPropertyEditor.java
  100. +0
    -129
      src/antidote/org/apache/tools/ant/gui/event/AntBuildEvent.java

+ 0
- 153
src/antidote/ChangeLog View File

@@ -1,153 +0,0 @@
2000-11-27 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/ActionManager.java: Added ability to
generate popup menus from a list of action IDs.

2000-11-24 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/Console.java: Added context colorization.

2000-11-20 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/command/DisplayErrorCmd.java: Added
code to allow display of stack backtrace if needed.

2000-11-18 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/customizer/PropertiesPropertyEditor.java:
Added proper editing capability. Rows are added and removed
automatically.
* org/apache/tools/ant/gui/customizer/XXXPropertyEditor.java:
Removed stray event firing upon setting value of property to edit.

2000-11-16 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/customizer/StringPropertyEditor.java:
Changed underlying widget type to JTextPane so that it would
accomidate multi-line strings property.

* org/apache/tools/ant/gui/acs/ACSTreeNodeElement.java: Fixed
nasty java.lang.IllegalAccessException bug that I thought was
related to Java 1.3 Blackdown RC1, but wasn't. It was related to
using Jikes, which interprests method resolution differently than
javac, resulting in a call trying to access a private method
implementation of a public interface.

* org/apache/tools/ant/gui/ResourceManager.java: Added convenience
method for getting resource images for a given class.

* org/apache/tools/ant/gui/AntAction.java: Added toggle property.

* org/apache/tools/ant/gui/ActionManager.java: Added ability to
handle toggle actions to menu bar (still need to add support to
tool bar).

* org/apache/tools/ant/gui/EventResponder.java: Added emacs
notifier command.

* org/apache/tools/ant/gui/ide/EmacsNotifier.java: Imported.

* org/apache/tools/ant/gui/ProjectProxy.java: Added code to add
listeners registered with the AppContext to the build.

* org/apache/tools/ant/gui/AppContext.java: Now allows registering
of build listeners to be added to project at build time.

* org/apache/tools/ant/gui/Main.java: Added loading of build file
provided on command line.

2000-11-14 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/Antidote.java: Added top area widget,
which is *not* managed inside a split pane.

* org/apache/tools/ant/gui/ProjectNavigator.java: Added minimum
size to keep resizing of parent from hiding widget.

* org/apache/tools/ant/gui/ActionManager.java: Large functionality
addtion for allowing action enabled/disabled state to be defined
in the configuration file. The triggering of state changes is
based on the firing of specific events.

* org/apache/tools/ant/gui/AntAction.java: Broke out from inner
class of ActionManager to its own self (I'm my own man!).

* org/apache/tools/ant/gui/command/CloseCmd.java: Added firing of
ProjectClosedEvent so state updates could occur.

* org/apache/tools/ant/gui/resources/action.properties: Added
enabledOn and disabledOn event specifications.

* org/apache/tools/ant/gui/Console.java: Improved reporting level
handling (some events weren't getting reported).

2000-11-10 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/PropertyEditor.java: Added new
DynamicCustomizer class instead of HTML based info.

2000-11-09 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/ProjectProxy.java: Started rework of
project data model, using elements from the XML parser directly
through the new Ant Construction Set package.

2000-11-08 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/About.java: Useless tweaking inspired
by procrastination.

2000-11-05 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/LogLevelEnum.java: Added log level
enumeration for use with combo boxes (drops nicely into default model).

* org/apache/tools/ant/gui/event/BuildEventType.java: Added
delivering of event to a BuildListener based on enumeration value.

* org/apache/tools/ant/gui/ProjectProxy.java: Added generation of
BuildEvent on project start and finish, as the project itself
doesn't generate theses events (unfortunately).

* org/apache/tools/ant/gui/Console.java: Added filtering level,
and clearing of buffer when a new build starts.

* org/apache/tools/ant/gui/AntEditor.java: Added automatic border
for all subclasses.

2000-11-04 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/ProjectProxy.java: Added inner class to
execute the build in a separate thread.

* org/apache/tools/ant/gui/event/EventBus.java: Added check to see
if postEvent() is being called on the AWTEvent thread, and if not,
post the dispatching of the event to that thread. This is needed
as most of the listeners will be bound to GUI components and will
be updating their state (which must occur on the event thread).

* org/apache/tools/ant/gui/ProjectProxy.java: Added a
BuildListener to forward events to the EventBus.

2000-11-03 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/Antidote.java: Removed hard-coded
Console class.

* org/apache/tools/ant/gui/Console.java: Changed to a real
AntEditor class, initialized by the config file.

2000-11-02 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/event/EventBus.java: Added interrupt
level support.

* org/apache/tools/ant/gui/About.java: Created
2000-11-01 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/Main.java: Added XMLHelper.init() call
* build.xml: Updated run target to include ant.jar in classpath.


+ 0
- 68
src/antidote/README View File

@@ -1,68 +0,0 @@

A N T I D O T E
What is it?
-----------
Antidote is the Java based GUI interface to the Ant build tool.

Status
------
Antidote is in the early stages of development. Its usefulnes is limited, and
will not be distributed with the binary versions of Ant until it is deemed
featureful and robust enough for end user use. That being said, it currently
will load an Ant build.xml file, allow you to edit some of the file's
properties, save it, and launch a build starting at any target in the
project.

The Latest Version
------------------

The latest version is the current CVS version, which may or may not be useful
at any given time. The source code is not being base-lined at any specific
version at this time.

Documentation
-------------

Any documentation that exists for Antidote can be found in the antidote/docs
directory. Documentation is primarily developement based documentation as
Antidote is not yet mature enough for reliable user documentation.

Building
--------

Antidote requres JAXP 1.0.1 from Sun (http://java.sun.com/xml). Some time in
the future it is hoped at any w3c based XML will be usable, but at the
current time the Sun library is needed. The easiest way to install the
jaxp.jar and parsers.jar file that comes with the distribution is to copy
them into your $JAVA_HOME/jre/lib/ext directory.

There is a build.xml file in the same directory as this file that will work
with Ant 1.2. It is recommended that Ant be built first (from ../..),
followed by this directory. By default, the compiled classes will be written
to ~/built/antidote/classes, but the JAR file and launch scripts are written
to the Ant build directory (~/build/ant).

Running
-------

Antidote requires at least Java 1.2 to run.

Upon successful building of Ant and Antidote (in that order), go to
~/build/ant/bin and run "antidote". You will probably have to set the
environment variable "ANT_HOME" to "~/build/ant" in the shell that you launch
antidote from. If desired, you can provide the build file to launch at statup
as the first argument on the command line to "antidote".

Licensing
---------

This software is licensed under the terms you may find in the file
named "LICENSE" provided with this distribution.

Thanks for using Antidote.

The Apache Jakarta Project
<http://jakarta.apache.org/>

+ 0
- 69
src/antidote/TODO View File

@@ -1,69 +0,0 @@
TODO List:
* Rewrite ACSFactory to use it's own parser rather than the implementation
specific com.sun.xml.tree.SimpleElementFactory class (only available
in JAXP from Sun).

* Add editors for defining file sets, and other "sets".

* Write wizzard framework.

* Implement a build progress reporter.

* Implement a "Worker Thread" pattern that allows workers to have
their work done in a thread property registered with Antidote, and
provide support to that worker to provide progress updates via
the GUI. Should also provide support for hour-glass cursor
handling, and AWT event blocking until task is completed. This
would be used for things such as loading files or other tasks
that the user must wait for completion.

* Add menu option to select the compiler to use, which then sets
the "build.compiler" property. Better yet, create a generic menu
building capability that allows the setting of a property from a
list of options.

* Add ability to put an "all" or "don't care" specifyer on the action
"enableOn" and "disableOn" properties.

* Add ability to view task dependencies more fully.

* Add better editors for specific tasks.

* Add a Progress Monitor for file loading (especially for slow boxen like
mine) .

* Implement some for of refid hyperlinking functionality.

* Implement context sensitive menus for the console window, allowing
an error to be selected and invoked in IDE.

* Write preferences framwork, including persistence support.

* Provide some sort of class path debugging support.

* Add "syntax" colorization to the console window {done},
with a preferences editor for setting up the styles {not-done}.

* Figure out an approach to gracefully stopping a running build.

* Add error handler for SAX parser to better report loading errors.

* Project properties viewer, including the ability to view
dependencies (local and cascading).

* Acquire or implement a logging facility.

* Eat more dog food.

(pending Ant 2.0)
* Need Ant API access to:
- Tasks within a Target
- The topo sorted task list to get flattened dependencies
- The build setup code to recduce code replication.
- Normalize the Ant data model to represent a more consistent
tree structure, and more bean-like API.

* Better define the data model architecture, and how it interfaces
with the Ant data model.


+ 0
- 48
src/antidote/bin/antidote View File

@@ -1,48 +0,0 @@
#! /bin/sh

if [ -f $HOME/.antrc ] ; then
. $HOME/.antrc
fi

if [ "$ANT_HOME" = "" ] ; then
# try to find ANT
if [ -d /opt/ant ] ; then
ANT_HOME=/opt/ant
fi

if [ -d ${HOME}/opt/ant ] ; then
ANT_HOME=${HOME}/opt/ant
fi

## resolve links - $0 may be a link to ant's home
PRG=$0
progname=`basename $0`
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname $PRG`/$link"
fi
done
ANT_HOME=`dirname "$PRG"`/..

fi

# Allow .antrc to specifiy flags to java cmd
if [ "$JAVACMD" = "" ] ; then
JAVACMD=java
fi

LOCALCLASSPATH=`echo $ANT_HOME/lib/*.jar | tr ' ' ':'`

if [ "$CLASSPATH" != "" ] ; then
LOCALCLASSPATH=$CLASSPATH:$LOCALCLASSPATH
fi


$JAVACMD -classpath $LOCALCLASSPATH -Dant.home=${ANT_HOME} org.apache.tools.ant.gui.Main $@


+ 0
- 48
src/antidote/bin/antidote.bat View File

@@ -1,48 +0,0 @@
@echo off

rem Slurp the command line arguments. This loop allows for an unlimited number of
rem agruments (up to the command line limit, anyway).

set ANT_CMD_LINE_ARGS=

:setupArgs
if %1a==a goto doneArgs
set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
shift
goto setupArgs

:doneArgs
rem The doneArgs label is here just to provide a place for the argument list loop
rem to break out to.

rem find ANT_HOME
if not "%ANT_HOME%"=="" goto checkJava

rem check for ant in Program Files on system drive
rem if not exist "%SystemDrive%\Program Files\ant" goto checkSystemDrive
rem set ANT_HOME=%SystemDrive%\Program Files\ant
rem goto checkJava

rem :checkSystemDrive
rem check for ant in root directory of system drive
rem if not exist "%SystemDrive%\ant" goto noAntHome
rem set ANT_HOME=%SystemDrive%\ant
rem goto checkJava

:noAntHome
echo ANT_HOME is not set and ant could not be located. Please set ANT_HOME.
goto end

:checkJava
if "%JAVACMD%" == "" set JAVACMD=java

set LOCALCLASSPATH="%CLASSPATH%"
for %%i in ("%ANT_HOME%\lib\*.jar") do call "%ANT_HOME%\bin\lcp.bat" "%%i"

%JAVACMD% -classpath %LOCALCLASSPATH% -Dant.home="%ANT_HOME%" org.apache.tools.ant.gui.Main %ANT_CMD_LINE_ARGS%
goto end

:end
set LOCALCLASSPATH=
set ANT_CMD_LINE_ARGS=


+ 0
- 214
src/antidote/build.xml View File

@@ -1,214 +0,0 @@
<?xml version="1.0"?>

<project name="Antidote" default="main" basedir=".">

<!-- Give user a chance to override without editing this file
(and without typing -D each time it compiles it) -->
<property file="${user.home}/.ant.properties" />

<property name="Name" value="Antidote"/>
<property name="name" value="antidote"/>
<property name="version" value="0.1"/>

<property name="ant.home" value="../../"/>
<property name="src.bin.dir" value="bin"/>
<property name="src.etc.dir" value="etc"/>
<property name="src.dir" value="."/>
<property name="docs.dir" value="docs"/>
<property name="build.dir" value="../../../build/antidote"/>
<property name="ant.build.dir" value="../../../build/ant"/>
<property name="lib.dir" value="${ant.build.dir}/lib"/>
<property name="bin.dir" value="${ant.build.dir}/bin"/>
<property name="build.classes" value="${build.dir}/classes"/>
<property name="build.javadocs" value="${build.dir}/javadocs"/>
<property name="ant.dist.dir" value="../../../dist/ant"/>

<path id="classpath">
<pathelement location="${lib.dir}/ant.jar"/>
</path>
<property name="packages" value="org.apache.tools.ant.gui.*"/>
<property name="manifest" value="etc/manifest"/>

<!-- =================================================================== -->
<!-- Set some the defaults the user can override in .ant.properties -->
<!-- =================================================================== -->
<property name="build.compiler" value="modern"/>
<property name="build.compiler.emacs" value="on"/>

<!-- =================================================================== -->
<!-- Define a global set of patterns that can be referenced by -->
<!-- its id attribute -->
<!-- =================================================================== -->
<patternset id="chmod.patterns">
<include name="**/antidote" />
</patternset>

<!-- =================================================================== -->
<!-- Prepares the build directory -->
<!-- =================================================================== -->
<target name="prepare">
<mkdir dir="${build.dir}"/>
<mkdir dir="${ant.build.dir}"/>
<tstamp />
</target>

<!-- =================================================================== -->
<!-- Compiles the source code -->
<!-- =================================================================== -->
<target name="compile" depends="prepare">
<mkdir dir="${build.classes}"/>

<javac srcdir="${src.dir}"
destdir="${build.classes}"
debug="on"
deprecation="on"
optimize="off" >
<classpath refid="classpath" />
</javac>
<copy todir="${build.classes}">
<fileset dir="${src.dir}">
<include name="**/*.properties" />
<include name="**/*.gif" />
<include name="**/*.dtd" />
</fileset>
</copy>

<filter token="VERSION" value="${version}" />
<filter token="DATE" value="${TODAY}" />
<filter token="TIME" value="${TSTAMP}" />
<copy todir="${build.classes}"
overwrite="true"
filtering="on">
<fileset dir="${src.dir}">
<include name="**/version.txt" />
</fileset>
</copy>
</target>

<!-- =================================================================== -->
<!-- Creates the jar archive -->
<!-- =================================================================== -->
<target name="jar" depends="compile">
<mkdir dir="${lib.dir}"/>
<jar jarfile="${lib.dir}/${name}.jar"
basedir="${build.classes}"
includes="org/**"
manifest="${manifest}"
/>
</target>

<!-- =================================================================== -->
<!-- Creates the binary structure -->
<!-- =================================================================== -->
<target name="main" depends="jar" description="Creates the binary structure">
<mkdir dir="${bin.dir}"/>
<copy todir="${bin.dir}">
<fileset dir="${src.bin.dir}"/>
</copy>
<chmod perm="+x">
<fileset dir="${bin.dir}">
<patternset refid="chmod.patterns"/>
</fileset>
</chmod>
<fixcrlf srcdir="${bin.dir}" includes="antidote" cr="remove"/>
<fixcrlf srcdir="${bin.dir}" includes="*.bat" cr="add"/>
</target>

<!-- =================================================================== -->
<!-- Creates the API documentation -->
<!-- =================================================================== -->
<target name="javadocs" depends="prepare" description="Creates the API documentation">
<mkdir dir="${build.javadocs}"/>
<javadoc packagenames="${packages}"
sourcepath="${basedir}/${src.dir}"
destdir="${build.javadocs}"
author="true"
private="true"
version="true"
windowtitle="${Name} API"
doctitle="${Name}"
bottom="Copyright &#169; 2000 Apache Software Foundation. All Rights Reserved.">
<group title="Antidote" packages="org.apache.tools.ant.gui*" />
</javadoc>
</target>

<!-- =================================================================== -->
<!-- Creates the distribution -->
<!-- =================================================================== -->
<target name="dist" depends="main,jar,javadocs" description="Creates the distribution">
<mkdir dir="${ant.dist.dir}"/>
<mkdir dir="${ant.dist.dir}/bin"/>
<mkdir dir="${ant.dist.dir}/lib"/>
<mkdir dir="${ant.dist.dir}/docs"/>
<mkdir dir="${ant.dist.dir}/docs/api"/>
<mkdir dir="${ant.dist.dir}/src"/>

<copy todir="${ant.dist.dir}/src">
<fileset dir="${src.dir}"/>
</copy>
<copy todir="${ant.dist.dir}/lib">
<fileset dir="${lib.dir}"/>
</copy>

<copy todir="${ant.dist.dir}/bin">
<fileset dir="bin"/>
</copy>
<copy todir="${ant.dist.dir}/docs">
<fileset dir="${docs.dir}"/>
</copy>
<copy todir="${ant.dist.dir}/docs/api">
<fileset dir="${build.javadocs}"/>
</copy>

<fixcrlf srcdir="${ant.dist.dir}/bin" includes="antidote" cr="remove"/>
<fixcrlf srcdir="${ant.dist.dir}/bin" includes="*.bat" cr="add"/>
<chmod perm="+x">
<fileset dir="${ant.dist.dir}/bin">
<patternset refid="chmod.patterns"/>
</fileset>
</chmod>

<copy file="README" tofile="${ant.dist.dir}/README"/>
<copy file="WHATSNEW" tofile="${ant.dist.dir}/WHATSNEW"/>
<copy file="TODO" tofile="${ant.dist.dir}/TODO"/>
<copy file="LICENSE" tofile="${ant.dist.dir}/LICENSE"/>
</target>

<!-- =================================================================== -->
<!-- Packages the distribution with ZIP -->
<!-- =================================================================== -->
<target name="dist-zip" depends="dist">
<zip zipfile="${Name}-${version}.zip" basedir="${ant.dist.dir}" includes="**"/>
</target>

<!-- =================================================================== -->
<!-- Packages the distribution with TAR-GZIP -->
<!-- =================================================================== -->
<target name="dist-tgz" depends="dist">
<tar tarfile="${Name}-${version}.tar" basedir="${ant.dist.dir}" includes="**"/>
<gzip zipfile="${Name}-${version}.tar.gz" src="${Name}-${version}.tar"/>
</target>

<!-- =================================================================== -->
<!-- Cleans up generated stuff -->
<!-- =================================================================== -->
<target name="clean">
<delete dir="${build.dir}"/>
<delete dir="${ant.dist.dir}"/>
</target>

<!-- =================================================================== -->
<!-- Total cleanup -->
<!-- =================================================================== -->
<target name="total-clean" depends="clean">
<delete dir="${bin.dir}"/>
<delete file="${lib.dir}/${name}.jar"/>
<delete file="${Name}-${version}.zip"/>
<delete file="${Name}-${version}.tar"/>
<delete file="${Name}-${version}.tar.gz"/>
</target>


</project>


+ 0
- 253
src/antidote/docs/design-overview.html View File

@@ -1,253 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "strict.dtd">
<HTML>
<HEAD>
<TITLE>Antidote Design Overview</TITLE>
</HEAD>

<BODY>

<H1>Antidote Design Overview</H1>

<P>Version 0.2 (2000/12/18)</P>

<P>Authors:
<A HREF="mailto:simeon@fitch.net">Simeon H.K. Fitch</A>
</P>

<H2>Introduction</H2>

<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>

<H2>Overview</H2>
<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 acheive 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
predifined 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 <TT>EventBus</TT>.

<TT><PRE>

Antidote Component Architecture

+---------------+ +----------------+ +-------------+ +-------------+
| | | | | | | |
| 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)|
| | | | | | | |
+---------------+ +----------------+ +-------------+ +--------------+

</TT></PRE>

<H2>Event Bus</H2>

<P>The backbone of the application is the <TT>EventBus</TT>. Any
component of the application can post events to the
<TT>EventBus</TT>. Components that wish to receive events are
called <TT>BusMember</TT>s.</P>

<P>The <TT>EventBus</TT> will dispatch any object of type
<TT>java.util.Event</TT>, which means that Ant <TT>BuildEvent</TT>
objects, as well as <TT>AWTEvent</TT> objects can be posted (if desired). A
new class of events called <TT>AntEvent</TT> is defined for Antidote
specific events, which have the additional capability of being
cancelled mid-dispatch.</P>

<P>Each <TT>BusMember</TT> must provide a <TT>BusFilter</TT> instance,
which is the members' means of telling the bus which
events it is interested in. This allows a <TT>BusMember</TT> to,
say, only receive <TT>AntEvent</TT> objects.</P>

<P>When a <TT>BusMember</TT> registers itself with the
<TT>EventBus</TT>, it must provide a (so called) <I>interrupt
level</I> which is a integer value defining a relative ordering
for dispatching <TT>EventObject</TT>s to <TT>BusMember</TT>s. The
purpose of this is to allow certain <TT>BusMember</TT> instances
to see an event before others, and in the case of <TT>AntEvent</TT
objects, keep the event from propogating onward. The
<TT>EventBus</TT> class defines the interrupt level constants
<TT>VETOING=1</TT>, <TT>MONITORING=5</TT>, and <TT>RESPONDING=10</TT> to
help define categories of members. The implied purpose being that:
<UL>

<LI><TT>VETOING</TT>: Listens for certain types of events, and
may process them in a non-default manner to determine if the
event should be cancelled before being dispatched to the
<TT>RESPONDING</TT> group.

<LI><TT>MONITORING</TT>: Just listens for events, like a logger
or status monitor.</LI>

<LI><TT>RESPONDING</TT>: Process events in a default manner,
knowing that the event has passed any <TT>VETOING</TT> members.</LI>

</UL>

Within a specific interrupt level, the order in which members will
receive events is undefied. A <TT>BusMember</TT> may be registered
at a level that is +/- of one of the defined levels, as long as it
follows the constraint <TT>MONITORING <= interruptLevel <=
MAX_INTERRUPT</TT>.</P>


<H2>Actions and ActionManager</H2>

<P>Extensive use of the <TT>javax.swing.Action</TT> interface is
made for defining the set of menu and tool bar options that are
available. The configuration file <TT>action.properties</TT>
exists to define what should appear in the menu and toolbar, how
it is displayed, and the <TT>Action</TT> command name that is
dispatched when the user invokes that action. A class called
<TT>ActionManager</TT> exists for not only processing the
configuration file, but also for dispatching invoked action events
to the <TT>EventBus</TT>, and for controlling the enabled state of
an <TT>Action</TT>. When a new menu item or toolbar button is
desired, first it is added to the <TT>action.properties</TT> file,
and then the code to respond to it is added to the
<TT>EventResponder</TT> (see below).


<H2>Commands and EventResponder</H2>

<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 <TT>Command</TT> interface is defined to classify
code which performs some task or operation. This is distinct from
an <TT>Action</TT>, which is a user request for an operation. A
<TT>Command</TT> class is the encapsulation of the operation
itself.</P>

<P>When an <TT>Action</TT> generates an <TT>ActionEvent</TT>, the
event is posted to the <TT>EventBus</TT> which delivers the event
to all interested <TT>BusMember</TT>s. It eventually makes it to
the <TT>EventResponder</TT> instance (registered at the
<TT>RESPONDING</TT> interrupt level), which is responsible for
translating specific events into <TT>Command</TT> objects, and
then executing the <TT>Command</TT> object. For example, when the
user selects the "Open..." menu option, an <TT>ActionEvent</TT> is
generated by the Swing <TT>MenuItem</TT> class, which is then
posted to the <TT>EventBus</TT> by the <TT>ActionManager</TT>. The
<TT>ActionEvent</TT> is delivered to the <TT>EventResponder</TT>,
which converts the <TT>ActionEvent</TT> into a <TT>Command</TT>
instance. The <TT>EventResponder</TT> then calls the method
<TT>Command.execute()</TT> to invoke the command (which displays a
dialog for selecting a file to open).</P>

<P>When adding new <TT>Action</TT>s or general tasks to the
application, a <TT>Command</TT> 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 actualy response
to a request may change, as well as who services it. This
design approach facilitates that.</P>

<H2>Data Model and Views</H2>

<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
<TT>org.apache.tools.ant.gui.acs</TT> (where "<TT>acs</TT>" stands for "Ant
Construction Set").</I></P>

<H2>Application Context</H2>

<P>In order to keep the coupling amoung application modules to a
minimum, a single point of reference is needed for coordination
and data sharing. The class <TT>AppContext</TT> is the catch-all
class for containing the application state. Most modules and
<TT>Command</TT> classes require an instance of the
<TT>AppContext</TT> class. Because all state information in
contained in an <TT>AppContext</TT> instance, multiple instances
of Antidote can run inside the same JVM as long as each has it's
own <TT>AppContext</TT>. (Interestingly, two instances of the
Antidote could conceivably share an <TT>AppContext</TT> instance
through RMI, allowing remote interaction/collaboration.)</P>

<H2>Configuration and ResourceManager</H2>
<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 configuraiton file is
<TT>antidote.properties</TT>, which is located (with other UI
resources) in the subpackage "resources".</P>

<P>To aid in the lookup of text properties, as well as other
resources like icons, a class called <TT>ResourceManager</TT> 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 qualifed path of the class that requires the property. For
example, the "about" box contains a messages, so it looks for the
property "<TT>org.apache.tools.ant.gui.About.message</TT>" for the text
message it should display. Therefore, the <TT>ResourceManager</TT>
method <TT>getString()</TT> takes a <TT>Class</TT> instance as
well as a <TT>String</TT> key. Please see the
<TT>ResourceManager</TT> documentation for more information. Given
this support, no user visible strings should appear in the source
code itself.</P>

<H2>Other Resources</H2>
<P>Other information about development on Antidote:</P>
<UL>
<LI><A HREF="uml/index.html">Antidote UML Static Class Diagrams</A></LI>
<LI><A HREF="gui-requirements.html">Antidote Feature Wishlist</A></LI>
<LI><A HREF="new-module-howto.html">Antidote Module HOWTO</A></LI>
</UL>

<HR>
<P ALIGN="center">Copyright &copy; 2000 Apache Software Foundation. All
rights Reserved.</P>

</BODY>
</HTML>

+ 0
- 335
src/antidote/docs/gui-ideas.txt View File

@@ -1,335 +0,0 @@
(NOTE: the following text is a vision for an Ant GUI by Stefan Vaillant
<mailto:Stephan.Vaillant@nokia.com> called Anttool. It is included here in the
Antidote docs section as it provides a better vision for what the GUI should be
than the current requirements document, and should be considered an integral
part of the long-term plans for Antidote. Simeon Fitch)


-----------------------------------------------------------------------

********************
**Anttool Proposal**
********************

By: Stefan Vaillant <mailto:Stephan.Vaillant@nokia.com>

-----------------------------------------------------------------------

Anttool Overview:
-----------------

With Anttool a user can manage the build process for existing ant build files.
By using the grafical user interface, the user can adjust certain properties to
his environment, start and cancel builds, monitor their progress and call
appropiate programs to fix problems. It is not possible to modify the build
file. Instead, an external XML editor or antidote should be used.


For inexperienced users, the tool provides an easy and efficient way to install
open source software: load software to the local system, build it and install
it. The tool can be used without any knowledge of XML or the ant DTD. Instead,
the user just adjusts the relevant properties to his environment and starts the
build.

For programmers, the tool supports the basic build/test/edit cycle. Given an
existing ant build file, the programmer can use the grafical user interface to
execute individual targets, browse the effects of the build and start editors to
fix problems that occured during the build.


I general, anttool is ment for users who see the build file as a black-box: They
are not primarily interested in the internal structure of the build file nor in
modifiying it. Instead, they want to call ant with the appropiate arguments and
want to see, what is the result of the build.

Therefore, anttool only shows targets and properties that are relevant for these
users. Tasks are not shown at all.


Anttool User Interface:
-----------------------

The user interface of anttool is devided into two panels: The "Control Panel"
shows all loaded build files and their targets. The "Project Panel" shows
details for one project, including the logging information from the last
build(s), the editable properties of an build and relevant files of that build.

By default, the user interface does not show targets or properties that have no
description or a descriuption starting with a ".". These targets or properties
are called "hidden" in the following text.


The Control Panel:
------------------

The Control Panel shows a tree with all loaded projects. For each project the
non-hidden targets are shown. (Anttool can be configured to show also hidden
targets, see Configuration below).

If you move the cursor over a project or target, a description for it will be
shown as a tooltip.

Two icons are prefixing the name of the project or target: one is visualizing
the state of the project or target, the other is a button to start or cancel the
project or target. The state icon can have the following different colors:
- green if the execution was successfull.
- yellow if an execution is needed because the output files are
out-of-date [not possible with current ant version?]
- red if the execution resulted in errors.
- white (i.e. nothing) if the state is unknown
[Alternative: what about buttons labeled with the target name?
The button is used for start/stopping the build.
No tree required then. ]

If you select a node in the tree, the Project Panel (see below) will show
details for the relevant project.

If you right-click on a node in the tree, a pop-up menu will show the following
commands:
edit: open XML editor at selected element
open: in new window [? is that needed]
The Project Panel:
------------------

The Project Panel consists of three tabs:

The "Build Log" tab shows information about the last build(s), the "Properties"
tab shows non-hidden properties and the "Files" tab shows files relevant for the
project.

The Build Log Tab:

In this tab you can monitor the build on detail. A tree shows the executed
targets of a build, their tasks and log messages for each task. The start time
is noted after the build name.

In the pop-up menu, you can choose from the following commands:
edit: open editor for shown file at shown location.
show log level->Error/Warning/Info/Verbose/Debug
(only the items possible are shown,
see configuration.)

The Properties Tab:

The properties tab shows all non-hidden properties of the project. (optionally,
also hidden properties can be shown, see Configuratin below.)

Each Property is shown as follows:
<Name>: <entry field> <reset checkbox>
where
<Name> is name of the property, with "." and "-" replaced by " "
and first letters capatilized.
<entry field> is a text field to enter a value for the properts.
In some cases, special benas are shown:
Name ends with ".dir" => provide a file chooser to select a directory
Name ends with ".lib" => provide a file chooser to select .jar file
Name is "build.compiler" => provide combo box with possible compilers.
[selecting JDK's seems not well support in ant?
If you have e.g. JDK 1.2.1 and 1.2.2 installed,
how to easily select the compiler version?]
Name ends with ".jdk" => let the user select one of the configures
JDK's
[more general then build.compiler, but supported by ant?]
Name ends with ".file" => provide a file chooser
<reset checkbox> resets the value to the (default) value that is
contained in the .xml file

All values entered are save in a file
$HOME/.ant/<full-path-build-file>.property. (See also Configuration.)

If property values are changed, then ant is called with
main("-Dproperty1=value1 ..").
[show also (class)pathes as property, use id instead of name? But: is that
required? Why not simply define individual properties for the required
libraries and combine them then to a path. ]

The File Set Tab:

This tab show files that are releated to the project. For each non-hidden
fileset of the project, the id of the fileset is shown and all files included to
that fileset.

If you right-click on a file, a pop-up menu is shown with which you can start
programs to deal with these files. The relevant configuration information is
extracted from the existing operation system settings.

[or: one tab for each fileset?]

Repository:
-----------

[This needs some more work.]

Anttool also simplyfies the loading of source files form the web. By using the
repository mechanism of anttool, you can perform the complete workflow from
download to install with just a few mouse clicks:

select one out of the Repositories from the main menu.
Anttool will query the server for a list of up-to-date
packages.
select one of the presented packages
Anttool will then download the selected package:
In case a .zip (or similar) package was selected,
the file is downloaded and
unpacked to "/Users/"<name>.
In case a CVS repository was selected,
the files are downloaded to "/Users/"<name>.
Afterwards
a file with the name "build.xml" is searched
and loaded to anttool.
Optionally, the file "$HOME/.ant/default.properties"
is copied to "$HOME/.ant/<full-path-build-file>.properties,
overwriting the defaults in the downloaded build file
with your preferences (e.g. installation directory, JDK, ...)
[copy only relevant properties?]

check if the properties in the selected project match your intention.

press "start" on the project

Anttool Configuration:
-----------------------

The menu "Tools" in the menu bar allows you to adjust Anttool behavior to your
preferences and environment.

The following menu entries are available:

Configure JDKs:
Can be used to configure the JDKs available
on your system. The configured values are offered
for properties that end with ".jdk".
The screen offers a table to edit a set of names
and pathes.
By pressing "rescan" the system is scanned for new JDKs
by consulting the installed software.

[Should there be one combo box
Anttool JDK: <internal|JDK list|....>
that indicates the JDK that should be used to run ant?
Should that be even project specific setting?
]

Configure Repository: [better name?]
Anttool is aware of certain places where Anttool supporting software
can be found on the internet.
These URLs can be configured here.
These repositories are offered to the user when he selects
the "Repository" menu in the menu bar.

The screen offers a table to edit a set of names
and URLs.

Configure Libraries:
Can be used to configure the libraries available
on your system. The configured values are offered
for properties that end with ".lib".
The screen offers a table to edit a set of names
and pathes.
By pressing "rescan" the system is scanned for new libraries
by searching below a directory.


Preferences:
show hidden targets: bool
[or: offer addition menu to start hidden targets?]
show hidden filesets: bool
show hidden properties: bool

log level used for build: ...
number of log files saved:
number of log files shown in UI:

Directory to save property values:

file name remembered in file menu:

checkig for new files in filesets: [seconds]
autoload new buildfile: [seconds, 0= never]


General features:
-----------------
The menubar menu's are
File
Open...
Close
-------
1 buildfile.xml
2 ....
3 ...
------
Exit
Repository
Apache... as configured
<name2>...
....
Options
Configure JDKs...
Configure Repository...
Configure Libraries...
Preferences...
Look&Feel...
Help
Antool Help...
Ant Web Home calls netscape
-----------
About...


Build files can be dragged and dropped into anttool.

The set off loaded build files should be saved on exit and
reloaded on restart automatically.



Technical questions on the internals of anttool
-----------------------------------------------
- How to detect if a target needs to be run (yellow color)?
Seems not be possible currently.
One solution [what will ant 2.0 contain?]:
Define new abstract class "MonitoredTask", inherited from Task.
Copy, Javac, javadoc, etc inherit from these.
MonitoredTask defines:
execute() { prepareTask(); if (executionNeeded) { perform() }; }
executionNeeded: boolean // signals that I need to run because output is
older than input
perform()
performMap() // what will happen with each file, i.e.
Main.java -> Main.class
UI.java -> UI.class
...
or
Main.class -> lib.jar
UI.class -> lib.jar
size of Map should be equal to number of steps reported in loggin.

Only "executionNeeded" is required to add a yellow flag for targets. The
performMap would be nice to have. It could be used later to show a finegrained
graph (or matrix) about what is happening during a build.

Add configuration item on how often call the funtions (i.e. how often to do
the polling.)
- How to do the calling of the external tools?
XML editor? (how to generate the dtd? How to execute "antstructure"
withour changing the build file.)
How to simulate the windows functionality for e.g. open java source with
JBuilder?
How to read the registry information?
How to do DDE calls?

- is there any free installation tool for java?
(to install anttool itself)

+ 0
- 250
src/antidote/docs/gui-requirements.html View File

@@ -1,250 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "strict.dtd">
<HTML>
<HEAD>
<TITLE>Ant GUI Feature List</TITLE>
</HEAD>
<BODY>
<H1>Ant GUI Feature List</H1>
<P>Version 0.4 (2000/11/06)</P>
<P>Authors:
<A HREF="mailto:simeon@fitch.net">Simeon H.K. Fitch</A>,
<A HREF="mailto:chris@christophertodd.com">Chris Todd</A>,
<A HREF="mailto:clint.combs@contrado.com">Clint Combs</A>,
<A HREF="mailto:conor@ebinteractive.com.au">Conor MacNeill</A>,
<A HREF="mailto:matthew.k.heun@gaerospace.com">Matthew Kuperus Heun</A>,
<A HREF="mailto:duncan@x180.com">James Duncan Davidson</A>
<P>The purpose of this document is to capture the proposed feature list for
the Ant Graphical User Interface. This is not a hard requirements
specification; you won't find the word "shall" in it (other than that one
time). :-)</P>

<P>In general, the purpose of the GUI is to allow the quick generation and
modification of Ant build files, helping the user define their build process
and track down build problems. For it to be successful it must make the user
more efficient and productive, insofar as their involvement in build
management and use of Ant goes. It should first address the needs of the
novice Ant user, and then add abilities for the "power" user. This does not
imply that the UI should be "dumbed down", it just means that usability
should come before slick but complicated features.</P>

<P>The features are in a loose order of expressed interested by
contributors.</P>

<!-- Section List -->
<OL TYPE="A">


<LI><H2>Build Management</H2></LI>
<P>Once a build file is created, the user will want to start and
stop it from the UI. This will serve both as a testing facility as well as
a general compile tool. Monitoring of the build can occur through the Ant
BuildListener interface.</P>
<OL>
<LI>Build execution.</LI>
<OL TYPE="a">
<LI>Initiate a build starting from any task.</LI>
<LI>Stop a currently active build.</LI>
</OL>
<LI>Build monitoring.</LI>
<OL TYPE="a">
<LI>Provide feedback on the current status of the build.<BR>
<I>This is where you can have more fun with the directed graph view,
where the current build activity is highlighted on the screen, making
the whole thing behave like a dynamic state transition diagram. You
can then highlight the node where the build fails, etc.</I></LI>
<LI>Show log messages from the build, allowing the user to determine
the task they originated from.</LI>
<LI>Provide the ability to filter logged messages, adn to display the
messages in color codes corresponding to logging levels.</LI>
<LI>Allow the installation of custom log listeners</LI>
<LI>Record runtime statistics to determine bottleneck in the build
process<BR>
<I>This may be of limited use, as calling &lt;javac&gt; probably takes
the most time. But maybe not.</I></LI>
</OL>
</OL>
<BR>

<LI><H2>Build Wizard (auto-configure)</H2></LI>
<P>To make starting a new project with Ant as easy as possible, the a
wizard type of UI can be used where the user provides some basic
information and the application deduces what a default build.xml file for
it should look like.</P>
<OL>
<LI>Project attributes.</LI>
<OL TYPE="a">
<LI>Provide input for the required project attributes.<BR>
<I>This probably means project name and default target.</I></LI>
</OL>
<LI>Project directories.</LI>
<OL TYPE="a">
<LI>Ask for the source directory.</LI>
<LI>Ask for the destination directory.</LI>
<LI>Ask for the necessary JAR files.</LI>
</OL>
<LI>Project properties.</LI>
<OL TYPE="a">
<LI>Provide a default set of project properties.<BR>
<I>In here would be things like classpath, build.compiler, version,
etc.</I></LI>
<LI>Allow the user to add to or remove from properties the default set
of properties.</LI>
</OL>
<LI>Task creation</LI>
<OL TYPE="a">
<LI>Provide a list of "standard" tasks to insert into the project.<BR>
<I>This would be tasks like &lt;javac&gt; and
&lt;javadoc&gt;.</I></LI>
<LI>Generate default init, compile, javadoc, and clean targets.</LI>
</OL>
<LI>Creation review.</LI>
<OL TYPE="a">
<LI>Provide a review of the contents of the generated build.xml
file.</LI>
<LI>Allow the user to go back to any step in the process to change a
setting.</LI>
<LI>Prompt the user to save the build.xml file.</LI>
</OL>
</OL>
<BR>


<LI><H2>IDE Integration</H2></LI>
<P>Components of the Ant GUI shoule support plugging into IDEs and code
editors.</P>
<OL>
<LI>Emacs</LI>
<OL TYPE="a">
<LI>Provide support for launching builds from emacs, and notification
of errors.</LI>
</OL>
<LI>JEdit</LI>
<OL TYPE="a">
<LI>Provide JEdit plug-in.</LI>
</OL>
<LI>ProjectBuilder</LI>
<OL TYPE="a">
<LI>Provide integration with OSX ProjectBuilder.</LI>
</OL>
<LI>NetBeans</LI>
<OL TYPE="a">
<LI>Provide integration with the NetBeans IDE.</LI>
</OL>
</OL>
<BR>


<LI><H2>Project Editing</H2></LI>
<P>The Ant UI will be centered around the project file. All operations of
the UI will be on a project, whether it be existing or new. <I>How
sub-projects are handled (i.e. via the &lt;ant&gt; task) needs to be
determined.</I></P>
<OL>
<LI>Load a project.</LI>
<OL TYPE="a">
<LI>Read the native Ant XML format as defined by the Ant users'
manual.</LI>
<LI>When possible, automatically handle changes in the Ant element
set, or at least changes to the task set, as well as the valid set of
attributes.<BR>
<I>Possible approach: load "default.properties", use
introspection to discover attribute set, then reference some other
mechanism for attributes that are manifested as properties.</I>
</LI>
<LI>Report errors in the XML source.</LI>
<LI>Provide a list of recently opened documents for
quick reloading.</LI>
</OL>
<LI>View project contents.</LI>
<OL TYPE="a">
<LI>View the project in it's XML source format.</LI>
<LI>View the project in a non-source format.<BR>
<I>This is left ambiguous to keep the implementation out of the
requirements. The different presentation formats are likely to evolve
over time.</I>
</LI>
<LI>View the project properties.</LI>
<LI>View the project contents (tasks).</LI>
</OL>
<LI>Modify a project.</LI>
<OL TYPE="a">
<LI>Edit via the XML source.</LI>
<LI>Edit properties via a property sheet.</LI>
<LI>Provide facility for editing XML references used in the build
file.</LI>
</OL>
<LI>Save a project.</LI>
<OL TYPE="a">
<LI>Save to the native Ant XML format as defined by the Ant users'
manual.</LI>
<LI>Default save name is "build.xml".</LI>
<LI>Verify before overwriting existing file when in "Save as"
mode.</LI>
</OL>
<LI>Create a new project.</LI>
<OL TYPE="a">
<LI>Define a project name.</LI>
<LI>Define the default target.</LI>
<LI>Define the project base directory.</LI>
</OL>
</OL>
<BR>


<LI><H2>Task Editing</H2></LI>
<P>Tasks define what it is that Ant is to do, and will be the object most
edited in the UI. <U>Task</U> <I>is to</I> <U>Paragraph</U> <I>as</I>
<U>Project</U> <I>is to</I> <U>Document</U>.
<OL>
<LI>View tasks.</LI>
<OL TYPE="a">
<LI>View a sorted list of tasks.<BR>
<I>Provide sorting based on name, depth in dependency tree, how many
tasks depend in it...</I></LI>
<LI>View tasks as a directed graph.<BR>
<I>Need a good graph editing library. Looked at <A
HREF="http://gef.tigris.org">GEF</A> but it still needs a lot of
work, to make it easily reusable. Long term status unknown.</I></LI>
<LI>View tasks as a dependency tree.</LI>
<LI>View task as a properties sheet.</LI>
<LI>Provide dependency viewing, both immediate and "flattened"
views.</LI>
</OL>
<LI>Modify task.</LI>
<OL TYPE="a">
<LI>Allow editing of a task via a property sheet.</LI>
<LI>Allow editing of a task via XML source.</LI>
<LI>Allow the graphical editing of task dependencies<BR>
<I>This is where you can go hog wild with the component wiring type of
UI. </I></LI>
<LI>Allow non-graphical editing of dependencies.</LI>
<LI>Provide detection of circular dependencies.</LI>
<LI>Facilitate definition of conditional tasks with evaluation
editor.</LI>
</OL>
</OL>
<BR>

<LI><H2>Build File Source Editing</H2></LI>
<P>This section listes desired features for editing the Ant build file
directly. Some components of this could be met by a generic XML editing
capability, but other parts will be Ant specific features.</P>
<OL>
<LI>XML Editor.</LI>
<OL TYPE="a">
<LI>Provide syntax higlighting.</LI>
<LI>Provide auto-indentation.</LI>
<LI>Provide smart tag completion.</LI>
<LI>Provide visual highlighting of syntax errors.</LI>
<LI>Support auto-reparsing of contents and model update.</LI>
</OL>
</OL>

<HR>
<P ALIGN="center">Copyright &copy; 2000 Apache Software Foundation. All
rights Reserved.</P>

</BODY>
</HTML>

+ 0
- 89
src/antidote/docs/new-module-howto.html View File

@@ -1,89 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "strict.dtd">
<HTML>
<HEAD>
<TITLE>Antidote New Module HOWTO</TITLE>
</HEAD>

<BODY>

<H1>Antidote New Module HOWTO</H1>

<P>Version 0.1 (2000/12/18)</P>

<P>Authors:
<A HREF="mailto:simeon@fitch.net">Simeon H.K. Fitch</A>
</P>

<H2>Introduction</H2>
<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-overview.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>

<H2>1) Specialize <TT>org.apache.tools.ant.gui.core.AntModule</TT></H2>

<P>All modules must inherit from the <TT>AntModule</TT>
class. This will probably irritate some of you, but it essentially
enforces inheritance from <TT>javax.swing.JComponent</TT> and
provides encapsulated handling of the <TT>AppContext</TT> instance
that is so important to this class.</P>

<P>Your module is required to implement the
<TT>AntModule.contextualize(AppContext)</TT> method. The first
thing this method should do is call
<TT>AntModule.setContext(AppContext)</TT>, and then it is safe for
it to begin constructing its display, using whatever resources it
needs from the given <TT>AppContext</TT> instance. Think of this
in a similar manner to <TT>Applet.init()</TT> or
<TT>Servlet.init()</TT>.

<H2>2) Update
<TT>org/apache/tools/ant/gui/resources/antidote.properties</TT></H2>

<H3>2a) Externalize All Displayable Strings</H3>

<P>All displayable strings must be externalized to the
<TT>antidote.properties</TT> file, and looked up via the
<TT>AppContext.getResources()</TT> method after the
<TT>AntModule.contextualize()</TT> 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 cercumstances
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
<TT>org.apache.tools.ant.gui.Antidote.xxx.modules</TT> where
<TT>xxx</TT> 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 <TT>javax.swing.JTabbedPane</TT>.

<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>).</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
<TT>ProjectNavigator</TT> and <TT>PropertyEditor</TT> for module
examples that use the various facilities of the Antidote
framework.</P>

<HR>
<P ALIGN="center">Copyright &copy; 2000 Apache Software Foundation. All
rights Reserved.</P>

</BODY>
</HTML>

+ 0
- 44
src/antidote/docs/uml/index.html View File

@@ -1,44 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "strict.dtd">
<HTML>
<HEAD>
<TITLE>Antidote UML Static Class Diagrams</TITLE>
</HEAD>

<BODY>

<H1>Antidote UML Static Class Diagrams</H1>

<P>Version 0.1 (2000/12/19)</P>

<P>Authors:
<A HREF="mailto:simeon@fitch.net">Simeon H.K. Fitch</A>
</P>

<H2>Diagram Images</H2>

<P>The following UML static class diagrams were generated using <A
HREF="http://www.togethersoft.com">Together/J</A>, reverse engineering the
existing code. They are no means guaranteed to be kept up to date, and are
only a snapshot of development in progress. Their purpose is to help give
people a quick glance a the class structure of the various packages that
make up.</P>

<OL>
<LI><A HREF="org-apache-tools-ant-gui.gif">org.apache.tools.ant.gui</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-acs.gif">org.apache.tools.ant.gui.acs</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-core.gif">org.apache.tools.ant.gui.core</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-command.gif">org.apache.tools.ant.gui.command</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-customizer.gif">org.apache.tools.ant.gui.customizer</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-event.gif">org.apache.tools.ant.gui.event</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-ide.gif">org.apache.tools.ant.gui.ide</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-modules.gif">org.apache.tools.ant.gui.modules</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-modules-console.gif">org.apache.tools.ant.gui.modules.console</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-modules-edit.gif">org.apache.tools.ant.gui.modules.edit</A></LI>
<LI><A HREF="org-apache-tools-ant-gui-util.gif">org.apache.tools.ant.gui.util</A></LI>
</OL>

<HR>
<P ALIGN="center">Copyright &copy; 2000 Apache Software Foundation. All
rights Reserved.</P>
</BODY>
</HTML>

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-acs.gif View File

Before After
Width: 1667  |  Height: 1205  |  Size: 41 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-command.gif View File

Before After
Width: 3091  |  Height: 694  |  Size: 22 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-core.gif View File

Before After
Width: 2028  |  Height: 1447  |  Size: 53 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-customizer.gif View File

Before After
Width: 1231  |  Height: 1131  |  Size: 26 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-event.gif View File

Before After
Width: 2874  |  Height: 1596  |  Size: 53 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-ide.gif View File

Before After
Width: 323  |  Height: 383  |  Size: 4.5 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-modules-console.gif View File

Before After
Width: 1115  |  Height: 804  |  Size: 15 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-modules-edit.gif View File

Before After
Width: 615  |  Height: 463  |  Size: 6.1 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-modules.gif View File

Before After
Width: 381  |  Height: 350  |  Size: 3.6 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui-util.gif View File

Before After
Width: 613  |  Height: 399  |  Size: 8.1 KiB

BIN
src/antidote/docs/uml/org-apache-tools-ant-gui.gif View File

Before After
Width: 840  |  Height: 981  |  Size: 20 KiB

+ 0
- 4
src/antidote/etc/manifest View File

@@ -1,4 +0,0 @@
Manifest-Version: 1.0
Main-Class: org.apache.tools.ant.gui.Main



+ 0
- 142
src/antidote/org/apache/tools/ant/gui/About.java View File

@@ -1,142 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui;
import org.apache.tools.ant.gui.util.WindowUtils;

import org.apache.tools.ant.gui.core.AppContext;
import javax.swing.*;
import java.io.IOException;
import java.util.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
* Dialog displaying information on the application.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class About extends JDialog {

/**
* Standard ctor.
*
* @param context Application context.
*/
public About(AppContext context) {
super(context.getParentFrame(), true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);

String version = null;
String date = null;

Properties props = new Properties();

try {
props.load(getClass().getResourceAsStream("version.txt"));
}
catch(IOException ex) {
// XXX log me.
ex.printStackTrace();
return;
}

version = props.getProperty("VERSION", "??");
date = props.getProperty("DATE", "??");

String message = context.getResources().getMessage(
getClass(), "message",
new Object[] { version, date });

String title = context.getResources().getString(
getClass(), "title");
setTitle(title);

JTextPane contents = new JTextPane();
contents.setContentType("text/html");
contents.setText(message);
contents.setEditable(false);
// XXX Still not sure why this is necessary. JTextPane doesn't
// seem to report a "true" preferred size.
contents.setPreferredSize(
new Dimension(contents.getPreferredSize().width, 450));
getContentPane().add(BorderLayout.CENTER, contents);

// Add the OK button.
JButton ok = new JButton(
context.getResources().getString(getClass(), "ok"));
ok.addActionListener(new ActionHandler());
JPanel p = new JPanel();
p.add(ok);
getContentPane().add(BorderLayout.SOUTH, p);

getRootPane().setDefaultButton(ok);


// Just go ahead and show it...
pack();
WindowUtils.centerWindow(context.getParentFrame(), this);
setVisible(true);
}

/** Handles press of the OK button. */
private class ActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
WindowUtils.sendCloseEvent(About.this);
}
}

}

+ 0
- 147
src/antidote/org/apache/tools/ant/gui/Antidote.java View File

@@ -1,147 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui;
import org.apache.tools.ant.gui.core.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.lang.reflect.Constructor;

/**
* The root class for the Ant GUI. Assembles all the graphical components
* based on the configuration files.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class Antidote extends JComponent {
/** Source of application state data. */
private AppContext _context = null;

/**
* Default ctor.
*
*/
public Antidote(AppContext context) {
setLayout(new BorderLayout());

_context = context;

// Add the various modules to the editing area.
JSplitPane splitter = new JSplitPane();
splitter.add(JSplitPane.LEFT, populateModules("left"));
splitter.add(JSplitPane.RIGHT, populateModules("right"));
// This is necessary because, frankly, the JSplitPane widget
// sucks, and doesn't provide enought (working) control over the
// initial size of it's subcomponents. setDividerLocation(double)
// doesn't seem to work until after the widget is visible.
splitter.setPreferredSize(new Dimension(500, 300));

// Top bottom splitter.
JSplitPane splitter2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitter2.setOneTouchExpandable(true);

splitter2.add(JSplitPane.TOP, splitter);
splitter2.add(JSplitPane.BOTTOM, populateModules("bottom"));

add(BorderLayout.CENTER, splitter2);
splitter2.resetToPreferredSizes();

add(BorderLayout.NORTH, populateModules("top"));

setPreferredSize(new Dimension(640, 480));
}


/**
* Instantiate the configured modules.
*
* @return Component containing the modules(s).
*/
private JComponent populateModules(String prefix) {

String[] classNames = _context.getResources().
getStringArray(getClass(), prefix + ".modules");

AntModule[] modules = new AntModule[classNames.length];

for(int i = 0; i < classNames.length; i++) {
try {
Class type = Class.forName(classNames[i]);

modules[i] = (AntModule) type.newInstance();
modules[i].contextualize(_context);
}
catch(Exception ex) {
// XXX log me.
ex.printStackTrace();
}
}

if(modules.length == 1) {
return modules[0];
}
else if(modules.length > 1) {
JTabbedPane tabbed = new JTabbedPane(JTabbedPane.BOTTOM);

for(int i = 0; i < modules.length; i++) {
tabbed.addTab(modules[i].getName(), modules[i]);
}
return tabbed;
}
else {
return new JLabel("I shouldn't be here...");
}
}
}

+ 0
- 161
src/antidote/org/apache/tools/ant/gui/Args.java View File

@@ -1,161 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui;
import org.apache.tools.ant.gui.core.ResourceManager;

/**
* Class encapsulating the parsing of command-line arguments for Antidote.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class Args {

private ResourceManager _resources = null;
private boolean _wizardMode = false;
private String _fileName = null;
private boolean _debugMode = false;

/**
* Ctor for parsing command line arguments.
*
* @param args Arguments to parse.
*/
public Args(String[] args) {
for(int i = 0; i < args.length; i++) {
String arg = args[i];
if(i == args.length - 1 && !arg.startsWith("-")) {
_fileName = arg;
}
else if(arg.startsWith("-h")) {
System.out.println(getUsage());
System.exit(0);
}
else if(arg.equals("-wizard")) {
_wizardMode = true;
}
else if(arg.equals("-debug")) {
_debugMode = true;
}
else {
String msg = getResources().getMessage(
"invalidArg", new Object[] { arg });
abort(msg);
}
}
}

/**
* Get the resources, loading them if necessary.
*
* @return Loaded resources.
*/
private ResourceManager getResources() {
if(_resources == null) {
_resources = new ResourceManager(
"org.apache.tools.ant.gui.resources.args");
}
return _resources;
}

/**
* Print message and exit.
*
* @param error Error message to print.
*/
private void abort(String error) {
System.err.println(error);
System.err.println(getUsage());
System.exit(1);
}

/**
* Get the command line usage of Antidote.
*
* @return Command line usage help.
*/
public String getUsage() {
return getResources().getString("usage");
}

/**
* Get the build filename.
*
* @return Build file name.
*/
public String getBuildFile() {
return _fileName;
}

/**
* Determine if wizard mode was requested for generating a new
* build file.
*
* @return True if wizard mode, false otherwise.
*/
public boolean isWizardMode() {
return _wizardMode;
}

/**
* Determine if debug mode was requested.
*
* @return True if debug mode, false otherwise.
*/
public boolean isDebugMode() {
return _debugMode;
}

}

+ 0
- 155
src/antidote/org/apache/tools/ant/gui/Main.java View File

@@ -1,155 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui;
import org.apache.tools.ant.gui.core.*;
import org.apache.tools.ant.gui.util.XMLHelper;
import org.apache.tools.ant.gui.wizard.Wizard;
import org.apache.tools.ant.gui.wizard.build.BuildData;
import org.apache.tools.ant.gui.wizard.WizardListener;
import org.apache.tools.ant.gui.command.LoadFileCmd;
import org.apache.tools.ant.gui.event.EventBus;
import org.apache.tools.ant.gui.acs.ACSFactory;
import javax.swing.*;
import java.awt.BorderLayout;
import java.io.File;

/**
* Launch point for the Antidote GUI. Configurs it as an application.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class Main {
/**
* Application start.
*
* @param args TBD
*/
public static void main(String[] args) {
XMLHelper.init();

Args settings = new Args(args);


try {
JFrame f = new JFrame("Antidote");
f.setDefaultCloseOperation(3 /*JFrame.EXIT_ON_CLOSE*/);
AppContext context = new AppContext(f);

if(!settings.isWizardMode()) {
EventResponder resp = new EventResponder(context);
Antidote gui = new Antidote(context);

JMenuBar menu = context.getActions().createMenuBar();
f.setJMenuBar(menu);
f.getContentPane().add(BorderLayout.CENTER, gui);
f.getContentPane().add(BorderLayout.NORTH,
context.getActions().createToolBar());
// Add the project selection menu.
ProjectSelectionMenu ps = new ProjectSelectionMenu(context);
ps.insertInto(menu);
// Add debugging items.
if(settings.isDebugMode()) {
context.getEventBus().addMember(
EventBus.VETOING, new EventDebugMonitor());
}

// Load a build file if one is provided.
if(settings.getBuildFile() != null) {
LoadFileCmd load = new LoadFileCmd(context);
load.setFile(new File(settings.getBuildFile()));
load.run();
}
}
else {
// We are in wizard mode. Create it.
Wizard wiz = new Wizard(new BuildData());
// XXX this is temporary for testing. Eventually
// it will launch the regular antidote screen with the
// results of the wizard.
wiz.addWizardListener(new WizardListener() {
public void finished(Object model) {
BuildData data = (BuildData) model;
System.out.println(data.createProject());
System.exit(0);
}
public void canceled() {
System.exit(0);
}

});

f.getContentPane().add(BorderLayout.CENTER, wiz);
}

ImageIcon icon =
context.getResources().loadImageIcon("icon-small.gif");
if(icon != null) {
f.setIconImage(icon.getImage());
}
else {
System.out.println("Application icon not found.");
}

f.pack();
f.setVisible(true);

}
catch(Exception ex) {
ex.printStackTrace();
}
}
}

+ 0
- 73
src/antidote/org/apache/tools/ant/gui/acs/ACSBeanDescriptor.java View File

@@ -1,73 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import org.apache.tools.ant.gui.core.ResourceManager;
import java.beans.*;

/**
* Specialized BeanDescriptor for providing more descriptive information.
*
* @version $Revision$
* @author Simeon Fitch
*/
class ACSBeanDescriptor extends BeanDescriptor {
public ACSBeanDescriptor(BaseBeanInfo type) {
super(type.getType(), type.getCustomizerType());
setDisplayName(
type.getResources().getString(type.getClass(), "beanName"));
setShortDescription(
type.getResources().getString(type.getClass(), "beanDescription"));
}
}

+ 0
- 73
src/antidote/org/apache/tools/ant/gui/acs/ACSDefaultElement.java View File

@@ -1,73 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import com.sun.xml.tree.ElementNode;

/**
* Default element used when no other element is specificed.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSDefaultElement extends ACSElement {
/**
* Default ctor.
*
*/
public ACSDefaultElement() {

}

}

+ 0
- 504
src/antidote/org/apache/tools/ant/gui/acs/ACSDocumentType.java View File

@@ -1,504 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;
import java.io.*;
import java.net.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import org.xml.sax.SAXException;
import org.xml.sax.InputSource;
import com.sun.xml.parser.Parser;
import com.sun.xml.parser.DtdEventListener;
import com.sun.xml.parser.ValidatingParser;
import com.sun.xml.tree.*;
import com.sun.xml.parser.Resolver;

/**
* Reads the ANT DTD and provides information about it.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class ACSDocumentType extends java.lang.Object {
/** ID for core elements */
public final static int CORE_ELEMENT = 0;
/** ID for optional elements */
public final static int OPTIONAL_ELEMENT = 1;
/** True if the DTD has been loaded */
private boolean isInit = false;
/** Hold the core DTD elements */
private HashMap coreElementMap = new HashMap();
/** Hold the optional DTD elements */
private HashMap optionalElementMap = new HashMap();
/** Hold the DTD elements */
private HashMap elementMap;
/** First part of the XML document used to load the DTD */
private final static String XMLDOC_1 =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<!DOCTYPE project SYSTEM \"file:/";
/** Second part of the XML document used to load the DTD */
private final static String XMLDOC_2 =
"\"><project name=\"sample-project\">" +
"</project>";
/** DTD which holds the core tasks */
private final static String DTD_1 = "project.dtd";
/** DTD which holds the optional tasks */
private final static String DTD_2 = "project-ext.dtd";
/** DTD which holds the shared elements */
private final static String DTD_SHARE = "share.dtd";

/**
* Standard ctor.
*/
public ACSDocumentType() {
}
/**
* Loads the DTD if not already loaded.
*/
public void init() {
// Return if already inited.
if (isInit) {
return;
}
try {
// Setup the parser
Parser p = new Parser();
p.setEntityResolver(new ACSResolver());

// Setup the builder
XmlDocumentBuilder builder = new XmlDocumentBuilder();
SimpleElementFactory fact = new SimpleElementFactory();
fact.addMapping(new Properties(),
ACSDocumentType.class.getClassLoader());
builder.setElementFactory(fact);
builder.setParser(p);

DtdHandler dtdh = new DtdHandler();
p.setDTDHandler(dtdh);

String coreDoc = XMLDOC_1 + DTD_1 + XMLDOC_2;
String optionalDoc = XMLDOC_1 + DTD_2 + XMLDOC_2;
// Parse the core task DTD
elementMap = coreElementMap;
InputSource xmldocCore = new InputSource(
new ByteArrayInputStream(coreDoc.getBytes()));
p.parse(xmldocCore);
// Parse the core task DTD
elementMap = optionalElementMap;
InputSource xmldocOptional = new InputSource(
new ByteArrayInputStream(optionalDoc.getBytes()));
p.parse(xmldocOptional);
isInit = true;
} catch (Exception e) {
System.out.println(e);
}
}
/**
* Returns the dtd element.
*
* @param elementType CORE_ELEMENT or OPTIONAL_ELEMENT
* @param name the element name
*/
public DtdElement findElement(int elementType, String name) {
if (elementType == OPTIONAL_ELEMENT) {
return (DtdElement) optionalElementMap.get(name);
}
return (DtdElement) coreElementMap.get(name);
}
/**
* Class which represents a DTD element.
*/
static class DtdElement {
private String _name;
private String[] _contentModel;
private DtdAttributes _map = new DtdAttributes();
public String getName() {
return _name;
}
public void setName(String name) {
_name = name;
}
public String[] getContentModel() {
return _contentModel;
}
public void setContentModel(String[] model) {
_contentModel = model;
}
public DtdAttributes getAttributes() {
return _map;
}
}
/**
* Class which represents a DTD attribute.
*/
static class DtdAttribute {
private String _name;
private String _type;
private String[] _options;
private String _defaultValue;
private boolean _isFixed;
private boolean _isRequired;
public String getName() {
return _name;
}
public void setName(String name) {
_name = name;
}
public String getType() {
return _type;
}
public void setType(String type) {
_type = type;
}
public String getDefaultValue() {
return _defaultValue;
}
public void setDefaultValue(String value) {
_defaultValue = value;
}
public String[] getOptions() {
return _options;
}
public void setOptions(String[] s) {
_options = s;
}
public boolean isFixed() {
return _isFixed;
}
public void setFixed(boolean value) {
_isFixed = value;
}
public boolean isRequired() {
return _isRequired;
}
public void setRequired(boolean value) {
_isRequired = value;
}
}

/**
* Class which represents a collection of DTD attributes.
*/
public static class DtdAttributes extends HashMap {
/**
* Default constructor
*/
public DtdAttributes() {
}

/**
* Adds the Attribute
*
* @param attribute new attribute
*/
public void addAttribute(DtdAttribute attribute) {
put(attribute.getName(), attribute);
}

/**
* Return the requested attribute
*
* @param name attribute name
* @returns the requested attribute
*/
public DtdAttribute getAttribute(String name) {
return (DtdAttribute) get(name);
}

/**
* @returns an array of the optional attribute names
*/
public String[] getOptionalAttributes() {
ArrayList list = new ArrayList();
Iterator i = values().iterator();
while(i.hasNext()) {
DtdAttribute a = (DtdAttribute)i.next();
if (!a.isRequired()) {
list.add(a.getName());
}
}
String[] result = new String[list.size()];
list.toArray(result);
return result;
}

/**
* @returns an array of the required attribute names
*/
public String[] getRequiredAttributes() {
ArrayList list = new ArrayList();
Iterator i = values().iterator();
while(i.hasNext()) {
DtdAttribute a = (DtdAttribute)i.next();
if (a.isRequired()) {
list.add(a.getName());
}
}
String[] result = new String[list.size()];
list.toArray(result);
return result;
}
/**
* @returns an array of the all attribute names
*/
public String[] getAttributes() {
ArrayList list = new ArrayList();
Iterator i = values().iterator();
while(i.hasNext()) {
DtdAttribute a = (DtdAttribute)i.next();
list.add(a.getName());
}
String[] result = new String[list.size()];
list.toArray(result);
return result;
}
}
/**
* When parsing XML documents, DTD related events are signaled through
* this interface.
*/
class DtdHandler implements DtdEventListener {
public void externalDtdDecl (
String publicId,
String systemId)
throws SAXException { }
public void internalDtdDecl (
String internalSubset)
throws SAXException { }
public void internalEntityDecl (
String name,
String value)
throws SAXException { }
public void externalEntityDecl (
String name,
String publicId,
String systemId)
throws SAXException { }
public void endDtd ()
throws SAXException { }
public void notationDecl (
String name,
String publicId,
String systemId)
throws SAXException { }
public void unparsedEntityDecl (
String name,
String publicId,
String systemId,
String notationName)
throws SAXException { }
public void startDtd (
String rootName
) throws SAXException
{
elementMap.clear();
}
/**
* Reports an attribute declaration found within the DTD.
*
* @param elementName The name of the element to which the attribute
* applies; this includes a namespace prefix if one was used within
* the DTD.
* @param attributeName The name of the attribute being declared; this
* includes a namespace prefix if one was used within the DTD.
* @param attributeType The type of the attribute, either CDATA, NMTOKEN,
* NMTOKENS, ENTITY, ENTITIES, NOTATION, ID, IDREF, or IDREFS as
* defined in the XML specification; or null for enumerations.
* @param options When attributeType is null or NOTATION, this is an
* array of the values which are permitted; it is otherwise null.
* @param defaultValue When not null, this provides the default value
* of this attribute.
* @param isFixed When true, the defaultValue is the only legal value.
* (Precludes isRequired.)
* @param isRequired When true, the attribute value must be provided
* for each element of the named type. (Precludes isFixed.)
*/
public void attributeDecl (
String elementName,
String attributeName,
String attributeType,
String options [],
String defaultValue,
boolean isFixed,
boolean isRequired
) throws SAXException
{
// Try to find the element.
DtdElement e = (DtdElement) elementMap.get(elementName);
if (e == null) {
throw new SAXException("element " + elementName +
" not declared before attributes");
}
// Update the element's attribute.
DtdAttribute attrib = new DtdAttribute();
attrib.setName(attributeName);
attrib.setType(attributeType);
attrib.setFixed(isFixed);
attrib.setRequired(isRequired);
attrib.setDefaultValue(defaultValue);
attrib.setOptions(options);
e.getAttributes().addAttribute(attrib);
}

/**
* Reports an element declaration found within the DTD. The content
* model will be a string such as "ANY", "EMPTY", "(#PCDATA|foo)*",
* or "(caption?,tr*)".
*
* @param elementName The name of the element; this includes a namespace
* prefix if one was used within the DTD.
* @param contentModel The content model as defined in the DTD, with
* any whitespace removed.
*/
public void elementDecl (
String elementName,
String contentModel
) throws SAXException
{
DtdElement e = new DtdElement();
e.setName(elementName);

// Break the contentModel string into pieces.
ArrayList list = new ArrayList();
StringTokenizer st = new StringTokenizer(contentModel, "|()*");
while (st.hasMoreTokens()) {
String s = st.nextToken();
if ( s.length() > 0 && !"EMPTY".equals(s) ) {
list.add(s);
}
}
String[] array = new String[list.size()];
list.toArray(array);
e.setContentModel(array);
// Update the map
elementMap.put(e.getName(), e);
}
}
/**
* We provide the location for the ant dtds.
*/
class ACSResolver implements org.xml.sax.EntityResolver {
/**
* We process the project.dtd and project-ext.dtd.
*
* @param name Used to find alternate copies of the entity, when
* this value is non-null; this is the XML "public ID".
* @param uri Used when no alternate copy of the entity is found;
* this is the XML "system ID", normally a URI.
*/
public InputSource resolveEntity (
String publicId,
String systemId)
throws SAXException, IOException {
InputStream result = null;
// Is it the project.dtd?
if (systemId.indexOf(DTD_1) != -1) {
try {
// Look for it as a resource
result = getClass().getResourceAsStream(DTD_1);
} catch (Exception e) {}
}
// Is it the project-ext.dtd?
if (systemId.indexOf(DTD_2) != -1) {
try {
// Look for it as a resource
result = getClass().getResourceAsStream(DTD_2);
} catch (Exception e) {}
}
if (result != null) {
return new InputSource(result);
}
// Is it the share.dtd?
if (systemId.indexOf(DTD_SHARE) != -1) {
try {
// Look for it as a resource
result = getClass().getResourceAsStream(DTD_SHARE);
} catch (Exception e) {}
}
if (result != null) {
return new InputSource(result);
}

// Otherwise, use the default impl.
com.sun.xml.parser.Resolver r = new com.sun.xml.parser.Resolver();
return r.resolveEntity(publicId, systemId);
}
}
}

+ 0
- 103
src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedAttributes.java View File

@@ -1,103 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;
import org.apache.tools.ant.gui.acs.ACSDocumentType.DtdElement;
import java.util.Properties;

/**
* Represents the attributes defined by the DTD.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class ACSDtdDefinedAttributes extends Properties {

ACSDocumentType.DtdElement _element = null;

/**
* Default constructor
*/
public ACSDtdDefinedAttributes() {
this(null);
}

/**
* Constructor
*
* @param element provides information about possible attributes.
*/
public ACSDtdDefinedAttributes(ACSDocumentType.DtdElement element) {
_element = element;
}

/**
* Return the required attributes or null.
*/
public String[] getRequiredAttributes() {
if (_element == null) {
return null;
}
return _element.getAttributes().getRequiredAttributes();
}
/**
* Return the optional attributes or null.
*/
public String[] getOptionalAttributes() {
if (_element == null) {
return null;
}
return _element.getAttributes().getOptionalAttributes();
}
}

+ 0
- 329
src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java View File

@@ -1,329 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;
import org.apache.tools.ant.gui.command.NewElementCmd;
import org.apache.tools.ant.gui.util.Collections;
import org.w3c.dom.*;
import java.beans.*;
import java.util.*;

/**
* Element defined by the DTD.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class ACSDtdDefinedElement extends ACSTreeNodeElement
implements ACSInfoProvider {
/** Property name for the task type. */
public static final String TASK_TYPE = "taskType";
/** Property name for attributes. It's called "namedValues" so
* it doesn't collide with the Node.getAttributes() method. */
public static final String NAMED_VALUES = "namedValues";
/** The ANT DTD */
static ACSDocumentType docType = new ACSDocumentType();
/** Our menu string */
public String[] menuString = null;
/** The DTD element we represent */
private ACSDocumentType.DtdElement _dtdElement = null;
/**
* Default ctor.
*
*/
public ACSDtdDefinedElement() {
// Load the DTD
docType.init();
}

/**
* Get the task type.
*
* @return Task type.
*/
public String getTaskType() {
return getTagName();
}

/**
* Get the display name of this.
*
* @return Display name.
*/
public String getDisplayName() {
String name = getTagName();

// Is there only one attribute?
if (getAttributes().getLength() == 1) {
Node onlyNode = getAttributes().item(0);

// Display the only attribute
name += ": " + onlyNode.getNodeValue();
} else {
// Display one of these attributes
// if they are present.
final String[] DISPLAY_ATTRIBUTES =
{
"name",
"id",
"property"
};

for(int i = 0; i < DISPLAY_ATTRIBUTES.length; i++) {
Node testNode =
getAttributes().getNamedItem(DISPLAY_ATTRIBUTES[i]);
if (testNode != null) {
name += ": " + testNode.getNodeValue();
break;
}
}
}
return name;
}
/**
* Set the task type.
*
* @param type Type name.
*/
public void setTaskType(String type) {
setTag(type);
}

/**
* Get the attributes (named value mappings). This method is not named
* getAttributes() because there is already a method of that name in
* the Node interface.
*
* @return Name-value mappings.
*/
public ACSDtdDefinedAttributes getNamedValues() {
ACSDtdDefinedAttributes retval =
new ACSDtdDefinedAttributes(getDtdElement());

NamedNodeMap attribs = getAttributes();
for(int i = 0, len = attribs.getLength(); i < len; i++) {
Node n = attribs.item(i);
retval.setProperty(n.getNodeName(), n.getNodeValue());
}
return retval;
}


/**
* Set the attributes. This method sets the Node attirbutes using
* the given Map containing name-value pairs.
*
* @param attributes New attribute set.
*/
public void setNamedValues(ACSDtdDefinedAttributes attributes) {
// XXX this code really sucks. It is really annoying that the
// DOM interfaces don't have a general "setAttributes()" or
// "removeAllAttributes()" method, but instead make you
// remove each attribute individually, or require you to figure
// out what the differences are between the two.

// Although this is very inefficient, I'm taking the conceptually
// simplistic approach to this and brute force removing the existing
// set and replacing it with a brand new set. If this becomes a
// performance concern (which I doubt it will) it can be optimized
// later.

ACSDtdDefinedAttributes old = (ACSDtdDefinedAttributes) getNamedValues();

Enumeration enum = old.propertyNames();
while(enum.hasMoreElements()) {
String name = (String) enum.nextElement();
removeAttribute(name);
}

enum = attributes.propertyNames();
while(enum.hasMoreElements()) {
String key = (String) enum.nextElement();
setAttribute(key, attributes.getProperty(key));
}

firePropertyChange(NAMED_VALUES, old, attributes);
}
/**
* Returns the menu items which may be used for this element.
*/
public String[] getMenuString() {
// If it already exists, use it.
if (menuString != null) {
return menuString;
}

// Find the DtdElement
String name = getTagName();
// Are we the project element?
boolean isProject = false;
if (name.equals("project")) {
isProject = true;
}
ACSDocumentType.DtdElement e =
docType.findElement(ACSDocumentType.CORE_ELEMENT, name);
if (e == null) {
e = docType.findElement(ACSDocumentType.OPTIONAL_ELEMENT, name);
}

if (e != null) {
// Use the content model (all the possible
// sub-elements) to create the menu.
String[] temp = e.getContentModel();
// Sort the items
List list = Collections.fill(null, temp);
java.util.Collections.sort(list);
list.toArray(temp);
int size = (temp.length > 5) ? 5 : temp.length;

// The project doesn't need a delete menu
if (isProject) {
menuString = new String[size+1];
} else {
menuString = new String[size+2];
}
System.arraycopy(temp, 0, menuString, 0, size);
} else {
// This is for elements not in the DTD
menuString = new String[2];
}
if (isProject) {
menuString[menuString.length-1] = "newElement";
} else {
// Add the delete and generic create commands
menuString[menuString.length-1] = "deleteElement";
menuString[menuString.length-2] = "newElement";
}
return menuString;
}
/**
* Returns the string to use if an action ID is not found.
* In our case, the newElement command is used.
*/
public String getDefaultActionID() {
return "newElement";
}
/**
* Returns a string array which contains this elements
* possible children.
*
* @param childType ACSDocumentType.CORE_ELEMENT or
* ACSDocumentType.OPTIONAL_ELEMENT
*/
public String[] getPossibleChildren(int childType) {
String name = getTagName();
ACSDocumentType.DtdElement e =
docType.findElement(childType, name);
if (e != null) {
return e.getContentModel();
}
return null;
}
/**
* Adds the attributes which are required by this node.
*/
public void addRequiredAttributes() {
ACSDocumentType.DtdElement e = getDtdElement();
if (e == null) {
return;
}
String[] attributes = e.getAttributes().getRequiredAttributes();
if (attributes == null) {
return;
}
for(int i = 0; i < attributes.length; i++) {
if ( getAttributes().getNamedItem(attributes[i]) == null) {
// XXX should set to default?
setAttribute(attributes[i], "");
}
}
}
/**
* Returns the DTD element we represent
*/
private ACSDocumentType.DtdElement getDtdElement() {
if (_dtdElement != null) {
return _dtdElement;
}

String name = getNodeName();
_dtdElement = docType.findElement(ACSDocumentType.CORE_ELEMENT, name);
if (_dtdElement == null) {
_dtdElement = docType.findElement(
ACSDocumentType.OPTIONAL_ELEMENT, name);
}
return _dtdElement;
}
}


+ 0
- 139
src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElementBeanInfo.java View File

@@ -1,139 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;
import org.apache.tools.ant.gui.customizer.DynamicCustomizer;
import org.apache.tools.ant.gui.modules.edit.DtdAttributePropertyEditor;
import java.beans.*;

/**
* BeanInfo for the ACSDtdDefinedElement class.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class ACSDtdDefinedElementBeanInfo extends BaseBeanInfo {
/**
* Default ctor.
*
*/
public ACSDtdDefinedElementBeanInfo() {
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public Class getType() {
return ACSDtdDefinedElement.class;
}

/**
* Get the customizer type.
*
* @return Customizer type.
*/
public Class getCustomizerType() {
return Customizer.class;
}

/**
* Get the property descriptors.
*
* @return Property descriptors.
*/
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] retval = null;

try {
retval = new PropertyDescriptor[] {
new PropertyDescriptor(ACSDtdDefinedElement.TASK_TYPE,
ACSDtdDefinedElement.class,
"getTaskType", null),
new PropertyDescriptor(ACSDtdDefinedElement.NAMED_VALUES,
ACSDtdDefinedElement.class),
new PropertyDescriptor(ACSDtdDefinedElement.XML_STRING,
ACSDtdDefinedElement.class,
"getXMLString", null)
};
int pos = 0;
retval[pos++].setDisplayName(getResources().getString(
getClass(),ACSDtdDefinedElement.TASK_TYPE));
retval[pos++].setDisplayName(getResources().getString(
getClass(),ACSDtdDefinedElement.NAMED_VALUES));
retval[pos++].setDisplayName(getResources().getString(
getClass(),ACSDtdDefinedElement.XML_STRING));
setSortingOrder(retval);
} catch(IntrospectionException ex) {
ex.printStackTrace();
throw new Error(ex.toString());
}
return retval;
}

/** Customizer for this bean info. */
public static class Customizer extends DynamicCustomizer {
static {
PropertyEditorManager.registerEditor(
ACSDtdDefinedAttributes.class, DtdAttributePropertyEditor.class);
}
public Customizer() {
super(ACSDtdDefinedElement.class);
}
}
}


+ 0
- 153
src/antidote/org/apache/tools/ant/gui/acs/ACSElement.java View File

@@ -1,153 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import com.sun.xml.tree.ElementNode;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeSupport;

/**
* Abstract base class for all Ant Construction Set
* elements. Depends on the JAXP XML library from Sun.
*
* @version $Revision$
* @author Simeon Fitch */
public abstract class ACSElement extends ElementNode {
/** Name of the 'xmlString' property. */
public static final String XML_STRING = "xmlString";

/** Event support. */
private PropertyChangeSupport _propSupport = null;

/**
* Default ctor.
*
*/
protected ACSElement() {
}

/**
* Get the display name of this.
*
* @return Display name.
*/
public String getDisplayName() {
return getTagName();
}

/**
* Get the XML representation of this.
*
* @return XML representation.
*/
public String getXMLString() {
return toString();
}

/**
* Set the given attribute.
*
* @param name Name of the attribute.
* @param value Value of the attribute.
*/
public void setAttribute(String name, String value) {
if(value == null && getAttribute(name).length() != 0) {
removeAttribute(name);
}
else {
super.setAttribute(name, value);
}
}

/**
* Add a change listener.
*
* @param l Listener to add.
*/
public void addPropertyChangeListener(PropertyChangeListener l) {
if(_propSupport == null) {
_propSupport = new PropertyChangeSupport(this);
}
_propSupport.addPropertyChangeListener(l);
}


/**
* Remove a change listener
*
* @param l Listener to remove.
*/
public void removePropertyChangeListener(PropertyChangeListener l) {
if(_propSupport == null) {
_propSupport = new PropertyChangeSupport(this);
}
_propSupport.removePropertyChangeListener(l);
}

/**
* Fire a change event to all listener.
*
* @param propName Name of the property.
* @param oldValue The old value.
* @param newValue The new value.
*/
protected void firePropertyChange(
String propName, Object oldValue, Object newValue) {
if(_propSupport != null) {
_propSupport.firePropertyChange(propName, oldValue, newValue);
}
}
}

+ 0
- 299
src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java View File

@@ -1,299 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import javax.xml.parsers.*;
import java.io.IOException;
import java.io.File;
import java.net.URL;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import com.sun.xml.parser.Parser;
import com.sun.xml.tree.*;
import java.util.Properties;
import java.util.Enumeration;
import com.sun.xml.parser.Resolver;

/**
* Factory for loading Ant Construction set elements.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSFactory {
/** Singleton instance of the factory. */
private static ACSFactory _instance = null;

/** Element maping. */
private static final Properties _elementMap = new Properties();

static {
try {
// First we bootstrap our knowledge of the Ant tasks by reading
// in the taskdef definitions and assigning them the default
// task element class.
_elementMap.load(org.apache.tools.ant.taskdefs.Ant.class.
getResourceAsStream("defaults.properties"));
Enumeration enum = _elementMap.propertyNames();
while(enum.hasMoreElements()) {
String name = (String) enum.nextElement();
// XXX the name of the class needs to be stored externally.
_elementMap.setProperty(
name, "org.apache.tools.ant.gui.acs.ACSDtdDefinedElement");
}

// Then we add/override the local definitions.
_elementMap.load(ACSFactory.class.
getResourceAsStream("acs-element.properties"));
}
catch(Throwable ex) {
// If something wrong happens here we can't do much more...
ex.printStackTrace();
System.exit(1);
}
}

/**
* Default ctor.
*
*/
private ACSFactory() {

}

/**
* Get an instance of the factory.
*
* @return Factory instance.
*/
public static ACSFactory getInstance() {
if(_instance == null) {
_instance = new ACSFactory();
}
return _instance;
}

/**
* Load a project from the given XML file.
* XXX fix me.
*
* @param location Location of the file.
* @return Loaded project.
*/
public ACSProjectElement load(File location) throws IOException {
return load(new URL("file", null, location.getPath()));
}

/**
* Load a project from the given XML file.
* XXX fix me.
*
* @param location Location of the file.
* @return Loaded project.
*/
public ACSProjectElement load(URL location) throws IOException {
XmlDocument doc = null;

try {
SAXParser sax = SAXParserFactory.newInstance().newSAXParser();
Parser parser = (Parser) sax.getParser();
XmlDocumentBuilder builder = new XmlDocumentBuilder();
builder.setIgnoringLexicalInfo(false);
SimpleElementFactory fact = new SimpleElementFactory();
fact.addMapping(_elementMap, ACSFactory.class.getClassLoader());

builder.setElementFactory(fact);
parser.setDocumentHandler(builder);
parser.setEntityResolver(new Resolver());
//parser.setErrorHandler();

sax.parse(location.openStream(), null);

doc = builder.getDocument();
}
catch(ParserConfigurationException ex) {
ex.printStackTrace();
throw new IOException(ex.getMessage());
}
catch(SAXException ex) {
ex.printStackTrace();
throw new IOException(ex.getMessage());
}

return (ACSProjectElement) doc.getDocumentElement();
}

/**
* Create a new, empty project.
*
* @return Empty project.
*/
public ACSProjectElement createProject() {
SimpleElementFactory fact = new SimpleElementFactory();
fact.addMapping(_elementMap, ACSFactory.class.getClassLoader());
XmlDocument doc = new XmlDocument();
doc.setElementFactory(fact);
return (ACSProjectElement) doc.createElement("project");
}


/**
* Create a new target.
*
* @param project Project the target is assigned to.
* @return New, unnamed target.
*/
public ACSTargetElement createTarget(ACSProjectElement project) {
ACSTargetElement retval = (ACSTargetElement) project.
getOwnerDocument().createElement("target");
indent(project, 1);
project.appendChild(retval);
return retval;
}

/**
* Create a new task.
*
* @param target Target the task is assigned to.
* @return New, unnamed task.
*/
public ACSTaskElement createTask(ACSTargetElement target) {
ACSTaskElement retval = (ACSTaskElement) target.
getOwnerDocument().createElement("task");
indent(target, 2);
target.appendChild(retval);
return retval;
}

/**
* Create a new property.
*
* @param node the Node to assign the property to.
* @return New, unnamed property.
*/
public ACSPropertyElement createProperty(ACSElement node) {
ACSPropertyElement retval = (ACSPropertyElement) node.
getOwnerDocument().createElement("property");
// XXX fixme.
indent(node, 1);
node.appendChild(retval);
return retval;
}

/**
* Create a new element.
*
* @param node the Node to assign the property to.
* @param name the new elements type.
* @return New, unnamed property.
*/
public ACSElement createElement(ACSElement node, String name) {
ACSElement retval = (ACSElement) node.
getOwnerDocument().createElement(name);
// XXX fixme.
indent(node, 1);
addRequiredAttributes(retval);
node.appendChild(retval);
return retval;
}
/**
* Add required attributes to the node.
*
* @param node the Node to add the attrinutes to.
*/
public void addRequiredAttributes(ACSElement node) {
if (node instanceof ACSDtdDefinedElement) {
ACSDtdDefinedElement dtdElement =
(ACSDtdDefinedElement) node;
dtdElement.addRequiredAttributes();
}
}
/**
* Insert a new line and indentation at the end of the given
* node in preparation for a new element being added.
*
* @param node Node to append indent to.
* @param level Indentation level.
*/
private void indent(ACSElement node, int level) {
StringBuffer buf = new StringBuffer("\n");
for(int i = 0; i < level; i++) {
buf.append(" ");
}

Text text = node.getOwnerDocument().createTextNode(buf.toString());
node.appendChild(text);
}


/**
* Test code
*
* @param args XML file to parse.
*/
public static void main(String[] args) {
try {
ACSFactory f = ACSFactory.getInstance();

System.out.println(f.load(new File(args[0])));
}
catch(Exception ex) {
ex.printStackTrace();
}
}

}

+ 0
- 75
src/antidote/org/apache/tools/ant/gui/acs/ACSInfoProvider.java View File

@@ -1,75 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

/**
* Provides menu infomation for a node.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public interface ACSInfoProvider {
/**
* Returns the menu items which may be used on this node.
* If the strings are not valid action IDs, use
* <code>getDefaultActionID</code> to find the action for the menu item.
*/
public String[] getMenuString();
/**
* Returns the action ID to use for a menu item which does not
* represent a valid action ID.
*/
public String getDefaultActionID();
}


+ 0
- 127
src/antidote/org/apache/tools/ant/gui/acs/ACSNamedElement.java View File

@@ -1,127 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import com.sun.xml.tree.ElementNode;
import java.util.StringTokenizer;

/**
* Class representing an element with a name and description.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSNamedElement extends ACSDtdDefinedElement {
/** The 'name' property name. */
public static final String NAME = "name";
/** The discription property name. */
public static final String DESCRIPTION = "description";

/**
* Default ctor.
*
*/
public ACSNamedElement() {
}

/**
* Get the target name.
*
* @return Target name.
*/
public String getName() {
return getAttribute(NAME);
}

/**
* Set the name.
*
* @param name New name value.
*/
public void setName(String name) {
String old = getName();
setAttribute(NAME, name);
firePropertyChange(NAME, old, name);
}

/**
* Get the long description of the target.
*
* @return Target description.
*/
public String getDescription() {
return getAttribute(DESCRIPTION);
}

/**
* Set the description
*
* @param description New description value.
*/
public void setDescription(String description) {
String old = getDescription();
setAttribute(DESCRIPTION, description);
firePropertyChange(DESCRIPTION, old, description);
}

/**
* Get the display name.
*
* @return Display name.
*/
public String getDisplayName() {
return getName();
}

}

+ 0
- 167
src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java View File

@@ -1,167 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import com.sun.xml.tree.ElementNode;
import java.net.URL;
import java.io.File;

/**
* Class representing a project element in the build file.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSProjectElement extends ACSNamedElement {
/** The 'default' property name. */
public static final String DEFAULT = "default";
/** The 'basdir' property name. */
public static final String BASEDIR = "basedir";
/** Property name of the persistence location. */
public static final String LOCATION = "location";
/** The location where this project is persisted. */
private URL _location = null;

/**
* Default ctor.
*
*/
public ACSProjectElement() {
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public Class getType() {
return ACSProjectElement.class;
}

/**
* Get the name of the default target.
*
* @return Default target name.
*/
public String getDefault() {
return getAttribute(DEFAULT);
}

/**
* Set the name of the default target.
*
* @param def Name of the default target.
*/
public void setDefault(String def) {
String old = getDefault();
setAttribute(DEFAULT, def);
firePropertyChange(DEFAULT, old, def);
}

/**
* Get the specified base directory for the build.
*
* @return Base directory
*/
public String getBasedir() {
return getAttribute(BASEDIR);
}

/**
* Set the base directory for builds.
*
* @param baseDir Build base directory.
*/
public void setBasedir(String baseDir) {
String old = getBasedir();
setAttribute(BASEDIR, baseDir);
firePropertyChange(BASEDIR, old, baseDir);
}

/**
* Get the location where this project is persisted.
*
* @return Saved location, or null if not persisted.
*/
public URL getLocation() {
return _location;
}

/**
* Set the loction where the project is persisted.
*
* @param location Location of project.
*/
public void setLocation(URL location) {
URL old = _location;
_location = location;
firePropertyChange(LOCATION, old, _location);
}

/**
* Set the loction where the project is persisted.
*
* @param location Location of project as a file.
*/
public void setLocation(File location) {
try {
setLocation(new URL("file", null, location.getAbsolutePath()));
}
catch(java.net.MalformedURLException ex) {
// No reason why this should happen.
// xxx Log me.
ex.printStackTrace();
}
}
}

+ 0
- 136
src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElementBeanInfo.java View File

@@ -1,136 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import org.apache.tools.ant.gui.customizer.DynamicCustomizer;
import java.beans.*;

/**
* BeanInfo for the ACSProjectElement class.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSProjectElementBeanInfo extends BaseBeanInfo {
/**
* Default ctor.
*
*/
public ACSProjectElementBeanInfo() {
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public Class getType() {
return ACSProjectElement.class;
}

/**
* Get the customizer type.
*
* @return Customizer type.
*/
public Class getCustomizerType() {
return Customizer.class;
}

/**
* Get the property descriptors.
*
* @return Property descriptors.
*/
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] retval = null;

try {
retval = new PropertyDescriptor[] {
new PropertyDescriptor(ACSProjectElement.NAME,
ACSProjectElement.class),
new PropertyDescriptor(ACSProjectElement.DESCRIPTION,
ACSProjectElement.class),
new PropertyDescriptor(ACSProjectElement.DEFAULT,
ACSProjectElement.class),
new PropertyDescriptor(ACSProjectElement.BASEDIR,
ACSProjectElement.class)

};
retval[0].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.NAME));
retval[1].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.DESCRIPTION));
retval[2].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.DEFAULT));
retval[3].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.BASEDIR));

setSortingOrder(retval);
}
catch(IntrospectionException ex) {
ex.printStackTrace();
throw new Error(ex.toString());
}

return retval;
}

/** Customizer for this bean info. */
public static class Customizer extends DynamicCustomizer {
public Customizer() {
super(ACSProjectElement.class);
}
}
}

+ 0
- 154
src/antidote/org/apache/tools/ant/gui/acs/ACSPropertyElement.java View File

@@ -1,154 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import com.sun.xml.tree.ElementNode;

/**
* Element containing a property definition.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSPropertyElement extends ACSDtdDefinedElement {
/** The 'name' property name. */
public static final String NAME = "name";
/** The 'value' property name. */
public static final String VALUE = "value";
/** The file to load properties from. */
public static final String FILE = "file";

/**
* Default ctor.
*
*/
public ACSPropertyElement() {
}

/**
* Get the display name of this.
*
* @return Display name.
*/
public String getDisplayName() {
String file = getFile();

if(file == null || file.trim().length() == 0) {
return getName();
}
else {
return "file: " + file;
}
}

/**
* Get the property name.
*
* @return Property name.
*/
public String getName() {
return getAttribute(NAME);
}

/**
* Set the property name.
*
* @param name Property name.
*/
public void setName(String name) {
String old = getName();
setAttribute(NAME, name);
firePropertyChange(NAME, old, name);
}

/**
* Get the property value.
*
* @return Property value.
*/
public String getValue() {
return getAttribute(VALUE);
}

/**
* Set the property value.
*
* @param name Property value.
*/
public void setValue(String value) {
String old = getValue();
setAttribute(VALUE, value);
firePropertyChange(VALUE, old, value);
}

/**
* Get the external property file.
*
* @return Property file.
*/
public String getFile() {
return getAttribute(FILE);
}

/**
* Set the external property file.
*
* @param name Property file.
*/
public void setFile(String file) {
String old = getFile();
setAttribute(FILE, file);
firePropertyChange(FILE, old, file);
}
}

+ 0
- 132
src/antidote/org/apache/tools/ant/gui/acs/ACSPropertyElementBeanInfo.java View File

@@ -1,132 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import org.apache.tools.ant.gui.customizer.DynamicCustomizer;
import java.beans.*;

/**
* BeanInfo for the ACSPropertyElement class.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSPropertyElementBeanInfo extends BaseBeanInfo {
/**
* Default ctor.
*
*/
public ACSPropertyElementBeanInfo() {
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public Class getType() {
return ACSPropertyElement.class;
}

/**
* Get the customizer type.
*
* @return Customizer type.
*/
public Class getCustomizerType() {
return Customizer.class;
}

/**
* Get the property descriptors.
*
* @return Property descriptors.
*/
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] retval = null;

try {
retval = new PropertyDescriptor[] {
new PropertyDescriptor(ACSPropertyElement.FILE,
ACSPropertyElement.class),
new PropertyDescriptor(ACSPropertyElement.NAME,
ACSPropertyElement.class),
new PropertyDescriptor(ACSPropertyElement.VALUE,
ACSPropertyElement.class)
};

retval[0].setDisplayName(getResources().getString(
getClass(),ACSPropertyElement.FILE));
retval[1].setDisplayName(getResources().getString(
getClass(),ACSPropertyElement.NAME));
retval[2].setDisplayName(getResources().getString(
getClass(),ACSPropertyElement.VALUE));

setSortingOrder(retval);
}
catch(IntrospectionException ex) {
ex.printStackTrace();
throw new Error(ex.toString());
}

return retval;
}

/** Customizer for this bean info. */
public static class Customizer extends DynamicCustomizer {
public Customizer() {
super(ACSPropertyElement.class);
}
}
}

+ 0
- 182
src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElement.java View File

@@ -1,182 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import com.sun.xml.tree.ElementNode;
import java.util.StringTokenizer;

/**
* Class representing a build target.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSTargetElement extends ACSNamedElement implements Cloneable{

/** Dependency property name. */
public static final String DEPENDS = "depends";
/** 'if' clause property name. */
public static final String IF = "if";
/** 'unless' clause property name. */
public static final String UNLESS = "unless";

/**
* Default ctor.
*
*/
public ACSTargetElement() {

}

/**
* Get the set of dependency names.
*
* @return Dependency names.
*/
public String[] getDepends() {
String depends = getAttribute(DEPENDS);
StringTokenizer tok = new StringTokenizer(depends,",");
String[] retval = new String[tok.countTokens()];
for(int i = 0; i < retval.length; i++) {
retval[i] = tok.nextToken().trim();
}
return retval;
}

/**
* Set the list of dependency names.
*
* @param depends Dependency names.
*/
public void setDepends(String[] depends) {
String old = getAttribute(DEPENDS);
StringBuffer buf = new StringBuffer();
for(int i = 0; depends != null && i < depends.length; i++) {
buf.append(depends[i]);
if(i < depends.length - 1) {
buf.append(", ");
}
}
setAttribute(DEPENDS, buf.toString());
firePropertyChange(DEPENDS, old, buf.toString());
}

/**
* Get the 'if' clause.
*
* @return 'if' clause.
*/
public String getIf() {
return getAttribute(IF);
}
/**
* Set the 'if' clause.
*
* @param val 'if' clause value.
*/
public void setIf(String val) {
String old = getIf();
setAttribute(IF, val);
firePropertyChange(IF, old, val);
}

/**
* Get the 'unless' clause.
*
* @return 'unless' clause.
*/
public String getUnless() {
return getAttribute(UNLESS);
}

/**
* Set the 'unless' clause.
*
* @param val 'unless' clase value.
*/
public void setUnless(String val) {
String old = getUnless();
setAttribute(UNLESS, val);
firePropertyChange(UNLESS, old, val);
}
/**
* Copys the depends of a given target to the current.
*
* @param Source target for the copy operation.
*/
public void copyDependsFromTarget(ACSTargetElement newTarget) {
setDepends(newTarget.getDepends());
}
/**
* Copys the depends of a given target to the current.
* I can't override clone, because I need an ACSTargetElement
* to be returned!
*
* @return A clones target element
*/
public ACSTargetElement getClone() {
ACSTargetElement retVal = null;
try {
retVal = (ACSTargetElement)clone();
retVal.setDepends(getDepends());
} catch (java.lang.CloneNotSupportedException ex) {
// Cannot occur, for ACSTarget implements Clonable!
}
return retVal;
}
}

+ 0
- 153
src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElementBeanInfo.java View File

@@ -1,153 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;
import org.apache.tools.ant.gui.customizer.DynamicCustomizer;

import java.beans.*;

/**
* BeanInfo for the ACSTargetElement class.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSTargetElementBeanInfo extends BaseBeanInfo {
/**
* Default ctor.
*
*/
public ACSTargetElementBeanInfo() {
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public Class getType() {
return ACSTargetElement.class;
}

/**
* Get the customizer type.
*
* @return Customizer type.
*/
public Class getCustomizerType() {
return Customizer.class;
}

/**
* Get the property descriptors.
*
* @return Property descriptors.
*/
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] retval = null;

try {
retval = new PropertyDescriptor[] {
new PropertyDescriptor(ACSTargetElement.NAME,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.DESCRIPTION,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.DEPENDS,
ACSTargetElement.class,
"getClone", "copyDependsFromTarget"),
new PropertyDescriptor(ACSTargetElement.IF,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.UNLESS,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.XML_STRING,
ACSTargetElement.class,
"getXMLString", null)
};

// Set display names.
retval[0].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.NAME));
retval[1].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.DESCRIPTION));
retval[2].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.DEPENDS));
retval[3].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.IF));
retval[4].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.UNLESS));
retval[5].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.XML_STRING));

setSortingOrder(retval);
}
catch(IntrospectionException ex) {
ex.printStackTrace();
throw new Error(ex.toString());
}

return retval;
}


/** Customizer for this bean info. */
public static class Customizer extends DynamicCustomizer {
static {
PropertyEditorManager.registerEditor(
org.apache.tools.ant.gui.acs.ACSTargetElement.class, org.apache.tools.ant.gui.modules.edit.DependentTargetPropertyEditor.class);
}
public Customizer() {
super(ACSTargetElement.class);
}
}
}

+ 0
- 153
src/antidote/org/apache/tools/ant/gui/acs/ACSTaskElement.java View File

@@ -1,153 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import org.w3c.dom.Node;
import org.w3c.dom.NamedNodeMap;
import java.util.*;

/**
* Element containing a property definition.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSTaskElement extends ACSTreeNodeElement {
/** Property name for the task type. */
public static final String TASK_TYPE = "taskType";
/** Property name for attributes. It's called "namedValues" so
* it doesn't collide with the Node.getAttributes() method. */
public static final String NAMED_VALUES = "namedValues";

/**
* Default ctor.
*
*/
public ACSTaskElement() {
}

/**
* Get the task type.
*
* @return Task type.
*/
public String getTaskType() {
return getTagName();
}

/**
* Set the task type.
*
* @param type Type name.
*/
public void setTaskType(String type) {
setTag(type);
}

/**
* Get the attributes (named value mappings). This method is not named
* getAttributes() because there is already a method of that name in
* the Node interface.
*
* @return Name-value mappings.
*/
public Properties getNamedValues() {
Properties retval = new Properties();

NamedNodeMap attribs = getAttributes();
for(int i = 0, len = attribs.getLength(); i < len; i++) {
Node n = attribs.item(i);
retval.setProperty(n.getNodeName(), n.getNodeValue());
}
return retval;
}


/**
* Set the attributes. This method sets the Node attirbutes using
* the given Map containing name-value pairs.
*
* @param attributes New attribute set.
*/
public void setNamedValues(Properties props) {
// XXX this code really sucks. It is really annoying that the
// DOM interfaces don't have a general "setAttributes()" or
// "removeAllAttributes()" method, but instead make you
// remove each attribute individually, or require you to figure
// out what the differences are between the two.

// Although this is very inefficient, I'm taking the conceptually
// simplistic approach to this and brute force removing the existing
// set and replacing it with a brand new set. If this becomes a
// performance concern (which I doubt it will) it can be optimized
// later.

Properties old = getNamedValues();

Enumeration enum = old.propertyNames();
while(enum.hasMoreElements()) {
String name = (String) enum.nextElement();
removeAttribute(name);
}
enum = props.propertyNames();
while(enum.hasMoreElements()) {
String key = (String) enum.nextElement();
setAttribute(key, props.getProperty(key));
}

firePropertyChange(NAMED_VALUES, old, props);
}

}

+ 0
- 134
src/antidote/org/apache/tools/ant/gui/acs/ACSTaskElementBeanInfo.java View File

@@ -1,134 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import org.apache.tools.ant.gui.customizer.DynamicCustomizer;
import java.beans.*;

/**
* BeanInfo for the ACSTaskElement class.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSTaskElementBeanInfo extends BaseBeanInfo {
/**
* Default ctor.
*
*/
public ACSTaskElementBeanInfo() {
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public Class getType() {
return ACSTaskElement.class;
}

/**
* Get the customizer type.
*
* @return Customizer type.
*/
public Class getCustomizerType() {
return Customizer.class;
}

/**
* Get the property descriptors.
*
* @return Property descriptors.
*/
public PropertyDescriptor[] getPropertyDescriptors() {
PropertyDescriptor[] retval = null;

try {
retval = new PropertyDescriptor[] {
new PropertyDescriptor(ACSTaskElement.TASK_TYPE,
ACSTaskElement.class,
"getTaskType", null),
new PropertyDescriptor(ACSTaskElement.NAMED_VALUES,
ACSTaskElement.class),
new PropertyDescriptor(ACSTaskElement.XML_STRING,
ACSTaskElement.class,
"getXMLString", null)
};

retval[0].setDisplayName(getResources().getString(
getClass(),ACSTaskElement.TASK_TYPE));
retval[1].setDisplayName(getResources().getString(
getClass(),ACSTaskElement.NAMED_VALUES));
retval[2].setDisplayName(getResources().getString(
getClass(),ACSTaskElement.XML_STRING));

setSortingOrder(retval);
}
catch(IntrospectionException ex) {
ex.printStackTrace();
throw new Error(ex.toString());
}

return retval;
}

/** Customizer for this bean info. */
public static class Customizer extends DynamicCustomizer {
public Customizer() {
super(ACSTaskElement.class);
}
}
}

+ 0
- 71
src/antidote/org/apache/tools/ant/gui/acs/ACSTreeNodeElement.java View File

@@ -1,71 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;


import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sun.xml.tree.ElementNode;
import javax.swing.tree.TreeNode;
import java.util.*;

/**
* Abstract base class for all ACSElement classes that are also tree node.
*
* @version $Revision$
* @author Simeon Fitch
*/
public abstract class ACSTreeNodeElement extends ACSElement {

}

+ 0
- 159
src/antidote/org/apache/tools/ant/gui/acs/BaseBeanInfo.java View File

@@ -1,159 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;

import org.apache.tools.ant.gui.core.ResourceManager;
import org.apache.tools.ant.gui.customizer.DynamicCustomizer;
import java.beans.*;
import javax.swing.ImageIcon;
import java.awt.Image;

/**
* Abstract base class for ACS BeanInfo classes.
*
* @version $Revision$
* @author Simeon Fitch
*/
abstract class BaseBeanInfo extends SimpleBeanInfo {
/** Property name for specifiying a sorting order. */
public static final String SORT_ORDER = DynamicCustomizer.SORT_ORDER;
/** Resource provider for bean info. */
private static ResourceManager _resources = new ResourceManager();

/** Icon for this. */
private Image _icon = null;

/**
* Default ctor.
*
*/
protected BaseBeanInfo() {
// Load the icon.
ImageIcon img = _resources.getImageIcon(getClass(), "icon");
if(img != null) {
_icon = img.getImage();
}
}

/**
* Get the local resources.
*
* @return Resources.
*/
ResourceManager getResources() {
return _resources;
}

/**
* Get the bean descriptor.
*
* @return Bean descriptor.
*/
public BeanDescriptor getBeanDescriptor() {
return new ACSBeanDescriptor(this);
}

/**
* Get the icon for displaying this bean.
*
* @param kind Kind of icon. XXX currently ignored
* @return Image for bean, or null if none.
*/
public Image getIcon(int kind) {
// XXX kind is currently ignored.
return _icon;
}

/**
* Set the sorting order property of the given objects based
* on the order that they appear in the array.
*
* @param vals FeatureDescriptors to set sorting order property for.
*/
protected void setSortingOrder(FeatureDescriptor[] vals) {
for(int i = 0; i < vals.length; i++) {
vals[i].setValue(SORT_ORDER, new Integer(i));
}
}

/**
* Get the type that this BeanInfo represents.
*
* @return Type.
*/
public abstract Class getType();

/**
* Get the type of the customizer to use.
*
* @return Customizer to use.
*/
public abstract Class getCustomizerType();

/**
* Gets the beans <code>PropertyDescriptor</code>s.
*
* @return An array of PropertyDescriptors describing the editable
* properties supported by this bean. May return null if the
* information should be obtained by automatic analysis.
* <p>
* If a property is indexed, then its entry in the result array will
* belong to the IndexedPropertyDescriptor subclass of PropertyDescriptor.
* A client of getPropertyDescriptors can use "instanceof" to check
* if a given PropertyDescriptor is an IndexedPropertyDescriptor.
*/
public abstract PropertyDescriptor[] getPropertyDescriptors();


}

+ 0
- 312
src/antidote/org/apache/tools/ant/gui/acs/ElementTreeModel.java View File

@@ -1,312 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;


import javax.swing.tree.*;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeModelEvent;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.apache.tools.ant.gui.acs.*;
import java.util.*;

/**
* Provides a tree model view of the Project class. XXX This
* is a major hack right now that needs to be cleaned up.
*
* @version $Revision$
* @author Simeon H.K. Fitch */
public class ElementTreeModel implements TreeModel {
/** Root of the tree. */
private ACSProjectElement _root = null;
/** List of listeners. */
private List _listeners = new ArrayList();

public ElementTreeModel(ACSProjectElement root) {
_root = root;
}

/**
* Returns the root of the tree. Returns null only if the tree has
* no nodes.
*
* @return the root of the tree
*/
public Object getRoot() {
return _root;
}

/**
* Gets the set of children that this tree model is interested in.
* NB: This is <b>really</b> inefficient, but may not be an issue given
* the number of times it is ultimately called. A profiler definately needs
* to be applied here.
*
* @param parent Parent to extract children from.
*/
private List getChildren(Node parent) {
NodeList children = parent.getChildNodes();
int length = children.getLength();

List retval = new ArrayList(length);
for(int i = 0; i < length; i++) {
// XXX This is where we will eventually add dynamic filtering
// capabilities.
Node n = children.item(i);
if(n instanceof ACSTreeNodeElement) {
retval.add(n);
}
}

return retval;
}

/**
* Returns the child of <I>parent</I> at index <I>index</I> in the parent's
* child array. <I>parent</I> must be a node previously obtained from
* this data source. This should not return null if <i>index</i>
* is a valid index for <i>parent</i> (that is <i>index</i> >= 0 &&
* <i>index</i> < getChildCount(<i>parent</i>)).
*
* @param parent a node in the tree, obtained from this data source
* @return the child of <I>parent</I> at index <I>index</I>
*/
public Object getChild(Object parent, int index) {
if(parent instanceof Node) {
Node n = (Node) parent;
List children = getChildren(n);
return children.get(index);
}
else {
return null;
}
}


/**
* Returns the number of children of <I>parent</I>. Returns 0 if the node
* is a leaf or if it has no children. <I>parent</I> must be a node
* previously obtained from this data source.
*
* @param parent a node in the tree, obtained from this data source
* @return the number of children of the node <I>parent</I>
*/
public int getChildCount(Object parent) {
if(parent instanceof Node) {
Node n = (Node) parent;
return getChildren(n).size();
}
else {
return 0;
}
}

/**
* Returns true if <I>node</I> is a leaf. It is possible for this method
* to return false even if <I>node</I> has no children. A directory in a
* filesystem, for example, may contain no files; the node representing
* the directory is not a leaf, but it also has no children.
*
* @param node a node in the tree, obtained from this data source
* @return true if <I>node</I> is a leaf
*/
public boolean isLeaf(Object node) {
if(node instanceof Node) {
Node n = (Node) node;
return getChildren(n).size() == 0;
}
else {
return true;
}

}

/**
* Returns the index of child in parent.
*/
public int getIndexOfChild(Object parent, Object child) {
if(parent instanceof Node && child instanceof Node) {
Node n = (Node) parent;
List children = getChildren(n);
int count = children.size();
for(int i = 0; i < count; i++) {
if(children.get(i) == child) return i;
}
}
return -1;
}

/**
* Messaged when the user has altered the value for the item identified
* by <I>path</I> to <I>newValue</I>. If <I>newValue</I> signifies
* a truly new value the model should post a treeNodesChanged
* event.
*
* @param path path to the node that the user has altered.
* @param newValue the new value from the TreeCellEditor.
*/
public void valueForPathChanged(TreePath path, Object newValue) {
// XXX What should the implementation be here?
fireNodeChanged((Node) path.getLastPathComponent());
}


/**
* Adds a listener for the TreeModelEvent posted after the tree changes.
*
* @see #removeTreeModelListener
* @param l the listener to add
*/
public void addTreeModelListener(TreeModelListener l) {
_listeners.add(l);
}

/**
* Removes a listener previously added with <B>addTreeModelListener()</B>.
*
* @see #addTreeModelListener
* @param l the listener to remove
*/
public void removeTreeModelListener(TreeModelListener l) {
_listeners.remove(l);
}

/**
* Get the list of nodes from the root to the
* given node.
*
* @param startNode Node to get path for.
*/
public Node[] getPathToRoot(Node startNode) {
return getPathToRoot(startNode, 0);
}

/**
* A recursive method for generating a list of nodes defining
* the path from the given node to the root.
*
* @param node Node to get path for.
* @param depth The number of calls taken towards the root.
*/
private Node[] getPathToRoot(Node node, int depth) {
Node[] retval = null;

depth++;
if(node == _root || node.getParentNode() == null) {
retval = new Node[depth];
}
else {
retval = getPathToRoot(node.getParentNode(), depth);
}

retval[retval.length - depth] = node;
return retval;
}


/**
* Fire a node change event.
*
* @param node Node that changed.
*/
public void fireNodeChanged(Node node) {
TreeModelEvent event = new TreeModelEvent(this, getPathToRoot(node));

// XXX This doen't support modifying the list during dispatch...
Iterator it = _listeners.iterator();
while(it.hasNext()) {
TreeModelListener l = (TreeModelListener) it.next();
l.treeNodesChanged(event);
}
}

/**
* Fire a node change event.
*
* @param node Node that changed.
*/
public void fireNodeAdded(Node node) {
Node parent = node.getParentNode();
TreeModelEvent event = null;
if(parent == null) {
event = new TreeModelEvent(this, getPathToRoot(node));
}
else {
Node[] path = getPathToRoot(parent);
int[] indicies = null;
Node[] children = new Node[] { node };

// XXX Right now we assume that the node was added at the end.
// This may not be the case in the future.
if(parent.getLastChild() == node) {
List filteredChildren = getChildren(parent);
indicies = new int[] { filteredChildren.indexOf(node) };
}
else {
throw new UnsupportedOperationException(
"Haven't implemented non-append notification yet.");
}

event = new TreeModelEvent(this, path, indicies, children);
}

// XXX This doen't support modifying the list during dispatch...
Iterator it = _listeners.iterator();
while(it.hasNext()) {
TreeModelListener l = (TreeModelListener) it.next();
l.treeNodesInserted(event);
}
}
}

+ 0
- 103
src/antidote/org/apache/tools/ant/gui/acs/ElementTreeSelectionModel.java View File

@@ -1,103 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.acs;
import org.apache.tools.ant.gui.acs.ACSElement;
import org.apache.tools.ant.gui.acs.ACSTargetElement;

import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreePath;
import java.util.*;

/**
* Selection model for the currently selected targets.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ElementTreeSelectionModel extends DefaultTreeSelectionModel {
/**
* Default ctor.
*
*/
public ElementTreeSelectionModel() {
setSelectionMode(DISCONTIGUOUS_TREE_SELECTION);
}

/**
* Convenience method for providing the set of currently selected
* elements. NB: It returns all of the nodes in the selection path,
* so the root node will be a selected element whenever a child is
* selected.
*
* @return the currently selected elements.
*/
public ACSElement[] getSelectedElements() {
TreePath[] path = getSelectionPaths();
List values = new LinkedList();
for(int i = 0; path != null && i < path.length; i++) {
TreePath curr = path[i];
for(int j = 0; j < curr.getPathCount(); j++) {
Object item = curr.getPathComponent(j);
if(item instanceof ACSElement) {
values.add(item);
}
}
}

ACSElement[] retval = new ACSElement[values.size()];
values.toArray(retval);
return retval;
}

}

+ 0
- 14
src/antidote/org/apache/tools/ant/gui/acs/acs-element.properties View File

@@ -1,14 +0,0 @@
#
# Property file mapping DOM nodes to Java class names.
#

# The default element
*Element=org.apache.tools.ant.gui.acs.ACSDtdDefinedElement

# Specific elements.
project=org.apache.tools.ant.gui.acs.ACSProjectElement
property=org.apache.tools.ant.gui.acs.ACSPropertyElement
target=org.apache.tools.ant.gui.acs.ACSTargetElement
task=org.apache.tools.ant.gui.acs.ACSTaskElement



+ 0
- 9
src/antidote/org/apache/tools/ant/gui/acs/package.html View File

@@ -1,9 +0,0 @@
<HTML><BODY> <H1>Ant Construction Set</H1>

<P>This package contains the tools for constructing and manipulating an Ant
build file</P>

<P><B>NB</B>: Requires the <A HREF="http://java.sun.com/xml">Java API for XML
Parsing</A> from Sun.</P>
</BODY>
</HTML>

+ 0
- 255
src/antidote/org/apache/tools/ant/gui/acs/project-ext.dtd View File

@@ -1,255 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
The Apache Software License, Version 1.1

Copyright (c) 1999, 2000 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/>.
-->
<!-- @author Michel CASABIANCA -->
<!-- @version $Revision$ -->
<!ENTITY % share-file SYSTEM "file:/share.dtd">
%share-file;
<!ELEMENT target (p4sync | p4label | p4have | p4submit | p4edit | p4change | junit | ddcreator | ejbc | wlrun | wlstop | ejbjar | weblogic | TOPLink | PropertyFile)*>

<!-- *********** PERFORCE ************** -->

<!ELEMENT p4sync EMPTY>
<!ATTLIST p4sync
view CDATA #IMPLIED
label CDATA #IMPLIED
force CDATA #IMPLIED
>
<!ELEMENT p4change EMPTY>
<!ELEMENT p4edit EMPTY>
<!ATTLIST p4edit
view CDATA #REQUIRED
change CDATA #IMPLIED
>
<!ELEMENT p4submit EMPTY>
<!ATTLIST p4submit
change CDATA #REQUIRED
>
<!ELEMENT p4have EMPTY>
<!ELEMENT p4label EMPTY>
<!ATTLIST p4label
name CDATA #REQUIRED
view CDATA #IMPLIED
desc CDATA #IMPLIED
>

<!-- *********** JUNIT ************** -->

<!ELEMENT junit (jvmarg | batchtest | test | formatter | sysproperty)*>
<!ATTLIST junit
printsummary CDATA #IMPLIED
fork CDATA #IMPLIED
haltonerror CDATA #IMPLIED
haltonfailure CDATA #IMPLIED
timeout CDATA #IMPLIED
maxmemory CDATA #IMPLIED
jvm CDATA #IMPLIED
dir CDATA #IMPLIED
>
<!ELEMENT jvmarg EMPTY>
<!ATTLIST jvmarg
value CDATA #REQUIRED
>
<!ELEMENT sysproperty EMPTY>
<!ATTLIST sysproperty
key CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT formatter EMPTY>
<!ATTLIST formatter
type CDATA #IMPLIED
classname CDATA #IMPLIED
extension CDATA #REQUIRED
usefile CDATA #IMPLIED
>
<!ELEMENT test EMPTY>
<!ATTLIST test
name CDATA #REQUIRED
fork CDATA #IMPLIED
haltonerror CDATA #IMPLIED
haltonfailure CDATA #IMPLIED
todir CDATA #IMPLIED
outfile CDATA #IMPLIED
if CDATA #IMPLIED
unless CDATA #IMPLIED
>
<!ELEMENT batchtest EMPTY>
<!ATTLIST batchtest
fork CDATA #IMPLIED
haltonerror CDATA #IMPLIED
haltonfailure CDATA #IMPLIED
todir CDATA #IMPLIED
if CDATA #IMPLIED
unless CDATA #IMPLIED
>

<!-- *********** EJB ************** -->

<!ELEMENT ddcreator (include | exclude)*>
<!ATTLIST ddcreator
descriptors CDATA #REQUIRED
dest CDATA #REQUIRED
classpath CDATA #IMPLIED
>
<!ELEMENT ejbc (include | exclude)*>
<!ATTLIST ejbc
descriptors CDATA #REQUIRED
manifest CDATA #REQUIRED
dest CDATA #REQUIRED
src CDATA #REQUIRED
classpath CDATA #IMPLIED
>
<!ELEMENT wlrun (classpath | wlclasspath)*>
<!ATTLIST wlrun
beahome CDATA #REQUIRED
home CDATA #REQUIRED
Domain CDATA #REQUIRED
classpath CDATA #IMPLIED
wlclasspath CDATA #IMPLIED
properties CDATA #IMPLIED
name CDATA #IMPLIED
policy CDATA #IMPLIED
username CDATA #IMPLIED
password CDATA #IMPLIED
pkPassword CDATA #IMPLIED
jvmargs CDATA #IMPLIED
args CDATA #IMPLIED
>
<!ELEMENT wlstop (classpath)*>
<!ATTLIST wlstop
beahome CDATA #REQUIRED
classpath CDATA #REQUIRED
user CDATA #REQUIRED
password CDATA #REQUIRED
url CDATA #IMPLIED
delay CDATA #IMPLIED
>
<!ELEMENT ejbjar (classpath | dtd | support)*>
<!ATTLIST ejbjar
descriptordir CDATA #IMPLIED
srcdir CDATA #REQUIRED
destdir CDATA #REQUIRED
basejarname CDATA #IMPLIED
basenameterminator CDATA #IMPLIED
genericjarsuffix CDATA #IMPLIED
classpath CDATA #IMPLIED
latdestdir CDATA #IMPLIED
>
<!ELEMENT dtd EMPTY>
<!ATTLIST dtd
publicId CDATA #REQUIRED
location CDATA #REQUIRED
>
<!ELEMENT support (include | exclude)*>
<!ATTLIST support
dir CDATA #IMPLIED
>
<!ELEMENT weblogic (classpath | dtd | support)*>
<!ATTLIST weblogic
destdir CDATA #IMPLIED
genericjarsuffix CDATA #IMPLIED
suffix CDATA #IMPLIED
wlclasspath CDATA #IMPLIED
keepgeneric CDATA #IMPLIED
compiler CDATA #IMPLIED
rebuild CDATA #IMPLIED
keepgenerated CDATA #IMPLIED
args CDATA #IMPLIED
weblogicdtd CDATA #IMPLIED
wldtd CDATA #IMPLIED
ejbdtd CDATA #IMPLIED
newCMP CDATA #IMPLIED
oldCMP CDATA #IMPLIED
>
<!ELEMENT TOPLink (classpath | dtd | support)*>
<!ATTLIST TOPLink
destdir CDATA #IMPLIED
genericjarsuffix CDATA #IMPLIED
suffix CDATA #IMPLIED
wlclasspath CDATA #IMPLIED
keepgeneric CDATA #IMPLIED
compiler CDATA #IMPLIED
rebuild CDATA #IMPLIED
keepgenerated CDATA #IMPLIED
args CDATA #IMPLIED
weblogicdtd CDATA #IMPLIED
wldtd CDATA #IMPLIED
ejbdtd CDATA #IMPLIED
newCMP CDATA #IMPLIED
oldCMP CDATA #IMPLIED
toplinkdescriptor CDATA #IMPLIED
toplinkdtd CDATA #IMPLIED
>
<!ELEMENT wlclasspath (pathelement | path | fileset)*>
<!ATTLIST wlclasspath
id CDATA #IMPLIED
refid CDATA #IMPLIED
>

<!-- *********** PERFORCE ************** -->

<!ELEMENT PropertyFile (entry)*>
<!ATTLIST PropertyFile
file CDATA #REQUIRED
comment CDATA #IMPLIED
>
<!ELEMENT entry EMPTY>
<!ATTLIST entry
key CDATA #REQUIRED
value CDATA #REQUIRED
type CDATA #IMPLIED
operation CDATA #IMPLIED
default CDATA #IMPLIED
pattern CDATA #IMPLIED
>

+ 0
- 424
src/antidote/org/apache/tools/ant/gui/acs/project.dtd View File

@@ -1,424 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
The Apache Software License, Version 1.1

Copyright (c) 1999, 2000 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/>.
-->

<!-- @author Michel CASABIANCA -->
<!-- @version $Revision$ -->

<!ENTITY % share-file SYSTEM "file:/share.dtd">
%share-file;
<!ELEMENT target (ant | antcall | available | chmod | copy | cvs | delete | deltree | echo | exec | expand | fail | filter | get | gzip | fixcrlf | jar | java | javac | javadoc | keysubst | mail | mkdir | property | recorder | rename | replace | rmic | tar | taskdef | tstamp | uptodate | zip | path | classpath)*>
<!ATTLIST target
name CDATA #REQUIRED
depends CDATA #IMPLIED
if CDATA #IMPLIED
>
<!ELEMENT ant (property)*>
<!ATTLIST ant
antfile CDATA #IMPLIED
dir CDATA #REQUIRED
target CDATA #IMPLIED
output CDATA #IMPLIED
>
<!ELEMENT antcall (param)*>
<!ATTLIST antcall
target CDATA #REQUIRED
>
<!ELEMENT param EMPTY>
<!ATTLIST param
name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT available EMPTY>
<!ATTLIST available
property CDATA #REQUIRED
classname CDATA #REQUIRED
resource CDATA #REQUIRED
file CDATA #REQUIRED
>
<!ELEMENT chmod (includes | excludes | patternset | fileset)*>
<!ATTLIST chmod
file CDATA #IMPLIED
dir CDATA #IMPLIED
perm CDATA #REQUIRED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
parallel CDATA #IMPLIED
type CDATA #IMPLIED
>
<!ELEMENT copy (fileset | mapper)*>
<!ATTLIST copy
file CDATA #IMPLIED
todir CDATA #IMPLIED
todir CDATA #IMPLIED
preservelastmodified CDATA #IMPLIED
overwrite CDATA #IMPLIED
filtering CDATA #IMPLIED
flatten CDATA #IMPLIED
includeEmptyDirs CDATA #IMPLIED
>
<!ELEMENT cvs EMPTY>
<!ATTLIST cvs
cvsRoot CDATA #REQUIRED
dest CDATA #REQUIRED
package CDATA #REQUIRED
tag CDATA #IMPLIED
>
<!ELEMENT delete (fileset)*>
<!ATTLIST delete
file CDATA #IMPLIED
dir CDATA #IMPLIED
verbose CDATA #IMPLIED
quiet CDATA #IMPLIED
includeEmptyDirs CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
>
<!ELEMENT deltree EMPTY>
<!ATTLIST deltree
dir CDATA #REQUIRED
>
<!ELEMENT echo EMPTY>
<!ATTLIST echo
message CDATA #REQUIRED
>
<!ELEMENT exec EMPTY>
<!ATTLIST exec
command CDATA #REQUIRED
dir CDATA #REQUIRED
os CDATA #IMPLIED
output CDATA #REQUIRED
>
<!ELEMENT expand EMPTY>
<!ATTLIST expand
src CDATA #REQUIRED
dest CDATA #REQUIRED
>
<!ELEMENT filter EMPTY>
<!ATTLIST filter
token CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT get EMPTY>
<!ATTLIST get
src CDATA #REQUIRED
dest CDATA #REQUIRED
verbose CDATA #IMPLIED
>
<!ELEMENT gzip EMPTY>
<!ATTLIST gzip
src CDATA #REQUIRED
zipfile CDATA #REQUIRED
>
<!ELEMENT fail EMPTY>
<!ELEMENT fixcrlf (includes | excludes | patternset)*>
<!ATTLIST fixcrlf
srcdir CDATA #REQUIRED
destDir CDATA #IMPLIED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
cr CDATA #IMPLIED
tab CDATA #IMPLIED
eof CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludesfile CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
tablength CDATA #IMPLIED
>
<!ELEMENT jar (metainf | include | exclude | patternset | fileset)*>
<!ATTLIST jar
jarfile CDATA #REQUIRED
basedir CDATA #REQUIRED
compress CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
manifest CDATA #IMPLIED
whenempty CDATA #IMPLIED
>
<!ELEMENT metainf (include | exclude | patternset)*>
<!ATTLIST metainf
id CDATA #IMPLIED
refid CDATA #IMPLIED
dir CDATA #REQUIRED
defaultexcludes CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
>
<!ELEMENT java EMPTY>
<!ATTLIST java
classname CDATA #REQUIRED
args CDATA #IMPLIED
fork CDATA #IMPLIED
jvmargs CDATA #IMPLIED
>
<!ELEMENT javac (classpath | exclude | property)*>
<!ATTLIST javac
srcdir CDATA #REQUIRED
destdir CDATA #REQUIRED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
classpath CDATA #IMPLIED
bootclasspath CDATA #IMPLIED
extdirs CDATA #IMPLIED
debug CDATA #IMPLIED
optimize CDATA #IMPLIED
deprecation CDATA #IMPLIED
filtering CDATA #IMPLIED
>
<!ELEMENT javadoc (link | group | doclet | sourcepath | classpath | bootclasspath)>
<!ATTLIST javadoc
sourcepath CDATA #REQUIRED
destdir CDATA #REQUIRED
sourcefiles CDATA #IMPLIED
packagenames CDATA #IMPLIED
classpath CDATA #IMPLIED
bootclasspath CDATA #IMPLIED
extdirs CDATA #IMPLIED
overview CDATA #IMPLIED
public CDATA #IMPLIED
protected CDATA #IMPLIED
package CDATA #IMPLIED
private CDATA #IMPLIED
old CDATA #IMPLIED
verbose CDATA #IMPLIED
locale CDATA #IMPLIED
encoding CDATA #IMPLIED
version CDATA #IMPLIED
use CDATA #IMPLIED
author CDATA #IMPLIED
splitindex CDATA #IMPLIED
windowtitle CDATA #IMPLIED
doctitle CDATA #IMPLIED
header CDATA #IMPLIED
footer CDATA #IMPLIED
bottom CDATA #IMPLIED
link CDATA #IMPLIED
linkoffline CDATA #IMPLIED
group CDATA #IMPLIED
nodedeprecated CDATA #IMPLIED
nodedeprecatedlist CDATA #IMPLIED
notree CDATA #IMPLIED
noindex CDATA #IMPLIED
nohelp CDATA #IMPLIED
nonavbar CDATA #IMPLIED
serialwarn CDATA #IMPLIED
helpfile CDATA #IMPLIED
stylesheetfile CDATA #IMPLIED
charset CDATA #IMPLIED
docencoding CDATA #IMPLIED
>
<!ELEMENT link EMPTY>
<!ATTLIST link
href CDATA #REQUIRED
offline CDATA #IMPLIED
packagelistLoc CDATA #IMPLIED
>
<!ELEMENT group EMPTY>
<!ATTLIST group
title CDATA #REQUIRED
packages CDATA #REQUIRED
>
<!ELEMENT doclet (param)*>
<!ATTLIST doclet
name CDATA #REQUIRED
path CDATA #REQUIRED
>
<!ELEMENT sourcepath (pathelement | path | fileset)*>
<!ATTLIST sourcepath
id CDATA #IMPLIED
refid CDATA #IMPLIED
>
<!ELEMENT bootclasspath (pathelement | path | fileset)*>
<!ATTLIST bootclasspath
id CDATA #IMPLIED
refid CDATA #IMPLIED
>
<!ELEMENT keysubst EMPTY>
<!ATTLIST keysubst
src CDATA #REQUIRED
dest CDATA #REQUIRED
sep CDATA #IMPLIED
keys CDATA #REQUIRED
>
<!ELEMENT mail EMPTY>
<!ATTLIST mail
from CDATA #REQUIRED
tolist CDATA #REQUIRED
message CDATA #REQUIRED
files CDATA #IMPLIED
mailhost CDATA #IMPLIED
subject CDATA #IMPLIED
>
<!ELEMENT mapper EMPTY>
<!ATTLIST mapper
type CDATA #REQUIRED
from CDATA #REQUIRED
to CDATA #REQUIRED
classname CDATA #IMPLIED
classpath CDATA #IMPLIED
classpathref CDATA #IMPLIED
>
<!ELEMENT mkdir EMPTY>
<!ATTLIST mkdir
dir CDATA #REQUIRED
>
<!ELEMENT recorder EMPTY>
<!ATTLIST recorder
name CDATA #REQUIRED
action CDATA #IMPLIED
append CDATA #IMPLIED
loglevel CDATA #IMPLIED
>
<!ELEMENT rename EMPTY>
<!ATTLIST rename
src CDATA #REQUIRED
dest CDATA #REQUIRED
replace CDATA #IMPLIED
>
<!ELEMENT replace EMPTY>
<!ATTLIST replace
file CDATA #REQUIRED
token CDATA #REQUIRED
value CDATA #IMPLIED
>
<!ELEMENT rmic EMPTY>
<!ATTLIST rmic
base CDATA #REQUIRED
classname CDATA #REQUIRED
filtering CDATA #IMPLIED
>
<!ELEMENT tar (includes | excludes | patternset | fileset | tarfileset)*>
<!ATTLIST tar
tarfile CDATA #REQUIRED
basedir CDATA #REQUIRED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
>
<!ELEMENT tarfileset (include | exclude | patternset)*>
<!ATTLIST tarfileset
id CDATA #IMPLIED
refid CDATA #IMPLIED
dir CDATA #REQUIRED
defaultexcludes CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
prefix CDATA #IMPLIED
fullpath CDATA #IMPLIED
src CDATA #IMPLIED
mode CDATA #IMPLIED
username CDATA #IMPLIED
groupname CDATA #IMPLIED
>
<!ELEMENT tstamp (format)*>
<!ELEMENT format EMPTY>
<!ATTLIST format
property CDATA #REQUIRED
pattern CDATA #REQUIRED
>
<!ELEMENT uptodate (srcfiles | mapper)*>
<!ATTLIST uptodate
property CDATA #REQUIRED
value CDATA #IMPLIED
targetfile CDATA #IMPLIED
>
<!ELEMENT srcfiles (include | exclude | patternset)*>
<!ATTLIST srcfiles
id CDATA #IMPLIED
refid CDATA #IMPLIED
dir CDATA #REQUIRED
defaultexcludes CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
>
<!ELEMENT zip (fileset | zipfileset)*>
<!ATTLIST zip
zipfile CDATA #REQUIRED
basedir CDATA #REQUIRED
items CDATA #IMPLIED
ignore CDATA #IMPLIED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
>
<!ELEMENT zipfileset (include | exclude | patternset)*>
<!ATTLIST zipfileset
id CDATA #IMPLIED
refid CDATA #IMPLIED
dir CDATA #REQUIRED
defaultexcludes CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
prefix CDATA #IMPLIED
fullpath CDATA #IMPLIED
src CDATA #IMPLIED
>

+ 0
- 118
src/antidote/org/apache/tools/ant/gui/acs/share.dtd View File

@@ -1,118 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
The Apache Software License, Version 1.1

Copyright (c) 1999, 2000 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/>.
-->
<!-- @author Michel CASABIANCA -->
<!-- @version $Revision$ -->
<!ELEMENT project (target | property | path | taskdef | patternset | fileset)*>
<!ATTLIST project
name CDATA #REQUIRED
default CDATA #REQUIRED
basedir CDATA #REQUIRED
>
<!ELEMENT property EMPTY>
<!ATTLIST property
name CDATA #IMPLIED
value CDATA #IMPLIED
resource CDATA #IMPLIED
file CDATA #IMPLIED
>
<!ELEMENT path (pathelement | path)*>
<!ATTLIST path
id CDATA #IMPLIED
refid CDATA #IMPLIED
>
<!ELEMENT classpath (pathelement | path | fileset)*>
<!ATTLIST classpath
id CDATA #IMPLIED
refid CDATA #IMPLIED
>
<!ELEMENT fileset (include | exclude | patternset)*>
<!ATTLIST fileset
id CDATA #IMPLIED
refid CDATA #IMPLIED
dir CDATA #REQUIRED
defaultexcludes CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
>
<!ELEMENT patternset (include | exclude)*>
<!ATTLIST patternset
id CDATA #REQUIRED
refid CDATA #IMPLIED
includes CDATA #IMPLIED
includesfile CDATA #IMPLIED
excludes CDATA #IMPLIED
excludesfile CDATA #IMPLIED
>
<!ELEMENT exclude EMPTY>
<!ATTLIST exclude
name CDATA #REQUIRED
unless CDATA #IMPLIED
>
<!ELEMENT include EMPTY>
<!ATTLIST include
name CDATA #REQUIRED
>
<!ELEMENT pathelement EMPTY>
<!ATTLIST pathelement
location CDATA #IMPLIED
path CDATA #IMPLIED
>
<!ELEMENT taskdef EMPTY>
<!ATTLIST taskdef
name CDATA #REQUIRED
classname CDATA #REQUIRED
>

+ 0
- 84
src/antidote/org/apache/tools/ant/gui/command/AboutCmd.java View File

@@ -1,84 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.About;
import java.awt.Window;
import java.awt.event.WindowEvent;


/**
* Handler for the About command.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class AboutCmd extends AbstractCommand {

/**
* Standard constructor.
*
*/
public AboutCmd(AppContext context) {
super(context);
}

/**
* Show the about box.
*
*/
public void run() {
new About(getContext());
}
}

+ 0
- 91
src/antidote/org/apache/tools/ant/gui/command/AbstractCommand.java View File

@@ -1,91 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;


/**
* Convenience base class for Command implementations.
*
* @version $Revision$
* @author Simeon Fitch
*/
public abstract class AbstractCommand implements Command {
/** Application context. */
private AppContext _context = null;

/**
* Default ctor.
*
*/
protected AbstractCommand(AppContext context) {
_context = context;
}

/**
* Get the application context that was provided to setContext();
*
* @return Application context.
*/
protected AppContext getContext() {
return _context;
}

/**
* Run the command. From interface Runnable.
*
*/
public abstract void run();

}

+ 0
- 128
src/antidote/org/apache/tools/ant/gui/command/BuildCmd.java View File

@@ -1,128 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.
q *
* 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.ErrorEvent;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import org.apache.tools.ant.gui.acs.ACSTargetElement;
import org.apache.tools.ant.gui.event.ShowConsoleEvent;

/**
* Starts an Ant build.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class BuildCmd extends AbstractCommand {

/** Project to build. */
private ACSProjectElement _project = null;
/** Targets to build. */
private ACSTargetElement[] _targets = null;

/**
* Standard ctor.
*
*/
public BuildCmd(AppContext context) {
super(context);
}

/**
* Set the specific project to build (instead of the default).
*
* @param project Project to build.
*/
public void setProject(ACSProjectElement project) {
_project = project;
}

/**
* Set the specific targets to build (instead of the default).
*
* @param targets Array of targets to build.
*/
public void setTargets(ACSTargetElement[] targets) {
_targets = targets;
}

/**
* Start the Ant build.
*
*/
public void run() {

// Show the build console
getContext().getEventBus().postEvent(
new ShowConsoleEvent(getContext()));

if(_project == null) {
_project = getContext().getSelectionManager().getSelectedProject();
}

if(_targets == null) {
_targets = getContext().getSelectionManager().getSelectedTargets();
}

if(_project != null) {
try {
getContext().getProjectManager().build(_project, _targets);
}
catch(Throwable ex) {
getContext().getEventBus().postEvent(
new ErrorEvent(getContext(), ex));
}
}
}
}

+ 0
- 81
src/antidote/org/apache/tools/ant/gui/command/ChangeLookAndFeelCmd.java View File

@@ -1,81 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.util.ChangeLookAndFeel;

/**
* ChangeLookAndFeel command.
*
* @version $Revision$
* @author Erik Meade
* @author Simeon Fitch
*/
public class ChangeLookAndFeelCmd extends AbstractCommand {
/**
* Standard ctor.
*
*/
public ChangeLookAndFeelCmd(AppContext context) {
super(context);
}

/**
* Successfully do nothing.
*
*/
public void run() {
new ChangeLookAndFeel(getContext());
}
}

+ 0
- 111
src/antidote/org/apache/tools/ant/gui/command/CloseCmd.java View File

@@ -1,111 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.ProjectClosedEvent;
import org.apache.tools.ant.gui.event.ProjectSelectedEvent;
import org.apache.tools.ant.gui.acs.ACSProjectElement;


/**
* Handler for the close command.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class CloseCmd extends AbstractCommand {

/** Project to close. */
private ACSProjectElement _project = null;

/**
* Standard constructor.
*
*/
public CloseCmd(AppContext context) {
super(context);
}

/**
* Set the specific project to close (instead of the default).
*
* @param project Project to close.
*/
public void setProject(ACSProjectElement project) {
_project = project;
}

/**
* Send a close event to the parent window.
*
*/
public void run() {
if(_project == null) {
_project = getContext().getSelectionManager().getSelectedProject();
}

if(_project != null) {
getContext().getProjectManager().close(_project);
getContext().getEventBus().postEvent(
new ProjectClosedEvent(getContext()));

ACSProjectElement[] open =
getContext().getProjectManager().getOpen();
if(open != null && open.length > 0) {
getContext().getEventBus().postEvent(
new ProjectSelectedEvent(getContext(), open[0]));
}
}
}
}

+ 0
- 72
src/antidote/org/apache/tools/ant/gui/command/Command.java View File

@@ -1,72 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;



/**
* Interface for commands.
* Details TBD
*
* @version $Revision$
* @author Simeon Fitch
*/
public interface Command extends Runnable {
/**
* Run the command. From interface Runnable.
*
*/
void run();
}

+ 0
- 106
src/antidote/org/apache/tools/ant/gui/command/DeleteElementCmd.java View File

@@ -1,106 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.command;
import java.util.EventObject;
import javax.swing.JOptionPane;
import org.w3c.dom.Node;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.DeleteElementEvent;
import org.apache.tools.ant.gui.acs.*;

/**
* Command for removing the selected element.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class DeleteElementCmd extends AbstractCommand {
/**
* Standard ctor.
*
* @param context Application context.
*/
public DeleteElementCmd(AppContext context) {
super(context);
}

/**
* Delete the selected element.
*/
public void run() {
// Ask "Are you sure?"
int option = JOptionPane.showConfirmDialog(null, "Are You Sure?",
"Confirm Delete", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
// Find the element to remove
ACSElement[] vals = getContext().getSelectionManager().
getSelectedElements();
if(vals != null && vals.length > 0) {
Node item = vals[vals.length - 1];
// Find the parent and remove the element.
Node parent = item.getParentNode();
parent.removeChild(item);

// Notify the tree the element was removed.
DeleteElementEvent event = new DeleteElementEvent(
getContext(), (ACSElement) parent);
getContext().getEventBus().postEvent(event);
}
}
}
}

+ 0
- 164
src/antidote/org/apache/tools/ant/gui/command/DisplayErrorCmd.java View File

@@ -1,164 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.util.StackFrame;
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
* Command for displaying an arbitrary error message to the user.
*
* @version $Revision$
* @author Simeon H.K. Fitch
*/
public class DisplayErrorCmd extends AbstractCommand {
/** Text description of error. */
private String _message = null;
/** Throwable associated with the error. */
private Throwable _ex = null;

/**
* Standard ctor.
*
* @param context Application context.
*/
public DisplayErrorCmd(AppContext context) {
this(context, null, null);
}

/**
* No Throwable constructor.
*
* @param context Application context.
* @param message Error message.
*/
public DisplayErrorCmd(AppContext context, String message) {
this(context, message, null);
}

/**
* Standard constuctor.
*
* @param context Application context.
* @param message Error message.
* @param ex Throwable assocated with error.
*/
public DisplayErrorCmd(AppContext context, String message, Throwable ex) {
super(context);
_message = message;
_ex = ex;
}

/**
* Set the error message.
*
* @param message Error message.
*/
public void setMessage(String message) {
_message = message;
}

/**
* Set the throwable associated with the error.
*
* @param ex Throwable associated with the error.
*/
public void setThrowable(Throwable ex) {
_ex = ex;
}

/**
* Display the error.
*
*/
public void run() {
String title = getContext().getResources().
getString(getClass(), "title");

JOptionPane.showMessageDialog(
getContext().getParentFrame(), new MsgPanel(),
title, JOptionPane.ERROR_MESSAGE);
}

// Panel for assembling the error information.
private class MsgPanel extends JPanel implements ActionListener {
public MsgPanel() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(new JLabel(_message));
if(_ex != null) {
add(new JLabel(_ex.getMessage()));
JButton b = new JButton(getContext().getResources().
getString(DisplayErrorCmd.class,
"expand"));
b.addActionListener(this);
add(Box.createVerticalStrut(20));
add(b);
}
}
// Called when the user clicks the expand button.
public void actionPerformed(ActionEvent e) {
JComponent source = (JComponent) e.getSource();
JComponent parent = (JComponent) source.getParent();
parent.remove(source);
JTextArea text = new JTextArea();
text.setEditable(false);
text.setText(StackFrame.toString(_ex));
parent.add(new JScrollPane(text));
SwingUtilities.windowForComponent(parent).pack();
}
}
}

+ 0
- 91
src/antidote/org/apache/tools/ant/gui/command/EmacsNotifyCmd.java View File

@@ -1,91 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.ide.EmacsNotifier;

/**
* Toggle on or off the sending of error events to emacs so that
* it can display the source of the error.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class EmacsNotifyCmd extends AbstractCommand {
/** A global notifier can be used as it stores no state. */
private static EmacsNotifier _notifier = new EmacsNotifier();

/**
* Standard ctor.
*
* @param context Application context.
*/
public EmacsNotifyCmd(AppContext context) {
super(context);
}

/**
* Turn on or off the notifying of emacs.
*
*/
public void run() {
if(getContext().getProjectManager().
isRegisteredBuildListener(_notifier)) {
getContext().getProjectManager().removeBuildListener(_notifier);
}
else {
getContext().getProjectManager().addBuildListener(_notifier);
}
}
}

+ 0
- 86
src/antidote/org/apache/tools/ant/gui/command/ExitCmd.java View File

@@ -1,86 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.util.WindowUtils;

import java.awt.Window;
import java.awt.event.WindowEvent;


/**
* Handler for an exit command .
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ExitCmd extends AbstractCommand {
/**
* Standard constructor.
*
* @param context Application context.
*/
public ExitCmd(AppContext context) {
super(context);
}

/**
* Send a close event to the parent window.
*
*/
public void run() {
// Manually send a window close event to the window.
WindowUtils.sendCloseEvent(getContext().getParentFrame());
}
}

+ 0
- 119
src/antidote/org/apache/tools/ant/gui/command/LoadFileCmd.java View File

@@ -1,119 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.ErrorEvent;
import org.apache.tools.ant.gui.event.NewProjectEvent;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import java.io.File;
import java.io.IOException;

/**
* Command for reading in a build file and initializing the data model.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class LoadFileCmd extends AbstractCommand {
/** The file to load. */
private File _file = null;

/**
* Standard ctor.
*
* @param context Application context.
*/
public LoadFileCmd(AppContext context) {
super(context);
}

/**
* Set the file to load.
*
* @param file File to load.
*/
public void setFile(File file) {
_file = file;
}

/**
* Open the file and load it.
*
*/
public void run() {
if(!_file.exists()) {
String message = getContext().getResources().getMessage(
getClass(), "noFile", new Object[] { _file.toString() });

getContext().getEventBus().
postEvent(new ErrorEvent(getContext(), message));
}
else {
try {
ACSProjectElement project =
getContext().getProjectManager().open(_file);
getContext().getEventBus().postEvent(
new NewProjectEvent(getContext(), project));
}
catch(Exception ex) {
String message = getContext().getResources().getMessage(
getClass(), "loadError",
new Object[] { _file.toString() });

getContext().getEventBus().
postEvent(new ErrorEvent(getContext(), message, ex));
}
}
}
}

+ 0
- 159
src/antidote/org/apache/tools/ant/gui/command/NewElementCmd.java View File

@@ -1,159 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.command;
import java.util.EventObject;
import javax.swing.AbstractButton;
import javax.swing.Action;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.NewBaseElementEvent;
import org.apache.tools.ant.gui.event.RefreshDisplayEvent;
import org.apache.tools.ant.gui.acs.*;
import org.apache.tools.ant.gui.util.WindowUtils;
import org.apache.tools.ant.gui.core.AntAction;

/**
* Command for creating a new propertyh.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewElementCmd extends AbstractCommand {
/** New count for this session. Used to create default names,
* numbered as a convenience. */
private static int _count = 1;
private EventObject _event = null;
/**
* Standard ctor.
*
* @param context Application context.
*/
public NewElementCmd(AppContext context, EventObject event) {
super(context);
_event = event;
}

/**
* Creates a new xml element based on the button which
* was pressed. The button text may contain the name
* of the new element or a dialog box is presented which
* asks the user for the element type.
*/
public void run() {

// Find which element is selected.
ACSElement[] vals = getContext().getSelectionManager().
getSelectedElements();
if(vals == null || vals.length == 0) {
return;
}
// Find the text of the button which was pressed
// to determine the type of element to create.
Object source = _event.getSource();
if (!(source instanceof AbstractButton)) {
return;
}
AbstractButton button = (AbstractButton) source;
String name = button.getText();

// Get the AntAction
String cmdStr = button.getActionCommand();
AntAction antAction = getContext().getActions().getAction(cmdStr);
if (antAction == null) {
return;
}

ACSElement e = vals[vals.length - 1];
// Should we prompt the user use the element type?
if (antAction.getName().equals(name)) {
// Display the dialog box.
ACSDtdDefinedElement dtde = (ACSDtdDefinedElement) e;
NewElementDlg dlg = new NewElementDlg(
getContext().getParentFrame(), true);
dlg.setLists(
dtde.getPossibleChildren(ACSDocumentType.CORE_ELEMENT),
dtde.getPossibleChildren(ACSDocumentType.OPTIONAL_ELEMENT) );
dlg.pack();
WindowUtils.centerWindow(dlg);
dlg.setTitle("Select the new element type");
dlg.setVisible(true);
// Get the element type
if (dlg.getCancel()) {
name = "";
} else {
name = dlg.getElementName();
}
}

if (name.length() > 0) {
// Create the new element
ACSElement retval =
ACSFactory.getInstance().createElement(e, name);
getContext().getEventBus().postEvent(
new NewBaseElementEvent(getContext(), retval));
} else {
// Request a refresh so the popup menu is removed
// from the display.
getContext().getEventBus().postEvent(
new RefreshDisplayEvent(getContext()));
}
}
}




+ 0
- 429
src/antidote/org/apache/tools/ant/gui/command/NewElementDlg.java View File

@@ -1,429 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import javax.swing.*;
import java.util.List;
import java.util.ArrayList;
import org.apache.tools.ant.gui.util.Collections;

/**
* A Dialog which asks for a new xml element's type.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class NewElementDlg extends javax.swing.JDialog {
// Dialog's components
private javax.swing.JPanel _southPanel;
private javax.swing.JPanel _buttonPanel;
private javax.swing.JButton _buttonOK;
private javax.swing.JButton _buttonCancel;
private javax.swing.JCheckBox _optionalButton;
private javax.swing.JPanel _selectPanel;
private javax.swing.JPanel _panelData;
private javax.swing.JLabel _label;
private javax.swing.JTextField _elementText;
private javax.swing.JScrollPane _listScrollPane;
private javax.swing.JList _elementList;
/** set to true if cancel is pressed */
private boolean _cancel = true;
/** holds the element type */
private String _elementName;
/** list of core tasks */
private List _coreElements;
/** list of optional tasks */
private List _optionalElements;
/** list of tasks to display */
private List _elements;

/**
* Creates new form NewElementDlg
*/
public NewElementDlg(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
enableButtons();
}
/**
* Fills the listbox with the input list.
*/
public void setLists(String[] coreElements, String[] optionalElements) {

// Are there any items to display?
if ( (coreElements == null || coreElements.length == 0) &&
(optionalElements == null || optionalElements.length == 0 ) ) {

// Hide the list
_listScrollPane.setVisible(false);
_optionalButton.setVisible(false);
} else {
// Are there any core elements?
if (coreElements == null) {
_coreElements = new ArrayList();
// Display the optional elements
_optionalButton.setSelected(true);
_optionalButton.setVisible(false);
} else {
// Create a sorted list of the core elements
List temp = Collections.fill(null, coreElements);
java.util.Collections.sort(temp);
_coreElements = temp;
}
// Are there any optional elements?
if (optionalElements == null) {
_optionalElements = new ArrayList();
// Display the core elements
_optionalButton.setSelected(false);
_optionalButton.setVisible(false);
} else {
// Create a sorted list of the optional elements
List temp = Collections.fill(null, optionalElements);
java.util.Collections.sort(temp);
_optionalElements = temp;
}
// Are the lists the same?
if (_optionalElements.containsAll(_coreElements) &&
_coreElements.containsAll(_optionalElements) ) {
// Hide the button
_optionalButton.setVisible(false);
}
}
enableButtons();
}
/**
* Returns true if cancel was pressed
*/
public boolean getCancel() {
return _cancel;
}
/**
* Returns the entered element type
*/
public String getElementName() {
return _elementName;
}

/**
* Enable or disable buttons
*/
private void enableButtons() {
// Enable the OK button?
if (isInputValid()) {
_buttonOK.setEnabled(true);
} else {
_buttonOK.setEnabled(false);
}

// Display the core or optional elements?
Object oldList = _elements;
if (_optionalButton.isSelected()) {
_elements = _optionalElements;
} else {
_elements = _coreElements;
}

// Did the list change?
if (oldList != _elements) {
_elementList.setListData(_elements.toArray());
}
}
/**
* Returns true if the user input is valid.
*/
private boolean isInputValid() {
return ( isXMLName( _elementText.getText() ) );
}
/**
* Returns true if the value is a legal XML name.
*
* @param value the string being tested
*/
public boolean isXMLName (String value)
{
if (value == null || value.length() == 0)
return false;

char c = value.charAt (0);
if (!isLetter (c) && c != '_' && c != ':')
return false;
for (int i = 1; i < value.length (); i++)
if (!isNameChar (value.charAt (i)))
return false;
return true;
}
/**
* Returns true if the character is allowed to be a non-initial
* character in an XML name.
*/
public boolean isNameChar (char c)
{
if (isLetter (c))
return true;
else if (c == '>')
return false;
else if (c >= '0' && c <= '9')
return true;
else if (c == '.' || c == '-' || c == '_' || c == ':')
return true;
else
return false;
}
/**
* Returns true if the character is a letter.
*/
public boolean isLetter (char c)
{
if (c >= 'a' && c <= 'z')
return true;
if (c >= 'A' && c <= 'Z')
return true;

return false;
}
/**
* This method is called from within the constructor to
* initialize the form.
*/
private void initComponents() {
_southPanel = new javax.swing.JPanel();
_buttonPanel = new javax.swing.JPanel();
_buttonOK = new javax.swing.JButton();
_buttonCancel = new javax.swing.JButton();
_selectPanel = new javax.swing.JPanel();
_panelData = new javax.swing.JPanel();
_label = new javax.swing.JLabel();
_elementText = new javax.swing.JTextField();
_listScrollPane = new javax.swing.JScrollPane();
_elementList = new javax.swing.JList();
_optionalButton = new javax.swing.JCheckBox(
"show optional elements", false);
getContentPane().setLayout(new java.awt.BorderLayout(10, 10));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
closeDialog(evt);
}
}
);
_southPanel.setLayout(new java.awt.FlowLayout(2, 2, 0));
_southPanel.setPreferredSize(new java.awt.Dimension(156, 50));
_southPanel.setMinimumSize(new java.awt.Dimension(154, 50));
_buttonPanel.setLayout(new java.awt.FlowLayout(1, 2, 0));
_buttonPanel.setPreferredSize(new java.awt.Dimension(146, 50));
_buttonPanel.setMinimumSize(new java.awt.Dimension(150, 50));
_buttonPanel.setAlignmentY(0.0F);
_buttonPanel.setAlignmentX(0.0F);
_buttonOK.setText("OK");
_buttonOK.setPreferredSize(new java.awt.Dimension(50, 30));
_buttonOK.setMaximumSize(new java.awt.Dimension(50, 30));
_buttonOK.setMargin(new java.awt.Insets(10, 10, 10, 10));
_buttonOK.setMinimumSize(new java.awt.Dimension(50, 30));
_buttonOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clickOK(evt);
}
}
);
_buttonPanel.add(_buttonOK);
_buttonCancel.setText("Cancel");
_buttonCancel.setPreferredSize(new java.awt.Dimension(70, 30));
_buttonCancel.setMaximumSize(new java.awt.Dimension(60, 30));
_buttonCancel.setMargin(new java.awt.Insets(10, 10, 10, 10));
_buttonCancel.setMinimumSize(new java.awt.Dimension(60, 30));
_buttonCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clickCancel(evt);
}
}
);
_buttonPanel.add(_buttonCancel);
_southPanel.add(_buttonPanel);
getContentPane().add(_southPanel, java.awt.BorderLayout.SOUTH);
_selectPanel.setLayout(new java.awt.BorderLayout(10, 10));
_selectPanel.setBorder(new javax.swing.border.EtchedBorder());
_label.setText("Element Type:");
_label.setAlignmentX(0.5F);
_panelData.add(_label);
_elementText.setPreferredSize(new java.awt.Dimension(110, 25));
_elementText.setMargin(new java.awt.Insets(2, 2, 2, 2));
_elementText.setMinimumSize(new java.awt.Dimension(14, 25));
_elementText.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
_elementTextKeyReleased(evt);
}
}
);
_panelData.add(_elementText);
_selectPanel.add(_panelData, java.awt.BorderLayout.SOUTH);
_elementList.setMaximumSize(new java.awt.Dimension(100, 20));
_elementList.setMinimumSize(new java.awt.Dimension(10, 10));
_elementList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
itemSelected(evt);
}
}
);
_elementList.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
itemMouseClicked(evt);
}
}
);
_listScrollPane.setViewportView(_elementList);
_optionalButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
_optionalButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
enableButtons();
}
}
);

_selectPanel.add(_optionalButton, java.awt.BorderLayout.NORTH);
_selectPanel.add(_listScrollPane, java.awt.BorderLayout.CENTER);
getContentPane().add(_selectPanel, java.awt.BorderLayout.CENTER);
pack();
}

/** Called when a key is released */
private void _elementTextKeyReleased(java.awt.event.KeyEvent evt) {
enableButtons();
}

/** Called when an item is selected from the list */
private void itemSelected(javax.swing.event.ListSelectionEvent evt) {
// Update the text field
_elementText.setText((String) _elementList.getSelectedValue());
enableButtons();
}

/** Called when the list is clicked */
private void itemMouseClicked(java.awt.event.MouseEvent evt) {
int count = evt.getClickCount();
Object obj = _elementList.getSelectedValue();
// Double click on an item?
if (count == 2 && obj != null) {
// Update the text field
_elementText.setText((String) _elementList.getSelectedValue());
// Process like OK was pressed
if (isInputValid()) {
clickOK(null);
}
}
}
/** Called when the Cancel button is pressed */
private void clickCancel(java.awt.event.ActionEvent evt) {
// Make us invisible
setVisible(false);
dispose();
// Set the cancel flag
_cancel = true;
}

/** Called when the OK button is pressed */
private void clickOK(java.awt.event.ActionEvent evt) {
// Make us invisible
setVisible(false);
dispose();

// Return selected item.
_cancel = false;
_elementName = _elementText.getText();
}

/** Closes the dialog */
private void closeDialog(java.awt.event.WindowEvent evt) {
setVisible(false);
dispose();
}

/**
* Test the dialog
*
* @param args the command line arguments
*/
public static void main(String args[]) {
new NewElementDlg(new javax.swing.JFrame(), true).show();
}
}

+ 0
- 92
src/antidote/org/apache/tools/ant/gui/command/NewProjectCmd.java View File

@@ -1,92 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.NewProjectEvent;
import org.apache.tools.ant.gui.acs.ACSProjectElement;

/**
* Command for creating a new project.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewProjectCmd extends AbstractCommand {
/** New project count for this session. Used to create default names,
* numbered as a convenience. */
private static int _count = 1;

/**
* Standard ctor.
*
* @param context Application context.
*/
public NewProjectCmd(AppContext context) {
super(context);
}

/**
* Create a new project and make it active.
*
*/
public void run() {
ACSProjectElement project =
getContext().getProjectManager().createNew();
project.setName(getContext().getResources().
getString(getClass(), "defName") + " " + _count++);
getContext().getEventBus().postEvent(
new NewProjectEvent(getContext(), project));
}
}

+ 0
- 93
src/antidote/org/apache/tools/ant/gui/command/NewPropertyCmd.java View File

@@ -1,93 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.NewPropertyEvent;
import org.apache.tools.ant.gui.acs.*;

/**
* Command for creating a new propertyh.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewPropertyCmd extends AbstractCommand {
/** New count for this session. Used to create default names,
* numbered as a convenience. */
private static int _count = 1;

/**
* Standard ctor.
*
* @param context Application context.
*/
public NewPropertyCmd(AppContext context) {
super(context);
}

/**
* Create a new property and make it active.
*
*/
public void run() {
ACSElement[] vals = getContext().getSelectionManager().
getSelectedElements();
if(vals != null && vals.length > 0) {
ACSPropertyElement retval =
ACSFactory.getInstance().createProperty(vals[vals.length - 1]);
getContext().getEventBus().postEvent(
new NewPropertyEvent(getContext(), retval));
}
}
}

+ 0
- 94
src/antidote/org/apache/tools/ant/gui/command/NewTargetCmd.java View File

@@ -1,94 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.NewTargetEvent;
import org.apache.tools.ant.gui.acs.*;

/**
* Command for creating a new target.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewTargetCmd extends AbstractCommand {
/** New project count for this session. Used to create default names,
* numbered as a convenience. */
private static int _count = 1;

/**
* Standard ctor.
*
* @param context Application context.
*/
public NewTargetCmd(AppContext context) {
super(context);
}

/**
* Create a new target and make it active.
*
*/
public void run() {
ACSProjectElement project = getContext().getSelectionManager().
getSelectedProject();
ACSTargetElement retval =
ACSFactory.getInstance().createTarget(project);
retval.setName(getContext().getResources().
getString(getClass(), "defName") + " " + _count++);
getContext().getEventBus().postEvent(
new NewTargetEvent(getContext(), retval));
}
}

+ 0
- 94
src/antidote/org/apache/tools/ant/gui/command/NewTaskCmd.java View File

@@ -1,94 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.NewTaskEvent;
import org.apache.tools.ant.gui.acs.*;

/**
* Command for creating a new task.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NewTaskCmd extends AbstractCommand {
/** New count for this session. Used to create default names,
* numbered as a convenience. */
private static int _count = 1;

/**
* Standard ctor.
*
* @param context Application context.
*/
public NewTaskCmd(AppContext context) {
super(context);
}

/**
* Create a new task and make it active.
*
*/
public void run() {
ACSTargetElement[] targets = getContext().getSelectionManager().
getSelectedTargets();
if(targets != null && targets.length > 0) {
ACSTaskElement retval =
ACSFactory.getInstance().createTask(targets[0]);
retval.setTaskType("javac");
getContext().getEventBus().postEvent(
new NewTaskEvent(getContext(), retval));
}
}
}

+ 0
- 78
src/antidote/org/apache/tools/ant/gui/command/NoOpCmd.java View File

@@ -1,78 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;

/**
* NoOp command.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class NoOpCmd extends AbstractCommand {
/**
* Standard ctor.
*
* @param context Application context.
*/
public NoOpCmd(AppContext context) {
super(context);
}

/**
* Successfully do nothing.
*
*/
public void run() {}
}

+ 0
- 98
src/antidote/org/apache/tools/ant/gui/command/OpenCmd.java View File

@@ -1,98 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.OpenRequestEvent;
import org.apache.tools.ant.gui.core.XMLFileFilter;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import java.io.File;

/**
* Command to execute the opening of a file. A dialog is presented to the
* user for selecting a build file to open. If a file is selected then an
* OpenRequestEvent is posted.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class OpenCmd extends AbstractCommand {
/**
* Standard ctor.
*
* @param context Application context.
*/
public OpenCmd(AppContext context) {
super(context);
}

/**
* Display a dialog asking the user to select a file to open.
* If one is selected then an event is posted requesting the open
* operation be completed.
*
*/
public void run() {
FileFilter filter = new XMLFileFilter(getContext().getResources());

JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(filter);
int val = chooser.showOpenDialog(getContext().getParentFrame());
if(val == JFileChooser.APPROVE_OPTION) {
File selected = chooser.getSelectedFile();
getContext().getEventBus().postEvent(
new OpenRequestEvent(getContext(), selected));
}
}
}

+ 0
- 181
src/antidote/org/apache/tools/ant/gui/command/SaveAsCmd.java View File

@@ -1,181 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.ErrorEvent;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import java.io.*;
import org.apache.tools.ant.gui.core.XMLFileFilter;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.JOptionPane;
import java.net.URL;
import java.net.MalformedURLException;


/**
* Command for doing a "Save as" type of save.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class SaveAsCmd extends AbstractCommand {
/** File to save to. */
private URL _location = null;
/** Project to save. */
private ACSProjectElement _project = null;

/**
* Standard ctor.
*
* @param context Application context.
*/
public SaveAsCmd(AppContext context) {
super(context);
}

/**
* Set the location to save to
*
* @param location location to save to.
*/
public void setLocation(URL location) {
_location = location;
}

/**
* Set the specific project to save (instead of the default).
*
* @param project Project to save.
*/
public void setProject(ACSProjectElement project) {
_project = project;
}


/**
* Save the project to the current file name.
*
*/
public void run() {
FileFilter filter = new XMLFileFilter(getContext().getResources());

if(_project == null) {
_project = getContext().getSelectionManager().getSelectedProject();
}

if(_project != null) {
// If no location is specified, then this truly is a SaveAs
// command. Provide the user the UI to select the output.
if(_location == null) {
JFileChooser chooser = new JFileChooser();
chooser.addChoosableFileFilter(filter);
int val = chooser.showSaveDialog(
getContext().getParentFrame());
if(val == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
if(file.exists()) {
String title = getContext().getResources().
getString(SaveCmd.class, "title");
String message = getContext().getResources().
getMessage(SaveCmd.class, "overwrite",
new Object[] { file.toString()});
val = JOptionPane.showConfirmDialog(
getContext().getParentFrame(), message, title,
JOptionPane.YES_NO_OPTION);
// If cancelled unset file.
if(val != JOptionPane.YES_OPTION) {
return;
}
}
try {
_location = new URL(
"file", null, file.getAbsolutePath());
}
catch(MalformedURLException ex) {
// Shouldn't happen. Save will just not
// happen.
ex.printStackTrace();
}
}
}
// If a location is now available, do the save operation.
if(_location != null) {
try {
getContext().getProjectManager().saveAs(
_project, _location);
}
catch(IOException ex) {
String message = getContext().getResources().getMessage(
SaveCmd.class, "saveError",
new Object[] { _location.toString() });
getContext().getEventBus().
postEvent(new ErrorEvent(getContext(), message, ex));
}
}
}
else {
// We shouldn't ever get here.
String message = getContext().getResources().getString(
SaveCmd.class, "noProject");
getContext().getEventBus().
postEvent(new ErrorEvent(getContext(), message));
}
}

}

+ 0
- 79
src/antidote/org/apache/tools/ant/gui/command/SaveCmd.java View File

@@ -1,79 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.acs.ACSProjectElement;

/**
* Command to execute the saving of the current build file.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class SaveCmd extends SaveAsCmd {

/**
* Standard ctor.
*
* @param context Application context.
*/
public SaveCmd(AppContext context) {
super(context);
ACSProjectElement project =
getContext().getSelectionManager().getSelectedProject();
if(project != null) {
setLocation(project.getLocation());
}
}
}

+ 0
- 147
src/antidote/org/apache/tools/ant/gui/command/ShowOrHideConsoleCmd.java View File

@@ -1,147 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.command;
import org.apache.tools.ant.gui.core.AppContext;
import org.apache.tools.ant.gui.event.*;
import java.awt.*;
import javax.swing.*;

/**
* Toggles the display of the console window
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class ShowOrHideConsoleCmd extends AbstractCommand {
/** Always show the console */
boolean _alwaysShow = false;

/**
* Standard ctor.
*
* @param context Application context.
*/
public ShowOrHideConsoleCmd(AppContext context) {
super(context);
_alwaysShow = false;
}

/**
* Standard ctor.
*
* @param context Application context.
*/
public ShowOrHideConsoleCmd(AppContext context, boolean alwaysShow) {
super(context);
_alwaysShow = alwaysShow;
}


/**
* If the console pane is visible, hide it.
* If the console pane is not visible, show it.
*/
public void run() {
JComponent component = (JComponent) findComponent("Console");
JSplitPane pane = (JSplitPane) component.getParent();
if (_alwaysShow) {
if (component.getHeight() == 0) {
pane.setDividerLocation(pane.getLastDividerLocation());
}
} else {
if (component.getHeight() == 0) {
pane.setDividerLocation(pane.getLastDividerLocation());
} else {
pane.setDividerLocation(1.0);
}
}
}

/**
* Starting from the top Frame, find the
* first child window with the input name.
*
* @param name The name of the <code>Component</code>
*/
private Component findComponent(String name) {
JFrame frame = (JFrame) getContext().getParentFrame();
JRootPane root = frame.getRootPane();
return findChild(root.getContentPane(), name);
}

/**
* Search the <code>Container</code> for a <code>Component</code>
* with the input name. The search is recursive.
*
* @param container The <code>Container</code> to search
* @param name The name of the <code>Component</code>
*/
private Component findChild(Container container, String name) {
Component[] components = container.getComponents();
for (int i = 0; i < components.length; i++) {
Component component = components[i];
if ( name.equals(component.getName()) ) {
return component;
}
if (component instanceof java.awt.Container) {
Component test = findChild(
(java.awt.Container) component, name);
if (test != null) {
return test;
}
}
}
return null;
}
}

+ 0
- 424
src/antidote/org/apache/tools/ant/gui/core/ActionManager.java View File

@@ -1,424 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.gui.command.Command;
import org.apache.tools.ant.gui.util.CheckableButtonModel;
import javax.swing.*;
import javax.accessibility.*;
import java.util.*;
import java.beans.*;
import java.lang.reflect.Constructor;

/**
* Manager of antidote actions. Receives its configuration from the action
* ResourceBundle.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ActionManager {
/** Parameters for the Command constructor. */
private static final Class[] COMMAND_CTOR_PARAMS = { AppContext.class };
private static final Class[] COMMAND_CTOR_PARAMS_WITH_EVENT =
{ AppContext.class, EventObject.class };

/** Externalized resources. */
private ResourceManager _resources = null;

/** Array of action identifiers. */
private String[] _actionIDs = null;

/** Look table of all defined actions. */
private Map _actions = new HashMap();

/** Event bus. */
private EventBus _bus = null;
/** Class for storing the event type to action type
* mapping for setting enabled state. */
private EventToActionMapper _mapper = null;


/**
* Standard ctor.
*
* @param bus Event bus to post events to.
* @param resources Location of resources.
*/
public ActionManager(EventBus bus, ResourceManager resources) {
_bus = bus;
_resources = resources;
bus.addMember(EventBus.RESPONDING, new Enabler());

_mapper = new EventToActionMapper();

// Configure the set of actions.
String[] names = _resources.getStringArray("actions");
_actionIDs = new String[names.length];
for(int i = 0; i < _actionIDs.length; i++) {
_actionIDs[i] = names[i];
AntAction action = new AntAction(_resources, _bus, _actionIDs[i]);
_actions.put(_actionIDs[i], action);

// For each action we need to add the reverse event trigger
// lookup.
_mapper.addAction(action);
}
}

/**
* Create a menubar for the application based on the configuration file.
*
* @return Menubar.
*/
public JMenuBar createMenuBar() {
JMenuBar retval = new JMenuBar();
Map menus = new HashMap();

String toTok = _resources.getString("menus");
StringTokenizer tok = new StringTokenizer(toTok, ", ");
while(tok.hasMoreTokens()) {
String name = tok.nextToken();
JMenu menu = new JMenu(name);

// XXX should be in config file
menu.setMnemonic(name.charAt(0));

// XXX need to i18n here...
if(name.equalsIgnoreCase("help")) {
try {
retval.setHelpMenu(menu);
}
catch(Error err) {
// Catch the "not implemented" error in
// some (all?) Swing implementations
retval.add(menu);
}
}
else {
retval.add(menu);
}
menus.put(name, menu);
}

for(int i = 0; i < _actionIDs.length; i++) {
AntAction action = (AntAction) _actions.get(_actionIDs[i]);
String parent = action.getParentMenuName();
if(parent != null) {
JMenu menu = (JMenu) menus.get(parent);
// A well configured file shouldn't cause this,
// but be safe anyway.
if(menu == null) {
menu = new JMenu(parent);
retval.add(menu);
menus.put(parent, menu);
}

// See if we should add a separator.
if(action.isPreceededBySeparator() &&
menu.getMenuComponentCount() > 0) {
menu.addSeparator();
}

if(!action.isToggle()) {
JMenuItem item = menu.add(action);
item.setAccelerator(action.getAccelerator());
addNiceStuff(item, action);
}
else {
JCheckBoxMenuItem b =
new JCheckBoxMenuItem(action.getName());
b.setActionCommand(action.getID());
b.addActionListener(action);

action.addPropertyChangeListener(
new PropertyWatcher(b));

// XXX eck. This is a 1.3 feature. Fix ME!
// Need to provide binding between action and widget.
// b.setAction(action);
addNiceStuff(b, action);
menu.add(b);
}

}
}

return retval;
}

/**
* Create a tool bar based on the current configuration.
*
* @return Toolbar ready for action.
*/
public JToolBar createToolBar() {
JToolBar retval = new JToolBar();

for(int i = 0; i < _actionIDs.length; i++) {
AntAction action = (AntAction) _actions.get(_actionIDs[i]);
// If the action is hidden do not display it.
if(action.isHidden()) {
continue;
}
// If it has an icon, then we add it to the toolbar.
if(action.getIcon() != null) {
if(action.isPreceededBySeparator()) {
retval.addSeparator();
}

JButton button = retval.add(action);
button.setText(null);

// Watch for CHECKED changes
action.addPropertyChangeListener(
new PropertyWatcher(button));

if(action.isToggle()) {
ButtonModel model = new CheckableButtonModel();
button.setModel(model);
}

addNiceStuff(button, action);
}
}

return retval;
}

/**
* Create a popup menu with the given actionIDs.
* XXX check this for object leak. Does the button
* get added to the action as a listener? There are also some
* changes to this behavior in 1.3.
*
* @param actionIDs List of action IDs for actions
* to appear in popup menu.
* @param defaultID Use this action ID if the item
* from the list is not found.
* @return Popup menu to display.
*/
public JPopupMenu createPopup(String[] actionIDs, String defaultID) {
JPopupMenu retval = new JPopupMenu();

for(int i = 0; i < actionIDs.length; i++) {
AntAction action = (AntAction) _actions.get(actionIDs[i]);
// If the ID is not found, use the default.
if (action == null && defaultID != null) {
action = (AntAction) _actions.get(defaultID);
AbstractButton button = retval.add(action);
// Set the button text to the action ID.
button.setText(actionIDs[i]);
addNiceStuff(button, action);
} else {
if(action.isPopupPreceededBySeparator() &&
retval.getComponentCount() > 0) {
retval.addSeparator();
}
AbstractButton button = retval.add(action);
addNiceStuff(button, action);
}
}

return retval;
}

/**
* Get the command assocaited with the Action with the given id.
*
* @param actionID Id of action to get command for.
* @return Command associated with action, or null if none available.
*/
public Command getActionCommand(String actionID,
AppContext context,
EventObject event) {
Command retval = null;
AntAction action = (AntAction) _actions.get(actionID);
if(action != null) {
Class clazz = action.getCommandClass();
if(clazz != null) {
try {
Constructor ctor =
clazz.getConstructor(COMMAND_CTOR_PARAMS);
retval = (Command) ctor.newInstance(
new Object[] { context });
}
catch(Exception ex) {
try {
Constructor ctor = clazz.getConstructor(
COMMAND_CTOR_PARAMS_WITH_EVENT);
retval = (Command) ctor.newInstance(
new Object[] { context, event });
}
catch (Exception ex2) {
// XXX log me.
ex.printStackTrace();
}
}
}
}
return retval;
}


/**
* Get the Action with the given id.
*
* @param actionID Id of action to get command for.
* @return AntAction associated with the given id.
*/
public AntAction getAction(String actionID) {
return (AntAction) _actions.get(actionID);
}
/**
* Add tool tip, Mnemonic, etc.
*
* @param button Button to work on.
* @param action Associated action.
*/
private void addNiceStuff(AbstractButton button, AntAction action) {
// Set the action command so that it is consitent
// no matter what language the display is in.
button.setActionCommand(action.getID());

// XXX this should be moved to the config file.
String label = button.getText();
if(label != null) {
button.setMnemonic(label.charAt(0));
}

String tip = action.getShortDescription();
if(tip != null) {
button.setToolTipText(tip);
}
}


/** Class for updating the enabled status of icons based
* on the events seen. */
private class Enabler implements BusMember {
private final Filter _filter = new Filter();

/**
* Get the filter to that is used to determine if an event should
* to to the member.
*
* @return Filter to use.
*/
public BusFilter getBusFilter() {
return _filter;
}

/**
* Receives all events.
*
* @param event Event to post.
* @return true if event should be propogated, false if
* it should be cancelled.
*/
public boolean eventPosted(EventObject event) {
_mapper.applyEvent(event);
return true;
}
}

/** Class providing filtering for project events. */
private static class Filter implements BusFilter {
/**
* Determines if the given event should be accepted.
*
* @param event Event to test.
* @return True if event should be given to BusMember, false otherwise.
*/
public boolean accept(EventObject event) {
return true;
}
}

/** Class which's hooks the action to toggle buttons. */
private static class PropertyWatcher implements PropertyChangeListener {
private AbstractButton _target;

/**
* Standard ctor.
*
* @param target Button to update
*/
public PropertyWatcher(AbstractButton target) {
_target = target;
}

/**
* Change the Selected stated of the button if the CHECKED
* property is set on the <code>action</code>
*
* @param event Event to test.
*/
public void propertyChange(PropertyChangeEvent e) {
String propertyName = e.getPropertyName();
if (propertyName.equals(AccessibleState.CHECKED.toString())) {
Boolean newValue = (Boolean) e.getNewValue();
_target.setSelected(newValue.booleanValue());
}
}
}
}

+ 0
- 369
src/antidote/org/apache/tools/ant/gui/core/AntAction.java View File

@@ -1,369 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import javax.swing.*;
import javax.accessibility.*;
import java.net.URL;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.*;
import java.util.*;

import org.apache.tools.ant.gui.event.EventBus;

/**
* Class representing an action in the Antidote application.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class AntAction extends AbstractAction {
/** Property name for the parent menu item. */
public static final String PARENT_MENU_NAME = "parentMenuName";
public static final String SEPARATOR = "separator";
public static final String POPUP_SEPARATOR = "popupSeparator";
public static final String ACCELERATOR = "accelerator";
public static final String ENABLED = "enabled";
public static final String ENABLE_ON = "enableOn";
public static final String DISABLE_ON = "disableOn";
public static final String TOGGLE = "toggle";
public static final String CHECKED_TRUE_ON = "checkedTrueOn";
public static final String CHECKED_FALSE_ON = "checkedFalseOn";
public static final String COMMAND = "command";
public static final String HIDDEN = "hidden";

/** Property resources. */
private ResourceManager _resources = null;
/** Event bus. */
private EventBus _bus = null;
/** Unique id. */
private String _id = null;

/** Events that the action should cause transition to the
* enabled(true) state. */
private Class[] _enableOn = null;
/** Events that the action should cause transition to the
* enabled(false) state. */
private Class[] _disableOn = null;
/** Events that the action should cause transition to the
* checked state. */
private Class[] _checkedTrueOn = null;
/** Events that the action should cause transition to the
* not checked state. */
private Class[] _checkedFalseOn = null;
/** Flag indicating toggle action. */
private boolean _toggle = false;

/**
* Standard ctor.
*
* @param id Unique id for the action
*/
public AntAction(ResourceManager resources, EventBus bus, String id) {

_resources = resources;
_bus = bus;
_id = id;
putValue(NAME, getString("name"));
putValue(SHORT_DESCRIPTION, getString("shortDescription"));
putValue(PARENT_MENU_NAME, getString(PARENT_MENU_NAME));
putValue(SEPARATOR, getString(SEPARATOR));
putValue(POPUP_SEPARATOR, getString(POPUP_SEPARATOR));
putValue(HIDDEN, getString(HIDDEN));


// Set the default enabled state.
String enabled = getString(ENABLED);
if(enabled != null) {
setEnabled(Boolean.valueOf(enabled).booleanValue());
}

// Set an accellerator if any.
String accelerator = getString(ACCELERATOR);
if(accelerator != null) {
putValue(ACCELERATOR, KeyStroke.getKeyStroke(accelerator));
}

// Check to see if action is a toggle action.
String toggle = getString(TOGGLE);
if(toggle != null) {
_toggle = Boolean.valueOf(toggle).booleanValue();
}

// See if there is a command associated with the action.
String command = getString(COMMAND);
if(command != null) {
try {
Class cmd = Class.forName(command);
putValue(COMMAND, cmd);
}
catch(Exception ex) {
// XXX log me.
ex.printStackTrace();
}
}

// Add an icon if any (which means it'll show up on the tool bar).
String iconName = getString("icon");
if(iconName != null) {
putValue(SMALL_ICON, _resources.loadImageIcon(iconName));
}

_enableOn = resolveClasses(getString(ENABLE_ON));
_disableOn = resolveClasses(getString(DISABLE_ON));
_checkedTrueOn = resolveClasses(getString(CHECKED_TRUE_ON));
_checkedFalseOn = resolveClasses(getString(CHECKED_FALSE_ON));
}

/**
* Convenience method for looking put a resource with the name
* "id.key". Will return null if the resource doesn't exist.
*
* @param key Key name for the action.
* @return String resource for composite key, or null if not found.
*/
private String getString(String key) {
String retval = null;
try {
retval = _resources.getString(_id + "." + key);
}
catch(MissingResourceException ex) {
// Its ok to be missing a resource name...
// Too bad the API throws an exception in this case.
}
return retval;
}


/**
* Parse out the list of classes from the given string and
* resolve them into classes.
*
* @param classNames Comma delimited list of class names.
*/
private Class[] resolveClasses(String classNames) {
if(classNames == null) return null;

StringTokenizer tok = new StringTokenizer(classNames, ", ");
Vector vals = new Vector();
while(tok.hasMoreTokens()) {
String name = tok.nextToken();
try {
vals.addElement(Class.forName(name));
}
catch(ClassNotFoundException ex) {
//XXX log me.
System.err.println(
"Warning: the event class " + name +
" was not found. Please check config file.");
}
}

Class[] retval = new Class[vals.size()];
vals.copyInto(retval);
return retval;
}

/**
* Unique id for the action.
*
* @return Action id.
*/
public String getID() {
return _id;
}

/**
* Get the name of the menu in the menu bar that this action shoul
* appear under.
*
* @return Menu to appear under, or null if not a menu action.
*/
public String getParentMenuName() {
return (String) getValue(PARENT_MENU_NAME);
}

/**
* Get the localized name for the action.
*
* @return Name
*/
public String getName() {
return (String) getValue(NAME);
}

/**
* Get the short description. Used in tool tips.
*
* @return Short description.
*/
public String getShortDescription() {
return (String) getValue(SHORT_DESCRIPTION);
}

/**
* Determine if a separator should appear before the action.
*
* @return True if add separator, false otherwise.
*/
public boolean isPreceededBySeparator() {
return Boolean.valueOf(
String.valueOf(getValue(SEPARATOR))).booleanValue();
}

/**
* Get the icon.
*
* @return Icon for action, or null if none.
*/
public Icon getIcon() {
return (Icon) getValue(SMALL_ICON);
}

/**
* Determine if a separator should appear before the action
* when the popup menu is created.
*
* @return True if add separator, false otherwise.
*/
public boolean isPopupPreceededBySeparator() {
return Boolean.valueOf(
String.valueOf(getValue(POPUP_SEPARATOR))).booleanValue();
}
/**
* Determine if the action is hidden and should not
* be displayed from a button.
*
* @return True the action is hidden.
*/
public boolean isHidden() {
return Boolean.valueOf(
String.valueOf(getValue(HIDDEN))).booleanValue();
}
/**
* Get the accelerator keystroke.
*
* @return Accelerator
*/
public KeyStroke getAccelerator() {
return (KeyStroke) getValue(ACCELERATOR);
}


/**
* Get the event types which should cause this to go to the
* enabled state.
*
*/
public Class[] getEnableOnEvents() {
return _enableOn;
}

/**
* Get the event types which should cause this to go to
* this disabled state.
*
*/
public Class[] getDisableOnEvents() {
return _disableOn;
}

/**
* Get the event types which should cause this to go to the
* checked state.
*/
public Class[] getCheckedTrueOnEvents() {
return _checkedTrueOn;
}

/**
* Get the event types which should cause this to go to the
* not checked state.
*/
public Class[] getCheckedFalseOnEvents() {
return _checkedFalseOn;
}

/**
* True if this is a toggle action, false otherwise.
*
* @return True if this is a toggle action, false otherwise.
*/
public boolean isToggle() {
return _toggle;
}


/**
* Get the assciated command class.
*
* @return Command class.
*/
public Class getCommandClass() {
return (Class) getValue(COMMAND);
}

/**
* Pass the action on to the EventBus.
*
* @param e Event to forward.
*/
public void actionPerformed(ActionEvent e) {
_bus.postEvent(e);
}
}


+ 0
- 122
src/antidote/org/apache/tools/ant/gui/core/AntModule.java View File

@@ -1,122 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import javax.swing.JComponent;
import javax.swing.BorderFactory;

/**
* Abstract base class for a "module", which is really anything that
* can send or receive events, or edit or view the model.
*
* @version $Revision$
* @author Simeon Fitch
*/
public abstract class AntModule extends JComponent {

/** The application context. */
private AppContext _context = null;

/**
* Default constructor.
*/
protected AntModule() {
// Create a dummy border so that the widget will at least have a
// minimal display in a bean environment.
setBorder(BorderFactory.createTitledBorder(getClass().getName()));
}

/**
* This method is called after instantiation when the application context
* is available for constructing the class' display. Think of this in
* a similar manner to Applet.init() or Servlet.init(). It should
* immediately call #setContext() with the given parameter.
*
* @param context Valid application context providing
* all required resources.
*/
public abstract void contextualize(AppContext context);

/**
* Set the application context.
*
* @param context Application context.
*/
protected void setContext(AppContext context) {
_context = context;
setBorder(_context == null ? null :
BorderFactory.createTitledBorder(getName()));
}

/**
* Get the application context.
*
* @return Application context.
*/
public AppContext getContext() {
if(_context == null) {
throw new IllegalStateException(
"The AppContext has not been set.");
}
return _context;
}
/**
* Get the name of the editor.
*
* @return Editor's name.
*/
public String getName() {
return getContext().getResources().getString(getClass(), "name");
}
}

+ 0
- 164
src/antidote/org/apache/tools/ant/gui/core/AppContext.java View File

@@ -1,164 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;
import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import org.apache.tools.ant.gui.acs.ACSTargetElement;
import java.awt.Frame;
import java.util.*;

/**
* A container for the state information for the application. Provides
* a centeralized place to gain access to resources and data.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class AppContext {
/** Event bus. */
private EventBus _eventBus = new EventBus();
/** Application resources. */
private ResourceManager _resources = new ResourceManager();
/** The project manager. */
private ProjectManager _projectManager = new ProjectManager();
/** Thing that keeps track of the current selection state. */
private SelectionManager _selectionManager = new SelectionManager();

/** Application actions. */
private ActionManager _actions =
new ActionManager(_eventBus, new ResourceManager(
"org.apache.tools.ant.gui.resources.action"));

/** Parent frame used in various operations. XXX what do we do
* in the applet context. */
private Frame _parentFrame = null;

/**
* Constructor of apps that don't have a graphical
* component (e.g. web based).
*
*/
public AppContext() {
this(null);
}

/**
* Standard constructor.
*
* @param parent Parent frame. XXX may go away.
*/
public AppContext(Frame parent) {
_parentFrame = parent;
BuildEventForwarder handler = new BuildEventForwarder(this);
_projectManager.addBuildListener(handler);
_eventBus.addMember(EventBus.MONITORING, _selectionManager);
}

/**
* Get the parent frame. XXX may change...
*
* @return Parent frame.
*/
public Frame getParentFrame() {
return _parentFrame;
}

/**
* Get the localized resources.
*
* @return Resources.
*/
public ResourceManager getResources() {
return _resources;
}

/**
* Get the action manager.
*
* @return Action manager.
*/
public ActionManager getActions() {
return _actions;
}

/**
* Get the event bus.
*
* @return EventBus.
*/
public EventBus getEventBus() {
return _eventBus;
}

/**
* Get the project manager.
*
* @return Project manager.
*/
public ProjectManager getProjectManager() {
return _projectManager;
}

/**
* Get the selection manager.
*
* @return Selection manager.
*/
public SelectionManager getSelectionManager() {
return _selectionManager;
}
}



+ 0
- 158
src/antidote/org/apache/tools/ant/gui/core/BuildEventForwarder.java View File

@@ -1,158 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.BuildEvent;

/**
* BuildListener for forwarding events to the EventBus.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class BuildEventForwarder implements BuildListener {

/** Application context. */
private AppContext _context = null;

public BuildEventForwarder(AppContext context) {
_context = context;
}

/**
* Fired before any targets are started.
*/
public void buildStarted(BuildEvent event){
postEvent(event, BuildEventType.BUILD_STARTED);
// We doubly post this event.
_context.getEventBus().postEvent(
new BuildStartedEvent(_context, event));
}

/**
* Fired after the last target has finished. This event
* will still be thrown if an error occured during the build.
*
* @see BuildEvent#getException()
*/
public void buildFinished(BuildEvent event) {
postEvent(event, BuildEventType.BUILD_FINISHED);
// We doubly post this event.
_context.getEventBus().postEvent(
new BuildFinishedEvent(_context, event));
}

/**
* Fired when a target is started.
*
* @see BuildEvent#getTarget()
*/
public void targetStarted(BuildEvent event) {
postEvent(event, BuildEventType.TARGET_STARTED);
}

/**
* Fired when a target has finished. This event will
* still be thrown if an error occured during the build.
*
* @see BuildEvent#getException()
*/
public void targetFinished(BuildEvent event) {
postEvent(event, BuildEventType.TARGET_FINISHED);
}

/**
* Fired when a task is started.
*
* @see BuildEvent#getTask()
*/
public void taskStarted(BuildEvent event) {
postEvent(event, BuildEventType.TASK_STARTED);
}

/**
* Fired when a task has finished. This event will still
* be throw if an error occured during the build.
*
* @see BuildEvent#getException()
*/
public void taskFinished(BuildEvent event) {
postEvent(event, BuildEventType.TASK_FINISHED);
}

/**
* Fired whenever a message is logged.
*
* @see BuildEvent#getMessage()
* @see BuildEvent#getPriority()
*/
public void messageLogged(BuildEvent event) {
postEvent(event, BuildEventType.MESSAGE_LOGGED);
}

/**
* Forward the event.
*
* @param event Event to forward.
* @param type Description of how the event came in.
*/
private void postEvent(BuildEvent event, BuildEventType type) {
_context.getEventBus().postEvent(
new AntBuildEvent(_context, event, type));
}


}

+ 0
- 106
src/antidote/org/apache/tools/ant/gui/core/EventDebugMonitor.java View File

@@ -1,106 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.core;

import org.apache.tools.ant.gui.event.BusMember;
import org.apache.tools.ant.gui.event.BusFilter;
import java.util.EventObject;

/**
* Class that prints all events to stderr.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class EventDebugMonitor implements BusMember {

/** Filter for all events. */
private final Filter _filter = new Filter();

/**
* Defatult ctor.
*
*/
public EventDebugMonitor() {
}

/**
* Get the filter to that is used to determine if an event should
* to to the member.
*
* @return Filter to use.
*/
public BusFilter getBusFilter() {
return _filter;
}
/**
* Called when an event is to be posed to the member.
*
* @param event Event to post.
* @return true if event should be propogated, false if
* it should be cancelled.
*/
public boolean eventPosted(EventObject event) {
System.err.println(event);
return true;
}

/** Filter for all events. */
private static class Filter implements BusFilter {
public boolean accept(EventObject event) {
return true;
}
}
}

+ 0
- 178
src/antidote/org/apache/tools/ant/gui/core/EventResponder.java View File

@@ -1,178 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.gui.command.*;
import java.util.EventObject;
import java.awt.event.ActionEvent;
import javax.swing.*;

/**
* The purpose of this class is to watch for events that require some sort
* of action, like opening a file.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class EventResponder {

/** The application context. */
private AppContext _context = null;

/**
* Standard constructor.
*
* @param context Application context.
*/
public EventResponder(AppContext context) {
_context = context;

// XXX This needs to be changed, along with the event bus,
// to allow the EventResponder to be the last listener
// to receive the event. This will allow the addition
// of event filters to yank an event out of the bus, sort of
// like an interrupt level.
_context.getEventBus().addMember(
EventBus.RESPONDING, new ActionResponder());
_context.getEventBus().addMember(
EventBus.RESPONDING, new AntResponder());
}

/** Handler for bus events. */
private class ActionResponder implements BusMember {
private final ActionFilter _filter = new ActionFilter();

/**
* Get the filter to that is used to determine if an event should
* to to the member.
*
* @return Filter to use.
*/
public BusFilter getBusFilter() {
return _filter;
}
/**
* Called when an event is to be posed to the member.
*
* @param event Event to post.
* @return true if event should be propogated, false if
* it should be cancelled.
*/
public boolean eventPosted(EventObject event) {
String command = ((ActionEvent)event).getActionCommand();
Command cmd =
_context.getActions().getActionCommand(command, _context, event);
if(cmd != null) {
cmd.run();
return false;
}
else {
// XXX log me.
System.err.println("Unhandled action: " + command);
// XXX temporary.
new DisplayErrorCmd(
_context,
"Sorry. \"" + command +
"\" not implemented yet. Care to help out?").run();
return true;
}
}
}

/** Filter for action events. */
private static class ActionFilter implements BusFilter {
public boolean accept(EventObject event) {
return event instanceof ActionEvent;
}
}

/** Handler for bus events. */
private class AntResponder implements BusMember {
private final AntFilter _filter = new AntFilter();

/**
* Get the filter to that is used to determine if an event should
* to to the member.
*
* @return Filter to use.
*/
public BusFilter getBusFilter() {
return _filter;
}
/**
* Called when an event is to be posed to the member.
*
* @param event Event to post.
* @return true if event should be propogated, false if
* it should be cancelled.
*/
public boolean eventPosted(EventObject event) {
AntEvent e = (AntEvent) event;
Command cmd = e.createDefaultCmd();
cmd.run();
return cmd instanceof NoOpCmd;
}
}

/** Filter for ant events. */
private static class AntFilter implements BusFilter {
public boolean accept(EventObject event) {
return event instanceof AntEvent;
}
}

}

+ 0
- 177
src/antidote/org/apache/tools/ant/gui/core/EventToActionMapper.java View File

@@ -1,177 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import java.util.*;
import javax.accessibility.AccessibleState;

/**
* The purpose of this class is to manage the
* mappings between event type and action enabled state.
*
* @version $Revision$
* @author Simeon Fitch
*/
class EventToActionMapper {

/** Lookup for enable(true) events. Key is event type, value is
* a list of actions that are changed by the event. */
private Map _enableOn = new HashMap();
/** Lookup for enable(false) events. Key is event type, value is
* a list of actions that are changed by the event. */
private Map _disableOn = new HashMap();
/** Lookup for CHECK(true) events. Key is event type, value is
* a list of actions that are changed by the event. */
private Map _checkedTrueOn = new HashMap();
/** Lookup for CHECK(false) events. Key is event type, value is
* a list of actions that are changed by the event. */
private Map _checkedFalseOn = new HashMap();


/**
* Defaul ctor.
*
*/
public EventToActionMapper() {
}

/**
* Add an action.
*
* @param action Action to add.
*/
public void addAction(AntAction action) {
putAction(action, action.getEnableOnEvents(), _enableOn);
putAction(action, action.getDisableOnEvents(), _disableOn);
putAction(action, action.getCheckedTrueOnEvents(), _checkedTrueOn);
putAction(action, action.getCheckedFalseOnEvents(), _checkedFalseOn);
}

/**
* For the given action store it in the event type mapping
* for each of the given types.
*
* @param action Action to store.
* @param clazzes Array of types to store it under.
* @param storage The place to store the association.
*/
private void putAction(AntAction action, Class[] clazzes, Map storage) {
if(clazzes == null) return;

for(int i = 0; i < clazzes.length; i++) {
List values = (List) storage.get(clazzes[i]);
if(values == null) {
values = new ArrayList(1);
storage.put(clazzes[i], values);
}

values.add(action);
}
}
/**
* For the given event change the state of any actions that
* have been registered as needing a transition as a result of
* the event.
*
* @param event The event to apply.
*/
public void applyEvent(EventObject event) {
if(event == null) return;

List vals = null;

vals = (List) _enableOn.get(event.getClass());
changeState(vals, true);

vals = (List) _disableOn.get(event.getClass());
changeState(vals, false);

vals = (List) _checkedTrueOn.get(event.getClass());
changeChecked(vals, true);

vals = (List) _checkedFalseOn.get(event.getClass());
changeChecked(vals, false);
}

/**
* Set the enabled state of the given actions.
*
* @param actions List of AntActions to set state for.
* @param state The state to set them to.
*/
private void changeState(List actions, boolean state) {
if(actions == null) return;

for(int i = 0, len = actions.size(); i < len; i++) {
AntAction action = (AntAction) actions.get(i);
action.setEnabled(state);
}
}

/**
* Set the CHECKED property of the given actions.
*
* @param actions List of AntActions to set checked properties for.
* @param checked The checked value to set them to.
*/
private void changeChecked(List actions, boolean checked) {
if(actions == null) return;

for(int i = 0, len = actions.size(); i < len; i++) {
AntAction action = (AntAction) actions.get(i);
action.putValue(AccessibleState.CHECKED.toString(),
new Boolean(checked));
}
}
}

+ 0
- 384
src/antidote/org/apache/tools/ant/gui/core/ProjectManager.java View File

@@ -1,384 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.core;

import org.apache.tools.ant.BuildListener;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.gui.acs.*;
import org.apache.tools.ant.gui.event.BuildEventType;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;

/**
* This class is responsible for managing the currently open projects,
* and the loading of new projects.
*
* XXX need to add property change listeners support.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ProjectManager {

/** Set of open projects. */
private List _projects = new ArrayList(1);
/** List of build listeners to register when build starts. */
private List _buildListeners = new LinkedList();
/** The current thread executing a build. */
private Thread _buildThread = null;

public ProjectManager() {
}

/**
* Get all the open projects.
*
* @return an array of all open projects.
*/
public ACSProjectElement[] getOpen() {
ACSProjectElement[] retval = new ACSProjectElement[_projects.size()];
_projects.toArray(retval);
return retval;
}

/**
* Save the given project.
*
* @param project Project to save.
*/
public void save(ACSProjectElement project) throws IOException {
saveAs(project, null);
}


/**
* Save the given project to the given location.
*
* @param project Project to save.
* @param location Location to save to.
*/
public void saveAs(ACSProjectElement project, URL location)
throws IOException {

if(location == null) {
location = project.getLocation();
}
if(location == null) {
// This shouldn't happen.
throw new IOException("Logic error: Save location mising.");
}

Writer out = null;
try {
// XXX for some reason the URLConnection for protocol type "file"
// doesn't support output (at least that is what the exception
// says. I don't know if I'm doing something wrong or not, but
// since we need to handle files differently (which is fine
// right now since files are all we really support anyway.
if(location.getProtocol().equals("file")) {
out = new FileWriter(location.getFile());
}
else {
// XXX This is here for future support of FTP/HTTP and
// the like. JDBC will have to be dealt with differently.
URLConnection connection = location.openConnection();
connection.setDoInput(false);
connection.setDoOutput(true);
out = new OutputStreamWriter(connection.getOutputStream());
}

// Persist the project.
project.write(out);
out.flush();
project.setLocation(location);
}
finally {
try { out.close(); } catch(Exception ex) {}
}
}

/**
* Open the project persisted at the given location
*
* @param location Location of project file.
* @return Successfully loaded project.
* @throws IOException thrown if there is a problem opening the project.
*/
public ACSProjectElement open(File location) throws IOException {
return open(new URL("file", null, location.getPath()));
}

/**
* Open the project persisted at the given location
*
* @param location Location of project file.
* @return Successfully loaded project.
* @throws IOException thrown if there is a problem opening the project.
*/
public ACSProjectElement open(URL location) throws IOException {
ACSProjectElement retval = null;
retval = ACSFactory.getInstance().load(location);
retval.setLocation(location);
_projects.add(retval);
return retval;
}

/**
* Create a new, unpopulated project.
*
* @return Unpopulated project.
*/
public ACSProjectElement createNew() {
ACSProjectElement retval = ACSFactory.getInstance().createProject();
_projects.add(retval);
return retval;
}

/**
* Remove the given project from the set of active projects.
*
* @param project Project to close.
*/
public void close(ACSProjectElement project) {
_projects.remove(project);
}

/**
* Build the project with the given target (or the default target
* if none is selected. Build occurs on a separate thread, so method
* returns immediately.
*
* @param project Project to build.
* @param targets Targets to build in project.
*/
public void build(ACSProjectElement project, ACSTargetElement[] targets)
throws BuildException {
_buildThread = new Thread(new BuildRunner(project, targets));
_buildThread.start();
}

/**
* Add a build listener.
*
* @param l Listener to add.
*/
public void addBuildListener(BuildListener l) {
synchronized(_buildListeners) {
_buildListeners.add(l);
}
}

/**
* Remove a build listener.
*
* @param l Listener to remove.
*/
public void removeBuildListener(BuildListener l) {
synchronized(_buildListeners) {
_buildListeners.remove(l);
}
}

/**
* Determine if the given BuildListener is registered.
*
* @param l Listener to test for.
* @return True if listener has been added, false if unknown.
*/
public boolean isRegisteredBuildListener(BuildListener l) {
synchronized(_buildListeners) {
return _buildListeners.contains(l);
}
}

/**
* Get the set of current build listeners.
*
* @return Set of current build listeners.
*/
public BuildListener[] getBuildListeners() {
synchronized(_buildListeners) {
BuildListener[] retval = new BuildListener[_buildListeners.size()];
_buildListeners.toArray(retval);
return retval;
}
}

/** Class for executing the build in a separate thread. */
private class BuildRunner implements Runnable {
/** The project to execute build on. */
private ACSProjectElement _project = null;
/** Targets to build. */
private ACSTargetElement[] _targets = null;
/** The Ant core representation of a project. */
private Project _antProject = null;

/**
* Standard ctor.
*
* @param project Project to execute build on.
* @param targets Targets to build.
*/
public BuildRunner(ACSProjectElement project,
ACSTargetElement[] targets) throws BuildException {
_project = project;
_targets = targets;

URL location = _project.getLocation();
if(location == null) {
// XXX this needs to be changed so that if the project is
// not saved, or the persistence mechanism is remote
// then a temporary version is saved first.
throw new BuildException("Project must be saved first");
}

// XXX hopefully we will eventually be able to save
// project files to any type of URL. Right now the Ant core
// only supports Files.
if(!location.getProtocol().equals("file")) {
throw new IllegalArgumentException(
"The Ant core only supports building from locally " +
"stored build files.");
}

File f = new File(location.getFile());

_antProject = new Project();
_antProject.init();
// XXX there is a bunch of stuff in the class
// org.apache.tools.ant.Main that needs to be
// refactored out so that it doesn't have to be
// replicated here.
// XXX need to provide a way to pass in externally
// defined properties. Perhaps define an external
// Antidote properties file. JAVA_HOME may have to be set,
// as well as checking the .ant.properties
_antProject.setUserProperty(
"ant.file" , f.getAbsolutePath());
ProjectHelper.configureProject(_antProject, f);
}

/**
* Convenience method for causeing the project to fire a build event.
* Implemented because the corresponding method in the Project class
* is not publically accessible.
*
* @param event Event to fire.
*/
private void fireBuildEvent(BuildEvent event, BuildEventType type) {
Enumeration enum = _antProject.getBuildListeners().elements();
while(enum.hasMoreElements()) {
BuildListener l = (BuildListener) enum.nextElement();
type.fireEvent(event, l);
}
}

/**
* Run the build.
*
*/
public void run() {
synchronized(_antProject) {
// Add the build listeners
BuildListener[] listeners = getBuildListeners();
for(int i = 0; i < listeners.length; i++) {
_antProject.addBuildListener(listeners[i]);
}
try {
fireBuildEvent(new BuildEvent(
_antProject), BuildEventType.BUILD_STARTED);
Vector targetNames = new Vector();
if(_targets == null || _targets.length == 0) {
targetNames.add(_antProject.getDefaultTarget());
}
else {
for(int i = 0; i < _targets.length; i++) {
targetNames.add(_targets[i].getName());
}
}
// Execute build on selected targets. XXX It would be
// nice if the Project API supported passing in target
// objects rather than String names.
_antProject.executeTargets(targetNames);
}
catch(BuildException ex) {
BuildEvent errorEvent = new BuildEvent(_antProject);
errorEvent.setException(ex);
errorEvent.setMessage(ex.getMessage(), Project.MSG_ERR);
fireBuildEvent(errorEvent, BuildEventType.MESSAGE_LOGGED);
}
finally {
fireBuildEvent(new BuildEvent(
_antProject), BuildEventType.BUILD_FINISHED);
// Remove the build listeners.
for(int i = 0; i < listeners.length; i++) {
_antProject.removeBuildListener(listeners[i]);
}
}
}
}
}
}

+ 0
- 177
src/antidote/org/apache/tools/ant/gui/core/ProjectSelectionMenu.java View File

@@ -1,177 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.core;

import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.beans.PropertyChangeEvent;

/**
* Specialization of JMenu providing selectability of the currently
* open projects.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ProjectSelectionMenu extends JMenu {
/** Application context. */
private AppContext _context = null;
/** Current set of menus. */
private Map _menus = new HashMap();

/**
* Standard ctor.
*
* @param context Application context.
*/
public ProjectSelectionMenu(AppContext context) {
super(context.getResources().getString(
ProjectSelectionMenu.class, "name"), true);
_context = context;
_context.getEventBus().addMember(
EventBus.MONITORING, new ProjectListener());
setMnemonic(getText().charAt(0));
}

/**
* Replace or add the JMenu called "Projects" with this.
*
* @param menuBar Menu bar to insert into.
*/
public void insertInto(JMenuBar menuBar) {
// Iterate of the menu items looking for the one with the same name
// as ours.
int count = menuBar.getComponentCount();
for(int i = 0; i < count; i++) {
JMenuItem menu = (JMenuItem) menuBar.getComponent(i);
if(menu.getText().equals(getText())) {
menuBar.remove(menu);
menuBar.add(this, i);
return;
}
}

// Getting here we didn't find a menu with the same name.
add(this);
}


/** Listener for updating the contents of the menu. */
private class ProjectListener implements BusMember {
/** Event filter. */
private final Filter _filter = new Filter();
/** Action handler. */
private final ActionHandler _handler = new ActionHandler();
/**
* Get the filter to that is used to determine if an event should
* to to the member.
*
* @return Filter to use.
*/
public BusFilter getBusFilter() {
return _filter;
}

/**
* Called when an event is to be posed to the member.
*
* @param event Event to post.
* @return true if event should be propogated, false if
* it should be cancelled.
*/
public boolean eventPosted(EventObject event) {
// Clear out our existing members
removeAll();
_menus.clear();

ACSProjectElement[] projects =
_context.getProjectManager().getOpen();
for(int i = 0; i < projects.length; i++) {
JMenuItem menu = new JMenuItem(projects[i].getName());
menu.addActionListener(_handler);
_menus.put(menu, projects[i]);
add(menu);
}
return true;
}
}

/** Filter for project related events. */
private static class Filter implements BusFilter {
public boolean accept(EventObject event) {
// We want events related to projects.
return event instanceof ProjectSelectedEvent ||
event instanceof ProjectClosedEvent ||
(event instanceof PropertyChangeEvent &&
((PropertyChangeEvent)event).getSource()
instanceof ACSProjectElement);
}
}

/** Handler for selecting the project. */
private class ActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
ACSProjectElement project =
(ACSProjectElement) _menus.get(e.getSource());
_context.getEventBus().postEvent(
new ProjectSelectedEvent(_context, project));
}
}

}

+ 0
- 322
src/antidote/org/apache/tools/ant/gui/core/ResourceManager.java View File

@@ -1,322 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import java.util.*;
import java.text.MessageFormat;
import javax.swing.ImageIcon;
import java.net.URL;
import java.io.File;

/**
* Singleton class for accessing various resources by the application.
* Relies on the resource bundles for resource values.
*
* @version $Revision$
* @author Simeon H.K. Fitch
*/
public class ResourceManager {

/** Path to default resources. */
private static final String RESOURCE_PKG =
"org.apache.tools.ant.gui.resources";
/** Path to default resources. */
private static final String DEF_PROPERTIES =
RESOURCE_PKG + ".antidote";

/** Image path. */
private static final String IMG_PATH =
'/' + RESOURCE_PKG.replace('.', '/');

/** Resources to reference. */
private ResourceBundle _resources = null;

/**
* Default ctor. Uses the default properties file for antidote.
*
*/
public ResourceManager() {
this(DEF_PROPERTIES);
}

/**
* Standard ctor.
*
* @param propName Fully qualified name of the resources to use.
*/
public ResourceManager(String propName) {
_resources = ResourceBundle.getBundle(propName);
}

/**
* Generate a composit key from the given class and key name.
*
* @param clazz Class to find resource for.
* @param name Name of the resource.
* @return Composite key.
*/
private String getKey(Class clazz, String name) {
name = name == null ? "" : name;

return clazz == null ? name : clazz.getName() + "." + name;
}

/**
* Get non-qualified String resource.
*
* @param name Name of the resource.
* @return Value of the resource.
*/
public String getString(String name) {
return getString(null, name);
}

/**
* Get a string resource for the given class.
*
* @param clazz Class to get resource for.
* @param name Name of the string resource.
* @return String resource for the given class.
*/
public String getString(Class clazz, String name) {
if(name == null) {
return null;
}

try {
return _resources.getString(getKey(clazz, name));
}
catch(MissingResourceException ex) {
return null;
}
}

/**
* Get a non-qualified array of string resources for the given class.
*
* @param name Name of the string resource.
* @return Array of string resources for the given class.
*/
public String[] getStringArray(String name) {
return getStringArray(null, name);
}
/**
* Get an array of string resources for the given class.
*
* @param clazz Class to get resource for.
* @param name Name of the string resource.
* @return Array of string resources for the given class.
*/
public String[] getStringArray(Class clazz, String name) {
if(name == null) {
return null;
}

String key = getKey(clazz, name);

String toTok = null;
try {
toTok = _resources.getString(key);
}
catch(MissingResourceException ex) {
// Ignore as we are doing a cascading lookup.
}

if(toTok == null) {
try {
return _resources.getStringArray(key);
}
catch(MissingResourceException ex) {
return null;
}
}
else {
StringTokenizer tok = new StringTokenizer(toTok, ", ");
String[] retval = new String[tok.countTokens()];
for(int i = 0; i < retval.length; i++) {
retval[i] = tok.nextToken();
}
return retval;
}
}

/**
* Get the boolean resource for the given name. Case
* insensitive values of "yes" or "true" evaluate to TRUE.
* All others, including undefined resources evaluate to FALSE.
*
* @param name Name of the boolean resource.
* @return True if defined as true, false otherwise.
*/
public boolean getBoolean(String name) {
return getBoolean(null, name);
}

/**
* Get the boolean resource for the given class. Case
* insensitive values of "yes" or "true" evaluate to TRUE.
* All others, including undefined resources evaluate to FALSE.
*
* @param clazz Class to get resource for.
* @param name Name of the boolean resource.
* @return True if defined as true, false otherwise.
*/
public boolean getBoolean(Class clazz, String name) {
if(name == null) {
return false;
}

String key = getKey(clazz, name);

String value = "";
try {
value = _resources.getString(key);
}
catch(MissingResourceException ex) {
return false;
}

return value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes");
}

/**
* Get the non-qualified Class type resource for the given key.
*
* @param name Name of the resourdce.
* @return Class associated with the key name.
*/
public Class getClass(String name)
throws ClassNotFoundException {
return getClass(null, name);
}

/**
* Get the Class type resource for the given class and key name.
*
* @param clazz Class requesting the resource.
* @param name Name of the resource.
* @return Class associated with the key name.
*/
public Class getClass(Class clazz, String name)
throws ClassNotFoundException {

String key = getKey(clazz, name);
try {
String value = _resources.getString(key);
return Class.forName(value);
}
catch(MissingResourceException ex) {
return null;
}

}


/**
* Generate a localized message using the given set of arguments to
* format the message with.
*
* @param name Name of the message.
* @param arguments Arguments to the message.
* @return The formatted message.
*/
public String getMessage(String name, Object[] arguments) {
return getMessage(null, name, arguments);
}

/**
* Generate a localized message using the given set of arguments to
* format the message with.
*
* @param clazz Class to get message resource for.
* @param name Name of the message.
* @param arguments Arguments to the message.
* @return The formatted message.
*/
public String getMessage(Class clazz, String name, Object[] arguments) {
String format = getString(clazz, name);
return MessageFormat.format(format, arguments);
}

/**
* Get the image as an ImageIcon assigned to the given class with the
* given key.
*
* @param clazz The class to load icon for.
* @param key The key for looking up the icon.
* @return Image as an ImageIcon, or null if not found.
*/
public ImageIcon getImageIcon(Class clazz, String key) {
return loadImageIcon(getString(clazz, key));
}

/**
* Get the image as an ImageIcon with the given file name.
* For example "open.gif". The image is loaded from the resources package.
*
* @param fileName Image file to load.
* @return Image as an ImageIcon, or null if not found.
*/
public ImageIcon loadImageIcon(String fileName) {
if(fileName == null) return null;

ImageIcon icon = null;
URL location = getClass().getResource(IMG_PATH + "/" + fileName);
if(location != null) {
icon = new ImageIcon(location);
}
return icon;
}

}

+ 0
- 147
src/antidote/org/apache/tools/ant/gui/core/SelectionManager.java View File

@@ -1,147 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.core;

import org.apache.tools.ant.gui.event.*;
import org.apache.tools.ant.gui.command.*;
import org.apache.tools.ant.gui.acs.*;
import java.util.EventObject;
import java.awt.event.ActionEvent;
import javax.swing.*;

/**
* State management class for keeping track of what build file elements are
* currently selected. It monitors the EventBus for selection events and
* Records the current state. It should be registered with the EventBus
* at the MONITORING level.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class SelectionManager implements BusMember {
/** The filter for getting the correct events.*/
private final Filter _filter = new Filter();

/** The currently selected project. */
private ACSProjectElement _project = null;
/** The current set of selected targets. */
private ACSTargetElement[] _targets = null;
/** The current set of selected elements. */
private ACSElement[] _elements = null;

public SelectionManager() {
}

/**
* Get the filter to that is used to determine if an event should
* to to the member.
*
* @return Filter to use.
*/
public BusFilter getBusFilter() {
return _filter;
}

/**
* Get the currently selected project.
*
* @return Current project.
*/
public ACSProjectElement getSelectedProject() {
return _project;
}

/**
* Get the selected elements that are targets.
*
*/
public ACSTargetElement[] getSelectedTargets() {
return _targets;
}

/**
* Get the selected elements.
*
*/
public ACSElement[] getSelectedElements() {
return _elements;
}

/**
* Called when an event is to be posed to the member.
*
* @param event Event to post.
* @return true if event should be propogated, false if
* it should be cancelled.
*/
public boolean eventPosted(EventObject event) {
_elements = ((ElementSelectionEvent)event).getSelectedElements();

if(event instanceof TargetSelectionEvent) {
_targets = ((TargetSelectionEvent)event).getSelectedTargets();
}
else if(event instanceof ProjectSelectedEvent) {
_project = ((ProjectSelectedEvent)event).getSelectedProject();
}
return true;
}

/** Filter for ElementSelectionEvent objects. */
private static class Filter implements BusFilter {
public boolean accept(EventObject event) {
return event instanceof ElementSelectionEvent;
}
}
}

+ 0
- 102
src/antidote/org/apache/tools/ant/gui/core/XMLFileFilter.java View File

@@ -1,102 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.core;

import javax.swing.filechooser.FileFilter;
import java.io.File;

/**
* FileFilter for showing only XML files.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class XMLFileFilter extends FileFilter {

/** Text description of filter. */
private String _description = null;


/**
* Standard constructor.
*
* @param resources Access to text resources.
*/
public XMLFileFilter(ResourceManager resources) {
_description = resources.getString(getClass(), "description");
}

/**
* Accept files that end with ".xml".
*
* @param f File to test.
* @return True if accepted, false otherwise.
*/
public boolean accept(File f) {
if(f.isDirectory()) return true;

String name = f.getName().toLowerCase();
return name.endsWith(".xml");
}

/**
* Human readable description of filter.
*
* @return Description.
*/
public String getDescription() {
return _description;
}

}

+ 0
- 28
src/antidote/org/apache/tools/ant/gui/customizer/.wrapper View File

@@ -1,28 +0,0 @@
#!/bin/sh
# Wrapper script for launching Java files without having to type the
# package prefix. To use make a link to this file with the same name
# as the class you want to run.

# Edit this line to represent the package that your class belongs to.
PACKAGE=org.apache.tools.ant.gui.customizer

# Set your application's classpath here.
CLASSPATH=$HOME/build/antidote/classes:$HOME/build/ant/lib/ant.jar

# Compose the fully qualified class name.
START=$PACKAGE.`basename $0`

# Java runtime path.
EXE=/usr/java1.3/bin/java

# Set any runtime options here
OPTS="-classpath $CLASSPATH"

# Turn the JIT off if the variable "DEBUG" is set in the environment.
if [ ! -z $DEBUG ]; then
OPTS="$OPTS -Djava.compiler=NONE"
fi

# Launch the program.
#echo $EXE $OPTS $START $*
exec $EXE $OPTS $START $*

+ 0
- 246
src/antidote/org/apache/tools/ant/gui/customizer/AbstractPropertyEditor.java View File

@@ -1,246 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import java.beans.*;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.Dimension;
import javax.swing.JComponent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusAdapter;

/**
* Abstract base class for the custom type property editors.
*
* @version $Revision$
* @author Simeon Fitch
*/
public abstract class AbstractPropertyEditor implements PropertyEditor {

/** Bean property change property name. */
public static final String BEAN_PROP = "BeanEditorProperty";
/** Event listener support. */
private PropertyChangeSupport _listeners = new PropertyChangeSupport(this);

/**
* Default constructor.
*
*/
protected AbstractPropertyEditor() {
}

/**
* Paint a representation of the value into a given area of screen
* real estate. Note that the propertyEditor is responsible for doing
* its own clipping so that it fits into the given rectangle.
* <p>
* If the PropertyEditor doesn't honor paint requests (see isPaintable)
* this method should be a silent noop.
* <p>
* The given Graphics object will have the default font, color, etc of
* the parent container. The PropertyEditor may change graphics attributes
* such as font and color and doesn't need to restore the old values.
*
* @param gfx Graphics object to paint into.
* @param box Rectangle within graphics object into which we should paint.
*/
public void paintValue(Graphics gfx, Rectangle box) {
Object o = getValue();
String s = o == null ? "<null>" : o.toString();
gfx.drawString(s, box.x, box.y);
}


/**
* Fire a property change event to listeners.
*
* @param oldValue Old value.
* @param newValue New value.
*/
public void firePropertyChange(Object oldValue, Object newValue) {
_listeners.firePropertyChange(BEAN_PROP, oldValue, newValue);
}

/**
* Add a property change listener. XXX This may cause undesired
* side affects with merging property changes with JPanel class.
* Need to test for a while.
*
* @param l Change listener.
*/
public void addPropertyChangeListener(PropertyChangeListener l) {
_listeners.addPropertyChangeListener(l);
}

/**
* Remove a property change listener.
*
* @param l Change listener.
*/
public void removePropertyChangeListener(PropertyChangeListener l) {
_listeners.removePropertyChangeListener(l);
}

/**
* @return True if the class will honor the paintValue method.
*/
public boolean isPaintable() {
return true;
}

/**
* If the property value must be one of a set of known tagged values,
* then this method should return an array of the tags. This can
* be used to represent (for example) enum values. If a PropertyEditor
* supports tags, then it should support the use of setAsText with
* a tag value as a way of setting the value and the use of getAsText
* to identify the current value.
*
* @return The tag values for this property. May be null if this
* property cannot be represented as a tagged value.
*
*/
public String[] getTags() {
return null;
}

/**
* A PropertyEditor may choose to make available a full custom Component
* that edits its property value. It is the responsibility of the
* PropertyEditor to hook itself up to its editor Component itself and
* to report property value changes by firing a PropertyChange event.
* <P>
* The higher-level code that calls getCustomEditor may either embed
* the Component in some larger property sheet, or it may put it in
* its own individual dialog, or ...
*
* @return A java.awt.Component that will allow a human to directly
* edit the current property value. May be null if this is
* not supported.
*/
public Component getCustomEditor() {
return getChild();
}

/**
* @return True if the propertyEditor can provide a custom editor.
*/
public boolean supportsCustomEditor() {
return true;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return "";
}

/**
* Get the child editing component.
*
* @return Child editing component.
*/
protected abstract Component getChild();

/** Helper class for detecting changes and generating change events
* on a focus lost event. */
protected static class FocusHandler extends FocusAdapter {
/** Last value of the editor. */
private Object _value = null;
/** Editor of interest. */
private AbstractPropertyEditor _editor = null;

/**
* Standard constructor.
*
* @param editor Editor of interest.
*/
public FocusHandler(AbstractPropertyEditor editor) {
_editor = editor;
}

/**
* Called when focus is gained.
*
* @param e Focus event.
*/
public void focusGained(FocusEvent e) {
_value = _editor.getValue();
}
/**
* Called when focus is lost. Checks to see if value changed and
* fires a change event if needed.
*
* @param e Focus event.
*/
public void focusLost(FocusEvent e) {
if((_value != null && !_value.equals(_editor.getValue())) ||
(_value == null && _editor.getValue() != null)) {
_editor.firePropertyChange(_value, _editor.getValue());
}
}
}
}

+ 0
- 170
src/antidote/org/apache/tools/ant/gui/customizer/DoublePropertyEditor.java View File

@@ -1,170 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import javax.swing.*;
import java.awt.Component;

/**
* Custom property editor for editing double values.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class DoublePropertyEditor extends AbstractPropertyEditor {
/** Editing widget. */
private JTextField _widget = null;

/**
* Default ctor.
*
*/
public DoublePropertyEditor() {
_widget = new JTextField();
_widget.addFocusListener(new FocusHandler(this));
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _widget;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return "new Double(" + getAsText() + ")";
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
*/
public void setValue(Object value) {
Object old = _widget.getText();
if(!(value instanceof Double)) {
value = new Double(0);
}

_widget.setText(value.toString());
}

/**
* @return The value of the property. Builtin types such as "int" will
* be wrapped as the corresponding object type such as "java.lang.Integer".
*/
public Object getValue() {
Double retval = null;
try {
retval = new Double(_widget.getText());
}
catch(NumberFormatException ex) {
retval = new Double(0);
_widget.setText(retval.toString());
}
return retval;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) {
Object old = _widget.getText();
Double val = null;
try {
val = new Double(text);
}
catch(NumberFormatException ex) {
val = new Double(0);
}
text = val.toString();
_widget.setText(text);
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return _widget.getText();
}
}



+ 0
- 608
src/antidote/org/apache/tools/ant/gui/customizer/DynamicCustomizer.java View File

@@ -1,608 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import org.apache.tools.ant.gui.util.LabelFieldGBC;
import java.lang.reflect.*;
import java.beans.*;
import javax.swing.*;
import java.util.*;
import java.io.File;
import java.awt.*;

/**
* Widget for dynamically constructing a property editor based on the
* an Object's BeanInfo. Essentially a property sheet.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class DynamicCustomizer extends JPanel implements Customizer, Scrollable {
static {
PropertyEditorManager.registerEditor(
String.class, StringPropertyEditor.class);
PropertyEditorManager.registerEditor(
String[].class, StringArrayPropertyEditor.class);
PropertyEditorManager.registerEditor(
int.class, IntegerPropertyEditor.class);
PropertyEditorManager.registerEditor(
Integer.class, IntegerPropertyEditor.class);
PropertyEditorManager.registerEditor(
double.class, DoublePropertyEditor.class);
PropertyEditorManager.registerEditor(
Double.class, DoublePropertyEditor.class);
PropertyEditorManager.registerEditor(
Properties.class, PropertiesPropertyEditor.class);
PropertyEditorManager.registerEditor(
File.class, FilePropertyEditor.class);
PropertyEditorManager.registerEditor(
Object.class, ObjectPropertyEditor.class);
}

/** Property name that PropertyDescriptors can save in their property
* dictionaries for for specifiying a display sorting order. The value
* sould be of type Integer. */
public static final String SORT_ORDER = "sortOrder";

/** The type that this editor instance can handle. */
private Class _type = null;
/** The value currently being edited. */
private Object _value = null;
/** Mapping from PropertyDescriptor to PropertyEditor. */
private Map _prop2Editor = new HashMap();
/** Mapping from PropertyEditor to field PropertyDescriptor. */
private Map _editor2Prop = new HashMap();
/** Listener for receiving change events from the editors. */
private EditorChangeListener _eListener = new EditorChangeListener();
/** Read-only flag. */
private boolean _readOnly = false;
/** List of property change listeners interested when the bean
* being edited has been changed. */
private java.util.List _changeListeners = new LinkedList();
/** Flag to trun off event propogation. */
private boolean _squelchChangeEvents = false;

/**
* Standard constructor.
*
* @param type Type that you are going to be creating and editor for.
*/
public DynamicCustomizer(Class type) {
this(type, false);
}

/**
* Standard constructor.
*
* @param type Type that you are going to be creating and editor for.
* @param readOnly Set to true to create a read-only customizer.
*/
public DynamicCustomizer(Class type, boolean readOnly) {
super(new GridBagLayout());
_readOnly = readOnly;
_type = type;
LabelFieldGBC gbc = new LabelFieldGBC();
try {
BeanInfo info = Introspector.getBeanInfo(type);
// Set up pretty display stuff.
setBorder(BorderFactory.createTitledBorder(
info.getBeanDescriptor().getDisplayName()));
setToolTipText(info.getBeanDescriptor().getShortDescription());

// Get the properties and sort them.
PropertyDescriptor[] props = info.getPropertyDescriptors();
Arrays.sort(props, new PropertyComparator());
for(int i = 0; i < props.length; i++) {
// Ignore the "class" property, if it is provided.
if(props[i].getName().equals("class")) continue;
// Create a label for the field.
JLabel label = new JLabel(props[i].getDisplayName() + ":");
// Lookup the editor.
PropertyEditor editor = getEditorForProperty(props[i]);

// Add a listener to the editor so we know when to update
// the bean's fields.
editor.addPropertyChangeListener(_eListener);
// XXX What we need to do right here is provide a component
// that makes use of the "paintable" capability of the editor.
Component comp = editor.getCustomEditor();
if(comp == null) {
comp = new JLabel("<No editor available.>");
((JLabel)comp).setBorder(BorderFactory.createEtchedBorder());
}
// See if it is a read-only property. If so, then just
// display it.
if(_readOnly || props[i].getWriteMethod() == null) {
comp.setEnabled(false);
}

// Setup the accellerator key.
label.setLabelFor(comp);
label.setDisplayedMnemonic(label.getText().charAt(0));

// Set the tool tip text, if any.
String tip = props[i].getShortDescription();
if(tip != null) {
label.setToolTipText(tip);
if(comp instanceof JComponent) {
((JComponent)comp).setToolTipText(tip);
}
}

// Add the label and fields.
add(label, gbc.forLabel());
add(comp, gbc.forField());

// Set the mappings between editor and property, etc. for
// quick lookup later.
_prop2Editor.put(props[i], editor);
_editor2Prop.put(editor, props[i]);
}
// Filler...
add(new JLabel(), gbc.forLastLabel());

}
catch(Exception ex) {
ex.printStackTrace();
}
}


/**
* Set the object to be edited.
*
* @param value The object to be edited.
*/
public void setObject(Object value) {
if(!(_type.isInstance(value))) {
throw new IllegalArgumentException(
value.getClass() + " is not of type " + _type);
}
_value = value;
// Disable event generation.
_squelchChangeEvents = true;

// Iterate over each property, doing a lookup on the associated editor
// and setting the editor's value to the value of the property.
Iterator it = _prop2Editor.keySet().iterator();
while(it.hasNext()) {
PropertyDescriptor desc = (PropertyDescriptor) it.next();
PropertyEditor editor = (PropertyEditor) _prop2Editor.get(desc);
Method reader = desc.getReadMethod();
if(reader != null) {
try {
Object val = reader.invoke(_value, null);
editor.setValue(val);
}
catch(IllegalAccessException ex) {
ex.printStackTrace();
}
catch(InvocationTargetException ex) {
ex.getTargetException().printStackTrace();
}
}
}

// Enable event generation.
_squelchChangeEvents = false;

}

/**
* Get the appropriate editor for the given property.
*
* @param prop Property to get editor for.
* @return Editor to use, or null if none found.
*/
private PropertyEditor getEditorForProperty(PropertyDescriptor prop) {
PropertyEditor retval = null;
Class type = prop.getPropertyEditorClass();
if(type != null) {
try {
retval = (PropertyEditor) type.newInstance();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
// Handle case where there is no special editor
// associated with the property. In that case we ask the
// PropertyEditor manager for the editor registered for the
// given property type.
if(retval == null) {
Class t = prop.getPropertyType();
if(t != null) {
retval = PropertyEditorManager.findEditor(t);
}
}

// In the worse case we resort to the generic editor for Object types.
if(retval == null) {
retval = PropertyEditorManager.findEditor(Object.class);
}

return retval;
}

/**
* Add the given listener. Will receive a change event for
* changes to the bean being edited.
*
* @param l Listner to add.
*/
public void addPropertyChangeListener(PropertyChangeListener l) {
_changeListeners.add(l);
}


/**
* Remove the given property change listener.
*
* @param l Listener to remove.
*/
public void removePropertyChangeListener(PropertyChangeListener l) {
_changeListeners.remove(l);
}

/**
* Fire a property change event to each listener.
*
* @param bean Bean being edited.
* @param propName Name of the property.
* @param oldValue Old value.
* @param newValue New value.
*/
protected void firePropertyChange(Object bean, String propName,
Object oldValue, Object newValue) {

PropertyChangeEvent e = new PropertyChangeEvent(
bean, propName, oldValue, newValue);

Iterator it = _changeListeners.iterator();
while(it.hasNext()) {
PropertyChangeListener l = (PropertyChangeListener) it.next();
l.propertyChange(e);
}
}

/**
* Returns the preferred size of the viewport for a view component.
* For example the preferredSize of a JList component is the size
* required to acommodate all of the cells in its list however the
* value of preferredScrollableViewportSize is the size required for
* JList.getVisibleRowCount() rows. A component without any properties
* that would effect the viewport size should just return
* getPreferredSize() here.
*
* @return The preferredSize of a JViewport whose view is this Scrollable.
* @see JViewport#getPreferredSize
*/
public Dimension getPreferredScrollableViewportSize() {
Dimension size = getPreferredSize();
Dimension retval = new Dimension();
retval.width = size.width > 600 ? 600 : size.width;
retval.height = size.height > 400 ? 400 : size.height;
return retval;
}


/**
* Components that display logical rows or columns should compute
* the scroll increment that will completely expose one new row
* or column, depending on the value of orientation. Ideally,
* components should handle a partially exposed row or column by
* returning the distance required to completely expose the item.
* <p>
* Scrolling containers, like JScrollPane, will use this method
* each time the user requests a unit scroll.
*
* @param visibleRect The view area visible within the viewport
* @param orientation Either SwingConstants.VERTICAL or
* SwingConstants.HORIZONTAL.
* @param direction Less than zero to scroll up/left,
* greater than zero for down/right.
* @return The "unit" increment for scrolling in the specified direction
* @see JScrollBar#setUnitIncrement
*/
public int getScrollableUnitIncrement(Rectangle visibleRect,
int orientation, int direction) {
return 1;
}


/**
* Components that display logical rows or columns should compute
* the scroll increment that will completely expose one block
* of rows or columns, depending on the value of orientation.
* <p>
* Scrolling containers, like JScrollPane, will use this method
* each time the user requests a block scroll.
*
* @param visibleRect The view area visible within the viewport
* @param orientation Either SwingConstants.VERTICAL or
* SwingConstants.HORIZONTAL.
* @param direction Less than zero to scroll up/left,
* greater than zero for down/right.
* @return The "block" increment for scrolling in the specified direction.
* @see JScrollBar#setBlockIncrement
*/
public int getScrollableBlockIncrement(Rectangle visibleRect,
int orientation, int direction) {
return orientation == SwingConstants.VERTICAL ?
visibleRect.height / 2 : visibleRect.width / 2;
}

/**
* Return true if a viewport should always force the width of this
* Scrollable to match the width of the viewport. For example a noraml
* text view that supported line wrapping would return true here, since it
* would be undesirable for wrapped lines to disappear beyond the right
* edge of the viewport. Note that returning true for a Scrollable
* whose ancestor is a JScrollPane effectively disables horizontal
* scrolling.
* <p>
* Scrolling containers, like JViewport, will use this method each
* time they are validated.
*
* @return True if a viewport should force the Scrollables
* width to match its own.
*/
public boolean getScrollableTracksViewportWidth() {
return true;
}

/**
* Return true if a viewport should always force the height of this
* Scrollable to match the height of the viewport. For example a
* columnar text view that flowed text in left to right columns
* could effectively disable vertical scrolling by returning
* true here.
* <p>
* Scrolling containers, like JViewport, will use this method each
* time they are validated.
*
* @return True if a viewport should force the Scrollables
* height to match its own.
*/
public boolean getScrollableTracksViewportHeight() {
return false;
}


/** Class for receiving change events from the PropertyEditor objects. */
private class EditorChangeListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent e) {
if(_squelchChangeEvents) return;

PropertyEditor editor = (PropertyEditor) e.getSource();
PropertyDescriptor prop =
(PropertyDescriptor) _editor2Prop.get(editor);
Method writer = prop.getWriteMethod();
if(writer != null) {
try {
Object[] params = { editor.getValue() };
writer.invoke(_value, params);
setObject(_value);
firePropertyChange(
_value, prop.getName(), null, editor.getValue());
}
catch(IllegalAccessException ex) {
ex.printStackTrace();
}
catch(InvocationTargetException ex) {
ex.getTargetException().printStackTrace();
}
}
}
}


/** Comparator for sorting PropertyDescriptor values. */
private static class PropertyComparator implements Comparator {
public int compare(Object o1, Object o2) {
PropertyDescriptor p1 = (PropertyDescriptor)o1;
PropertyDescriptor p2 = (PropertyDescriptor)o2;

Integer i1 = (Integer) p1.getValue(SORT_ORDER);
Integer i2 = (Integer) p2.getValue(SORT_ORDER);
if(i1 == null && i2 == null) {
return p1.getName().compareTo(p2.getName());
}
else if(i1 != null) {
return i1.compareTo(i2);
}
else {
return i2.compareTo(i1) * -1;
}
}
}


/*----------------------------------------------------------------------*/

/** Class for testing this. */
private static class TestClass implements Cloneable {
private String _String = "This string is my name.";
private String[] _StringArray = { "one", "two", "three" };
private int _int = Integer.MIN_VALUE;
private Integer _Integer = new Integer(Integer.MAX_VALUE);
private double _double = Double.MIN_VALUE;
private Double _Double = new Double(Double.MAX_VALUE);
private Properties _Properties = System.getProperties();
private File _File = new File("/");
private Object _Object = new Font("Monospaced", Font.PLAIN, 12);
private JButton _button = new JButton("I'm a button!");

public void setName(String string) {
_String = string;
}
public String getName() {
return _String;
}

public void setStringArray(String[] array) {
_StringArray = array;
}
public String[] getStringArray() {
return _StringArray;
}

public void setInt(int val) {
_int = val;
}
public int getInt() {
return _int;
}

public void setInteger(Integer val) {
_Integer = val;
}
public Integer getInteger() {
return _Integer;
}

public void setDoub(double val) {
_double = val;
}
public double getDoub() {
return _double;
}

public void setDouble(Double val) {
_Double = val;
}
public Double getDouble() {
return _Double;
}

public void setProperties(Properties props) {
_Properties = props;
}
public Properties getProperties() {
return _Properties;
}

public void setFile(File f) {
_File = f;
}
public File getFile() {
return _File;
}
public void setButton(JButton button) {
_button = button;
}

public JButton getButton() {
return _button;
}

public void setObject(Object o) {
_Object = o;
}

public Object getObject() {
return _Object;
}

public Object clone() {
try {
return super.clone();
}
catch(CloneNotSupportedException ex) {
return null;
}
}
}


/**
* Test code.
*
* @param args First arg is the class name to create
*/
public static void main(String[] args) {

try {
Class type = null;
Object instance = null;
if(args.length > 0) {
type = Class.forName(args[0]);
instance = type.newInstance();
}
else {
type = TestClass.class;
instance = new TestClass();
((TestClass)instance).setObject(new TestClass());
}

JFrame f = new JFrame(type.getName());
DynamicCustomizer custom = new DynamicCustomizer(type);
custom.setObject(instance);
f.getContentPane().add(new JScrollPane(custom));
f.pack();
f.setVisible(true);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}

+ 0
- 215
src/antidote/org/apache/tools/ant/gui/customizer/FilePropertyEditor.java View File

@@ -1,215 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.customizer;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.Component;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.border.BevelBorder;
import java.io.File;


/**
* Custom property editor for File types.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class FilePropertyEditor extends AbstractPropertyEditor {
/** Area for typing in the file name. */
private JTextField _widget = null;
/** Container for the editor. */
private JPanel _container = null;
/** File filter to use. */
private FileFilter _filter = null;

/**
* Default ctor.
*
*/
public FilePropertyEditor() {
_container = new JPanel(new BorderLayout());

_widget = new JTextField();

_widget.addFocusListener(new FocusHandler(this));

_container.add(_widget, BorderLayout.CENTER);

JButton b = new JButton("Browse...");
b.addActionListener(new ActionHandler());
_container.add(b, BorderLayout.EAST);
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _container;
}

/**
* File filter to use with chooser.
*
* @param filter File filter.
*/
public void setFileFilter(FileFilter filter) {
_filter = filter;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return "new File(" + getAsText() + ")";
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
*/
public void setValue(Object value) {
if(value == null) {
value = new File("");
}

if(!(value instanceof File)) {
throw new IllegalArgumentException(
value.getClass().getName() + " is not of type File");
}

Object old = _widget.getText();

_widget.setText(((File)value).getPath());
}

/**
* @return The value of the property. Builtin types
* such as "int" will be wrapped as the corresponding
* object type such as "java.lang.Integer". */
public Object getValue() {
File retval = null;
retval = new File(_widget.getText());
return retval;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) throws IllegalArgumentException {
File f = new File(text);
_widget.setText(f.getPath());
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return new File(_widget.getText()).getAbsolutePath();
}

/** Handler for presses of the browse button. */
private class ActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = null;
chooser = new JFileChooser();
chooser.setSelectedFile((File) getValue());


_filter = (_filter == null ?
chooser.getAcceptAllFileFilter() : _filter);
chooser.setFileFilter(_filter);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if(chooser.showDialog(getChild(), "Select") ==
JFileChooser.APPROVE_OPTION) {
Object oldValue = getValue();
Object newValue = chooser.getSelectedFile();

setValue(newValue);
firePropertyChange(oldValue, newValue);
}
}
}

}



+ 0
- 172
src/antidote/org/apache/tools/ant/gui/customizer/IntegerPropertyEditor.java View File

@@ -1,172 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import javax.swing.*;
import java.awt.Component;

/**
* Custom property editor for integer types.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class IntegerPropertyEditor extends AbstractPropertyEditor {
/** Editing widget. */
private JTextField _widget = null;

/**
* Default ctor.
*
*/
public IntegerPropertyEditor() {
_widget = new JTextField();
_widget.addFocusListener(new FocusHandler(this));
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _widget;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return "new Integer(" + getAsText() + ")";
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
*/
public void setValue(Object value) {
Object old = _widget.getText();
if(!(value instanceof Integer)) {
value = new Integer(0);
}

_widget.setText(value.toString());
}

/**
* @return The value of the property. Builtin types such as "int" will
* be wrapped as the corresponding object type such as "java.lang.Integer".
*/
public Object getValue() {
Integer retval = null;
try {
retval = new Integer(_widget.getText());
}
catch(NumberFormatException ex) {
retval = new Integer(0);
_widget.setText(retval.toString());
}
return retval;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) {
Object old = _widget.getText();
Integer val = null;
try {
val = new Integer(text);
}
catch(NumberFormatException ex) {
val = new Integer(0);
}
text = val.toString();
_widget.setText(text);
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return _widget.getText();
}


}



+ 0
- 313
src/antidote/org/apache/tools/ant/gui/customizer/ObjectPropertyEditor.java View File

@@ -1,313 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.tools.ant.gui.customizer;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.lang.reflect.Method;
import javax.swing.border.BevelBorder;

/**
* Custom property editor for generic Object types. Useful for
* complex objects where using the DynamicCustomizer may be useful.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class ObjectPropertyEditor extends AbstractPropertyEditor {
/** Area for typing in the file name. */
private JTextField _widget = null;
/** Container for the editor. */
private JPanel _container = null;
/** The current object value. */
private Object _value = null;
/** The editing button. */
private JButton _button = null;
/** Flag to indicate that cancellation of editing is supported. */
private boolean _supportCancel = true;
/** Original value. Only used if _supportCancel is true. */
private Object _original = null;

/**
* Default ctor.
*
*/
public ObjectPropertyEditor() {
_container = new JPanel(new BorderLayout());
_widget = new JTextField(25);
_widget.setEditable(false);
_widget.addFocusListener(new FocusHandler(this));
_widget.setBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED));

_container.add(_widget, BorderLayout.CENTER);

_button = new JButton("Edit...");
_button.addActionListener(new ActionHandler());
_container.add(_button, BorderLayout.EAST);
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _container;
}


/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return null;
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
* @exception IllegalArgumentException thrown if value can't be cloned.
*/
public void setValue(Object value) {

if(_supportCancel && value != _value) {
try {
_value = makeClone(value);
}
catch(CloneNotSupportedException ex){
// If cloning doesn't work then we can't support a "cancel"
// option on the editing dialog.
_supportCancel = false;
}
_original = value;
}
_value = value;

_button.setEnabled(_value != null);

_widget.setText(getAsString(_value));
}

/**
* Convert the given value into some appropriate string. NB: This method
* can be continually improved to be made more and more smart over time.
*
* @param value Value to convert.
* @return String value to display.
*/
private String getAsString(Object value) {
String retval = null;
if(value == null) {
retval = "<null>";
}

// We try to be smart by querying for various, logical string
// representation of the value.
if(retval == null) {
try {
Method m = value.getClass().getMethod("getName", null);
retval = (String) m.invoke(value, null);
}
catch(Exception ex) {
}
}
if(retval == null) {
try {
Method m = value.getClass().getMethod("getLabel", null);
retval = (String) m.invoke(value, null);
}
catch(Exception ex) {
}
}
if(retval == null) {
try {
Method m = value.getClass().getMethod("getText", null);
retval = (String) m.invoke(value, null);
}
catch(Exception ex) {
}
}

if(retval == null) {
retval = value.toString();
}

if(retval.length() > 256) {
retval = retval.substring(0, 253) + "...";
}

return retval;
}

/**
* Attampt to make a clone of the given value.
*
* @param value Value to clone.
* @return Cloned value, or null if value given was null.
* @exception IllegalArgumentException thrown if value can't be cloned.
*/
private Object makeClone(Object value) throws CloneNotSupportedException {
Object retval = null;
if(value != null) {
try {
Method m = value.getClass().getMethod("clone", null);
retval = m.invoke(value, null);
}
catch(Throwable ex) {
throw new CloneNotSupportedException(
"This editor only supports types that have publically " +
"accessible clone() methods.\n" +
value.getClass().getName() +
" does not have such a method.");
}
}
return retval;
}

/**
* @return The value of the property. Builtin types
* such as "int" will be wrapped as the corresponding
* object type such as "java.lang.Integer". */
public Object getValue() {
return _value;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) throws IllegalArgumentException {
throw new IllegalArgumentException("String conversion not supported.");
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return null;
}

/** Handler for presses of the edit button. */
private class ActionHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(_value == null) return;
Class type = _value.getClass();
DynamicCustomizer c = new DynamicCustomizer(type);
c.setObject(_value);

int returnVal = JOptionPane.OK_OPTION;
if(_supportCancel) {
returnVal = JOptionPane.showConfirmDialog(
getChild(), new JScrollPane(c), "Editing...",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
}
else {
JOptionPane.showMessageDialog(
getChild(), new JScrollPane(c), "Editing...",
JOptionPane.PLAIN_MESSAGE);
returnVal = JOptionPane.OK_OPTION;
}

if(returnVal == JOptionPane.OK_OPTION) {
Object oldValue = _original;
Object newValue = _value;

setValue(newValue);
firePropertyChange(oldValue, newValue);
}
else {
try {
_value = makeClone(_original);
}
catch(CloneNotSupportedException ex) {
// XXX log me. Shouldn't have gotten here as
// the test for cloneability should have already been done.
ex.printStackTrace();
_supportCancel = false;
}
}
}
}

}



+ 0
- 308
src/antidote/org/apache/tools/ant/gui/customizer/PropertiesPropertyEditor.java View File

@@ -1,308 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.util.*;

/**
* Custom property editor for the Properties class.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class PropertiesPropertyEditor extends AbstractPropertyEditor {
/** Recommended size for widgets inside a JScrollPane, as communicated
* through the setPreferredScrollableViewportSize() method. */
protected static final Dimension VIEWPORT_SIZE = new Dimension(200, 50);

/** Container. */
private JPanel _widget = null;
/* The current properties being edited. */
private Properties _properties = null;
/** The table editor for the properties. */
private JTable _table = null;

/**
* Default ctor.
*
*/
public PropertiesPropertyEditor() {
_widget = new JPanel(new BorderLayout());
_widget.addFocusListener(new FocusHandler(this));

_table = new JTable();
_table.setPreferredScrollableViewportSize(VIEWPORT_SIZE);
JScrollPane scroller = new JScrollPane(_table);
_widget.add(BorderLayout.CENTER, scroller);
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _widget;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return "new Properties()";
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
*/
public void setValue(Object value) {
if(value == null) {
value = new Properties();
}

if(!(value instanceof Properties)) {
throw new IllegalArgumentException(
value.getClass().getName() + " is not of type Properties.");
}

Object old = _properties;
_properties = (Properties) ((Properties) value).clone();

PropertiesTableModel model = new PropertiesTableModel();
_table.setModel(model);
_table.clearSelection();
}

/**
* @return The value of the property. Builtin types
* such as "int" will be wrapped as the corresponding
* object type such as "java.lang.Integer".
*/
public Object getValue() {
return _properties;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) throws IllegalArgumentException {
throw new IllegalArgumentException("Cannot be expressed as a String");
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return null;
}

/** Table model view of the Properties object. */
private class PropertiesTableModel extends AbstractTableModel {
private static final int NAME = 0;
private static final int VALUE = 1;

private List _keys = null;

public PropertiesTableModel() {
// We need to store the property keys in an array
// so that the ordering is preserved.
_keys = new ArrayList(_properties.keySet());
Collections.sort(_keys);
}

/**
* Get the number of rows.
*
* @return Number of rows.
*/
public int getRowCount() {
return _properties.size() + 1;
}

/**
* Get the number of columns.
*
* @return 2
*/
public int getColumnCount() {
return 2;
}

/**
* Get the editing and display class of the given column.
*
* @return String.class
*/
public Class getColumnClass(int column) {
return String.class;
}

/**
* Get the header name of the column.
*
* @param column Column index.
* @return Name of the column.
*/
public String getColumnName(int column) {
// XXX fix me.
return column == NAME ? "Name" : "Value";
}

/**
* Determine if the given cell is editable.
*
* @param row Cell row.
* @param column Cell column.
* @return true
*/
public boolean isCellEditable(int row, int column) {
return true;
}

/**
* Get the object at the given table coordinates.
*
* @param row Table row.
* @param column Table column.
* @return Object at location, or null if none.
*/
public Object getValueAt(int row, int column) {
if(row < _properties.size()) {
switch(column) {
case NAME:
return _keys.get(row);
case VALUE:
return _properties.getProperty((String)_keys.get(row));
}
}
return null;
}
/**
* Set the table value at the given location.
*
* @param value Value to set.
* @param row Row.
* @param column Column.
*/
public void setValueAt(Object value, int row, int column) {
String k = null;
String v = null;

String currKey = (String) getValueAt(row, NAME);
switch(column) {
case NAME:
k = String.valueOf(value);
if(row < _keys.size()) {
_keys.set(row, k);
}
else {
_keys.add(k);
}
String currValue = null;
if(currKey != null) {
currValue = _properties.getProperty(currKey);
_properties.remove(currKey);
}
v = currValue == null ? "" : currValue;
break;
case VALUE:
v = String.valueOf(value);
k = currKey;
if(k == null || k.length() == 0) {
k = "key-for-" + v;
}
break;
}

if(k.length() > 0) {
_properties.setProperty(k, v);
}

fireTableRowsUpdated(row, row);
// Fire change in outer class.
firePropertyChange(null, _properties);
}
}
}



+ 0
- 179
src/antidote/org/apache/tools/ant/gui/customizer/StringArrayPropertyEditor.java View File

@@ -1,179 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.Component;
import java.util.StringTokenizer;

/**
* Custom property editor for String arrays.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class StringArrayPropertyEditor extends AbstractPropertyEditor {
private JTextField _widget = null;

/**
* Default ctor.
*
*/
public StringArrayPropertyEditor() {
_widget = new JTextField() ;
_widget.setBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED));
_widget.addFocusListener(new FocusHandler(this));
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _widget;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return getAsText();
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
*/
public void setValue(Object value) {
if(value == null) {
value = new String[0];
}
if(!(value instanceof String[])) {
throw new IllegalArgumentException(
"Value must be of type String[].");
}
String old = _widget.getText();

String[] vals = (String[]) value;
StringBuffer buf = new StringBuffer();

for(int i = 0; i < vals.length; i++) {
buf.append(vals[i]);
if(i < vals.length - 1) {
buf.append(", ");
}
}
_widget.setText(buf.toString());
}

/**
* @return The value of the property. Builtin types such as "int" will
* be wrapped as the corresponding object type such as "java.lang.Integer".
*/
public Object getValue() {
String vals = _widget.getText();
StringTokenizer tok = new StringTokenizer(vals,",");
String[] retval = new String[tok.countTokens()];
for(int i = 0; i < retval.length; i++) {
retval[i] = tok.nextToken().trim();
}

return retval;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) throws IllegalArgumentException {
Object old = _widget.getText();
_widget.setText(text);
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return _widget.getText();
}


}



+ 0
- 165
src/antidote/org/apache/tools/ant/gui/customizer/StringPropertyEditor.java View File

@@ -1,165 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.customizer;

import javax.swing.*;
import java.awt.Component;
import javax.swing.border.BevelBorder;

/**
* Custom property editor for string types.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class StringPropertyEditor extends AbstractPropertyEditor {
private JTextArea _widget = null;

/**
* Default ctor.
*
*/
public StringPropertyEditor() {
_widget = new JTextArea() {
public boolean isManagingFocus() {
return false;
}
};

_widget.setLineWrap(true);
_widget.addFocusListener(new FocusHandler(this));
_widget.setBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED));
}

/**
* Get the child editing component. Uses JComponent so we can have tool
* tips, etc.
*
* @return Child editing component.
*/
protected Component getChild() {
return _widget;
}

/**
* This method is intended for use when generating Java code to set
* the value of the property. It should return a fragment of Java code
* that can be used to initialize a variable with the current property
* value.
* <p>
* Example results are "2", "new Color(127,127,34)", "Color.orange", etc.
*
* @return A fragment of Java code representing an initializer for the
* current value.
*/
public String getJavaInitializationString() {
return getAsText();
}

/**
* Set (or change) the object that is to be edited. Builtin types such
* as "int" must be wrapped as the corresponding object type such as
* "java.lang.Integer".
*
* @param value The new target object to be edited. Note that this
* object should not be modified by the PropertyEditor, rather
* the PropertyEditor should create a new object to hold any
* modified value.
*/
public void setValue(Object value) {
if(value == null) {
value = "";
}

Object old = _widget.getText();
_widget.setText(String.valueOf(value));
}

/**
* @return The value of the property. Builtin types
* such as "int" will be wrapped as the corresponding
* object type such as "java.lang.Integer". */
public Object getValue() {
String retval = _widget.getText();
return retval;
}

/**
* Set the property value by parsing a given String. May raise
* java.lang.IllegalArgumentException if either the String is
* badly formatted or if this kind of property can't be expressed
* as text.
* @param text The string to be parsed.
*/
public void setAsText(String text) throws IllegalArgumentException {
Object old = _widget.getText();
_widget.setText(text);
}

/**
* @return The property value as a human editable string.
* <p> Returns null if the value can't be expressed
* as an editable string.
* <p> If a non-null value is returned, then the PropertyEditor should
* be prepared to parse that string back in setAsText().
*/
public String getAsText() {
return _widget.getText();
}


}



+ 0
- 129
src/antidote/org/apache/tools/ant/gui/event/AntBuildEvent.java View File

@@ -1,129 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 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.tools.ant.gui.event;
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.gui.util.StackFrame;
import org.apache.tools.ant.gui.command.Command;
import org.apache.tools.ant.gui.command.NoOpCmd;
import org.apache.tools.ant.gui.core.AppContext;
import java.util.EventObject;

/**
* Wrapper event for the events generated during an Ant build.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class AntBuildEvent extends AntEvent {

/** The original event we are wrapping. */
private BuildEvent _buildEvent = null;
/** The type of event we are wrapping. */
private BuildEventType _type = null;

/**
* Standard ctor.
*
* @param context application context.
*/
public AntBuildEvent(AppContext context,
BuildEvent buildEvent, BuildEventType type) {
super(context);
_buildEvent = buildEvent;
_type = type;

if(_buildEvent == null || _type == null) {
throw new IllegalArgumentException("Null parameter passed");
}
}

/**
* Get the wrapped build event.
*
* @return Build event.
*/
public BuildEvent getEvent() {
return _buildEvent;
}

/**
* Get the build event type.
*
* @return Event type.
*/
public BuildEventType getType() {
return _type;
}

/**
* Create a string representation of this.
*
* @return String representation.
*/
public String toString() {
StringBuffer buf = new StringBuffer();

if(_buildEvent.getMessage() != null) {
buf.append(_buildEvent.getMessage());
buf.append('\n');
}

if(_buildEvent.getException() != null) {
buf.append(StackFrame.toString(_buildEvent.getException()));
}

return buf.toString();
}

}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save