You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by me...@locus.apache.org on 2000/11/10 00:14:12 UTC
cvs commit: jakarta-ant/src/antidote/org/apache/tools/ant/gui AntTreeCellRenderer.java About.java ProjectNavigator.java ProjectProxy.java ProjectTreeModel.java PropertyEditor.java TargetSelectionModel.java
metasim 00/11/09 15:14:12
Modified: src/antidote/org/apache/tools/ant/gui About.java
ProjectNavigator.java ProjectProxy.java
ProjectTreeModel.java PropertyEditor.java
TargetSelectionModel.java
Added: src/antidote/org/apache/tools/ant/gui
AntTreeCellRenderer.java
Log:
Started work on the Ant Construction Set classes (ACS), which will map directly
to DOM elements allowing easier manipulation of the XML and better editing of
Ant projects. NB: The code currently requires the Sun JAXP library (which Ant
needs anyway).
Revision Changes Path
1.2 +13 -2 jakarta-ant/src/antidote/org/apache/tools/ant/gui/About.java
Index: About.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/antidote/org/apache/tools/ant/gui/About.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- About.java 2000/11/03 12:04:23 1.1
+++ About.java 2000/11/09 23:14:10 1.2
@@ -64,7 +64,7 @@
/**
* Dialog displaying information on the application.
*
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
* @author Simeon Fitch
*/
public class About extends JDialog {
@@ -99,9 +99,17 @@
// presented nicely in box.
contributors = props.getProperty("CONTRIBUTORS", "??");
+ StringBuffer buf = new StringBuffer();
+ StringTokenizer tok = new StringTokenizer(contributors, ",");
+ while(tok.hasMoreTokens()) {
+ String name = tok.nextToken();
+ buf.append(name);
+ buf.append("<BR>\n");
+ }
+
String message = context.getResources().getMessage(
getClass(), "message",
- new Object[] { version, date, contributors });
+ new Object[] { version, date, buf.toString() });
String title = context.getResources().getString(
getClass(), "title");
@@ -117,6 +125,9 @@
JPanel p = new JPanel();
p.add(ok);
getContentPane().add(BorderLayout.SOUTH, p);
+
+ getRootPane().setDefaultButton(ok);
+
// Just go ahead and show it...
pack();
1.4 +2 -1 jakarta-ant/src/antidote/org/apache/tools/ant/gui/ProjectNavigator.java
Index: ProjectNavigator.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/antidote/org/apache/tools/ant/gui/ProjectNavigator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProjectNavigator.java 2000/11/07 14:22:29 1.3
+++ ProjectNavigator.java 2000/11/09 23:14:10 1.4
@@ -61,7 +61,7 @@
/**
* AntEditor for displaying the project target in a
*
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
* @author Simeon Fitch
*/
class ProjectNavigator extends AntEditor {
@@ -82,6 +82,7 @@
_tree = new JTree();
_tree.setModel(null);
+ _tree.setCellRenderer(new AntTreeCellRenderer());
JScrollPane scroller = new JScrollPane(_tree);
add(scroller);
1.4 +72 -73 jakarta-ant/src/antidote/org/apache/tools/ant/gui/ProjectProxy.java
Index: ProjectProxy.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/antidote/org/apache/tools/ant/gui/ProjectProxy.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProjectProxy.java 2000/11/07 14:22:30 1.3
+++ ProjectProxy.java 2000/11/09 23:14:10 1.4
@@ -54,6 +54,7 @@
package org.apache.tools.ant.gui;
import org.apache.tools.ant.*;
import org.apache.tools.ant.gui.event.*;
+import org.apache.tools.ant.gui.acs.*;
import java.io.File;
import java.io.IOException;
import javax.swing.tree.TreeModel;
@@ -70,7 +71,7 @@
* (or other external datamodel) occurs. This class also provides various
* views into the data model, such as TreeModel, Documenet, etc.
*
- * @version $Revision: 1.3 $
+ * @version $Revision: 1.4 $
* @author Simeon Fitch
*/
public class ProjectProxy {
@@ -80,7 +81,7 @@
/** The file where the project was last saved. */
private File _file = null;
/** The real Ant Project instance. */
- private Project _project = null;
+ private ACSProjectElement _project = null;
/** The current thread executing a build. */
private Thread _buildThread = null;
/** The selection model for selected targets. */
@@ -102,23 +103,9 @@
*
*/
private void loadProject() throws IOException {
- _project = new Project();
+ _project = ACSFactory.getInstance().load(_file);
_selections = new TargetSelectionModel();
_selections.addTreeSelectionListener(new SelectionForwarder());
- synchronized(_project) {
- _project.init();
-
- // XXX there is a bunch of stuff in the class
- // org.apache.tools.ant.Main that needs to be
- // abstracted 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.
- _project.setUserProperty("ant.file" , _file.getAbsolutePath());
- ProjectHelper.configureProject(_project, _file);
- }
}
/**
@@ -137,9 +124,21 @@
*
*/
public void build() throws BuildException {
- if(_project == null) return;
+ Project project = new Project();
+ project.init();
+ // XXX there is a bunch of stuff in the class
+ // org.apache.tools.ant.Main that needs to be
+ // abstracted 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.
+ project.setUserProperty("ant.file" , _file.getAbsolutePath());
+ ProjectHelper.configureProject(project, _file);
+
- _buildThread = new Thread(new BuildRunner());
+ _buildThread = new Thread(new BuildRunner(project));
_buildThread.start();
}
@@ -180,75 +179,75 @@
* @return Document view on project.
*/
public Document getDocument() {
- if(_project != null) {
- // This is what the call should look like
- //return new ProjectDocument(_project);
-
+ // This is what the call should look like
+ //return new ProjectDocument(_project);
+ if(_file != null) {
return new ProjectDocument(_file);
}
return null;
}
- /**
- * 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) {
- synchronized(_project) {
+ /** Class for executing the build in a separate thread. */
+ private class BuildRunner implements Runnable {
+ private Project _project = null;
+ public BuildRunner(Project project) {
+ _project = project;
+ }
+
+ /**
+ * 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 = _project.getBuildListeners().elements();
while(enum.hasMoreElements()) {
BuildListener l = (BuildListener) enum.nextElement();
type.fireEvent(event, l);
}
}
- }
- /** Class for executing the build in a separate thread. */
- private class BuildRunner implements Runnable {
public void run() {
- synchronized(_project) {
- // Add the build listener for
- // dispatching BuildEvent objects to the
- // EventBus.
- BuildEventForwarder handler =
- new BuildEventForwarder(_context);
- _project.addBuildListener(handler);
- try {
- fireBuildEvent(new BuildEvent(
- _project), BuildEventType.BUILD_STARTED);
-
- // Generate list of targets to execute.
- Target[] targets = _selections.getSelectedTargets();
- Vector targetNames = new Vector();
- if(targets.length == 0) {
- targetNames.add(_project.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.
- _project.executeTargets(targetNames);
- }
- catch(BuildException ex) {
- BuildEvent errorEvent = new BuildEvent(_project);
- errorEvent.setException(ex);
- errorEvent.setMessage(ex.getMessage(), Project.MSG_ERR);
- fireBuildEvent(errorEvent, BuildEventType.MESSAGE_LOGGED);
+ // Add the build listener for
+ // dispatching BuildEvent objects to the
+ // EventBus.
+ BuildEventForwarder handler =
+ new BuildEventForwarder(_context);
+ _project.addBuildListener(handler);
+ try {
+ fireBuildEvent(new BuildEvent(
+ _project), BuildEventType.BUILD_STARTED);
+
+ // Generate list of targets to execute.
+ ACSTargetElement[] targets = _selections.getSelectedTargets();
+ Vector targetNames = new Vector();
+ if(targets.length == 0) {
+ targetNames.add(_project.getDefaultTarget());
}
- finally {
- fireBuildEvent(new BuildEvent(
- _project), BuildEventType.BUILD_FINISHED);
- _project.removeBuildListener(handler);
- _buildThread = null;
+ 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.
+ _project.executeTargets(targetNames);
+ }
+ catch(BuildException ex) {
+ BuildEvent errorEvent = new BuildEvent(_project);
+ errorEvent.setException(ex);
+ errorEvent.setMessage(ex.getMessage(), Project.MSG_ERR);
+ fireBuildEvent(errorEvent, BuildEventType.MESSAGE_LOGGED);
+ }
+ finally {
+ fireBuildEvent(new BuildEvent(
+ _project), BuildEventType.BUILD_FINISHED);
+ _project.removeBuildListener(handler);
+ _buildThread = null;
}
}
}
1.2 +9 -137 jakarta-ant/src/antidote/org/apache/tools/ant/gui/ProjectTreeModel.java
Index: ProjectTreeModel.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/antidote/org/apache/tools/ant/gui/ProjectTreeModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ProjectTreeModel.java 2000/11/03 12:04:24 1.1
+++ ProjectTreeModel.java 2000/11/09 23:14:10 1.2
@@ -54,146 +54,18 @@
package org.apache.tools.ant.gui;
-import javax.swing.tree.TreeModel;
-import javax.swing.tree.TreePath;
-import javax.swing.event.TreeModelListener;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.Target;
-import java.util.*;
+import javax.swing.tree.DefaultTreeModel;
+import org.apache.tools.ant.gui.acs.ACSProjectElement;
/**
- * Provides a tree model view of the Project class.
+ * 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: 1.1 $
- * @author Simeon H.K. Fitch
- */
-public class ProjectTreeModel implements TreeModel {
-
- private Project _project = null;
- private ProjectWrapper _wrapper = null;
-
- // XXX temp doesn't handle dynamic updates.
- /** Defines an ordering for the tasks. */
- private List _targetOrdering = new ArrayList();
-
- public ProjectTreeModel(Project project) {
- _project = project;
- _wrapper = new ProjectWrapper();
- Enumeration enum = _project.getTargets().keys();
- while(enum.hasMoreElements()) {
- _targetOrdering.add(enum.nextElement());
- }
- }
-
- /**
- * 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 _wrapper;
- }
-
-
- /**
- * 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 != _wrapper) return null;
-
- Object name = _targetOrdering.get(index);
- return _project.getTargets().get(name);
+ * @version $Revision: 1.2 $
+ * @author Simeon H.K. Fitch */
+public class ProjectTreeModel extends DefaultTreeModel {
+ public ProjectTreeModel(ACSProjectElement root) {
+ super(root);
}
-
-
- /**
- * 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) {
- return parent == _wrapper ? _project.getTargets().size() : 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) {
- return node != _wrapper;
- }
-
- /**
- * 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) {
- System.out.println(path);
- }
-
- /**
- * Returns the index of child in parent.
- */
- public int getIndexOfChild(Object parent, Object child) {
- return parent == _project ?
- _targetOrdering.indexOf(((Target)child).getName()) : -1;
- }
-
-
- /**
- * Adds a listener for the TreeModelEvent posted after the tree changes.
- *
- * @see #removeTreeModelListener
- * @param l the listener to add
- */
- public void addTreeModelListener(TreeModelListener l) {
-
- }
-
- /**
- * Removes a listener previously added with <B>addTreeModelListener()</B>.
- *
- * @see #addTreeModelListener
- * @param l the listener to remove
- */
- public void removeTreeModelListener(TreeModelListener l) {
-
- }
-
- /**
- * A wrapper around the Project class to provide different
- * toString behavior. XXX this is temporary until a custom
- * cell renderer is created.
- *
- */
- private class ProjectWrapper {
- public String toString() {
- return _project.getName();
- }
- }
-
-
}
1.3 +16 -14 jakarta-ant/src/antidote/org/apache/tools/ant/gui/PropertyEditor.java
Index: PropertyEditor.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/antidote/org/apache/tools/ant/gui/PropertyEditor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PropertyEditor.java 2000/11/07 14:22:32 1.2
+++ PropertyEditor.java 2000/11/09 23:14:10 1.3
@@ -52,7 +52,7 @@
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.gui;
-import org.apache.tools.ant.Target;
+import org.apache.tools.ant.gui.acs.ACSTargetElement;
import org.apache.tools.ant.gui.event.*;
import javax.swing.*;
import java.util.*;
@@ -63,7 +63,7 @@
/**
* Stub for a property editor.
*
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
* @author Simeon H.K. Fitch
*/
class PropertyEditor extends AntEditor {
@@ -86,7 +86,9 @@
_text.setEditable(false);
_text.setOpaque(false);
- add(BorderLayout.CENTER, _text);
+ JScrollPane scroller = new JScrollPane(_text);
+
+ add(BorderLayout.CENTER, scroller);
}
/**
@@ -94,7 +96,7 @@
*
* @param targets Targets to display info for.
*/
- private void displayTargetInfo(Target[] targets) {
+ private void displayTargetInfo(ACSTargetElement[] targets) {
// The text to display.
String text = null;
@@ -130,16 +132,16 @@
* @param target Target to generate params for.
* @return Argument list for the formatted message.
*/
- private Object[] getTargetParams(Target target) {
+ private Object[] getTargetParams(ACSTargetElement target) {
List args = new LinkedList();
args.add(target.getName());
args.add(target.getDescription() == null ?
"" : target.getDescription());
StringBuffer buf = new StringBuffer();
- Enumeration enum = target.getDependencies();
- while(enum.hasMoreElements()) {
- buf.append(enum.nextElement());
- if(enum.hasMoreElements()) {
+ String[] depends = target.getDependencyNames();
+ for(int i = 0; i < depends.length; i++) {
+ buf.append(depends[i]);
+ if(i < depends.length - 1) {
buf.append(", ");
}
}
@@ -155,7 +157,7 @@
* @param target Targets to generate params for.
* @return Argument list for the formatted message.
*/
- private Object[] getTargetParams(Target[] targets) {
+ private Object[] getTargetParams(ACSTargetElement[] targets) {
List args = new LinkedList();
StringBuffer buf = new StringBuffer();
@@ -166,9 +168,9 @@
buf.append(", ");
}
- Enumeration enum = targets[i].getDependencies();
- while(enum.hasMoreElements()) {
- depends.add(enum.nextElement());
+ String[] dependNames = targets[i].getDependencyNames();
+ for(int j = 0; j < dependNames.length; j++) {
+ depends.add(dependNames[j]);
}
}
@@ -209,7 +211,7 @@
*/
public void eventPosted(EventObject event) {
TargetSelectionEvent e = (TargetSelectionEvent) event;
- Target[] targets = e.getSelectedTargets();
+ ACSTargetElement[] targets = e.getSelectedTargets();
displayTargetInfo(targets);
}
1.2 +5 -5 jakarta-ant/src/antidote/org/apache/tools/ant/gui/TargetSelectionModel.java
Index: TargetSelectionModel.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/antidote/org/apache/tools/ant/gui/TargetSelectionModel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TargetSelectionModel.java 2000/11/07 14:22:33 1.1
+++ TargetSelectionModel.java 2000/11/09 23:14:10 1.2
@@ -52,7 +52,7 @@
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.gui;
-import org.apache.tools.ant.Target;
+import org.apache.tools.ant.gui.acs.ACSTargetElement;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreePath;
@@ -61,7 +61,7 @@
/**
* Selection model for the currently selected targets.
*
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
* @author Simeon Fitch
*/
class TargetSelectionModel extends DefaultTreeSelectionModel {
@@ -79,17 +79,17 @@
*
* @return the currently selected targets.
*/
- public Target[] getSelectedTargets() {
+ public ACSTargetElement[] getSelectedTargets() {
TreePath[] path = getSelectionPaths();
List values = new LinkedList();
for(int i = 0; path != null && i < path.length; i++) {
Object val = path[i].getLastPathComponent();
- if(val instanceof Target) {
+ if(val instanceof ACSTargetElement) {
values.add(val);
}
}
- Target[] retval = new Target[values.size()];
+ ACSTargetElement[] retval = new ACSTargetElement[values.size()];
values.toArray(retval);
return retval;
}
1.1 jakarta-ant/src/antidote/org/apache/tools/ant/gui/AntTreeCellRenderer.java
Index: AntTreeCellRenderer.java
===================================================================
/*
* 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", "Tomcat", 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.acs.ACSElement;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.JTree;
import java.awt.Component;
/**
* Cell renderer for displaying the Ant XML file in a JTree.
*
* @version $Revision: 1.1 $
* @author Simeon Fitch
*/
public class AntTreeCellRenderer extends DefaultTreeCellRenderer {
public Component getTreeCellRendererComponent(JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus);
if(value instanceof ACSElement) {
setText(((ACSElement)value).getDisplayName());
}
return this;
}
}