[Mc4j-cvs] mc4j/src/org/mc4j/console/mejb MBeanFilterNode.java,1.4,1.5 MEJBNode.java,1.4,1.5
Brought to you by:
ghinkl
From: Greg H. <gh...@us...> - 2004-11-10 15:39:26
|
Update of /cvsroot/mc4j/mc4j/src/org/mc4j/console/mejb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15704/src/org/mc4j/console/mejb Modified Files: MBeanFilterNode.java MEJBNode.java Log Message: Updates to allow live refreshing of JSR-77 tree. Loads each node lazily as they are opened. More intelligently support no J2EEServer or J2EEApplication node Index: MBeanFilterNode.java =================================================================== RCS file: /cvsroot/mc4j/mc4j/src/org/mc4j/console/mejb/MBeanFilterNode.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** MBeanFilterNode.java 13 Oct 2004 05:01:04 -0000 1.4 --- MBeanFilterNode.java 10 Nov 2004 15:39:16 -0000 1.5 *************** *** 18,22 **** --- 18,25 ---- import org.mc4j.console.bean.MBeanNode; + import org.mc4j.console.bean.RefreshAction; import org.mc4j.console.mejb.view.ShowMEJBViewAction; + import org.mc4j.console.connection.ConnectionNode; + import org.mc4j.console.Refreshable; import org.openide.nodes.FilterNode; import org.openide.nodes.Node; *************** *** 27,33 **** --- 30,39 ---- import org.openide.windows.IOProvider; + import javax.swing.*; import java.awt.*; import java.util.HashMap; import java.util.Map; + import java.util.Hashtable; + import java.util.Iterator; /** *************** *** 35,39 **** * @version $Revision$($Author$ / $Date$) */ ! public class MBeanFilterNode extends FilterNode implements Comparable { private MBeanNode filteredNode; --- 41,45 ---- * @version $Revision$($Author$ / $Date$) */ ! public class MBeanFilterNode extends FilterNode implements Comparable, Refreshable, MEJBNodeLayer { private MBeanNode filteredNode; *************** *** 43,53 **** private boolean eventProvider; public MBeanFilterNode(MBeanNode node) { ! super(node, new MBeanFilterNodeChildren()); filteredNode = node; ! ((MBeanFilterNodeChildren) getChildren()).setParentNode(this); } --- 49,121 ---- private boolean eventProvider; + private Map keys = new HashMap(); + + + private String filteredDisplayName; + private String filteredDomain; + private String filteredType; public MBeanFilterNode(MBeanNode node) { ! super(node, new MEJBChildren(node.getConnectionNode()));//MBeanFilterNodeChildren()); ! MEJBChildren children = (MEJBChildren) getChildren(); filteredNode = node; ! filteredDisplayName = filteredNode.getObjectName().getKeyProperty("name"); ! filteredDomain = this.filteredNode.getObjectName().getDomain(); ! filteredType = this.filteredNode.getObjectName().getKeyProperty("j2eeType"); ! ! ! //((MBeanFilterNodeChildren) getChildren()).setParentNode(this); ! ! Hashtable hash = node.getObjectName().getKeyPropertyList(); ! for (Iterator iterator = hash.entrySet().iterator(); iterator.hasNext();) { ! Map.Entry entry = (Map.Entry) iterator.next(); ! if (MEJBNode.TYPE_MAP.containsKey(entry.getKey())) { ! keys.put(entry.getKey(), entry.getValue()); ! } ! } ! ! if (MEJBNode.TYPE_MAP.get(filteredType) == null) { ! setChildren(Children.LEAF); ! } else { ! children.setFilteredNode(this); ! } ! } ! ! /** ! * Provides for fake filter nodes (i.e. nodes that don't really have a ! * backing node). ! * @param connectionNode ! */ ! public MBeanFilterNode(ConnectionNode connectionNode, String type, Map keys) { ! super(null, new MEJBChildren(connectionNode)); ! MEJBChildren children = (MEJBChildren) getChildren(); ! ! this.keys = keys; ! ! filteredDisplayName = "foo"; ! filteredDomain = null; ! filteredType = type; ! ! children.setFilteredNode(this); ! } ! ! ! /*public Action[] getActions(boolean context) { ! Action[] actions = new Action[] { ! NodeAction.get(RefreshAction.class) ! }; ! return actions; ! }*/ ! ! public void refresh() { ! MEJBChildren children = (MEJBChildren) getChildren(); ! children.reload(); ! } + + + public Map getKeys() { + return keys; } *************** *** 73,85 **** public String getDisplayName() { ! return filteredNode.getObjectName().getKeyProperty("name"); } public String getDomain() { ! return this.filteredNode.getObjectName().getDomain(); } public String getType() { ! return this.filteredNode.getObjectName().getKeyProperty("j2eeType"); } --- 141,153 ---- public String getDisplayName() { ! return filteredDisplayName; } public String getDomain() { ! return filteredDomain; } public String getType() { ! return filteredType; } Index: MEJBNode.java =================================================================== RCS file: /cvsroot/mc4j/mc4j/src/org/mc4j/console/mejb/MEJBNode.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** MEJBNode.java 13 Oct 2004 05:01:10 -0000 1.4 --- MEJBNode.java 10 Nov 2004 15:39:16 -0000 1.5 *************** *** 18,23 **** --- 18,25 ---- import org.mc4j.console.bean.MBeanNode; + import org.mc4j.console.bean.RefreshAction; import org.mc4j.console.connection.ConnectionNode; import org.mc4j.console.install.ExplorerUtil; + import org.mc4j.console.Refreshable; import org.openide.ErrorManager; import org.openide.nodes.AbstractNode; *************** *** 25,28 **** --- 27,31 ---- import org.openide.nodes.Node; import org.openide.util.Utilities; + import org.openide.util.actions.NodeAction; import org.openide.windows.IOProvider; import org.openide.windows.TopComponent; *************** *** 31,34 **** --- 34,38 ---- import javax.management.MalformedObjectNameException; import javax.management.ObjectName; + import javax.swing.*; import java.awt.*; import java.beans.PropertyChangeEvent; *************** *** 45,56 **** * @version $Revision$($Author$ / $Date$) */ ! public class MEJBNode extends AbstractNode { private ConnectionNode connectionNode; - - public MEJBNode(ConnectionNode connectionNode) { ! super(new MEJBChildren(connectionNode)); this.connectionNode = connectionNode; --- 49,58 ---- * @version $Revision$($Author$ / $Date$) */ ! public class MEJBNode extends AbstractNode implements Refreshable { private ConnectionNode connectionNode; public MEJBNode(ConnectionNode connectionNode) { ! super(new MEJBChildren(connectionNode, null)); this.connectionNode = connectionNode; *************** *** 63,283 **** } ! ! ! ! ! public static class MEJBChildren extends Children.SortedArray { ! ! private ConnectionNode connectionNode; ! ! private boolean isTomcatHack = false; ! ! public MEJBChildren(ConnectionNode connectionNode) { ! this.connectionNode = connectionNode; ! } ! ! protected void addNotify() { ! Thread loader = new Thread(new Runnable() { ! public void run() { ! loadAllDomains(); ! } ! }); ! loader.start(); ! } ! ! private void loadAllDomains() { ! try { ! // Management mgmt = connectionNode.getMEJB(); ! Set domains = this.connectionNode.getMBeanServer().queryNames(new ObjectName("*:j2eeType=J2EEDomain,*"),null); ! for (Iterator iterator = domains.iterator(); iterator.hasNext();) { ! ObjectName objectName = (ObjectName) iterator.next(); ! MBeanNode beanNode = connectionNode.getMBeanNode(objectName); ! MBeanFilterNode filterNode = new MBeanFilterNode(beanNode); ! ! add(new Node[] { filterNode }); ! ! loadDomain(filterNode, filterNode.getDomain()); ! } ! ! if (domains.isEmpty()) { ! // Special hack for tomcat that doesn't support domains ! isTomcatHack = true; ! List parentList = new ArrayList(); ! parentList.add("J2EEServer=none"); ! loadNode(this.getNode(), "J2EEServer",parentList); ! ! } ! ! ! // IOProvider.getDefault().getStdOut().println("Default Domain is " + mgmt.getDefaultDomain()); ! } catch (MalformedObjectNameException e) { ! ErrorManager.getDefault().notify(e); ! e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. ! } ! } ! ! ! private void loadDomain(Node domainNode, String domain) { ! // Load the servers ! try { ! MBeanServer mgmt = connectionNode.getMBeanServer(); ! Set servers = mgmt.queryNames( ! new ObjectName(domain + ":j2eeType=J2EEServer,*"), null); ! ! for (Iterator iterator = servers.iterator(); iterator.hasNext();) { ! ObjectName objectName = (ObjectName) iterator.next(); ! MBeanNode serverNode = connectionNode.getMBeanNode(objectName); ! ! MBeanFilterNode filterNode = new MBeanFilterNode(serverNode); ! ! List keys = new ArrayList(); ! keys.add("J2EEServer=" + objectName.getKeyProperty("name")); ! ! loadNode(filterNode, "J2EEServer", keys); ! ! domainNode.getChildren().add(new Node[] { filterNode }); ! } ! ! } catch (MalformedObjectNameException e) { ! e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. ! } ! ! } ! ! ! private void loadNode(Node parent, String parentType, List parentKeys) { ! String[] childTypes = (String[]) typeMap.get(parentType); ! ! ! try { ! for (int i = 0; childTypes != null && i < childTypes.length; i++) { ! String childType = childTypes[i]; ! ! FakeNode fakeNode = new FakeNode(childType); ! parent.getChildren().add(new Node[] { fakeNode }); ! ! MBeanServer mgmt = connectionNode.getMBeanServer(); ! ! String domain = null; ! if (parent instanceof MBeanFilterNode) { ! domain = ((MBeanFilterNode)parent).getDomain(); ! } else { ! domain = "*"; ! } ! String filter = domain + ":"; ! for (int j = 0; j < parentKeys.size(); j++) { ! String s = (String) parentKeys.get(j); ! filter += s; ! filter += ","; ! } ! filter += "j2eeType=" + childType + ",*"; ! ! IOProvider.getDefault().getStdOut().println("Querying on: " + filter); ! ! Set children = ! mgmt.queryNames(new ObjectName(filter), null); ! ! for (Iterator iterator = children.iterator(); iterator.hasNext();) { ! ObjectName objectName = (ObjectName) iterator.next(); ! ! MBeanNode beanNode = connectionNode.getMBeanNode(objectName); ! ! MBeanFilterNode filterNode = new MBeanFilterNode(beanNode); ! ! fakeNode.getChildren().add(new Node[] {filterNode}); ! ! List list = (List) ((ArrayList)parentKeys).clone(); ! list.add(childType + "=" + filterNode.getDisplayName()); ! loadNode(filterNode, childType, list); ! } ! ! if (childType.equals("J2EEApplication")) { ! // Support modules that are not in an application ! List list = (List) ((ArrayList)parentKeys).clone(); ! if (isTomcatHack) ! list.add(childType + "=none"); ! else ! list.add(childType + "=null"); ! ! FakeNode fakeApp = new FakeNode("No Application"); ! loadNode(fakeApp, "J2EEApplication", list); ! fakeNode.getChildren().add( new Node[] { fakeApp }); ! ! } ! } ! } catch (MalformedObjectNameException e) { ! e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. ! } ! } ! } ! public static class FakeNode extends AbstractNode implements Comparable { ! Image icon; ! public FakeNode(String name) { ! super(new Children.SortedArray()); ! ! StringBuffer newName = new StringBuffer(); ! char[] nc = name.toCharArray(); ! for (int i = 0; i < nc.length; i++) { ! char c = nc[i]; ! if (i != 0 && Character.isUpperCase(c) && !Character.isUpperCase(nc[i-1])) { ! newName.append(' '); ! } ! newName.append(c); ! } ! newName.append('s'); ! ! setDisplayName(newName.toString()); ! setIconBase("org/mc4j/console/mejb/img/List"); ! ! ! String childIconName = (String) MBeanFilterNode.TYPE_ICONS.get(name); ! if (childIconName == null) ! childIconName = MBeanFilterNode.DEFAULT_ICON; ! childIconName = "org/mc4j/console/mejb/img/" + childIconName + "24.gif"; ! ! Image ch = Utilities.loadImage(childIconName); ! ch = ch.getScaledInstance(12,12,Image.SCALE_SMOOTH); ! Image list = Utilities.loadImage("org/mc4j/console/mejb/img/List24.gif"); ! ! this.icon = Utilities.mergeImages(list, ch, 12,12); ! ! } ! ! public Image getIcon(int i) { ! return icon; ! } ! ! public Image getOpenedIcon(int i) { ! return icon; ! } ! ! public int compareTo(Object o) { ! return this.getDisplayName().compareTo(((Node)o).getDisplayName()); ! } } ! public static Map typeMap = new HashMap(); static { ! typeMap.put("", new String[] { "J2EEDomain", "J2EEServer"}); ! typeMap.put("J2EEDomain", new String[] { "J2EEServer" }); ! typeMap.put("J2EEServer", new String[] { "J2EEApplication", "JavaMailResource", "JCAManagedConnectionFactory", "JDBCResource", "JDBCDriver", "JMSResource", "JNDIResource", "JTAResource", "RMI_IIOPResource", "URLResource", "JVM"}); ! typeMap.put("J2EEApplication", new String[]{ "AppClientModule", "WebModule", "EJBModule", "ResourceAdapterModule"}); ! typeMap.put("EJBModule", new String[] { "EntityBean", "StatefulSessionBean", "StatelessSessionBean", "MessageDrivenBean" }); ! typeMap.put("WebModule", new String[] { "Servlet" }); ! typeMap.put("ResourceAdapterModule", new String[] { "ResourceAdapter" }); ! typeMap.put("ResourceAdapter", new String[] { "JCAResource" } ); ! typeMap.put("JCAResource", new String[] { "JCAConnectionFactory" }); ! typeMap.put("JDBCResouce", new String[] { "JDBCDataSource" }); /* --- 65,101 ---- } ! public Action[] getActions(boolean context) { ! Action[] actions = new Action[] { ! NodeAction.get(RefreshAction.class) ! }; ! return actions; } ! public void refresh() { ! MEJBChildren children = (MEJBChildren) getChildren(); ! children.reload(); } ! public static Map TYPE_MAP = new HashMap(); static { ! TYPE_MAP.put("", new String[] { "J2EEDomain", "J2EEServer"}); ! TYPE_MAP.put("J2EEDomain", new String[] { "J2EEServer" }); ! TYPE_MAP.put("J2EEServer", new String[] { "J2EEApplication", "JavaMailResource", "JCAManagedConnectionFactory", "JDBCResource", "JDBCDriver", "JMSResource", "JNDIResource", "JTAResource", "RMI_IIOPResource", "URLResource", "JVM"}); ! TYPE_MAP.put("J2EEApplication", new String[]{ "AppClientModule", "WebModule", "EJBModule", "ResourceAdapterModule"}); ! TYPE_MAP.put("EJBModule", new String[] { "EntityBean", "StatefulSessionBean", "StatelessSessionBean", "MessageDrivenBean" }); ! TYPE_MAP.put("WebModule", new String[] { "Servlet" }); ! TYPE_MAP.put("ResourceAdapterModule", new String[] { "ResourceAdapter" }); ! TYPE_MAP.put("ResourceAdapter", new String[] { "JCAResource" } ); ! TYPE_MAP.put("JCAResource", new String[] { "JCAConnectionFactory" }); ! TYPE_MAP.put("JDBCResouce", new String[] { "JDBCDataSource" }); /* |