git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268948 13f79535-47bb-0310-9956-ffa450edef68master
@@ -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. | |||||
@@ -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/> |
@@ -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. | |||||
@@ -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 $@ | |||||
@@ -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= | |||||
@@ -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 © 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> | |||||
@@ -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 © 2000 Apache Software Foundation. All | |||||
rights Reserved.</P> | |||||
</BODY> | |||||
</HTML> |
@@ -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) |
@@ -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 <javac> 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 <javac> and | |||||
<javadoc>.</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 <ant> 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 © 2000 Apache Software Foundation. All | |||||
rights Reserved.</P> | |||||
</BODY> | |||||
</HTML> |
@@ -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 © 2000 Apache Software Foundation. All | |||||
rights Reserved.</P> | |||||
</BODY> | |||||
</HTML> |
@@ -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 © 2000 Apache Software Foundation. All | |||||
rights Reserved.</P> | |||||
</BODY> | |||||
</HTML> |
@@ -1,4 +0,0 @@ | |||||
Manifest-Version: 1.0 | |||||
Main-Class: org.apache.tools.ant.gui.Main | |||||
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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..."); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
} |
@@ -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")); | |||||
} | |||||
} |
@@ -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() { | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} | |||||
@@ -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); | |||||
} | |||||
} | |||||
} | |||||
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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 { | |||||
} |
@@ -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(); | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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 | |||||
@@ -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> |
@@ -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 | |||||
> |
@@ -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 | |||||
> |
@@ -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 | |||||
> |
@@ -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()); | |||||
} | |||||
} |
@@ -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(); | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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()); | |||||
} | |||||
} |
@@ -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])); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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(); | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} |
@@ -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()); | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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())); | |||||
} | |||||
} | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} |
@@ -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() {} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} |
@@ -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()); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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()); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
@@ -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"); | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} | |||||
@@ -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)); | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} |
@@ -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]); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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)); | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} | |||||
} |
@@ -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; | |||||
} | |||||
} |
@@ -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 $* |
@@ -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()); | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -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(); | |||||
} | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} | |||||
} |
@@ -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); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} | |||||
@@ -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; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
@@ -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); | |||||
} | |||||
} | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} | |||||
@@ -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(); | |||||
} | |||||
} |