Update of /cvsroot/xdoclet/xdoclet2/src/java/xdoclet/gui
In directory sc8-pr-cvs1:/tmp/cvs-serv16534/src/java/xdoclet/gui
Added Files:
BeanContextTreeModel.java ValueHolder.java
ValueHolderFactory.java package.html
Log Message:
Configuratoin GUI in Swing that provides the same functionality as Ant
--- NEW FILE: BeanContextTreeModel.java ---
package xdoclet.gui;
import xdoclet.BeanContextSupportEx;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.event.TreeModelListener;
import javax.swing.event.EventListenerList;
import javax.swing.event.TreeModelEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.beans.beancontext.BeanContext;
import java.beans.beancontext.BeanContextMembershipListener;
import java.beans.beancontext.BeanContextMembershipEvent;
/**
* This is a TreeModel for BeanContexts modeled after Swing's [EMAIL PROTECTED]
TreeModel}
* interface. It can also be used to populate an Eclipse Tree.
*
* @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a>
* @version $Revision: 1.1 $
*/
public class BeanContextTreeModel implements TreeModel, BeanContextMembershipListener {
private final BeanContextSupportEx _root;
private EventListenerList listenerList = new EventListenerList();
public BeanContextTreeModel( BeanContextSupportEx root ) {
_root = root;
// We want to be notified when the content of a node changes,
// so we can notify our own listeners (typically JTrees).
listenForBeanContextMembershipEvents(root);
}
public Object getRoot() {
return _root;
}
public Object getChild(Object parent, int index) {
return new ArrayList((BeanContext)parent).get(index);
}
public int getChildCount(Object parent) {
if( parent instanceof BeanContext) {
return ((BeanContext)parent).size();
} else {
return 0;
}
}
public boolean isLeaf(Object node) {
return getChildCount(node) == 0;
}
public void valueForPathChanged(TreePath path, Object newValue) {
}
public int getIndexOfChild(Object parent, Object child) {
return new ArrayList((BeanContext)parent).indexOf(child);
}
public void addTreeModelListener(TreeModelListener l) {
listenerList.add(TreeModelListener.class, l);
}
public void removeTreeModelListener(TreeModelListener l) {
listenerList.remove(TreeModelListener.class, l);
}
private void fireTreeNodesInserted(Object source, Object[] path,
int[] childIndices,
Object[] children) {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
TreeModelEvent e = null;
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==TreeModelListener.class) {
// Lazily create the event:
if (e == null)
e = new TreeModelEvent(source, path,
childIndices, children);
((TreeModelListener)listeners[i+1]).treeNodesInserted(e);
}
}
}
private void fireTreeNodesRemoved(Object source, Object[] path,
int[] childIndices,
Object[] children) {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
TreeModelEvent e = null;
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==TreeModelListener.class) {
// Lazily create the event:
if (e == null)
e = new TreeModelEvent(source, path,
childIndices, children);
((TreeModelListener)listeners[i+1]).treeNodesRemoved(e);
}
}
}
private void fireTreeNodesChanged(Object source, Object[] path,
int[] childIndices,
Object[] children) {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
TreeModelEvent e = null;
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==TreeModelListener.class) {
// Lazily create the event:
if (e == null)
e = new TreeModelEvent(source, path,
childIndices, children);
((TreeModelListener)listeners[i+1]).treeNodesChanged(e);
}
}
}
public BeanContextSupportEx[] getPathToRoot(BeanContextSupportEx aNode) {
return getPathToRoot(aNode, 0);
}
private BeanContextSupportEx[] getPathToRoot(BeanContextSupportEx aNode, int
depth) {
BeanContextSupportEx[] retNodes;
// This method recurses, traversing towards the root in order
// size the array. On the way back, it fills in the nodes,
// starting from the root and working back to the original node.
/* Check for null, in case someone passed in a null node, or
they passed in an element that isn't rooted at root. */
if(aNode == null) {
if(depth == 0)
return null;
else
retNodes = new BeanContextSupportEx[depth];
}
else {
depth++;
if(aNode == getRoot())
retNodes = new BeanContextSupportEx[depth];
else
retNodes = getPathToRoot(aNode.getParent(), depth);
retNodes[retNodes.length - depth] = aNode;
}
return retNodes;
}
public void childrenAdded(BeanContextMembershipEvent bcme) {
System.out.println("childrenAdded:");
// Make a List out of the source bean context so that
// we can find indices.
List beanContextList = new ArrayList(bcme.getBeanContext());
Object[] added = bcme.toArray();
int[] indices = new int[added.length];
for( int i = 0; i < indices.length; i++ ) {
indices[i] = beanContextList.indexOf( added[i] );
System.out.println(" child: " + added[ i ] + ":" + indices[i] );
listenForBeanContextMembershipEvents((BeanContextSupportEx)added[i]);
}
fireTreeNodesInserted(this,
getPathToRoot((BeanContextSupportEx)bcme.getBeanContext()), indices, added );
}
/**
* Adds ourself as BeanContextMembershipListener to bean and recursively
* to all its children.
* @param bean the bean to listen to.
*/
private void listenForBeanContextMembershipEvents(BeanContextSupportEx bean) {
bean.addBeanContextMembershipListener(this);
for( Iterator children = bean.iterator(); children.hasNext(); ) {
BeanContextSupportEx child = (BeanContextSupportEx) children.next();
listenForBeanContextMembershipEvents( child );
}
}
public void childrenRemoved(BeanContextMembershipEvent bcme) {
}
}
--- NEW FILE: ValueHolder.java ---
package xdoclet.gui;
/**
* Interface to be implemented by classes that hold arbitrary values.
*
* @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a>
* @version $Revision: 1.1 $
*/
public interface ValueHolder {
Object getValue();
void setValue(Object o);
}
--- NEW FILE: ValueHolderFactory.java ---
package xdoclet.gui;
/**
*
* @author <a href="mailto:aslak.hellesoy at bekk.no">Aslak Hellesøy</a>
* @version $Revision: 1.1 $
*/
public interface ValueHolderFactory {
}
--- NEW FILE: package.html ---
<body>
GUI support for XDoclet. These classes can be used as basis for
IDE plugins. An Eclipse plugin will have to be written separately, but it can
reuse the classes in this package.
</body>
-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open!
Get cracking and register here for some mind boggling fun and
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
xdoclet-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-devel