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(); | |||
| } | |||
| } | |||