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 | ||||