package org.jboss.console.navtree;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import org.jboss.console.manager.interfaces.SimpleTreeNodeMenuEntry;
import org.jboss.console.manager.interfaces.TreeAction;
import org.jboss.console.manager.interfaces.TreeNodeMenuEntry;
import org.jboss.console.manager.interfaces.impl.SeparatorTreeNodeMenuEntry;
public class AdminTreeBrowser
{
TreeContext ctx = null;
ConsoleTreeModel tm = null;
TreeCellRenderer cellRenderer = null;
TreeSelectionListener selectionListener = null;
OpenNodeAccounter openNodeAccounter = null;
String webHost = null;
public static final String RIGHT_FRAME_NAME = "right";
public AdminTreeBrowser (TreeContext ctx) throws Exception
{
this.ctx = ctx;
tm = new ConsoleTreeModel (ctx);
cellRenderer = new TreeCellRenderer (ctx);
initComponents ();
openNodeAccounter = new OpenNodeAccounter(getTree());
getTree().addMouseListener (new PopupMenuMgr());
getTree().getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION);
ToolTipManager.sharedInstance().registerComponent(getTree());
}
public void refreshTree (boolean force)
{
try
{
this.tm.refreshTree (force);
}
catch (Exception displayed)
{
displayed.printStackTrace();
}
}
private void initComponents() {
tree = new javax.swing.JTree();
tree.setCellRenderer(getCellRenderer());
tree.setModel(getTreeModel());
tree.setAutoscrolls(true);
}
private javax.swing.JTree tree;
public TreeCellRenderer getCellRenderer ()
{
return this.cellRenderer;
}
public TreeModel getTreeModel ()
{
return this.tm;
}
public TreeSelectionListener getSelectionListener ()
{
return this.selectionListener;
}
public JTree getTree ()
{
return this.tree;
}
public class OpenNodeAccounter
implements javax.swing.event.TreeExpansionListener, javax.swing.event.TreeModelListener
{
protected java.util.TreeSet openNodes = new java.util.TreeSet ();
public OpenNodeAccounter (JTree tree)
{
tree.getModel ().addTreeModelListener (this);
}
public void treeExpanded(javax.swing.event.TreeExpansionEvent event)
{
openNodes.add (((NodeWrapper)(event.getSource ())).getPath ());
}
public void treeCollapsed(javax.swing.event.TreeExpansionEvent event)
{
openNodes.remove (((NodeWrapper)(event.getSource ())).getPath ());
}
public void treeNodesChanged (javax.swing.event.TreeModelEvent e)
{
}
public void recursivelyOpen (NodeWrapper son)
{
}
public void treeNodesInserted (javax.swing.event.TreeModelEvent e){}
public void treeNodesRemoved (javax.swing.event.TreeModelEvent e){}
public void treeStructureChanged (javax.swing.event.TreeModelEvent e) { }
}
public class PopupMenuMgr extends MouseAdapter
{
HashMap menus = new HashMap ();
public PopupMenuMgr (){}
public void mousePressed( MouseEvent e )
{
mouseReleased(e);
}
public void mouseReleased( MouseEvent e )
{
TreePath loc = getTree().getPathForLocation(e.getX(), e.getY());
if (loc == null) return;
getTree().setSelectionPath (loc);
if ( e.isPopupTrigger())
{
Object node = getTree ().getLastSelectedPathComponent ();
if (node == null) return;
JPopupMenu popup = null;
if (menus.containsKey (node))
{
popup = (JPopupMenu)menus.get (node);
}
else if (node instanceof NodeWrapper)
{
NodeWrapper who = (NodeWrapper)node;
TreeNodeMenuEntry[] entries = who.getMenuEntries ();
if (entries != null && entries.length > 0)
{
popup = new JPopupMenu();
popup.setOpaque(true);
popup.setLightWeightPopupEnabled(true);
menus.put (node, popup);
for (int i=0; i<entries.length; i++)
{
if (entries[i] instanceof SeparatorTreeNodeMenuEntry)
{
popup.addSeparator ();
}
else if (entries[i] instanceof SimpleTreeNodeMenuEntry)
{
final SimpleTreeNodeMenuEntry txt = (SimpleTreeNodeMenuEntry)entries[i];
JMenuItem mi = new JMenuItem(txt.getText ());
mi.addActionListener ( new ActionListener ()
{
public void actionPerformed(ActionEvent e)
{
ctx.doPopupMenuAction (txt);
}
}
);
popup.add(mi);
}
}
}
}
if (popup != null)
popup.show( (JComponent)e.getSource(), e.getX(), e.getY() );
}
else
{
Object node = getTree ().getLastSelectedPathComponent ();
if (node != null && node instanceof NodeWrapper)
{
NodeWrapper who = (NodeWrapper)node;
TreeAction act = who.getAssociatedAction ();
ctx.doAdminTreeAction (act);
}
}
}
}
}