Browse Source

Greatly enhanced the property editor, adding new bean info for the

element types and an additional property editor. The navigator now shows
project, property, target and task nodes.
PR:
Obtained from:
Submitted by:
Reviewed by:


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268170 13f79535-47bb-0310-9956-ffa450edef68
master
metasim 24 years ago
parent
commit
6a6e0bd264
15 changed files with 286 additions and 254 deletions
  1. +1
    -1
      src/antidote/org/apache/tools/ant/gui/LabelFieldGBC.java
  2. +9
    -5
      src/antidote/org/apache/tools/ant/gui/ProjectProxy.java
  3. +16
    -12
      src/antidote/org/apache/tools/ant/gui/PropertyEditor.java
  4. +0
    -96
      src/antidote/org/apache/tools/ant/gui/TargetSelectionModel.java
  5. +11
    -1
      src/antidote/org/apache/tools/ant/gui/acs/ACSElement.java
  6. +16
    -0
      src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java
  7. +51
    -1
      src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java
  8. +15
    -1
      src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElementBeanInfo.java
  9. +71
    -8
      src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElement.java
  10. +28
    -6
      src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElementBeanInfo.java
  11. +16
    -2
      src/antidote/org/apache/tools/ant/gui/acs/BaseBeanInfo.java
  12. +1
    -0
      src/antidote/org/apache/tools/ant/gui/acs/acs-element.properties
  13. +0
    -14
      src/antidote/org/apache/tools/ant/gui/acs/beaninfo.properties
  14. +51
    -8
      src/antidote/org/apache/tools/ant/gui/customizer/DynamicCustomizer.java
  15. +0
    -99
      src/antidote/org/apache/tools/ant/gui/event/TargetSelectionEvent.java

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

@@ -92,7 +92,7 @@ public class LabelFieldGBC extends GridBagConstraints {
// Set location to left side. // Set location to left side.
gridx = 0; gridx = 0;
// Move it over to be as close to field as possible. // Move it over to be as close to field as possible.
anchor = EAST;
anchor = NORTHEAST;
// Don't take up any extra. // Don't take up any extra.
weightx = 0.0; weightx = 0.0;
return this; return this;


+ 9
- 5
src/antidote/org/apache/tools/ant/gui/ProjectProxy.java View File

@@ -85,7 +85,7 @@ public class ProjectProxy {
/** The current thread executing a build. */ /** The current thread executing a build. */
private Thread _buildThread = null; private Thread _buildThread = null;
/** The selection model for selected targets. */ /** The selection model for selected targets. */
private TargetSelectionModel _selections = null;
private ElementSelectionModel _selections = null;


/** /**
* File loading ctor. * File loading ctor.
@@ -104,7 +104,7 @@ public class ProjectProxy {
*/ */
private void loadProject() throws IOException { private void loadProject() throws IOException {
_project = ACSFactory.getInstance().load(_file); _project = ACSFactory.getInstance().load(_file);
_selections = new TargetSelectionModel();
_selections = new ElementSelectionModel();
_selections.addTreeSelectionListener(new SelectionForwarder()); _selections.addTreeSelectionListener(new SelectionForwarder());
} }


@@ -169,7 +169,7 @@ public class ProjectProxy {
* *
* @return Selection model. * @return Selection model.
*/ */
public TreeSelectionModel getTreeSelectionModel() {
public ElementSelectionModel getTreeSelectionModel() {
return _selections; return _selections;
} }


@@ -209,6 +209,10 @@ public class ProjectProxy {
} }
} }


/**
* Run the build.
*
*/
public void run() { public void run() {
// Add the build listener for // Add the build listener for
// dispatching BuildEvent objects to the // dispatching BuildEvent objects to the
@@ -255,8 +259,8 @@ public class ProjectProxy {
/** Forwards selection events to the event bus. */ /** Forwards selection events to the event bus. */
private class SelectionForwarder implements TreeSelectionListener { private class SelectionForwarder implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent e) { public void valueChanged(TreeSelectionEvent e) {
_context.getEventBus().postEvent(new TargetSelectionEvent(
_context, _selections.getSelectedTargets()));
_context.getEventBus().postEvent(new ElementSelectionEvent(
_context, _selections.getSelectedElements()));
} }
} }




+ 16
- 12
src/antidote/org/apache/tools/ant/gui/PropertyEditor.java View File

@@ -72,6 +72,8 @@ class PropertyEditor extends AntEditor {


/** The property sheet. */ /** The property sheet. */
private DynamicCustomizer _customizer = null; private DynamicCustomizer _customizer = null;
/** Container for the customizer. */
private JPanel _container = null;


/** /**
* Standard ctor. * Standard ctor.
@@ -82,23 +84,25 @@ class PropertyEditor extends AntEditor {
super(context); super(context);
context.getEventBus().addMember(EventBus.MONITORING, new Handler()); context.getEventBus().addMember(EventBus.MONITORING, new Handler());
setLayout(new BorderLayout()); setLayout(new BorderLayout());
_container = new JPanel(new BorderLayout());
add(new JScrollPane(_container));
} }


/** /**
* Update the display for the current item.
* Update the display for the current items.
* *
* @param item Current item.
* @param items Current items to display.
*/ */
private void updateDisplay(ACSElement item) {
private void updateDisplay(ACSElement[] items) {
if(_customizer != null) { if(_customizer != null) {
remove(_customizer);
_container.remove(_customizer);
_customizer = null; _customizer = null;
} }


if(item != null) {
_customizer = new DynamicCustomizer(item.getClass(), true);
_customizer.setObject(item);
add(BorderLayout.CENTER, _customizer);
if(items != null) {
_customizer = new DynamicCustomizer(items[0].getClass());
_customizer.setObject(items[0]);
_container.add(BorderLayout.CENTER, _customizer);
} }
validate(); validate();
} }
@@ -124,9 +128,9 @@ class PropertyEditor extends AntEditor {
* @param event Event to post. * @param event Event to post.
*/ */
public void eventPosted(EventObject event) { public void eventPosted(EventObject event) {
TargetSelectionEvent e = (TargetSelectionEvent) event;
ACSTargetElement[] targets = e.getSelectedTargets();
updateDisplay(targets.length == 0 ? null : targets[0]);
ElementSelectionEvent e = (ElementSelectionEvent) event;
ACSElement[] elements = e.getSelectedElements();
updateDisplay(elements);
} }


} }
@@ -139,7 +143,7 @@ class PropertyEditor extends AntEditor {
* @return True if event should be given to BusMember, false otherwise. * @return True if event should be given to BusMember, false otherwise.
*/ */
public boolean accept(EventObject event) { public boolean accept(EventObject event) {
return event instanceof TargetSelectionEvent;
return event instanceof ElementSelectionEvent;
} }
} }
} }

+ 0
- 96
src/antidote/org/apache/tools/ant/gui/TargetSelectionModel.java View File

@@ -1,96 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.gui;
import org.apache.tools.ant.gui.acs.ACSTargetElement;

import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreePath;
import java.util.*;

/**
* Selection model for the currently selected targets.
*
* @version $Revision$
* @author Simeon Fitch
*/
class TargetSelectionModel extends DefaultTreeSelectionModel {
/**
* Default ctor.
*
*/
public TargetSelectionModel() {
setSelectionMode(DISCONTIGUOUS_TREE_SELECTION);
}

/**
* Convenience method for providing the set of currently selected
* targets.
*
* @return the currently selected targets.
*/
public ACSTargetElement[] getSelectedTargets() {
TreePath[] path = getSelectionPaths();
List values = new LinkedList();
for(int i = 0; path != null && i < path.length; i++) {
Object val = path[i].getLastPathComponent();
if(val instanceof ACSTargetElement) {
values.add(val);
}
}

ACSTargetElement[] retval = new ACSTargetElement[values.size()];
values.toArray(retval);
return retval;
}
}

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

@@ -65,6 +65,8 @@ import java.beans.PropertyChangeSupport;
* @version $Revision$ * @version $Revision$
* @author Simeon Fitch */ * @author Simeon Fitch */
public abstract class ACSElement extends ElementNode { public abstract class ACSElement extends ElementNode {
/** Name of the 'xmlString' property. */
public static final String XML_STRING = "xmlString";


/** Event support. */ /** Event support. */
private PropertyChangeSupport _propSupport = null; private PropertyChangeSupport _propSupport = null;
@@ -74,7 +76,6 @@ public abstract class ACSElement extends ElementNode {
* *
*/ */
protected ACSElement() { protected ACSElement() {

} }


/** /**
@@ -86,6 +87,15 @@ public abstract class ACSElement extends ElementNode {
return getTagName(); return getTagName();
} }


/**
* Get the XML representation of this.
*
* @return XML representation.
*/
public String getXMLString() {
return toString();
}

/** /**
* Add a change listener. * Add a change listener.
* *


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

@@ -62,6 +62,7 @@ import com.sun.xml.tree.SimpleElementFactory;
import com.sun.xml.tree.XmlDocument; import com.sun.xml.tree.XmlDocument;
import com.sun.xml.tree.XmlDocumentBuilder; import com.sun.xml.tree.XmlDocumentBuilder;
import java.util.Properties; import java.util.Properties;
import java.util.Enumeration;
import com.sun.xml.parser.Resolver; import com.sun.xml.parser.Resolver;


/** /**
@@ -79,10 +80,25 @@ public class ACSFactory {


static { static {
try { try {
// 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.
getResourceAsStream("defaults.properties"));
Enumeration enum = _elementMap.propertyNames();
while(enum.hasMoreElements()) {
String name = (String) enum.nextElement();
// XXX the name of the class needs to be stored externally.
_elementMap.setProperty(
name, "org.apache.tools.ant.gui.acs.ACSTaskElement");
}

// Then we add/override the local definitions.
_elementMap.load(ACSFactory.class. _elementMap.load(ACSFactory.class.
getResourceAsStream("acs-element.properties")); getResourceAsStream("acs-element.properties"));
} }
catch(Throwable ex) { catch(Throwable ex) {
// If something wrong happens here we can't do much more...
ex.printStackTrace(); ex.printStackTrace();
System.exit(1); System.exit(1);
} }


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

@@ -62,8 +62,17 @@ import com.sun.xml.tree.ElementNode;
* @author Simeon Fitch * @author Simeon Fitch
*/ */
public class ACSProjectElement extends ACSNamedElement { public class ACSProjectElement extends ACSNamedElement {
public ACSProjectElement() {
/** The 'default' property name. */
public static final String DEFAULT = "default";
/** The 'basdir' property name. */
public static final String BASEDIR = "basedir";



/**
* Default ctor.
*
*/
public ACSProjectElement() {
} }


/** /**
@@ -83,4 +92,45 @@ public class ACSProjectElement extends ACSNamedElement {
public String getDisplayName() { public String getDisplayName() {
return getTagName() + ": " + getName(); return getTagName() + ": " + getName();
} }

/**
* 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.
*/
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
*/
public String getBasedir() {
return getAttribute(BASEDIR);
}

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

} }

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

@@ -56,7 +56,7 @@ package org.apache.tools.ant.gui.acs;
import java.beans.*; import java.beans.*;


/** /**
* BeanInfo for the ACSTargetElement class.
* BeanInfo for the ACSProjectElement class.
* *
* @version $Revision$ * @version $Revision$
* @author Simeon Fitch * @author Simeon Fitch
@@ -91,9 +91,23 @@ public class ACSProjectElementBeanInfo extends BaseBeanInfo {
new PropertyDescriptor(ACSProjectElement.NAME, new PropertyDescriptor(ACSProjectElement.NAME,
ACSProjectElement.class), ACSProjectElement.class),
new PropertyDescriptor(ACSProjectElement.DESCRIPTION, new PropertyDescriptor(ACSProjectElement.DESCRIPTION,
ACSProjectElement.class),
new PropertyDescriptor(ACSProjectElement.DEFAULT,
ACSProjectElement.class),
new PropertyDescriptor(ACSProjectElement.BASEDIR,
ACSProjectElement.class) ACSProjectElement.class)


}; };
retval[0].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.NAME));
retval[1].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.DESCRIPTION));
retval[2].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.DEFAULT));
retval[3].setDisplayName(getResources().getString(
getClass(),ACSProjectElement.BASEDIR));

setSortingOrder(retval);
} }
catch(IntrospectionException ex) { catch(IntrospectionException ex) {
ex.printStackTrace(); ex.printStackTrace();


+ 71
- 8
src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElement.java View File

@@ -64,6 +64,13 @@ import java.util.StringTokenizer;
*/ */
public class ACSTargetElement extends ACSNamedElement { public class ACSTargetElement extends ACSNamedElement {


/** Dependency property name. */
public static final String DEPENDS = "depends";
/** 'if' clause property name. */
public static final String IF = "if";
/** 'unless' clause property name. */
public static final String UNLESS = "unless";

/** /**
* Default ctor. * Default ctor.
* *
@@ -73,29 +80,85 @@ public class ACSTargetElement extends ACSNamedElement {
} }


/** /**
* Set the set of dependency names.
* Get the display name.
*
* @return Display name.
*/
public String getDisplayName() {
return getTagName() + ": " + getName();
}

/**
* Get the set of dependency names.
* *
* @return Dependency names. * @return Dependency names.
*/ */
public String[] getDependencyNames() {
String depends = getAttribute("depends");
public String[] getDepends() {
String depends = getAttribute(DEPENDS);
StringTokenizer tok = new StringTokenizer(depends,","); StringTokenizer tok = new StringTokenizer(depends,",");
String[] retval = new String[tok.countTokens()]; String[] retval = new String[tok.countTokens()];
for(int i = 0; i < retval.length; i++) { for(int i = 0; i < retval.length; i++) {
retval[i] = tok.nextToken();
retval[i] = tok.nextToken().trim();
} }
return retval; return retval;
} }


/** /**
* Get the display name.
* Set the list of dependency names.
* *
* @return Display name.
* @param depends Dependency names.
*/ */
public String getDisplayName() {
return getTagName() + ": " + getName();
public void setDepends(String[] depends) {
String old = getAttribute(DEPENDS);
StringBuffer buf = new StringBuffer();
for(int i = 0; depends != null && i < depends.length; i++) {
buf.append(depends[i]);
if(i < depends.length - 1) {
buf.append(", ");
}
}
setAttribute(DEPENDS, buf.toString());
firePropertyChange(DEPENDS, old, buf.toString());
}

/**
* Get the 'if' clause.
*
* @return 'if' clause.
*/
public String getIf() {
return getAttribute(IF);
}
/**
* Set the 'if' clause.
*
* @param val 'if' clause value.
*/
public void setIf(String val) {
String old = getIf();
setAttribute(IF, val);
firePropertyChange(IF, old, val);
} }


/**
* Get the 'unless' clause.
*
* @return 'unless' clause.
*/
public String getUnless() {
return getAttribute(UNLESS);
}


/**
* Set the 'unless' clause.
*
* @param val 'unless' clase value.
*/
public void setUnless(String val) {
String old = getUnless();
setAttribute(UNLESS, val);
firePropertyChange(UNLESS, old, val);
}
} }

+ 28
- 6
src/antidote/org/apache/tools/ant/gui/acs/ACSTargetElementBeanInfo.java View File

@@ -88,14 +88,36 @@ public class ACSTargetElementBeanInfo extends BaseBeanInfo {


try { try {
retval = new PropertyDescriptor[] { retval = new PropertyDescriptor[] {
new PropertyDescriptor(getResources().getString(
getClass(),ACSTargetElement.NAME),
new PropertyDescriptor(ACSTargetElement.NAME,
ACSTargetElement.class), ACSTargetElement.class),
new PropertyDescriptor(getResources().getString(
getClass(),ACSTargetElement.DESCRIPTION),
ACSTargetElement.class)

new PropertyDescriptor(ACSTargetElement.DESCRIPTION,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.DEPENDS,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.IF,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.UNLESS,
ACSTargetElement.class),
new PropertyDescriptor(ACSTargetElement.XML_STRING,
ACSTargetElement.class,
"getXMLString", null)
}; };

// Set display names.
retval[0].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.NAME));
retval[1].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.DESCRIPTION));
retval[2].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.DEPENDS));
retval[3].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.IF));
retval[4].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.UNLESS));
retval[5].setDisplayName(getResources().getString(
getClass(),ACSTargetElement.XML_STRING));

setSortingOrder(retval);
} }
catch(IntrospectionException ex) { catch(IntrospectionException ex) {
ex.printStackTrace(); ex.printStackTrace();


+ 16
- 2
src/antidote/org/apache/tools/ant/gui/acs/BaseBeanInfo.java View File

@@ -54,6 +54,7 @@
package org.apache.tools.ant.gui.acs; package org.apache.tools.ant.gui.acs;


import org.apache.tools.ant.gui.ResourceManager; import org.apache.tools.ant.gui.ResourceManager;
import org.apache.tools.ant.gui.customizer.DynamicCustomizer;
import java.beans.*; import java.beans.*;


/** /**
@@ -63,10 +64,11 @@ import java.beans.*;
* @author Simeon Fitch * @author Simeon Fitch
*/ */
abstract class BaseBeanInfo extends SimpleBeanInfo { abstract class BaseBeanInfo extends SimpleBeanInfo {
/** Property name for specifiying a sorting order. */
public static final String SORT_ORDER = DynamicCustomizer.SORT_ORDER;


/** Resource provider for bean info. */ /** Resource provider for bean info. */
private static ResourceManager _resources = new ResourceManager(
"org.apache.tools.ant.gui.acs.beaninfo");
private static ResourceManager _resources = new ResourceManager();


/** /**
* Default ctor. * Default ctor.
@@ -93,6 +95,18 @@ abstract class BaseBeanInfo extends SimpleBeanInfo {
return new ACSBeanDescriptor(this); return new ACSBeanDescriptor(this);
} }


/**
* Set the sorting order property of the given objects based
* on the order that they appear in the array.
*
* @param vals FeatureDescriptors to set sorting order property for.
*/
protected void setSortingOrder(FeatureDescriptor[] vals) {
for(int i = 0; i < vals.length; i++) {
vals[i].setValue(SORT_ORDER, new Integer(i));
}
}

/** /**
* Get the type that this BeanInfo represents. * Get the type that this BeanInfo represents.
* *


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

@@ -7,4 +7,5 @@


# 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
target=org.apache.tools.ant.gui.acs.ACSTargetElement target=org.apache.tools.ant.gui.acs.ACSTargetElement

+ 0
- 14
src/antidote/org/apache/tools/ant/gui/acs/beaninfo.properties View File

@@ -1,14 +0,0 @@
# Properties file for BeanInfo strings

org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.beanName=Target
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.beanDescription=\
An executable target in the build.
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.name=Name
org.apache.tools.ant.gui.acs.ACSTargetElementBeanInfo.description=Description

org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.beanName=Project
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.beanDescription=\
The top level project in the build definition.
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.name=Name
org.apache.tools.ant.gui.acs.ACSProjectElementBeanInfo.description=Description


+ 51
- 8
src/antidote/org/apache/tools/ant/gui/customizer/DynamicCustomizer.java View File

@@ -57,8 +57,7 @@ import org.apache.tools.ant.gui.LabelFieldGBC;
import java.lang.reflect.*; import java.lang.reflect.*;
import java.beans.*; import java.beans.*;
import javax.swing.*; import javax.swing.*;
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.*;
import java.awt.GridBagLayout; import java.awt.GridBagLayout;
import java.awt.GridBagConstraints; import java.awt.GridBagConstraints;
import java.awt.Component; import java.awt.Component;
@@ -74,6 +73,8 @@ public class DynamicCustomizer extends JPanel {
static { static {
PropertyEditorManager.registerEditor( PropertyEditorManager.registerEditor(
String.class, StringPropertyEditor.class); String.class, StringPropertyEditor.class);
PropertyEditorManager.registerEditor(
String[].class, StringArrayPropertyEditor.class);
PropertyEditorManager.registerEditor( PropertyEditorManager.registerEditor(
int.class, IntegerPropertyEditor.class); int.class, IntegerPropertyEditor.class);
PropertyEditorManager.registerEditor( PropertyEditorManager.registerEditor(
@@ -84,14 +85,19 @@ public class DynamicCustomizer extends JPanel {
Double.class, DoublePropertyEditor.class); Double.class, DoublePropertyEditor.class);
} }


/** Property name that PropertyDescriptors can save in their property
* dictionaries for for specifiying a display sorting order. The value
* sould be of type Integer. */
public static final String SORT_ORDER = "sortOrder";

/** The type that this editor instance can handle. */ /** The type that this editor instance can handle. */
private Class _type = null; private Class _type = null;
/** The value currently being edited. */ /** The value currently being edited. */
private Object _value = null; private Object _value = null;
/** Mapping from PropertyDescriptor to PropertyEditor. */ /** Mapping from PropertyDescriptor to PropertyEditor. */
private Hashtable _prop2Editor = new Hashtable();
private Map _prop2Editor = new HashMap();
/** Mapping from PropertyEditor to field PropertyDescriptor. */ /** Mapping from PropertyEditor to field PropertyDescriptor. */
private Hashtable _editor2Prop = new Hashtable();
private Map _editor2Prop = new HashMap();
/** Listener for receiving change events from the editors. */ /** Listener for receiving change events from the editors. */
private EditorChangeListener _eListener = new EditorChangeListener(); private EditorChangeListener _eListener = new EditorChangeListener();
/** Read-only flag. */ /** Read-only flag. */
@@ -121,11 +127,18 @@ public class DynamicCustomizer extends JPanel {
LabelFieldGBC gbc = new LabelFieldGBC(); LabelFieldGBC gbc = new LabelFieldGBC();
try { try {
BeanInfo info = Introspector.getBeanInfo(type); BeanInfo info = Introspector.getBeanInfo(type);
// Set up pretty display stuff.
setBorder(BorderFactory.createTitledBorder( setBorder(BorderFactory.createTitledBorder(
info.getBeanDescriptor().getDisplayName())); info.getBeanDescriptor().getDisplayName()));
setToolTipText(info.getBeanDescriptor().getShortDescription());

// Get the properties and sort them.
PropertyDescriptor[] props = info.getPropertyDescriptors(); PropertyDescriptor[] props = info.getPropertyDescriptors();
Arrays.sort(props, new PropertyComparator());
for(int i = 0; i < props.length; i++) { for(int i = 0; i < props.length; i++) {
// Ignore the "class" property, if it is provided.
if(props[i].getName().equals("class")) continue; if(props[i].getName().equals("class")) continue;
// Create a label for the field.
JLabel label = new JLabel(props[i].getDisplayName() + ":"); JLabel label = new JLabel(props[i].getDisplayName() + ":");
// Lookup the editor. // Lookup the editor.
@@ -195,9 +208,9 @@ public class DynamicCustomizer extends JPanel {
// Iterate over each property, doing a lookup on the associated editor // Iterate over each property, doing a lookup on the associated editor
// and setting the editor's value to the value of the property. // and setting the editor's value to the value of the property.
Enumeration enum = _prop2Editor.keys();
while(enum.hasMoreElements()) {
PropertyDescriptor desc = (PropertyDescriptor) enum.nextElement();
Iterator it = _prop2Editor.keySet().iterator();
while(it.hasNext()) {
PropertyDescriptor desc = (PropertyDescriptor) it.next();
PropertyEditor editor = (PropertyEditor) _prop2Editor.get(desc); PropertyEditor editor = (PropertyEditor) _prop2Editor.get(desc);
Method reader = desc.getReadMethod(); Method reader = desc.getReadMethod();
if(reader != null) { if(reader != null) {
@@ -215,6 +228,12 @@ public class DynamicCustomizer extends JPanel {
} }
} }


/**
* Get the appropriate editor for the given property.
*
* @param prop Property to get editor for.
* @return Editor to use, or null if none found.
*/
private PropertyEditor getEditorForProperty(PropertyDescriptor prop) { private PropertyEditor getEditorForProperty(PropertyDescriptor prop) {
PropertyEditor retval = null; PropertyEditor retval = null;
Class type = prop.getPropertyEditorClass(); Class type = prop.getPropertyEditorClass();
@@ -231,7 +250,10 @@ public class DynamicCustomizer extends JPanel {
// PropertyEditor manager for the editor registered for the // PropertyEditor manager for the editor registered for the
// given property type. // given property type.
if(retval == null) { if(retval == null) {
retval = PropertyEditorManager.findEditor(prop.getPropertyType());
Class t = prop.getPropertyType();
if(t != null) {
retval = PropertyEditorManager.findEditor(t);
}
} }


return retval; return retval;
@@ -262,6 +284,27 @@ public class DynamicCustomizer extends JPanel {
} }




/** Comparator for sorting PropertyDescriptor values. */
private static class PropertyComparator implements Comparator {
public int compare(Object o1, Object o2) {
PropertyDescriptor p1 = (PropertyDescriptor)o1;
PropertyDescriptor p2 = (PropertyDescriptor)o2;

Integer i1 = (Integer) p1.getValue(SORT_ORDER);
Integer i2 = (Integer) p2.getValue(SORT_ORDER);
if(i1 == null && i2 == null) {
return 0;
}
else if(i1 != null) {
return i1.compareTo(i2);
}
else {
return i2.compareTo(i1) * -1;
}
}
}

/** /**
* Test code. * Test code.
* *


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

@@ -1,99 +0,0 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999, 2000 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.gui.event;
import org.apache.tools.ant.gui.acs.ACSTargetElement;
import org.apache.tools.ant.gui.command.Command;
import org.apache.tools.ant.gui.command.NoOpCmd;
import org.apache.tools.ant.gui.AppContext;

/**
* Event indicating that the current set of selected targets has changed.
*
* @version $Revision$
* @author Simeon Fitch
*/
public class TargetSelectionEvent extends AntEvent {

/** New set of selected targets. */
private ACSTargetElement[] _selectedTargets = null;

/**
* Standard ctor.
*
* @param context application context.
*/
public TargetSelectionEvent(AppContext context,
ACSTargetElement[] selectedTargets) {
super(context);
_selectedTargets = selectedTargets;
}

/**
* Current set of selected targets.
*
* @return selected target set.
*/
public ACSTargetElement[] getSelectedTargets() {
return _selectedTargets;
}

/**
* Create the appropriate default response command to this event.
*
* @return Command representing an appropriate response to this event.
*/
public Command createDefaultCmd() {
return new NoOpCmd();
}
}

Loading…
Cancel
Save