git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268895 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -70,6 +70,7 @@ | |||||
| <fileset dir="${src.dir}"> | <fileset dir="${src.dir}"> | ||||
| <include name="**/*.properties" /> | <include name="**/*.properties" /> | ||||
| <include name="**/*.gif" /> | <include name="**/*.gif" /> | ||||
| <include name="**/*.dtd" /> | |||||
| </fileset> | </fileset> | ||||
| </copy> | </copy> | ||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -60,9 +60,7 @@ import java.net.URL; | |||||
| import org.w3c.dom.*; | import org.w3c.dom.*; | ||||
| import org.xml.sax.SAXException; | import org.xml.sax.SAXException; | ||||
| import com.sun.xml.parser.Parser; | 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.Properties; | ||||
| import java.util.Enumeration; | import java.util.Enumeration; | ||||
| import com.sun.xml.parser.Resolver; | import com.sun.xml.parser.Resolver; | ||||
| @@ -92,7 +90,7 @@ public class ACSFactory { | |||||
| String name = (String) enum.nextElement(); | String name = (String) enum.nextElement(); | ||||
| // XXX the name of the class needs to be stored externally. | // XXX the name of the class needs to be stored externally. | ||||
| _elementMap.setProperty( | _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. | // Then we add/override the local definitions. | ||||
| @@ -164,7 +162,6 @@ public class ACSFactory { | |||||
| sax.parse(location.openStream(), null); | sax.parse(location.openStream(), null); | ||||
| doc = builder.getDocument(); | doc = builder.getDocument(); | ||||
| } | } | ||||
| catch(ParserConfigurationException ex) { | catch(ParserConfigurationException ex) { | ||||
| ex.printStackTrace(); | ex.printStackTrace(); | ||||
| @@ -235,6 +232,22 @@ public class ACSFactory { | |||||
| return retval; | return retval; | ||||
| } | } | ||||
| /** | |||||
| * Create a new element. | |||||
| * | |||||
| * @param node the Node to assign the property to. | |||||
| * @param name the new elements type. | |||||
| * @return New, unnamed property. | |||||
| */ | |||||
| public ACSElement createElement(ACSElement node, String name) { | |||||
| ACSElement retval = (ACSElement) node. | |||||
| getOwnerDocument().createElement(name); | |||||
| // XXX fixme. | |||||
| indent(node, 1); | |||||
| node.appendChild(retval); | |||||
| return retval; | |||||
| } | |||||
| /** | /** | ||||
| * Insert a new line and indentation at the end of the given | * Insert a new line and indentation at the end of the given | ||||
| * node in preparation for a new element being added. | * node in preparation for a new element being added. | ||||
| @@ -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(); | |||||
| } | |||||
| @@ -62,7 +62,7 @@ import java.util.StringTokenizer; | |||||
| * @version $Revision$ | * @version $Revision$ | ||||
| * @author Simeon Fitch | * @author Simeon Fitch | ||||
| */ | */ | ||||
| public class ACSNamedElement extends ACSTreeNodeElement { | |||||
| public class ACSNamedElement extends ACSDtdDefinedElement { | |||||
| /** The 'name' property name. */ | /** The 'name' property name. */ | ||||
| public static final String NAME = "name"; | public static final String NAME = "name"; | ||||
| /** The discription property name. */ | /** The discription property name. */ | ||||
| @@ -73,7 +73,6 @@ public class ACSNamedElement extends ACSTreeNodeElement { | |||||
| * | * | ||||
| */ | */ | ||||
| public ACSNamedElement() { | public ACSNamedElement() { | ||||
| } | } | ||||
| /** | /** | ||||
| @@ -61,7 +61,7 @@ import com.sun.xml.tree.ElementNode; | |||||
| * @version $Revision$ | * @version $Revision$ | ||||
| * @author Simeon Fitch | * @author Simeon Fitch | ||||
| */ | */ | ||||
| public class ACSPropertyElement extends ACSTreeNodeElement { | |||||
| public class ACSPropertyElement extends ACSDtdDefinedElement { | |||||
| /** The 'name' property name. */ | /** The 'name' property name. */ | ||||
| public static final String NAME = "name"; | public static final String NAME = "name"; | ||||
| /** The 'value' property name. */ | /** The 'value' property name. */ | ||||
| @@ -3,10 +3,12 @@ | |||||
| # | # | ||||
| # The default element | # The default element | ||||
| *Element=org.apache.tools.ant.gui.acs.ACSDefaultElement | |||||
| *Element=org.apache.tools.ant.gui.acs.ACSDtdDefinedElement | |||||
| # Specific elements. | # Specific elements. | ||||
| project=org.apache.tools.ant.gui.acs.ACSProjectElement | project=org.apache.tools.ant.gui.acs.ACSProjectElement | ||||
| property=org.apache.tools.ant.gui.acs.ACSPropertyElement | property=org.apache.tools.ant.gui.acs.ACSPropertyElement | ||||
| target=org.apache.tools.ant.gui.acs.ACSTargetElement | target=org.apache.tools.ant.gui.acs.ACSTargetElement | ||||
| task=org.apache.tools.ant.gui.acs.ACSTaskElement | task=org.apache.tools.ant.gui.acs.ACSTaskElement | ||||
| @@ -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> | |||||
| @@ -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 | |||||
| > | |||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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())); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -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(); | |||||
| } | |||||
| } | |||||
| @@ -72,6 +72,8 @@ import java.lang.reflect.Constructor; | |||||
| public class ActionManager { | public class ActionManager { | ||||
| /** Parameters for the Command constructor. */ | /** Parameters for the Command constructor. */ | ||||
| private static final Class[] COMMAND_CTOR_PARAMS = { AppContext.class }; | private static final Class[] COMMAND_CTOR_PARAMS = { AppContext.class }; | ||||
| private static final Class[] COMMAND_CTOR_PARAMS_WITH_EVENT = | |||||
| { AppContext.class, EventObject.class }; | |||||
| /** Externalized resources. */ | /** Externalized resources. */ | ||||
| private ResourceManager _resources = null; | private ResourceManager _resources = null; | ||||
| @@ -207,6 +209,12 @@ public class ActionManager { | |||||
| for(int i = 0; i < _actionIDs.length; i++) { | for(int i = 0; i < _actionIDs.length; i++) { | ||||
| AntAction action = (AntAction) _actions.get(_actionIDs[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 it has an icon, then we add it to the toolbar. | ||||
| if(action.getIcon() != null) { | if(action.getIcon() != null) { | ||||
| if(action.isPreceededBySeparator()) { | if(action.isPreceededBySeparator()) { | ||||
| @@ -232,22 +240,39 @@ public class ActionManager { | |||||
| return retval; | return retval; | ||||
| } | } | ||||
| /** | |||||
| /** | |||||
| * Create a popup menu with the given actionIDs. | * 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 | * @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. | * @return Popup menu to display. | ||||
| */ | */ | ||||
| public JPopupMenu createPopup(String[] actionIDs) { | |||||
| public JPopupMenu createPopup(String[] actionIDs, String defaultID) { | |||||
| JPopupMenu retval = new JPopupMenu(); | JPopupMenu retval = new JPopupMenu(); | ||||
| for(int i = 0; i < actionIDs.length; i++) { | for(int i = 0; i < actionIDs.length; i++) { | ||||
| AntAction action = (AntAction) _actions.get(actionIDs[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); | AbstractButton button = retval.add(action); | ||||
| addNiceStuff(button, action); | addNiceStuff(button, action); | ||||
| } | } | ||||
| @@ -256,27 +281,37 @@ public class ActionManager { | |||||
| return retval; | return retval; | ||||
| } | } | ||||
| /** | |||||
| /** | |||||
| * Get the command assocaited with the Action with the given id. | * Get the command assocaited with the Action with the given id. | ||||
| * | |||||
| * | |||||
| * @param actionID Id of action to get command for. | * @param actionID Id of action to get command for. | ||||
| * @return Command associated with action, or null if none available. | * @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; | Command retval = null; | ||||
| AntAction action = (AntAction) _actions.get(actionID); | AntAction action = (AntAction) _actions.get(actionID); | ||||
| if(action != null) { | if(action != null) { | ||||
| Class clazz = action.getCommandClass(); | Class clazz = action.getCommandClass(); | ||||
| if(clazz != null) { | if(clazz != null) { | ||||
| try { | try { | ||||
| Constructor ctor = | |||||
| Constructor ctor = | |||||
| clazz.getConstructor(COMMAND_CTOR_PARAMS); | clazz.getConstructor(COMMAND_CTOR_PARAMS); | ||||
| retval = (Command) ctor.newInstance( | retval = (Command) ctor.newInstance( | ||||
| new Object[] { context }); | new Object[] { context }); | ||||
| } | } | ||||
| catch(Exception ex) { | 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(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -73,6 +73,7 @@ public class AntAction extends AbstractAction { | |||||
| /** Property name for the parent menu item. */ | /** Property name for the parent menu item. */ | ||||
| public static final String PARENT_MENU_NAME = "parentMenuName"; | public static final String PARENT_MENU_NAME = "parentMenuName"; | ||||
| public static final String SEPARATOR = "separator"; | public static final String SEPARATOR = "separator"; | ||||
| public static final String POPUP_SEPARATOR = "popupSeparator"; | |||||
| public static final String ACCELERATOR = "accelerator"; | public static final String ACCELERATOR = "accelerator"; | ||||
| public static final String ENABLED = "enabled"; | public static final String ENABLED = "enabled"; | ||||
| public static final String ENABLE_ON = "enableOn"; | 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_TRUE_ON = "checkedTrueOn"; | ||||
| public static final String CHECKED_FALSE_ON = "checkedFalseOn"; | public static final String CHECKED_FALSE_ON = "checkedFalseOn"; | ||||
| public static final String COMMAND = "command"; | public static final String COMMAND = "command"; | ||||
| public static final String HIDDEN = "hidden"; | |||||
| /** Property resources. */ | /** Property resources. */ | ||||
| private ResourceManager _resources = null; | private ResourceManager _resources = null; | ||||
| @@ -118,6 +120,8 @@ public class AntAction extends AbstractAction { | |||||
| putValue(SHORT_DESCRIPTION, getString("shortDescription")); | putValue(SHORT_DESCRIPTION, getString("shortDescription")); | ||||
| putValue(PARENT_MENU_NAME, getString(PARENT_MENU_NAME)); | putValue(PARENT_MENU_NAME, getString(PARENT_MENU_NAME)); | ||||
| putValue(SEPARATOR, getString(SEPARATOR)); | putValue(SEPARATOR, getString(SEPARATOR)); | ||||
| putValue(POPUP_SEPARATOR, getString(POPUP_SEPARATOR)); | |||||
| putValue(HIDDEN, getString(HIDDEN)); | |||||
| // Set the default enabled state. | // Set the default enabled state. | ||||
| @@ -268,6 +272,28 @@ public class AntAction extends AbstractAction { | |||||
| return (Icon) getValue(SMALL_ICON); | 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. | * Get the accelerator keystroke. | ||||
| * | * | ||||
| @@ -113,9 +113,8 @@ public class EventResponder { | |||||
| */ | */ | ||||
| public boolean eventPosted(EventObject event) { | public boolean eventPosted(EventObject event) { | ||||
| String command = ((ActionEvent)event).getActionCommand(); | String command = ((ActionEvent)event).getActionCommand(); | ||||
| Command cmd = | Command cmd = | ||||
| _context.getActions().getActionCommand(command, _context); | |||||
| _context.getActions().getActionCommand(command, _context, event); | |||||
| if(cmd != null) { | if(cmd != null) { | ||||
| cmd.run(); | cmd.run(); | ||||
| return false; | return false; | ||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| @@ -132,19 +132,23 @@ public class ElementSelectionEvent extends AntEvent { | |||||
| if(selected != null && selected.length > 0) { | if(selected != null && selected.length > 0) { | ||||
| Class type = selected[selected.length - 1].getClass(); | Class type = selected[selected.length - 1].getClass(); | ||||
| if(type.isAssignableFrom(ACSTargetElement.class)) { | |||||
| if(ACSTargetElement.class.isAssignableFrom(type)) { | |||||
| retval = new TargetSelectionEvent(context, selected); | retval = new TargetSelectionEvent(context, selected); | ||||
| } | } | ||||
| else if(type.isAssignableFrom(ACSTaskElement.class)) { | |||||
| else if(ACSTaskElement.class.isAssignableFrom(type)) { | |||||
| retval = new TaskSelectionEvent(context, selected); | retval = new TaskSelectionEvent(context, selected); | ||||
| } | } | ||||
| else if(type.isAssignableFrom(ACSPropertyElement.class)) { | |||||
| else if(ACSPropertyElement.class.isAssignableFrom(type)) { | |||||
| retval = new PropertySelectionEvent(context, selected); | retval = new PropertySelectionEvent(context, selected); | ||||
| } | } | ||||
| else if(type.isAssignableFrom(ACSProjectElement.class)) { | |||||
| else if(ACSProjectElement.class.isAssignableFrom(type)) { | |||||
| retval = new ProjectSelectedEvent( | retval = new ProjectSelectedEvent( | ||||
| context, (ACSProjectElement) selected[0]); | context, (ACSProjectElement) selected[0]); | ||||
| } | } | ||||
| else if(ACSDtdDefinedElement.class.isAssignableFrom(type)) { | |||||
| retval = new DtdDefinedElementSelectionEvent( | |||||
| context, selected); | |||||
| } | |||||
| else { | else { | ||||
| // For elements without a specific event | // For elements without a specific event | ||||
| // type just send and instance of this. | // type just send and instance of this. | ||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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); | |||||
| } | |||||
| } | |||||
| @@ -138,6 +138,9 @@ public class ElementNavigator extends AntModule { | |||||
| // The project node has changed. | // The project node has changed. | ||||
| model.fireNodeChanged((ACSElement)event.getSource()); | model.fireNodeChanged((ACSElement)event.getSource()); | ||||
| } | } | ||||
| else if(event instanceof RefreshDisplayEvent && model != null) { | |||||
| _tree.updateUI(); | |||||
| } | |||||
| else if(event instanceof NewElementEvent && model != null) { | else if(event instanceof NewElementEvent && model != null) { | ||||
| ACSElement element = ((NewElementEvent)event).getNewElement(); | ACSElement element = ((NewElementEvent)event).getNewElement(); | ||||
| model.fireNodeAdded(element); | model.fireNodeAdded(element); | ||||
| @@ -145,6 +148,9 @@ public class ElementNavigator extends AntModule { | |||||
| _selections.setSelectionPath(path); | _selections.setSelectionPath(path); | ||||
| _tree.scrollPathToVisible(path); | _tree.scrollPathToVisible(path); | ||||
| } | } | ||||
| else if(event instanceof DeleteElementEvent && model != null) { | |||||
| _tree.updateUI(); | |||||
| } | |||||
| else { | else { | ||||
| ACSProjectElement project = null; | ACSProjectElement project = null; | ||||
| if(event instanceof ProjectSelectedEvent) { | if(event instanceof ProjectSelectedEvent) { | ||||
| @@ -163,11 +169,31 @@ public class ElementNavigator extends AntModule { | |||||
| ElementSelectionEvent.createEvent(getContext(), null); | ElementSelectionEvent.createEvent(getContext(), null); | ||||
| } | } | ||||
| else { | 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; | return true; | ||||
| @@ -195,7 +221,9 @@ public class ElementNavigator extends AntModule { | |||||
| return event instanceof ProjectSelectedEvent || | return event instanceof ProjectSelectedEvent || | ||||
| event instanceof ProjectClosedEvent || | event instanceof ProjectClosedEvent || | ||||
| event instanceof NewElementEvent || | 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 class PopupHandler extends MouseAdapter { | ||||
| private void handle(MouseEvent e) { | private void handle(MouseEvent e) { | ||||
| if(e.isPopupTrigger()) { | 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()); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -4,7 +4,7 @@ menus=File, View, Build, Projects, Help | |||||
| # Declare the list of known actions. | # Declare the list of known actions. | ||||
| actions=\ | actions=\ | ||||
| new, open, save, saveas, close, exit, about, \ | new, open, save, saveas, close, exit, about, \ | ||||
| newTarget, newTask, newProperty \ | |||||
| newTarget, newElement, newProperty, deleteElement, \ | |||||
| startBuild, stopBuild, viewConsole | startBuild, stopBuild, viewConsole | ||||
| # Configure the decalred actions. | # Configure the decalred actions. | ||||
| @@ -120,7 +120,8 @@ newTarget.disableOn=\ | |||||
| org.apache.tools.ant.gui.event.TaskSelectionEvent, \ | org.apache.tools.ant.gui.event.TaskSelectionEvent, \ | ||||
| org.apache.tools.ant.gui.event.PropertySelectionEvent, \ | org.apache.tools.ant.gui.event.PropertySelectionEvent, \ | ||||
| org.apache.tools.ant.gui.event.ProjectClosedEvent, \ | 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.name=New Task | ||||
| newTask.shortDescription=Create a new task under the selected target | 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.ProjectClosedEvent, \ | ||||
| org.apache.tools.ant.gui.event.TaskSelectionEvent, \ | org.apache.tools.ant.gui.event.TaskSelectionEvent, \ | ||||
| org.apache.tools.ant.gui.event.PropertySelectionEvent, \ | 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.name=New Property | ||||
| newProperty.shortDescription=Create a new property under the selected element | newProperty.shortDescription=Create a new property under the selected element | ||||
| @@ -148,7 +150,24 @@ newProperty.enableOn=\ | |||||
| newProperty.disableOn=\ | newProperty.disableOn=\ | ||||
| org.apache.tools.ant.gui.event.PropertySelectionEvent, \ | org.apache.tools.ant.gui.event.PropertySelectionEvent, \ | ||||
| org.apache.tools.ant.gui.event.ProjectClosedEvent, \ | 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.name=console | ||||
| viewConsole.shortDescription=Displays or hides the console pane | viewConsole.shortDescription=Displays or hides the console pane | ||||
| @@ -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.xmlString=XML Code | ||||
| org.apache.tools.ant.gui.acs.ACSTaskElementBeanInfo.icon=task.gif | 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.NewProjectCmd.defName=New Project | ||||
| org.apache.tools.ant.gui.command.NewTargetCmd.defName=New Target | org.apache.tools.ant.gui.command.NewTargetCmd.defName=New Target | ||||