Modified: incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java?view=diff&rev=493771&r1=493770&r2=493771 ============================================================================== --- incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java (original) +++ incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Sun Jan 7 09:03:17 2007 @@ -28,13 +28,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; import java.util.List; -import java.util.Set; - -import javax.management.MBeanServerConnection; -import javax.management.ObjectInstance; -import javax.management.ObjectName; import org.apache.qpid.management.ui.ApplicationRegistry; import org.apache.qpid.management.ui.Constants; @@ -42,8 +36,9 @@ import org.apache.qpid.management.ui.ManagedServer; import org.apache.qpid.management.ui.ServerRegistry; import org.apache.qpid.management.ui.exceptions.InfoRequiredException; -import org.apache.qpid.management.ui.jmx.JMXManagedObject; +import org.apache.qpid.management.ui.exceptions.ManagementConsoleException; import org.apache.qpid.management.ui.jmx.JMXServerRegistry; +import org.apache.qpid.management.ui.jmx.MBeanUtility; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IFontProvider; @@ -64,7 +59,11 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.ui.part.ViewPart; - +/** + * Navigation View for navigating the managed servers and managed beans on + * those servers + * @author Bhupendra Bhardwaj + */ public class NavigationView extends ViewPart { public static final String ID = "org.apache.qpid.management.ui.navigationView"; @@ -73,8 +72,6 @@ private TreeViewer _treeViewer = null; private TreeObject _rootNode = null; private TreeObject _serversRootNode = null; - // List of all server nodes (connecged or removed) - //private List<TreeObject> _serverNodeList = new ArrayList<TreeObject>(); // Map of connected servers private HashMap<ManagedServer, TreeObject> _managedServerMap = new HashMap<ManagedServer, TreeObject>(); @@ -98,6 +95,9 @@ createListeners(); } + /** + * Creates listeners for the JFace treeviewer + */ private void createListeners() { _treeViewer.addDoubleClickListener(new IDoubleClickListener() @@ -132,12 +132,17 @@ }); } + /** + * Creates Qpid Server connection using JMX RMI protocol + * @param server + * @throws Exception + */ private void createRMIServerConnection(ManagedServer server) throws Exception { try { // Currently Qpid Management Console only supports JMX MBeanServer - JMXServerRegistry serverRegistry = new JMXServerRegistry(server); + ServerRegistry serverRegistry = new JMXServerRegistry(server); ApplicationRegistry.addServer(server, serverRegistry); } catch(Exception ex) @@ -151,14 +156,24 @@ return "service:jmx:rmi:///jndi/rmi://" + host + "/jmxrmi"; } - + /** + * Adds a new server node in the navigation view if server connection is successful. + * @param transportProtocol + * @param host + * @param port + * @param domain + * @throws Exception + */ public void addNewServer(String transportProtocol, String host, String port, String domain) throws Exception { + String serverAddress = host + ":" + port; + String url = null; + ManagedServer managedServer = null; + if ("RMI".equals(transportProtocol)) - { - String serverAddress = host + ":" + port; - String url = getRMIURL(serverAddress); + { + url = getRMIURL(serverAddress); List<TreeObject> list = _serversRootNode.getChildren(); for (TreeObject node : list) { @@ -166,30 +181,36 @@ throw new InfoRequiredException("Server " + serverAddress + " is already added"); } - ManagedServer managedServer = new ManagedServer(url, domain); + managedServer = new ManagedServer(url, domain); managedServer.setName(serverAddress); - createRMIServerConnection(managedServer); - - // RMI server connection is successful. Now add the server in the tree - TreeObject serverNode = new TreeObject(serverAddress, Constants.SERVER); - serverNode.setUrl(url); - serverNode.setManagedObject(managedServer); - _serversRootNode.addChild(serverNode); - - // Add server in the connected server map - _managedServerMap.put(managedServer, serverNode); - populateServer(serverNode); - _treeViewer.refresh(); - - // save server address in file - addServerAddressInFile(serverAddress); + createRMIServerConnection(managedServer); } else { throw new InfoRequiredException(transportProtocol + " transport is not supported"); } + + // Server connection is successful. Now add the server in the tree + TreeObject serverNode = new TreeObject(serverAddress, Constants.SERVER); + serverNode.setUrl(url); + serverNode.setManagedObject(managedServer); + _serversRootNode.addChild(serverNode); + + // Add server in the connected server map + _managedServerMap.put(managedServer, serverNode); + populateServer(serverNode); + _treeViewer.refresh(); + + // save server address in file + addServerAddressInFile(serverAddress); } + /** + * Server addresses are stored in a file. When user launches the application again, the + * server addresses are picked up from the file and shown in the navigfation view. This method + * adds the server address in a file, when a new server is added in the navigation view. + * @param serverAddress + */ private void addServerAddressInFile(String serverAddress) { File file = new File(INI_FILENAME); @@ -210,11 +231,14 @@ } } - + /** + * Queries the qpid server for MBeans and populates the navigation view with all MBeans for + * the given server node. + * @param serverNode + */ private void populateServer(TreeObject serverNode) { ManagedServer server = (ManagedServer)serverNode.getManagedObject(); - JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server); String domain = server.getDomain(); try { @@ -228,11 +252,10 @@ else { List<TreeObject> domainList = new ArrayList<TreeObject>(); - MBeanServerConnection mbsc = serverRegistry.getServerConnection(); - String[] domains = mbsc.getDomains(); - for (int i = 0; i < domains.length; i++) + List<String> domains = MBeanUtility.getAllDomains(server);; + for (String domainName : domains) { - TreeObject domainNode = new TreeObject(domains[i], Constants.DOMAIN); + TreeObject domainNode = new TreeObject(domainName, Constants.DOMAIN); domainNode.setParent(serverNode); domainList.add(domainNode); @@ -247,80 +270,118 @@ } } + /** + * Queries the Qpid Server and populates the given domain node with all MBeans undser that domain. + * @param domain + * @throws IOException + * @throws Exception + */ @SuppressWarnings("unchecked") private void populateDomain(TreeObject domain) throws IOException, Exception { ManagedServer server = (ManagedServer)domain.getParent().getManagedObject(); - JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server); - String domainName = domain.getName(); - MBeanServerConnection mbsc = serverRegistry.getServerConnection(); - - - ObjectName objName = new ObjectName(domainName + ":*"); - Set queryMBeans = mbsc.queryMBeans(objName, null); - final Set<ObjectInstance> objectInstances = queryMBeans; - - for (Iterator<ObjectInstance> itr = objectInstances.iterator(); itr.hasNext();) - { - ObjectInstance instance = itr.next(); - ManagedBean obj = new JMXManagedObject(instance.getObjectName()); - obj.setServer(server); - addManagedBean(domain, obj); + // Add these three types - Connection, Exchange, Queue + // By adding these, these will always be available, even if there are no mbeans under thse types + // This is required because, the mbeans will be added from mbeanview, by selecting from the list + TreeObject typeChild = new TreeObject(Constants.CONNECTION, Constants.TYPE); + typeChild.setParent(domain); + typeChild = new TreeObject(Constants.EXCHANGE, Constants.TYPE); + typeChild.setParent(domain); + typeChild = new TreeObject(Constants.QUEUE, Constants.TYPE); + typeChild.setParent(domain); + + + // Now populate the mbenas under those types + List<ManagedBean> mbeans = MBeanUtility.getManagedObjectsForDomain(server, domain.getName()); + for (ManagedBean mbean : mbeans) + { + mbean.setServer(server); + ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(server); + serverRegistry.addManagedObject(mbean); + + // Add all mbeans other than Connections, Exchanges and Queues. Because these will be added + // manually by selecting from MBeanView + if (!(mbean.getType().equals(Constants.CONNECTION) || mbean.getType().equals(Constants.EXCHANGE) || mbean.getType().equals(Constants.QUEUE))) + { + addManagedBean(domain, mbean); + } } } - private TreeObject getIfTypeAlreadyExists(TreeObject domain, String type) + /** + * Checks if a particular mbeantype is already there in the navigation view for a domain. + * This is used while populating domain with mbeans. + * @param domain + * @param typeName + * @return Node if given mbeantype already exists, otherwise null + */ + private TreeObject getMBeanTypeNode(TreeObject domain, String typeName) { - List<TreeObject> types = domain.getChildren(); + List<TreeObject> childNodes = domain.getChildren(); - for (TreeObject child : types) + for (TreeObject child : childNodes) { - if (Constants.TYPE.equals(child.getType()) && type.equals(child.getName())) + if (Constants.TYPE.equals(child.getType()) && typeName.equals(child.getName())) return child; } return null; } - private void addManagedBean(TreeObject domain, ManagedBean obj) + private boolean doesMBeanNodeAlreadyExist(TreeObject typeNode, String mbeanName) { - ManagedServer server = (ManagedServer)domain.getParent().getManagedObject(); - JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server); - serverRegistry.addManagedObject(obj); - - String type = obj.getType(); - String name = obj.getName(); + List<TreeObject> childNodes = typeNode.getChildren(); + for (TreeObject child : childNodes) + { + if (Constants.MBEAN.equals(child.getType()) && mbeanName.equals(child.getName())) + return true; + } + return false; + } + + /** + * Adds the given MBean to the given domain node. Creates Notification node for the MBean. + * @param domain + * @param mbean mbean + */ + private void addManagedBean(TreeObject domain, ManagedBean mbean) throws Exception + { + String type = mbean.getType(); + String name = mbean.getName(); + + TreeObject typeNode = getMBeanTypeNode(domain, type); + if (typeNode != null && doesMBeanNodeAlreadyExist(typeNode, name)) + return; - TreeObject typeChild = getIfTypeAlreadyExists(domain, type); TreeObject mbeanNode = null; - if (typeChild != null) // if type is already added as a TreeItem + if (typeNode != null) // type node already exists { if (name == null) { - System.out.println("Two mbeans can't exist without a name and with same type"); - return; + throw new ManagementConsoleException("Two mbeans can't exist without a name and with same type"); } - mbeanNode = new TreeObject(obj); - mbeanNode.setParent(typeChild); + mbeanNode = new TreeObject(mbean); + mbeanNode.setParent(typeNode); } else { - if (name != null) // An managedObject with type and name + // type node does not exist. Now check if node to be created as mbeantype or MBean + if (name != null) // A managedObject with type and name { - typeChild = new TreeObject(type, Constants.TYPE); - typeChild.setParent(domain); - mbeanNode = new TreeObject(obj); - mbeanNode.setParent(typeChild); + typeNode = new TreeObject(type, Constants.TYPE); + typeNode.setParent(domain); + mbeanNode = new TreeObject(mbean); + mbeanNode.setParent(typeNode); } - else // An managedObject with only type + else // A managedObject with only type { - mbeanNode = new TreeObject(obj); + mbeanNode = new TreeObject(mbean); mbeanNode.setParent(domain); } } // Add notification node - // TODO: show this only of the mbean sends any notification + // TODO: show this only if the mbean sends any notification TreeObject notificationNode = new TreeObject(Constants.NOTIFICATION, Constants.NOTIFICATION); notificationNode.setParent(mbeanNode); } @@ -373,6 +434,9 @@ } + /** + * Closes the Qpid server connection + */ public void disconnect() throws Exception { TreeObject selectedNode = getSelectedServerNode(); @@ -408,6 +472,11 @@ _treeViewer.refresh(); } + /** + * Closes the Qpid server connection if not already closed and removes the server node from the navigation view and + * also from the ini file stored in the system. + * @throws Exception + */ public void removeServer() throws Exception { disconnect(); @@ -430,7 +499,6 @@ list.remove(objectToRemove); } - //_serverNodeList.remove(objectToRemove); _treeViewer.refresh(); // Remove from the ini file @@ -445,6 +513,10 @@ out.close(); } + /** + * @return the server addresses from the ini file + * @throws Exception + */ private List<String> getServerListFromFile() throws Exception { BufferedReader in = new BufferedReader(new FileReader(INI_FILENAME)); @@ -538,6 +610,9 @@ _treeViewer.refresh(); } + /** + * Content provider class for the tree viewer + */ private class ContentProviderImpl implements ITreeContentProvider { public Object[] getElements(Object parent) @@ -574,6 +649,9 @@ } } + /** + * Label provider class for the tree viewer + */ private class LabelProviderImpl extends LabelProvider implements IFontProvider { public Image getImage(Object element) @@ -615,24 +693,6 @@ } return ApplicationRegistry.getFont(Constants.FONT_NORMAL); } - - /* - public Color getForeground(Object element) - { - TreeObject node = (TreeObject)element; - if (node.getType().equals(Constants.SERVER)) - { - if (!node.getChildren().isEmpty()) - return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN); - else - return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY); - } - return Display.getCurrent().getSystemColor(SWT.COLOR_BLACK); - } - public Color getBackground(Object element) - { - return _treeViewer.getControl().getBackground(); - }*/ } // End of LabelProviderImpl @@ -641,12 +701,12 @@ public int category(Object element) { TreeObject node = (TreeObject)element; - if (node.getType().equals(Constants.MBEAN)) + if (node.getType().equals(Constants.MBEAN)) return 1; return 2; } } - + /** * Worker thread, which keeps looking for new ManagedObjects to be added and * unregistered objects to be removed from the tree. @@ -668,60 +728,36 @@ catch(Exception ex) { - } - refreshAddedObjects(); + } refreshRemovedObjects(); refreshClosedServerConnections(); }// end of while loop }// end of run method. }// end of Worker class - - private void refreshAddedObjects() + public void addManagedBean(ManagedBean mbean) throws Exception { - for (ManagedServer server : _managedServerMap.keySet()) + TreeObject treeServerObject = _managedServerMap.get(mbean.getServer()); + List<TreeObject> domains = treeServerObject.getChildren(); + TreeObject domain = null; + for (TreeObject child : domains) { - JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server); - if (serverRegistry == null) // server connection is closed - continue; - - final List<ManagedBean> list = serverRegistry.getObjectsToBeAdded(); - if (list != null) + if (child.getName().equals(mbean.getDomain())) { - Display display = getSite().getShell().getDisplay(); - display.syncExec(new Runnable() - { - public void run() - { - for (ManagedBean obj : list) - { - System.out.println("adding " + obj.getName() + " " + obj.getType()); - TreeObject treeServerObject = _managedServerMap.get(obj.getServer()); - List<TreeObject> domains = treeServerObject.getChildren(); - TreeObject domain = null; - for (TreeObject child : domains) - { - if (child.getName().equals(obj.getDomain())) - { - domain = child; - break; - } - } - - addManagedBean(domain, obj); - } - _treeViewer.refresh(); - } - }); + domain = child; + break; } } + + addManagedBean(domain, mbean); + _treeViewer.refresh(); } private void refreshRemovedObjects() { for (ManagedServer server : _managedServerMap.keySet()) { - final JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server); + final ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(server); if (serverRegistry == null) // server connection is closed continue; @@ -758,8 +794,8 @@ } /** - * - * + * Gets the list of closed server connection from the ApplicationRegistry and then removes + * the closed server nodes from the navigation view */ private void refreshClosedServerConnections() {
Modified: incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java?view=diff&rev=493771&r1=493770&r2=493771 ============================================================================== --- incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java (original) +++ incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java Sun Jan 7 09:03:17 2007 @@ -196,7 +196,7 @@ formData = new FormData(); formData.top = new FormAttachment(notificationNameCombo, 5); formData.left = new FormAttachment(fixedLabel, 10); - formData.right = new FormAttachment(80); + formData.right = new FormAttachment(100); descriptionLabel.setLayoutData(formData); descriptionLabel.setText(" "); descriptionLabel.setFont(ApplicationRegistry.getFont(Constants.FONT_ITALIC)); Modified: incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java URL: http://svn.apache.org/viewvc/incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java?view=diff&rev=493771&r1=493770&r2=493771 ============================================================================== --- incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java (original) +++ incubator/qpid/branches/new_persistence/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java Sun Jan 7 09:03:17 2007 @@ -388,10 +388,10 @@ return response; } - public static void popupError(String title, String message, Exception ex) + public static void popupError(String title, String message, Throwable ex) { IStatus status = new Status(IStatus.ERROR, ApplicationWorkbenchAdvisor.PERSPECTIVE_ID, - IStatus.ERROR, ex.getMessage(), ex); + IStatus.ERROR, ex.toString(), ex); ErrorDialog.openError(Display.getCurrent().getActiveShell(), title, message, status); }
