chrisw 2003/01/13 05:31:17 Modified: src/java/org/apache/tools/ant/gui/acs ACSFactory.java ACSNamedElement.java ACSProjectElement.java ACSPropertyElement.java ACSPropertyElementBeanInfo.java ACSTargetElementBeanInfo.java acs-element.properties src/java/org/apache/tools/ant/gui/command NewElementCmd.java NewElementDlg.java Added: src/java/org/apache/tools/ant/gui/acs ACSIntrospectedElement.java ACSIntrospectedElementBeanInfo.java Log: Introducing Introspection. Revision Changes Path 1.3 +134 -10 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSFactory.java Index: ACSFactory.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ACSFactory.java 4 May 2001 18:48:11 -0000 1.2 +++ ACSFactory.java 13 Jan 2003 13:31:17 -0000 1.3 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -62,9 +62,17 @@ import java.util.Enumeration; import java.util.Properties; +import java.util.Collections; +import java.util.Map; +import java.util.HashMap; import javax.xml.parsers.ParserConfigurationException; +import org.apache.tools.ant.IntrospectionHelper; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Target; +import org.apache.tools.ant.taskdefs.Property; + import org.apache.tools.ant.gui.xml.DOMDocument; import org.apache.tools.ant.gui.xml.DOMNodeManager; @@ -74,33 +82,77 @@ * Factory for loading Ant Construction set elements. * * @version $Revision$ - * @author Simeon Fitch + * @author Simeon Fitch, Christoph Wilhelms<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> */ public class ACSFactory { /** Singleton instance of the factory. */ private static ACSFactory _instance = null; /** Element maping. */ - private static final Properties _elementMap = new Properties(); + private Properties _elementMap = new Properties(); //(name -> ACSClassName) Probably deprecated soon... + + private Properties _taskClassMap = new Properties(); // (name -> source className) + private Properties _elementClassMap = new Properties(); // (name -> source className) + private Map _classInfoMap = Collections.synchronizedMap (new HashMap ()); // (className -> attributes/subElements) - static { + + /** + * The Main introspection happens here! Ofcourse there is a lot of "cleaning up" to do... + * Additionally: handling more default properties, custom Tasks, etc. + */ + private void init() { try { + String antProjectName = Project.class.getName(); + String antTargetName = Target.class.getName(); + String antPropertyName = Property.class.getName(); + analyzeClass(antProjectName); + analyzeClass(antTargetName); + // First we bootstrap our knowledge of the Ant tasks by reading // in the taskdef definitions and assigning them the default // task element class. - _elementMap.load(org.apache.tools.ant.taskdefs.Ant.class. + _taskClassMap.load(org.apache.tools.ant.taskdefs.Ant.class. getResourceAsStream("defaults.properties")); - Enumeration enum = _elementMap.propertyNames(); + _taskClassMap.setProperty("property", antPropertyName); + Enumeration enum = _taskClassMap.propertyNames(); while(enum.hasMoreElements()) { String name = (String) enum.nextElement(); + + // Directly collect Introspection Info for nown types + analyzeClass(_taskClassMap.getProperty(name)); + // XXX the name of the class needs to be stored externally. + _elementMap.setProperty(name, "org.apache.tools.ant.gui.acs.ACSTaskElement"); + } + _elementMap.setProperty("property", "org.apache.tools.ant.gui.acs.ACSPropertyElement"); + + Properties tempElementClassMap = new Properties(); + tempElementClassMap.load(org.apache.tools.ant.types.FileSet.class. + getResourceAsStream("defaults.properties")); + _elementClassMap.putAll(tempElementClassMap); + ((ClassInfo)_classInfoMap.get(antTargetName))._subelements.putAll(tempElementClassMap); + ((ClassInfo)_classInfoMap.get(antProjectName))._subelements.putAll(tempElementClassMap); + ((ClassInfo)_classInfoMap.get(antTargetName))._subelements.put("property",antPropertyName); + ((ClassInfo)_classInfoMap.get(antProjectName))._subelements.put("property",antPropertyName); + enum = _elementClassMap.propertyNames(); + while(enum.hasMoreElements()) { + String name = (String) enum.nextElement(); + + // Directly collect Introspection Info for nown types + analyzeClass(_elementClassMap.getProperty(name)); _elementMap.setProperty( - name, "org.apache.tools.ant.gui.acs.ACSDtdDefinedElement"); + name, "org.apache.tools.ant.gui.acs.ACSIntrospectedElement"); } // Then we add/override the local definitions. _elementMap.load(ACSFactory.class. getResourceAsStream("acs-element.properties")); + + _elementClassMap.setProperty("project", antProjectName); + _elementClassMap.setProperty("target", antTargetName); + + System.out.println(_taskClassMap.toString()); + // Finally we scan the entire classpath for additional classes and custom Tasks. } catch(Throwable ex) { // If something wrong happens here we can't do much more... @@ -109,14 +161,77 @@ } } + public void analyzeClass(String qualifiedClassName) { + // Check if info already has been introspected. + if (_classInfoMap.containsKey(qualifiedClassName)) return; + try { + // Create ClassInfo and insert in classInfoMap + ClassInfo info = new ClassInfo(); + _classInfoMap.put(qualifiedClassName, ""); + // Create and introspect Class + Class clazz = Class.forName(qualifiedClassName); + IntrospectionHelper helper = IntrospectionHelper.getHelper(clazz); + info._isContainer = helper.supportsCharacters(); + // Lookup Attributes + Enumeration e = helper.getAttributes(); + if (e.hasMoreElements()) { + info._attributes = new HashMap(); + while (e.hasMoreElements()) { + String name = (String) e.nextElement(); + String type = helper.getAttributeType(name).getName(); + if ((org.apache.tools.ant.Task.class.isAssignableFrom(clazz)) && + ((name.equals ("location") && type.equals ("org.apache.tools.ant.Location"))/* || + (name.equals ("taskname") && type.equals ("java.lang.String")) || + (name.equals ("description") && type.equals ("java.lang.String"))*/)) { + continue; + } +// info._attributes.put(name, type); // for debug purpose only + info._attributes.put(name, ""); + } + } + else info._attributes = null; + // Lookup Subelements + e = helper.getNestedElements(); + info._subelements = new HashMap(); + while (e.hasMoreElements()) { + try { + String name = (String) e.nextElement(); + Class subClazz = helper.getElementType(name); + info._subelements.put(name, subClazz.getName()); + _elementClassMap.setProperty(name, subClazz.getName()); + // ... and analyze that class! + analyzeClass(subClazz.getName()); + } catch (RuntimeException re) {} + } + _classInfoMap.remove(qualifiedClassName); + _classInfoMap.put(qualifiedClassName, info); + } + catch (Throwable e) {} + } + /** * Default ctor. * */ private ACSFactory() { - + init(); } - + + public ClassInfo getClassInfo(String key, boolean forTarget) { + if (!_elementMap.containsKey(key)) + return null; // We have no clue how to optain this information! + String className = null; + if (forTarget) className = (String)_taskClassMap.get(key); + if (className == null) className = (String)_elementClassMap.get(key); + if (className == null) className = (String)_taskClassMap.get(key); + if (className == null) return null; + return (ClassInfo)_classInfoMap.get(className); + } + + public Map getTasks() { + return _taskClassMap; + } + /** * Get an instance of the factory. * @@ -276,4 +391,13 @@ } } + public class ClassInfo { + public Map _attributes; + public Map _subelements; + public boolean _isContainer; + + public String toString () { + return "ClassInfo[attributes=" + _attributes + ",subs=" + _subelements + "]"; + } + } } 1.3 +4 -4 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSNamedElement.java Index: ACSNamedElement.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSNamedElement.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ACSNamedElement.java 26 Jul 2001 07:07:40 -0000 1.2 +++ ACSNamedElement.java 13 Jan 2003 13:31:17 -0000 1.3 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,9 +59,9 @@ * Class representing an element with a name and description. * * @version $Revision$ - * @author Simeon Fitch + * @author Simeon Fitch, Christoph Wilhelms */ -public class ACSNamedElement extends ACSDtdDefinedElement { +public class ACSNamedElement extends ACSIntrospectedElement { /** The 'name' property name. */ public static final String NAME = "name"; /** The discription property name. */ 1.4 +50 -51 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSProjectElement.java Index: ACSProjectElement.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSProjectElement.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ACSProjectElement.java 4 Jun 2001 18:49:21 -0000 1.3 +++ ACSProjectElement.java 13 Jan 2003 13:31:17 -0000 1.4 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -58,9 +58,9 @@ /** * Class representing a project element in the build file. - * - * @version $Revision$ - * @author Simeon Fitch + * + * @version $Revision$ + * @author Simeon Fitch, Christoph Wilhelms */ public class ACSProjectElement extends ACSNamedElement { /** The 'default' property name. */ @@ -71,75 +71,75 @@ public static final String LOCATION = "location"; /** The location where this project is persisted. */ private URL _location = null; - - /** - * Default ctor. - * - */ + + /** + * Default ctor. + * + */ public ACSProjectElement() { } - - /** - * Get the type that this BeanInfo represents. - * - * @return Type. - */ + + /** + * Get the type that this BeanInfo represents. + * + * @return Type. + */ public Class getType() { return ACSProjectElement.class; } - - /** - * Get the name of the default target. - * - * @return Default target name. - */ + + /** + * Get the name of the default target. + * + * @return Default target name. + */ public String getDefault() { return getAttribute(DEFAULT); } - - /** - * Set the name of the default target. - * - * @param def Name of the default target. - */ + + /** + * Set the name of the default target. + * + * @param def Name of the default target. + */ public void setDefault(String def) { String old = getDefault(); setAttribute(DEFAULT, def); firePropertyChange(DEFAULT, old, def); } - - /** - * Get the specified base directory for the build. - * - * @return Base directory - */ + + /** + * Get the specified base directory for the build. + * + * @return Base directory + */ public String getBasedir() { return getAttribute(BASEDIR); } - - /** - * Set the base directory for builds. - * - * @param baseDir Build base directory. - */ + + /** + * Set the base directory for builds. + * + * @param baseDir Build base directory. + */ public void setBasedir(String baseDir) { String old = getBasedir(); setAttribute(BASEDIR, baseDir); firePropertyChange(BASEDIR, old, baseDir); } - - /** + + /** * Get the location where this project is persisted. - * + * * @return Saved location, or null if not persisted. */ public URL getLocation() { return _location; } - - /** + + /** * Set the loction where the project is persisted. - * + * * @param location Location of project. */ public void setLocation(URL location) { @@ -147,10 +147,10 @@ _location = location; firePropertyChange(LOCATION, old, _location); } - - /** + + /** * Set the loction where the project is persisted. - * + * * @param location Location of project as a file. */ public void setLocation(File location) { @@ -164,14 +164,14 @@ } } - /** + /** * @return true if the project has been modified, */ public boolean isModified() { return getOwnerDocument().isModified(); } - /** + /** * Sets the modified flag. * * @param modified the new value @@ -179,5 +179,4 @@ public void setModified(boolean modified) { getOwnerDocument().setModified(modified); } - } 1.3 +78 -52 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSPropertyElement.java Index: ACSPropertyElement.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSPropertyElement.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ACSPropertyElement.java 26 Jul 2001 07:07:40 -0000 1.2 +++ ACSPropertyElement.java 13 Jan 2003 13:31:17 -0000 1.3 @@ -53,35 +53,37 @@ */ package org.apache.tools.ant.gui.acs; +import org.apache.tools.ant.gui.xml.DOMAttributes; + /** * Element containing a property definition. - * - * @version $Revision$ - * @author Simeon Fitch + * + * @version $Revision$ + * @author Simeon Fitch */ -public class ACSPropertyElement extends ACSDtdDefinedElement { +public class ACSPropertyElement extends ACSIntrospectedElement { /** The 'name' property name. */ public static final String NAME = "name"; /** The 'value' property name. */ public static final String VALUE = "value"; /** The file to load properties from. */ public static final String FILE = "file"; - - /** - * Default ctor. - * - */ + + /** + * Default ctor. + * + */ public ACSPropertyElement() { } - - /** - * Get the display name of this. - * - * @return Display name. - */ + + /** + * Get the display name of this. + * + * @return Display name. + */ public String getDisplayName() { String file = getFile(); - + if(file == null || file.trim().length() == 0) { return getName(); } @@ -89,64 +91,88 @@ return "file: " + file; } } - - /** - * Get the property name. - * - * @return Property name. - */ + + /** + * Get the property name. + * + * @return Property name. + */ public String getName() { return getAttribute(NAME); } - - /** - * Set the property name. - * - * @param name Property name. - */ + + /** + * Set the property name. + * + * @param name Property name. + */ public void setName(String name) { String old = getName(); setAttribute(NAME, name); firePropertyChange(NAME, old, name); } - - /** - * Get the property value. - * - * @return Property value. - */ + + /** + * Get the property value. + * + * @return Property value. + */ public String getValue() { return getAttribute(VALUE); } - - /** - * Set the property value. - * - * @param name Property value. - */ + + /** + * Set the property value. + * + * @param name Property value. + */ public void setValue(String value) { String old = getValue(); setAttribute(VALUE, value); firePropertyChange(VALUE, old, value); } - - /** - * Get the external property file. - * - * @return Property file. - */ + + /** + * Get the external property file. + * + * @return Property file. + */ public String getFile() { return getAttribute(FILE); } - - /** - * Set the external property file. - * - * @param name Property file. - */ + + /** + * Set the external property file. + * + * @param name Property file. + */ public void setFile(String file) { String old = getFile(); setAttribute(FILE, file); firePropertyChange(FILE, old, file); + } + + /** + * Overridden to handle the default Attributes + * + * @return Name-value mappings. + */ + public DOMAttributes getNamedValues() { + DOMAttributes d = super.getNamedValues(); + + d.remove("file"); d.remove("value"); d.remove("name"); + + String a[] = d.getAttributes(); + String b[] = new String[a.length-3]; + int j = 0; + for (int i=0; i<a.length;i++) { + if (!(a[i].equals("file") || a[i].equals("value") || a[i].equals("name"))) { + b[j] = a[i]; + j++; + } + } + d.setAttributes(b); + + return d; } } 1.2 +59 -40 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSPropertyElementBeanInfo.java Index: ACSPropertyElementBeanInfo.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSPropertyElementBeanInfo.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ACSPropertyElementBeanInfo.java 8 Apr 2001 23:42:09 -0000 1.1 +++ ACSPropertyElementBeanInfo.java 13 Jan 2003 13:31:17 -0000 1.2 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -53,78 +53,97 @@ */ package org.apache.tools.ant.gui.acs; +import java.beans.IntrospectionException; +import java.beans.PropertyDescriptor; +import java.beans.PropertyEditorManager; + import org.apache.tools.ant.gui.customizer.DynamicCustomizer; -import java.beans.*; +import org.apache.tools.ant.gui.xml.DOMAttributes; +import org.apache.tools.ant.gui.modules.edit.AttributePropertyEditor; /** * BeanInfo for the ACSPropertyElement class. - * - * @version $Revision$ - * @author Simeon Fitch + * + * @version $Revision$ + * @author Simeon Fitch, Christoph Wilhelms<a href="mailto:[EMAIL PROTECTED]">Christoph Wilhelms</a> */ public class ACSPropertyElementBeanInfo extends BaseBeanInfo { - /** - * Default ctor. - * - */ + /** + * Default ctor. + * + */ public ACSPropertyElementBeanInfo() { } - - /** - * Get the type that this BeanInfo represents. - * - * @return Type. - */ + + /** + * Get the type that this BeanInfo represents. + * + * @return Type. + */ public Class getType() { return ACSPropertyElement.class; } - - /** - * Get the customizer type. - * - * @return Customizer type. - */ + + /** + * Get the customizer type. + * + * @return Customizer type. + */ public Class getCustomizerType() { return Customizer.class; } - - /** - * Get the property descriptors. - * + + /** + * Get the property descriptors. + * * @return Property descriptors. - */ + */ public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] retval = null; - + try { retval = new PropertyDescriptor[] { - new PropertyDescriptor(ACSPropertyElement.FILE, - ACSPropertyElement.class), - new PropertyDescriptor(ACSPropertyElement.NAME, - ACSPropertyElement.class), - new PropertyDescriptor(ACSPropertyElement.VALUE, - ACSPropertyElement.class) + new PropertyDescriptor(ACSPropertyElement.FILE, + ACSPropertyElement.class), + new PropertyDescriptor(ACSPropertyElement.NAME, + ACSPropertyElement.class), + new PropertyDescriptor(ACSPropertyElement.VALUE, + ACSPropertyElement.class), + new PropertyDescriptor(ACSPropertyElement.NAMED_VALUES, + ACSPropertyElement.class), + new PropertyDescriptor(ACSPropertyElement.XML_STRING, + ACSPropertyElement.class, + "getXMLString", null) }; - + retval[0].setDisplayName(getResources().getString( - getClass(),ACSPropertyElement.FILE)); + getClass(),ACSPropertyElement.FILE)); retval[1].setDisplayName(getResources().getString( - getClass(),ACSPropertyElement.NAME)); + getClass(),ACSPropertyElement.NAME)); retval[2].setDisplayName(getResources().getString( - getClass(),ACSPropertyElement.VALUE)); - + getClass(),ACSPropertyElement.VALUE)); + retval[3].setDisplayName(getResources().getString( + getClass(),ACSPropertyElement.NAMED_VALUES)); + retval[4].setDisplayName(getResources().getString( + getClass(),ACSPropertyElement.XML_STRING)); + setSortingOrder(retval); } catch(IntrospectionException ex) { ex.printStackTrace(); throw new Error(ex.toString()); } - + return retval; } - + /** Customizer for this bean info. */ public static class Customizer extends DynamicCustomizer { + static { + PropertyEditorManager.registerEditor( + DOMAttributes.class, AttributePropertyEditor.class); + } + public Customizer() { super(ACSPropertyElement.class); } 1.2 +59 -49 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSTargetElementBeanInfo.java Index: ACSTargetElementBeanInfo.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSTargetElementBeanInfo.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ACSTargetElementBeanInfo.java 8 Apr 2001 23:42:09 -0000 1.1 +++ ACSTargetElementBeanInfo.java 13 Jan 2003 13:31:17 -0000 1.2 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -54,96 +54,106 @@ package org.apache.tools.ant.gui.acs; import org.apache.tools.ant.gui.customizer.DynamicCustomizer; -import java.beans.*; +import java.beans.IntrospectionException; +import java.beans.PropertyDescriptor; +import java.beans.PropertyEditorManager; + +import org.apache.tools.ant.gui.customizer.DynamicCustomizer; +import org.apache.tools.ant.gui.xml.DOMAttributes; +import org.apache.tools.ant.gui.modules.edit.AttributePropertyEditor; /** * BeanInfo for the ACSTargetElement class. - * - * @version $Revision$ - * @author Simeon Fitch + * + * @version $Revision$ + * @author Simeon Fitch, Christoph Wilhelms<a href="mailto:[EMAIL PROTECTED]">Christoph Wilhelms</a> */ public class ACSTargetElementBeanInfo extends BaseBeanInfo { - /** - * Default ctor. - * - */ + /** + * Default ctor. + * + */ public ACSTargetElementBeanInfo() { } - - /** - * Get the type that this BeanInfo represents. - * - * @return Type. - */ + + /** + * Get the type that this BeanInfo represents. + * + * @return Type. + */ public Class getType() { return ACSTargetElement.class; } - - /** - * Get the customizer type. - * - * @return Customizer type. - */ + + /** + * Get the customizer type. + * + * @return Customizer type. + */ public Class getCustomizerType() { return Customizer.class; } - - /** - * Get the property descriptors. - * + + /** + * Get the property descriptors. + * * @return Property descriptors. - */ + */ public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] retval = null; - + try { retval = new PropertyDescriptor[] { - new PropertyDescriptor(ACSTargetElement.NAME, - ACSTargetElement.class), + new PropertyDescriptor(ACSTargetElement.NAME, + ACSTargetElement.class), new PropertyDescriptor(ACSTargetElement.DESCRIPTION, - ACSTargetElement.class), + ACSTargetElement.class), new PropertyDescriptor(ACSTargetElement.DEPENDS, - ACSTargetElement.class, - "getClone", "copyDependsFromTarget"), + ACSTargetElement.class, + "getClone", "copyDependsFromTarget"), new PropertyDescriptor(ACSTargetElement.IF, - ACSTargetElement.class), + ACSTargetElement.class), new PropertyDescriptor(ACSTargetElement.UNLESS, - ACSTargetElement.class), - new PropertyDescriptor(ACSTargetElement.XML_STRING, - ACSTargetElement.class, - "getXMLString", null) + ACSTargetElement.class), +/* new PropertyDescriptor(ACSPropertyElement.NAMED_VALUES, // Prepared for future named values + ACSPropertyElement.class), */ + new PropertyDescriptor(ACSTargetElement.XML_STRING, + ACSTargetElement.class, + "getXMLString", null) }; - + // Set display names. retval[0].setDisplayName(getResources().getString( - getClass(),ACSTargetElement.NAME)); + getClass(),ACSTargetElement.NAME)); retval[1].setDisplayName(getResources().getString( - getClass(),ACSTargetElement.DESCRIPTION)); + getClass(),ACSTargetElement.DESCRIPTION)); retval[2].setDisplayName(getResources().getString( - getClass(),ACSTargetElement.DEPENDS)); + getClass(),ACSTargetElement.DEPENDS)); retval[3].setDisplayName(getResources().getString( - getClass(),ACSTargetElement.IF)); + getClass(),ACSTargetElement.IF)); retval[4].setDisplayName(getResources().getString( - getClass(),ACSTargetElement.UNLESS)); + getClass(),ACSTargetElement.UNLESS)); +/* retval[5].setDisplayName(getResources().getString( // Prepared for future named values + getClass(),ACSPropertyElement.NAMED_VALUES));*/ retval[5].setDisplayName(getResources().getString( - getClass(),ACSTargetElement.XML_STRING)); - + getClass(),ACSTargetElement.XML_STRING)); + setSortingOrder(retval); } catch(IntrospectionException ex) { ex.printStackTrace(); throw new Error(ex.toString()); } - + return retval; } - - + + /** Customizer for this bean info. */ public static class Customizer extends DynamicCustomizer { static { PropertyEditorManager.registerEditor( - org.apache.tools.ant.gui.acs.ACSTargetElement.class, org.apache.tools.ant.gui.modules.edit.DependentTargetPropertyEditor.class); + org.apache.tools.ant.gui.acs.ACSTargetElement.class, org.apache.tools.ant.gui.modules.edit.DependentTargetPropertyEditor.class); } public Customizer() { 1.4 +2 -51 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/acs-element.properties Index: acs-element.properties =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/acs-element.properties,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- acs-element.properties 30 Dec 2002 07:41:21 -0000 1.3 +++ acs-element.properties 13 Jan 2003 13:31:17 -0000 1.4 @@ -5,59 +5,10 @@ # The default node *Node=org.apache.tools.ant.gui.acs.ACSDefaultElement # The default element -*Element=org.apache.tools.ant.gui.acs.ACSDtdDefinedElement +*Element=org.apache.tools.ant.gui.acs.ACSIntrospectedElement # Specific elements. project=org.apache.tools.ant.gui.acs.ACSProjectElement property=org.apache.tools.ant.gui.acs.ACSPropertyElement target=org.apache.tools.ant.gui.acs.ACSTargetElement - -# Task elements -ant=org.apache.tools.ant.gui.acs.ACSTaskElement -antcall=org.apache.tools.ant.gui.acs.ACSTaskElement -available=org.apache.tools.ant.gui.acs.ACSTaskElement -chmod=org.apache.tools.ant.gui.acs.ACSTaskElement -copy=org.apache.tools.ant.gui.acs.ACSTaskElement -cvs=org.apache.tools.ant.gui.acs.ACSTaskElement -delete=org.apache.tools.ant.gui.acs.ACSTaskElement -deltree=org.apache.tools.ant.gui.acs.ACSTaskElement -echo=org.apache.tools.ant.gui.acs.ACSTaskElement -exec=org.apache.tools.ant.gui.acs.ACSTaskElement -expand=org.apache.tools.ant.gui.acs.ACSTaskElement -fail=org.apache.tools.ant.gui.acs.ACSTaskElement -filter=org.apache.tools.ant.gui.acs.ACSTaskElement -get=org.apache.tools.ant.gui.acs.ACSTaskElement -gzip=org.apache.tools.ant.gui.acs.ACSTaskElement -fixcrlf=org.apache.tools.ant.gui.acs.ACSTaskElement -jar=org.apache.tools.ant.gui.acs.ACSTaskElement -java=org.apache.tools.ant.gui.acs.ACSTaskElement -javac=org.apache.tools.ant.gui.acs.ACSTaskElement -javadoc=org.apache.tools.ant.gui.acs.ACSTaskElement -keysubst=org.apache.tools.ant.gui.acs.ACSTaskElement -mail=org.apache.tools.ant.gui.acs.ACSTaskElement -mkdir=org.apache.tools.ant.gui.acs.ACSTaskElement -recorder=org.apache.tools.ant.gui.acs.ACSTaskElement -rename=org.apache.tools.ant.gui.acs.ACSTaskElement -replace=org.apache.tools.ant.gui.acs.ACSTaskElement -rmic=org.apache.tools.ant.gui.acs.ACSTaskElement -tar=org.apache.tools.ant.gui.acs.ACSTaskElement -taskdef=org.apache.tools.ant.gui.acs.ACSTaskElement -tstamp=org.apache.tools.ant.gui.acs.ACSTaskElement -uptodate=org.apache.tools.ant.gui.acs.ACSTaskElement -zip=org.apache.tools.ant.gui.acs.ACSTaskElement - -# More task elements -p4sync=org.apache.tools.ant.gui.acs.ACSTaskElement -p4label=org.apache.tools.ant.gui.acs.ACSTaskElement -p4have=org.apache.tools.ant.gui.acs.ACSTaskElement -p4submit=org.apache.tools.ant.gui.acs.ACSTaskElement -p4edit=org.apache.tools.ant.gui.acs.ACSTaskElement -p4change=org.apache.tools.ant.gui.acs.ACSTaskElement -junit=org.apache.tools.ant.gui.acs.ACSTaskElement -ddcreator=org.apache.tools.ant.gui.acs.ACSTaskElement -ejbc=org.apache.tools.ant.gui.acs.ACSTaskElement -wlrun=org.apache.tools.ant.gui.acs.ACSTaskElement -wlstop=org.apache.tools.ant.gui.acs.ACSTaskElement -ejbjar=org.apache.tools.ant.gui.acs.ACSTaskElement -weblogic=org.apache.tools.ant.gui.acs.ACSTaskElement -TOPLink=org.apache.tools.ant.gui.acs.ACSTaskElement +task=org.apache.tools.ant.gui.acs.ACSTaskElement 1.1 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSIntrospectedElement.java Index: ACSIntrospectedElement.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 2003 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 [EMAIL PROTECTED] * * 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.util.Enumeration; import java.util.List; import java.util.Map; import org.apache.tools.ant.gui.command.NewElementCmd; import org.apache.tools.ant.gui.util.Collections; import org.apache.tools.ant.gui.xml.DOMNode; import org.apache.tools.ant.gui.xml.DOMAttributes; import org.apache.tools.ant.gui.xml.NamedDOMNodeMap; /** * An Introspected element. * * @version $Revision: 1.1 $ * @author Christoph Wilhelms<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> */ public class ACSIntrospectedElement 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"; /** Our menu string */ private String[] _menuString = null; /** * Default ctor. * */ public ACSIntrospectedElement() { } /** * Get the task type. * * @return Task type. */ public String getTaskType() { return getTagName(); } /** * Get the display name of this. * * @return Display name. */ public String getDisplayName() { String name = getTagName(); // Is there only one attribute? if (getAttributes().getLength() == 1) { DOMNode onlyNode = getAttributes().item(0); // Display the only attribute name += ": " + onlyNode.getNodeValue(); } else { // Display one of these attributes // if they are present. final String[] DISPLAY_ATTRIBUTES = { "name", "id", "property" }; for(int i = 0; i < DISPLAY_ATTRIBUTES.length; i++) { DOMNode testNode = getAttributes().getNamedItem(DISPLAY_ATTRIBUTES[i]); if (testNode != null) { name += ": " + testNode.getNodeValue(); break; } } } return name; } /** * 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 DOMAttributes getNamedValues() { Map m = ACSFactory.getInstance().getClassInfo(getTagName(), (this instanceof ACSTargetElement))._attributes; DOMAttributes d = new DOMAttributes(m); NamedDOMNodeMap attribs = getAttributes(); for(int i = 0, len = attribs.getLength(); i < len; i++) { DOMNode n = attribs.item(i); d.setProperty(n.getNodeName(), n.getNodeValue()); } return d; } /** * 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(DOMAttributes attributes) { // XXX this code really sucks. It is really annoying that the // DOM interfaces don't have a general "setAttributes()" or // "removeAllAttributes()" method, but instead make you // remove each attribute individually, or require you to figure // out what the differences are between the two. // Although this is very inefficient, I'm taking the conceptually // simplistic approach to this and brute force removing the existing // set and replacing it with a brand new set. If this becomes a // performance concern (which I doubt it will) it can be optimized // later. DOMAttributes old = (DOMAttributes) getNamedValues(); Enumeration enum = old.propertyNames(); while(enum.hasMoreElements()) { String name = (String) enum.nextElement(); removeAttribute(name); } enum = attributes.propertyNames(); while(enum.hasMoreElements()) { String key = (String) enum.nextElement(); setAttribute(key, attributes.getProperty(key)); } firePropertyChange(NAMED_VALUES, old, attributes); } /** * Returns the menu items which may be used for this element. */ public String[] getMenuString() { // If it already exists, use it. if (_menuString != null) { return _menuString; } // Find the DtdElement String name = getTagName(); // Are we the project element? boolean isProject = false; if (name.equals("project")) { isProject = true; } if (isProject) { _menuString = new String[1]; _menuString[_menuString.length-1] = "newElement"; } else { // Add the delete and generic create commands _menuString = new String[(2)]; _menuString[_menuString.length-1] = "deleteElement"; _menuString[_menuString.length-2] = "newElement"; } String[] possibleChildren = getPossibleChildren(TYPE_ELEMENTS); int dim = possibleChildren.length; if (dim > 0) dim++; if (!isProject) dim++; int j = 0; _menuString = new String[dim]; if (possibleChildren.length > 0) { _menuString[j] = "newElement"; j++; } if (!isProject) { _menuString[j] = "deleteElement"; j++; } for (int i=0; i< possibleChildren.length;i++) { _menuString[j] = possibleChildren[i]; j++; } 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"; } public final static int ALL_ELEMENTS = 3; public final static int TASK_ELEMENTS = 1; public final static int TYPE_ELEMENTS = 2; /** * Returns a string array which contains this elements * possible children. * * @param childType ACSIntrospectedElement.ALL_ELEMENTS or * ACSIntrospectedElement.TASK_ELEMENTS * ACSIntrospectedElement.TYPE_ELEMENTS */ public String[] getPossibleChildren(int type) { Map m = new java.util.HashMap(); switch (type) { case ALL_ELEMENTS: m = ACSFactory.getInstance().getClassInfo(getTagName(), (this instanceof ACSTargetElement))._subelements; if (this instanceof ACSTargetElement) m.putAll(ACSFactory.getInstance().getTasks()); break; case TASK_ELEMENTS: if (this instanceof ACSTargetElement) m = ACSFactory.getInstance().getTasks(); else m = new java.util.HashMap(); break; case TYPE_ELEMENTS: m = ACSFactory.getInstance().getClassInfo(getTagName(), (this instanceof ACSTargetElement))._subelements; break; } String a[] = new String[m.keySet().size()]; int i = 0; java.util.Iterator it = m.keySet().iterator(); while (it.hasNext()) { a[i] = (String)it.next(); i++; } java.util.Arrays.sort(a); return a; } } 1.1 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/acs/ACSIntrospectedElementBeanInfo.java Index: ACSIntrospectedElementBeanInfo.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 2003 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 [EMAIL PROTECTED] * * 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.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.PropertyEditorManager; import org.apache.tools.ant.gui.customizer.DynamicCustomizer; import org.apache.tools.ant.gui.xml.DOMAttributes; import org.apache.tools.ant.gui.modules.edit.AttributePropertyEditor; /** * BeanInfo for the ACSIntrospectedElementBeanInfo class. * * @version $Revision: 1.1 $ * @author Christoph Wilhelms<a href="mailto:[EMAIL PROTECTED]">Christoph Wilhelms</a> */ public class ACSIntrospectedElementBeanInfo extends BaseBeanInfo { /** * Default ctor. * */ public ACSIntrospectedElementBeanInfo() { } /** * Get the type that this BeanInfo represents. * * @return Type. */ public Class getType() { return ACSIntrospectedElement.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(ACSIntrospectedElement.TASK_TYPE, ACSIntrospectedElement.class, "getTaskType", null), new PropertyDescriptor(ACSIntrospectedElement.NAMED_VALUES, ACSIntrospectedElement.class), new PropertyDescriptor(ACSIntrospectedElement.XML_STRING, ACSIntrospectedElement.class, "getXMLString", null) }; int pos = 0; retval[pos++].setDisplayName(getResources().getString( getClass(),ACSIntrospectedElement.TASK_TYPE)); retval[pos++].setDisplayName(getResources().getString( getClass(),ACSIntrospectedElement.NAMED_VALUES)); retval[pos++].setDisplayName(getResources().getString( getClass(),ACSIntrospectedElement.XML_STRING)); setSortingOrder(retval); } catch(IntrospectionException ex) { ex.printStackTrace(); throw new Error(ex.toString()); } return retval; } /** Customizer for this bean info. */ public static class Customizer extends DynamicCustomizer { static { PropertyEditorManager.registerEditor( DOMAttributes.class, AttributePropertyEditor.class); } public Customizer() { super(ACSIntrospectedElement.class); } } } 1.4 +31 -34 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/command/NewElementCmd.java Index: NewElementCmd.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/command/NewElementCmd.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- NewElementCmd.java 4 May 2001 18:50:13 -0000 1.3 +++ NewElementCmd.java 13 Jan 2003 13:31:17 -0000 1.4 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,7 +57,7 @@ import java.util.EventObject; -import org.apache.tools.ant.gui.acs.ACSDtdDefinedElement; +import org.apache.tools.ant.gui.acs.ACSIntrospectedElement; import org.apache.tools.ant.gui.acs.ACSElement; import org.apache.tools.ant.gui.acs.ACSFactory; @@ -73,41 +73,41 @@ /** * Command for creating a new propertyh. - * - * @version $Revision$ - * @author Simeon Fitch + * + * @version $Revision$ + * @author Simeon Fitch, Christoph Wilhelms */ public class NewElementCmd extends AbstractCommand { - /** New count for this session. Used to create default names, + /** 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. - */ + /** + * 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(); + 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(); @@ -116,53 +116,50 @@ } AbstractButton button = (AbstractButton) source; String name = button.getText(); - + // Get the AntAction String cmdStr = button.getActionCommand(); AntAction antAction = getContext().getActions().getAction(cmdStr); if (antAction == null) { return; } - + ACSElement e = vals[vals.length - 1]; // Should we prompt the user use the element type? if (antAction.getName().equals(name)) { // Display the dialog box. - ACSDtdDefinedElement dtde = (ACSDtdDefinedElement) e; + ACSIntrospectedElement dtde = (ACSIntrospectedElement) e; NewElementDlg dlg = new NewElementDlg( - getContext().getParentFrame(), true); + getContext().getParentFrame(), true); dlg.setLists( - dtde.getPossibleChildren(ANTDocumentType.CORE_ELEMENT), - dtde.getPossibleChildren(ANTDocumentType.OPTIONAL_ELEMENT) ); + dtde.getPossibleChildren(ACSIntrospectedElement.TASK_ELEMENTS), + dtde.getPossibleChildren(ACSIntrospectedElement.TYPE_ELEMENTS) ); dlg.pack(); WindowUtils.centerWindow(dlg); dlg.setTitle("Select the new element type"); dlg.setVisible(true); - - // Get the element type + + // 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); + ACSElement retval = + ACSFactory.getInstance().createElement(e, name); getContext().getEventBus().postEvent( - new NewBaseElementEvent(getContext(), retval)); + new NewBaseElementEvent(getContext(), retval)); } else { - // Request a refresh so the popup menu is removed + // Request a refresh so the popup menu is removed // from the display. getContext().getEventBus().postEvent( - new RefreshDisplayEvent(getContext())); + new RefreshDisplayEvent(getContext())); } } -} - - - +} \ No newline at end of file 1.3 +4 -4 jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/command/NewElementDlg.java Index: NewElementDlg.java =================================================================== RCS file: /home/cvs/jakarta-ant-antidote/src/java/org/apache/tools/ant/gui/command/NewElementDlg.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- NewElementDlg.java 17 Apr 2001 00:24:28 -0000 1.2 +++ NewElementDlg.java 13 Jan 2003 13:31:17 -0000 1.3 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999, 2000 The Apache Software Foundation. All rights + * Copyright (c) 2000 - 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -62,7 +62,7 @@ * A Dialog which asks for a new xml element's type. * * @version $Revision$ - * @author Nick Davis<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> + * @author Nick Davis<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>, Christoph Wilhelms<a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> */ public class NewElementDlg extends javax.swing.JDialog { // Dialog's components @@ -263,7 +263,7 @@ _listScrollPane = new javax.swing.JScrollPane(); _elementList = new javax.swing.JList(); _optionalButton = new javax.swing.JCheckBox( - "show optional elements", false); + "show type elements", false); getContentPane().setLayout(new java.awt.BorderLayout(10, 10)); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) {
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>