Browse Source

Applied Nick Davis' patch to support generic elements based on an Ant DTD.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268895 13f79535-47bb-0310-9956-ffa450edef68
master
metasim 24 years ago
parent
commit
9996345251
25 changed files with 2196 additions and 44 deletions
  1. +1
    -0
      src/antidote/build.xml
  2. +390
    -0
      src/antidote/org/apache/tools/ant/gui/acs/ACSDocumentType.java
  3. +215
    -0
      src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElement.java
  4. +133
    -0
      src/antidote/org/apache/tools/ant/gui/acs/ACSDtdDefinedElementBeanInfo.java
  5. +18
    -5
      src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java
  6. +75
    -0
      src/antidote/org/apache/tools/ant/gui/acs/ACSInfoProvider.java
  7. +1
    -2
      src/antidote/org/apache/tools/ant/gui/acs/ACSNamedElement.java
  8. +1
    -1
      src/antidote/org/apache/tools/ant/gui/acs/ACSPropertyElement.java
  9. +3
    -1
      src/antidote/org/apache/tools/ant/gui/acs/acs-element.properties
  10. +34
    -0
      src/antidote/org/apache/tools/ant/gui/acs/project-ext.dtd
  11. +282
    -0
      src/antidote/org/apache/tools/ant/gui/acs/project.dtd
  12. +106
    -0
      src/antidote/org/apache/tools/ant/gui/command/DeleteElementCmd.java
  13. +155
    -0
      src/antidote/org/apache/tools/ant/gui/command/NewElementCmd.java
  14. +261
    -0
      src/antidote/org/apache/tools/ant/gui/command/NewElementDlg.java
  15. +49
    -14
      src/antidote/org/apache/tools/ant/gui/core/ActionManager.java
  16. +26
    -0
      src/antidote/org/apache/tools/ant/gui/core/AntAction.java
  17. +1
    -2
      src/antidote/org/apache/tools/ant/gui/core/EventResponder.java
  18. +88
    -0
      src/antidote/org/apache/tools/ant/gui/event/DeleteElementEvent.java
  19. +83
    -0
      src/antidote/org/apache/tools/ant/gui/event/DtdDefinedElementSelectionEvent.java
  20. +8
    -4
      src/antidote/org/apache/tools/ant/gui/event/ElementSelectionEvent.java
  21. +91
    -0
      src/antidote/org/apache/tools/ant/gui/event/NewBaseElementEvent.java
  22. +74
    -0
      src/antidote/org/apache/tools/ant/gui/event/RefreshDisplayEvent.java
  23. +70
    -11
      src/antidote/org/apache/tools/ant/gui/modules/edit/ElementNavigator.java
  24. +23
    -4
      src/antidote/org/apache/tools/ant/gui/resources/action.properties
  25. +8
    -0
      src/antidote/org/apache/tools/ant/gui/resources/antidote.properties

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

@@ -70,6 +70,7 @@
<fileset dir="${src.dir}">
<include name="**/*.properties" />
<include name="**/*.gif" />
<include name="**/*.dtd" />
</fileset>
</copy>



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

@@ -0,0 +1,390 @@
/*
* 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 {
/** True if the DTD has been loaded */
private boolean isInit = false;
/** Hold the DTD elements */
private HashMap elementMap = new HashMap();
/** XML document used to load the DTD */
final static String XMLDOC =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<!DOCTYPE project SYSTEM \"file:/project.dtd\">" +
"<project name=\"sample-project\">" +
"</project>";

/**
* 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);

// Create the default xml file
InputSource xmldoc = new InputSource(
new ByteArrayInputStream(XMLDOC.getBytes()));
// Parse the document
p.parse(xmldoc);
isInit = true;
} catch (Exception e) {
System.out.println(e);
}
}
/**
* Returns the dtd element.
*
* @param name the element name
*/
public DtdElement findElement(String name) {
return (DtdElement) elementMap.get(name);
}
/**
* Class which represents a DTD element.
*/
static class DtdElement {
private String _name;
private String[] _contentModel;
private HashMap _map = new HashMap();
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 HashMap getMap() {
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) {
_name = 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;
}
}

/**
* 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.getMap().put(attrib.getName(), e);
}

/**
* 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 {
final String PROJECT = "project.dtd";
final String PROJECTEXT = "project-ext.dtd";
InputStream result = null;
// Is it the project.dtd?
if (systemId.indexOf(PROJECT) != -1) {
try {
// Look for it as a resource
result = getClass().getResourceAsStream(PROJECT);
} catch (Exception e) {}
}
// Is it the project-ext.dtd?
if (systemId.indexOf(PROJECTEXT) != -1) {
try {
// Look for it as a resource
result = getClass().getResourceAsStream(PROJECTEXT);
} 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);
}
}
}

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

@@ -0,0 +1,215 @@
/*
* 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.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;
/**
* Default ctor.
*
*/
public ACSDtdDefinedElement() {
// Load the DTD
docType.init();
}

/**
* 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);
}
/**
* 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();
ACSDocumentType.DtdElement e =
docType.findElement(name);

if (e != null) {
// Use the content model (all the possible
// sub-elements) to create the menu.
String[] temp = e.getContentModel();
int size = (temp.length > 5) ? 5 : temp.length;
menuString = new String[size+2];
System.arraycopy(temp, 0, menuString, 0, size);
// 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";
}
/**
* Retuns a string array which contains this elements
* possible children. It is created from the DTD's
* content model.
*/
public String[] getPossibleChildren() {
String name = getTagName();
ACSDocumentType.DtdElement e =
docType.findElement(name);
if (e != null) {
return e.getContentModel();
}
return null;
}
}


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

@@ -0,0 +1,133 @@
/*
* 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 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 {
public Customizer() {
super(ACSDtdDefinedElement.class);
}
}
}


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

@@ -60,9 +60,7 @@ import java.net.URL;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import com.sun.xml.parser.Parser;
import com.sun.xml.tree.SimpleElementFactory;
import com.sun.xml.tree.XmlDocument;
import com.sun.xml.tree.XmlDocumentBuilder;
import com.sun.xml.tree.*;
import java.util.Properties;
import java.util.Enumeration;
import com.sun.xml.parser.Resolver;
@@ -92,7 +90,7 @@ public class ACSFactory {
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.ACSTaskElement");
name, "org.apache.tools.ant.gui.acs.ACSDtdDefinedElement");
}

// Then we add/override the local definitions.
@@ -164,7 +162,6 @@ public class ACSFactory {
sax.parse(location.openStream(), null);

doc = builder.getDocument();

}
catch(ParserConfigurationException ex) {
ex.printStackTrace();
@@ -235,6 +232,22 @@ public class ACSFactory {
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);
node.appendChild(retval);
return retval;
}
/**
* Insert a new line and indentation at the end of the given
* node in preparation for a new element being added.


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

@@ -0,0 +1,75 @@
/*
* 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
- 2
src/antidote/org/apache/tools/ant/gui/acs/ACSNamedElement.java View File

@@ -62,7 +62,7 @@ import java.util.StringTokenizer;
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSNamedElement extends ACSTreeNodeElement {
public class ACSNamedElement extends ACSDtdDefinedElement {
/** The 'name' property name. */
public static final String NAME = "name";
/** The discription property name. */
@@ -73,7 +73,6 @@ public class ACSNamedElement extends ACSTreeNodeElement {
*
*/
public ACSNamedElement() {

}

/**


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

@@ -61,7 +61,7 @@ import com.sun.xml.tree.ElementNode;
* @version $Revision$
* @author Simeon Fitch
*/
public class ACSPropertyElement extends ACSTreeNodeElement {
public class ACSPropertyElement extends ACSDtdDefinedElement {
/** The 'name' property name. */
public static final String NAME = "name";
/** The 'value' property name. */


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

@@ -3,10 +3,12 @@
#

# The default element
*Element=org.apache.tools.ant.gui.acs.ACSDefaultElement
*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



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

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="iso-8859-1"?>

<!--
Copyright (c) 2000 Michel CASABIANCA. All Rights Reserved.

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee or royalty is hereby
granted, provided that both the above copyright notice and this
permission notice appear in all copies of the software and
documentation or portions thereof, including modifications, that you
make.

THIS SOFTWARE IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
BUT NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR
THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE
OR DOCUMENTATION.
-->

<!-- project ext DTD for Ant -->
<!-- 2000-04-03 -->

<!ENTITY % ext "| xt">

<!ELEMENT xt EMPTY>
<!ATTLIST xt
xml CDATA #REQUIRED
xsl CDATA #REQUIRED
out CDATA #REQUIRED>



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

@@ -0,0 +1,282 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
Copyright (c) 2000 Michel CASABIANCA. All Rights Reserved.

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee or royalty is hereby
granted, provided that both the above copyright notice and this
permission notice appear in all copies of the software and
documentation or portions thereof, including modifications, that you
make.

THIS SOFTWARE IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO
REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE,
BUT NOT LIMITATION, COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR
THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY
THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY USE OF THIS SOFTWARE
OR DOCUMENTATION.
-->
<!-- project DTD for Ant -->
<!-- 2000-04-03 -->

<!ENTITY % ext-file SYSTEM "file:/project-ext.dtd">
%ext-file;

<!ELEMENT project (target | property | path)*>
<!ATTLIST project
name CDATA #REQUIRED
default CDATA #REQUIRED
basedir CDATA #REQUIRED
>
<!ELEMENT target (ant | available | chmod | copy | cvs | delete | deltree | echo | exec | expand | filter | get | gzip | fixcrlf | jar | java | javac | javadoc | keysubst | mkdir | property | rename | replace | rmic | tar | taskdef | tstamp | zip | path | classpath)*>
<!ATTLIST target
name CDATA #REQUIRED
depends CDATA #IMPLIED
if 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)*>
<!ATTLIST fileset
dir 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 property EMPTY>
<!ATTLIST property
name CDATA #IMPLIED
value CDATA #IMPLIED
resource CDATA #IMPLIED
file CDATA #IMPLIED
>
<!ELEMENT ant EMPTY>
<!ATTLIST ant
antfile CDATA #IMPLIED
dir CDATA #REQUIRED
target CDATA #IMPLIED
>
<!ELEMENT available EMPTY>
<!ATTLIST available
property CDATA #REQUIRED
classname CDATA #REQUIRED
resource CDATA #REQUIRED
file CDATA #REQUIRED
>
<!ELEMENT chmod EMPTY>
<!ATTLIST chmod
src CDATA #REQUIRED
perm CDATA #REQUIRED
>
<!ELEMENT copy (fileset)*>
<!ATTLIST copy
file CDATA #IMPLIED
todir CDATA #IMPLIED
todir CDATA #IMPLIED
>
<!ELEMENT cvs EMPTY>
<!ATTLIST cvs
cvsRoot CDATA #REQUIRED
dest CDATA #REQUIRED
package CDATA #REQUIRED
tag CDATA #IMPLIED
>
<!ELEMENT delete EMPTY>
<!ATTLIST delete
file CDATA #REQUIRED
>
<!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 fixcrlf EMPTY>
<!ATTLIST fixcrlf
srcdir CDATA #REQUIRED
destDir CDATA #IMPLIED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
cr CDATA #IMPLIED
tab CDATA #IMPLIED
eof CDATA #IMPLIED
>
<!ELEMENT jar EMPTY>
<!ATTLIST jar
jarfile CDATA #REQUIRED
basedir CDATA #REQUIRED
items CDATA #IMPLIED
ignore CDATA #IMPLIED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
manifest 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 EMPTY>
<!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 keysubst EMPTY>
<!ATTLIST keysubst
src CDATA #REQUIRED
dest CDATA #REQUIRED
sep CDATA #IMPLIED
keys CDATA #REQUIRED
>
<!ELEMENT mkdir EMPTY>
<!ATTLIST mkdir
dir CDATA #REQUIRED
>
<!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 EMPTY>
<!ATTLIST tar
tarfile CDATA #REQUIRED
basedir CDATA #REQUIRED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
>
<!ELEMENT taskdef EMPTY>
<!ATTLIST taskdef
name CDATA #REQUIRED
classname CDATA #REQUIRED
>
<!ELEMENT tstamp EMPTY>
<!ELEMENT zip EMPTY>
<!ATTLIST zip
zipfile CDATA #REQUIRED
basedir CDATA #REQUIRED
items CDATA #IMPLIED
ignore CDATA #IMPLIED
includes CDATA #IMPLIED
excludes CDATA #IMPLIED
defaultexcludes CDATA #IMPLIED
>

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

@@ -0,0 +1,106 @@
/*
* 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);
}
}
}
}

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

@@ -0,0 +1,155 @@
/*
* 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
Action action = button.getAction();
if (!(action instanceof AntAction)) {
return;
}
AntAction antAction = (AntAction) action;

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.setList(dtde.getPossibleChildren());
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()));
}
}
}


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

@@ -0,0 +1,261 @@
/*
* 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.*;

/**
* 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.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;

/**
* 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 setList(String[] list) {
if (list == null || list.length == 0) {
_listScrollPane.setVisible(false);
} else {
_elementList.setListData(list);
}
}
/**
* 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() {
if (_elementText.getText().length() > 0) {
_buttonOK.setEnabled(true);
} else {
_buttonOK.setEnabled(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();
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);
}
}
);
_listScrollPane.setViewportView(_elementList);
_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) {
_elementText.setText((String) _elementList.getSelectedValue());
enableButtons();
}

/** Called when the Cancel button is pressed */
private void clickCancel(java.awt.event.ActionEvent evt) {
// Add your handling code here:
setVisible(false);
dispose();
_cancel = true;
}

/** Called when the OK button is pressed */
private void clickOK(java.awt.event.ActionEvent evt) {
setVisible(false);
dispose();
_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();
}
}

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

@@ -72,6 +72,8 @@ import java.lang.reflect.Constructor;
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;
@@ -207,6 +209,12 @@ public class ActionManager {

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()) {
@@ -232,22 +240,39 @@ public class ActionManager {
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.
*
* 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.
* 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) {
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(action != null) {
// 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);
}
@@ -256,27 +281,37 @@ public class ActionManager {
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) {
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 =
Constructor ctor =
clazz.getConstructor(COMMAND_CTOR_PARAMS);
retval = (Command) ctor.newInstance(
new Object[] { context });
}
catch(Exception ex) {
// XXX log me.
ex.printStackTrace();
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();
}
}
}
}


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

@@ -73,6 +73,7 @@ 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";
@@ -81,6 +82,7 @@ public class AntAction extends AbstractAction {
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;
@@ -118,6 +120,8 @@ public class AntAction extends AbstractAction {
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.
@@ -268,6 +272,28 @@ public class AntAction extends AbstractAction {
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.
*


+ 1
- 2
src/antidote/org/apache/tools/ant/gui/core/EventResponder.java View File

@@ -113,9 +113,8 @@ public class EventResponder {
*/
public boolean eventPosted(EventObject event) {
String command = ((ActionEvent)event).getActionCommand();

Command cmd =
_context.getActions().getActionCommand(command, _context);
_context.getActions().getActionCommand(command, _context, event);
if(cmd != null) {
cmd.run();
return false;


+ 88
- 0
src/antidote/org/apache/tools/ant/gui/event/DeleteElementEvent.java View File

@@ -0,0 +1,88 @@
/*
* 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.gui.core.AppContext;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import org.apache.tools.ant.gui.acs.ACSElement;

/**
* FIX UP Nick
*/
public class DeleteElementEvent extends AntEvent {
ACSElement _element = null;

/**
* Standard ctor.
*
* @param context application context.
*/
public DeleteElementEvent(AppContext context,ACSElement e) {
super(context);
if(e == null) {
throw new IllegalArgumentException("A deleted element can't be null.");
}
_element = e;
}

/**
* Get the newly added project.
*
* @return New project.
*/
public ACSElement getDeletedElement() {
return _element;
}

}

+ 83
- 0
src/antidote/org/apache/tools/ant/gui/event/DtdDefinedElementSelectionEvent.java View File

@@ -0,0 +1,83 @@
/*
* 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.gui.acs.ACSElement;
import org.apache.tools.ant.gui.acs.ACSDtdDefinedElement;
import org.apache.tools.ant.gui.core.AppContext;

/**
* Event indicating that a DtdDefined element was selected.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class DtdDefinedElementSelectionEvent extends ElementSelectionEvent {
/**
* Standard ctor.
*
* @param context application context.
* @param selected the selected Elements.
*/
public DtdDefinedElementSelectionEvent(AppContext context,ACSElement[] selected) {
super(context, selected);
}

/**
* Get the selected properties.
*/
public ACSDtdDefinedElement[] getSelectedProperties() {
return (ACSDtdDefinedElement[]) getFiltered(ACSDtdDefinedElement.class);
}

}

+ 8
- 4
src/antidote/org/apache/tools/ant/gui/event/ElementSelectionEvent.java View File

@@ -132,19 +132,23 @@ public class ElementSelectionEvent extends AntEvent {

if(selected != null && selected.length > 0) {
Class type = selected[selected.length - 1].getClass();
if(type.isAssignableFrom(ACSTargetElement.class)) {
if(ACSTargetElement.class.isAssignableFrom(type)) {
retval = new TargetSelectionEvent(context, selected);
}
else if(type.isAssignableFrom(ACSTaskElement.class)) {
else if(ACSTaskElement.class.isAssignableFrom(type)) {
retval = new TaskSelectionEvent(context, selected);
}
else if(type.isAssignableFrom(ACSPropertyElement.class)) {
else if(ACSPropertyElement.class.isAssignableFrom(type)) {
retval = new PropertySelectionEvent(context, selected);
}
else if(type.isAssignableFrom(ACSProjectElement.class)) {
else if(ACSProjectElement.class.isAssignableFrom(type)) {
retval = new ProjectSelectedEvent(
context, (ACSProjectElement) selected[0]);
}
else if(ACSDtdDefinedElement.class.isAssignableFrom(type)) {
retval = new DtdDefinedElementSelectionEvent(
context, selected);
}
else {
// For elements without a specific event
// type just send and instance of this.


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

@@ -0,0 +1,91 @@
/*
* 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.gui.core.AppContext;
import org.apache.tools.ant.gui.acs.ACSProjectElement;
import org.apache.tools.ant.gui.acs.ACSElement;

/**
* Event indicating that a new node was added.
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class NewBaseElementEvent extends AntEvent implements NewElementEvent {
ACSElement _element = null;

/**
* Standard ctor.
*
* @param context application context.
*/
public NewBaseElementEvent(AppContext context,ACSElement e) {
super(context);
if(e == null) {
throw new IllegalArgumentException("A new element can't be null.");
}
_element = e;
}

/**
* Get the element.
*
* @return New project.
*/
public ACSElement getNewElement() {
return _element;
}

}

+ 74
- 0
src/antidote/org/apache/tools/ant/gui/event/RefreshDisplayEvent.java View File

@@ -0,0 +1,74 @@
/*
* 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.gui.core.*;
import org.apache.tools.ant.gui.command.*;

/**
* Request to show the console pane
*
* @version $Revision$
* @author Nick Davis<a href="mailto:nick_home_account@yahoo.com">nick_home_account@yahoo.com</a>
*/
public class RefreshDisplayEvent extends AntEvent {
/**
* Standard ctor.
*
* @param context application context.
*/
public RefreshDisplayEvent(AppContext context) {
super(context);
}
}

+ 70
- 11
src/antidote/org/apache/tools/ant/gui/modules/edit/ElementNavigator.java View File

@@ -138,6 +138,9 @@ public class ElementNavigator extends AntModule {
// The project node has changed.
model.fireNodeChanged((ACSElement)event.getSource());
}
else if(event instanceof RefreshDisplayEvent && model != null) {
_tree.updateUI();
}
else if(event instanceof NewElementEvent && model != null) {
ACSElement element = ((NewElementEvent)event).getNewElement();
model.fireNodeAdded(element);
@@ -145,6 +148,9 @@ public class ElementNavigator extends AntModule {
_selections.setSelectionPath(path);
_tree.scrollPathToVisible(path);
}
else if(event instanceof DeleteElementEvent && model != null) {
_tree.updateUI();
}
else {
ACSProjectElement project = null;
if(event instanceof ProjectSelectedEvent) {
@@ -163,11 +169,31 @@ public class ElementNavigator extends AntModule {
ElementSelectionEvent.createEvent(getContext(), null);
}
else {
_tree.setModel(new ElementTreeModel(project));
_selections = new ElementTreeSelectionModel();
_selections.addTreeSelectionListener(
new SelectionForwarder());
_tree.setSelectionModel(_selections);
boolean updateModel = false;
TreeModel testModel = _tree.getModel();
// Set the model if's not an ElementTreeModel
if (testModel instanceof ElementTreeModel) {
ElementTreeModel etm = (ElementTreeModel) testModel;
ACSProjectElement currentProject =
(ACSProjectElement) etm.getRoot();
// Set the model if the project is wrong
if (currentProject != project) {
updateModel = true;
}
} else {
updateModel = true;
}

// Should we update the tree model
if (updateModel) {
_tree.setModel(new ElementTreeModel(project));
_selections = new ElementTreeSelectionModel();
_selections.addTreeSelectionListener(
new SelectionForwarder());
_tree.setSelectionModel(_selections);
}
}
}
return true;
@@ -195,7 +221,9 @@ public class ElementNavigator extends AntModule {
return event instanceof ProjectSelectedEvent ||
event instanceof ProjectClosedEvent ||
event instanceof NewElementEvent ||
event instanceof PropertyChangeEvent;
event instanceof PropertyChangeEvent ||
event instanceof DeleteElementEvent ||
event instanceof RefreshDisplayEvent;
}
}

@@ -203,11 +231,42 @@ public class ElementNavigator extends AntModule {
private class PopupHandler extends MouseAdapter {
private void handle(MouseEvent e) {
if(e.isPopupTrigger()) {
ActionManager mgr = getContext().getActions();
JPopupMenu menu = mgr.createPopup(
getContext().getResources().getStringArray(
ElementNavigator.class, "popupActions"));
menu.show((JComponent)e.getSource(), e.getX(), e.getY());
Object source = e.getSource();
String[] menuStr = null;
JTree tree = (JTree) source;
// Find the selected path.
TreePath selPath = tree.getPathForLocation(
e.getX(), e.getY());
if (selPath == null) {
return;
}

// Update the selection.
tree.setSelectionPath(selPath);

// Find the selected object.
Object selObj = selPath.getLastPathComponent();

String defaultID = null;
// Does the item provide its own menu?
if (selObj instanceof ACSInfoProvider) {
ACSInfoProvider ip = (ACSInfoProvider) selObj;
menuStr = ip.getMenuString();
defaultID = ip.getDefaultActionID();
} else {
// Get the menu from the prop file.
menuStr = getContext().getResources().getStringArray(
ElementNavigator.class, defaultID);
}

// Should we create a menu?
if (menuStr != null && menuStr.length != 0) {
ActionManager mgr = getContext().getActions();
JPopupMenu menu = mgr.createPopup(menuStr, defaultID);
menu.show((JComponent)e.getSource(), e.getX(), e.getY());
}
}
}



+ 23
- 4
src/antidote/org/apache/tools/ant/gui/resources/action.properties View File

@@ -4,7 +4,7 @@ menus=File, View, Build, Projects, Help
# Declare the list of known actions.
actions=\
new, open, save, saveas, close, exit, about, \
newTarget, newTask, newProperty \
newTarget, newElement, newProperty, deleteElement, \
startBuild, stopBuild, viewConsole

# Configure the decalred actions.
@@ -120,7 +120,8 @@ newTarget.disableOn=\
org.apache.tools.ant.gui.event.TaskSelectionEvent, \
org.apache.tools.ant.gui.event.PropertySelectionEvent, \
org.apache.tools.ant.gui.event.ProjectClosedEvent, \
org.apache.tools.ant.gui.event.NullSelectionEvent
org.apache.tools.ant.gui.event.NullSelectionEvent, \
org.apache.tools.ant.gui.event.DtdDefinedElementSelectionEvent

newTask.name=New Task
newTask.shortDescription=Create a new task under the selected target
@@ -133,7 +134,8 @@ newTask.disableOn=\
org.apache.tools.ant.gui.event.ProjectClosedEvent, \
org.apache.tools.ant.gui.event.TaskSelectionEvent, \
org.apache.tools.ant.gui.event.PropertySelectionEvent, \
org.apache.tools.ant.gui.event.NullSelectionEvent
org.apache.tools.ant.gui.event.NullSelectionEvent, \
org.apache.tools.ant.gui.event.DtdDefinedElementSelectionEvent

newProperty.name=New Property
newProperty.shortDescription=Create a new property under the selected element
@@ -148,7 +150,24 @@ newProperty.enableOn=\
newProperty.disableOn=\
org.apache.tools.ant.gui.event.PropertySelectionEvent, \
org.apache.tools.ant.gui.event.ProjectClosedEvent, \
org.apache.tools.ant.gui.event.NullSelectionEvent
org.apache.tools.ant.gui.event.NullSelectionEvent, \
org.apache.tools.ant.gui.event.DtdDefinedElementSelectionEvent

newElement.name=New Element
newElement.shortDescription=Create a new element under the selected element
newElement.icon=default.gif
newElement.command=org.apache.tools.ant.gui.command.NewElementCmd
newElement.enabled=true
newElement.hidden=true
newElement.popupSeparator=true

deleteElement.name=Delete Element
deleteElement.shortDescription=Delete the selected element
deleteElement.icon=default.gif
deleteElement.command=org.apache.tools.ant.gui.command.DeleteElementCmd
deleteElement.enabled=true
deleteElement.hidden=true
deleteElement.popupSeparator=true

viewConsole.name=console
viewConsole.shortDescription=Displays or hides the console pane


+ 8
- 0
src/antidote/org/apache/tools/ant/gui/resources/antidote.properties View File

@@ -108,6 +108,14 @@ org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.namedValues=Attributes
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.xmlString=XML Code
org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.icon=task.gif

org.apache.tools.ant.gui.acs.ACSDtdDefinedElementBeanInfo.beanName=
org.apache.tools.ant.gui.acs.ACSDtdDefinedElementBeanInfo.beanDescription=\
A scoped property
org.apache.tools.ant.gui.acs.ACSDtdDefinedElementBeanInfo.taskType=Type
org.apache.tools.ant.gui.acs.ACSDtdDefinedElementBeanInfo.namedValues=\
Attributes
org.apache.tools.ant.gui.acs.ACSDtdDefinedElementBeanInfo.xmlString=XML Code
org.apache.tools.ant.gui.acs.ACSDtdDefinedElementBeanInfo.icon=default.gif

org.apache.tools.ant.gui.command.NewProjectCmd.defName=New Project
org.apache.tools.ant.gui.command.NewTargetCmd.defName=New Target


Loading…
Cancel
Save