diff options
author | Bhupendra Bhusman Bhardwaj <bhupendrab@apache.org> | 2007-01-03 15:38:03 +0000 |
---|---|---|
committer | Bhupendra Bhusman Bhardwaj <bhupendrab@apache.org> | 2007-01-03 15:38:03 +0000 |
commit | 82e598422b0c74ead043b7bfd8540f5137c5efe9 (patch) | |
tree | 9cbfd63d9ffc816c592f29a8ab49373677e6d6e8 | |
parent | 7633f3fc440671eaa93ed0b2e25b49e5d795aa7d (diff) | |
download | qpid-python-82e598422b0c74ead043b7bfd8540f5137c5efe9.tar.gz |
QPID-213
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@492184 13f79535-47bb-0310-9956-ffa450edef68
8 files changed, 380 insertions, 190 deletions
diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java index eabd8abeb6..6fbfdcd06f 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java @@ -21,6 +21,7 @@ package org.apache.qpid.management.ui; +import java.util.ArrayList; import java.util.List; import org.apache.qpid.management.ui.jmx.ClientListener; @@ -31,6 +32,12 @@ import org.apache.qpid.management.ui.model.OperationDataModel; public abstract class ServerRegistry { private ManagedServer _managedServer = null; + // list of all Connection mbeans + protected List<ManagedBean> _connections = new ArrayList<ManagedBean>(); + // list of all exchange mbeans + protected List<ManagedBean> _exchanges = new ArrayList<ManagedBean>(); + // list of all queue mbenas + protected List<ManagedBean> _queues = new ArrayList<ManagedBean>(); public ServerRegistry() { @@ -52,14 +59,57 @@ public abstract class ServerRegistry _managedServer = server; } - public abstract void addManagedObject(ManagedBean key); + protected void addConnectionMBean(ManagedBean mbean) + { + _connections.add(mbean); + } - public abstract void removeManagedObject(ManagedBean mbean); + protected void addExchangeMBean(ManagedBean mbean) + { + _exchanges.add(mbean); + } - public List<ManagedBean> getObjectsToBeAdded() + protected void addQueueMBean(ManagedBean mbean) { - return null; + _queues.add(mbean); + } + + protected void removeConnectionMBean(ManagedBean mbean) + { + _connections.remove(mbean); + } + + protected void removeExchangeMBean(ManagedBean mbean) + { + _exchanges.remove(mbean); + } + + protected void removeQueueMBean(ManagedBean mbean) + { + _queues.remove(mbean); + } + + public List<ManagedBean> getConnections() + { + return _connections; } + + public List<ManagedBean> getExchanges() + { + return _exchanges; + } + + public List<ManagedBean> getQueues() + { + return _queues; + } + + public abstract void addManagedObject(ManagedBean key); + + public abstract List<ManagedBean> getMBeans(); + + public abstract void removeManagedObject(ManagedBean mbean); + public List<ManagedBean> getObjectsToBeRemoved() { return null; diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java index 85b312cf99..a2335c5841 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.management.ui.actions; +import org.apache.qpid.management.ui.jmx.MBeanUtility; import org.apache.qpid.management.ui.views.MBeanView; import org.apache.qpid.management.ui.views.NavigationView; import org.eclipse.jface.action.IAction; @@ -27,6 +28,10 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; +/** + * This action refreshes both the views -Navigation and MBeanView + * @author Bhupendra Bhardwaj + */ public class Refresh implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow _window; @@ -71,7 +76,14 @@ public class Refresh implements IWorkbenchWindowActionDelegate view.refresh(); MBeanView mbeanview = (MBeanView)_window.getActivePage().findView(MBeanView.ID); - mbeanview.refreshMBeanView(); + try + { + mbeanview.refreshMBeanView(); + } + catch (Exception ex) + { + MBeanUtility.handleException(ex); + } } } } diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java index c13b02794e..c087bd2e72 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import javax.management.ListenerNotFoundException; import javax.management.MBeanInfo; import javax.management.MBeanServerConnection; import javax.management.Notification; @@ -50,17 +51,10 @@ public class JMXServerRegistry extends ServerRegistry private JMXConnector _jmxc = null; private MBeanServerConnection _mbsc = null; - // When a new mbean is added on the mbean server, then the notification listener - // will add the mbean in this list. - private List<ManagedBean> _mbeansToBeAdded = new ArrayList<ManagedBean>(); - // When an mbean gets remoevd from mbena server, then the notification listener + // When an mbean gets removed from mbean server, then the notification listener // will add that mbean in this list. private List<ManagedBean> _mbeansToBeRemoved = new ArrayList<ManagedBean>(); - private List<String> _queues = new ArrayList<String>(); - private List<String> _exchanges = new ArrayList<String>(); - private List<String> _connections = new ArrayList<String>(); - // Map containing all managed beans and ampped with unique mbean name private HashMap<String, ManagedBean> _mbeansMap = new HashMap<String, ManagedBean>(); // Map containing MBeanInfo for all mbeans and mapped with unique mbean name @@ -110,16 +104,23 @@ public class JMXServerRegistry extends ServerRegistry */ public void closeServerConnection() throws Exception { - if (_jmxc != null) - _jmxc.removeConnectionNotificationListener(_clientListener); - - if (_mbsc != null) - _mbsc.removeNotificationListener(_serverObjectName, _clientListener); - - // remove mbean notification listeners - for (String mbeanName : _subscribedNotificationMap.keySet()) + try + { + if (_jmxc != null) + _jmxc.removeConnectionNotificationListener(_clientListener); + + if (_mbsc != null) + _mbsc.removeNotificationListener(_serverObjectName, _clientListener); + + // remove mbean notification listeners + for (String mbeanName : _subscribedNotificationMap.keySet()) + { + _mbsc.removeNotificationListener(new ObjectName(mbeanName), _notificationListener); + } + } + catch (ListenerNotFoundException ex) { - _mbsc.removeNotificationListener(new ObjectName(mbeanName), _notificationListener); + System.out.println(ex.toString()); } } @@ -128,26 +129,32 @@ public class JMXServerRegistry extends ServerRegistry return _mbeansMap.get(uniqueName); } - public void addManagedObject(ManagedBean key) + public void addManagedObject(ManagedBean mbean) { - if (Constants.QUEUE.equals(key.getType())) - _queues.add(key.getName()); - else if (Constants.EXCHANGE.equals(key.getType())) - _exchanges.add(key.getName()); - else if (Constants.CONNECTION.equals(key.getType())) - _connections.add(key.getName()); + if (Constants.QUEUE.equals(mbean.getType()) && !mbean.getName().startsWith("tmp_")) + { + addQueueMBean(mbean); + } + else if (Constants.EXCHANGE.equals(mbean.getType())) + { + addExchangeMBean(mbean); + } + else if (Constants.CONNECTION.equals(mbean.getType())) + { + addConnectionMBean(mbean); + } - _mbeansMap.put(key.getUniqueName(), key); + _mbeansMap.put(mbean.getUniqueName(), mbean); } public void removeManagedObject(ManagedBean mbean) { if (Constants.QUEUE.equals(mbean.getType())) - _queues.remove(mbean.getName()); + removeQueueMBean(mbean); else if (Constants.EXCHANGE.equals(mbean.getType())) - _exchanges.remove(mbean.getName()); + removeExchangeMBean(mbean); else if (Constants.CONNECTION.equals(mbean.getType())) - _connections.remove(mbean.getName()); + removeConnectionMBean(mbean); _mbeansMap.remove(mbean.getUniqueName()); } @@ -161,6 +168,11 @@ public class JMXServerRegistry extends ServerRegistry return _mbeanInfoMap.get(mbean.getUniqueName()); } + public List<ManagedBean> getMBeans() + { + return new ArrayList<ManagedBean>(_mbeansMap.values()); + } + public void setNotificationInfo(ManagedBean mbean, List<NotificationInfoModel>value) { _notificationInfoMap.put(mbean.getUniqueName(), value); @@ -280,27 +292,15 @@ public class JMXServerRegistry extends ServerRegistry public void registerManagedObject(ObjectName objName) { JMXManagedObject managedObject = new JMXManagedObject(objName); + managedObject.setServer(getManagedServer()); - _mbeansToBeAdded.add(managedObject); + addManagedObject(managedObject); } public void unregisterManagedObject(ObjectName objName) { - JMXManagedObject managedObject = new JMXManagedObject(objName); - managedObject.setServer(getManagedServer()); - _mbeansToBeRemoved.add(managedObject); - } - - public List<ManagedBean> getObjectsToBeAdded() - { - if (_mbeansToBeAdded.isEmpty()) - return null; - else - { - List<ManagedBean> list = _mbeansToBeAdded; - _mbeansToBeAdded = new ArrayList<ManagedBean>(); - return list; - } + ManagedBean mbean = _mbeansMap.get(objName.toString()); + _mbeansToBeRemoved.add(mbean); } public List<ManagedBean> getObjectsToBeRemoved() @@ -337,17 +337,35 @@ public class JMXServerRegistry extends ServerRegistry public String[] getQueueNames() { - return _queues.toArray(new String[0]); + String[] queues = new String[_queues.size()]; + int i = 0; + for (ManagedBean mbean : _queues) + { + queues[i++] = mbean.getName(); + } + return queues; } public String[] getExchangeNames() { - return _exchanges.toArray(new String[0]); + String[] exchanges = new String[_exchanges.size()]; + int i = 0; + for (ManagedBean mbean : _exchanges) + { + exchanges[i++] = mbean.getName(); + } + return exchanges; } public String[] getConnectionNames() { - return _connections.toArray(new String[0]); + String[] connections = new String[_connections.size()]; + int i = 0; + for (ManagedBean mbean : _connections) + { + connections[i++] = mbean.getName(); + } + return connections; } public ClientNotificationListener getNotificationListener() diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java index da5611a703..aab163cac3 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java @@ -143,30 +143,30 @@ public class MBeanUtility { if (mbean == null) { - ViewUtility.popupErrorMessage("Error", ex.getMessage()); + ViewUtility.popupErrorMessage("Error", "Managed Object is null \n" + ex.toString()); } else if (ex instanceof IOException) { - ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage()); + ViewUtility.popupErrorMessage(mbean.getName(), "IO Error occured \n" + ex.toString()); } else if (ex instanceof ReflectionException) { - ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage()); + ViewUtility.popupErrorMessage(mbean.getName(), "Server has thrown error \n" + ex.toString()); } else if (ex instanceof InstanceNotFoundException) { - ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage()); + ViewUtility.popupErrorMessage(mbean.getName(), "Managed Object Not Found \n" + ex.toString()); } else if (ex instanceof MBeanException) { - String cause = ((MBeanException)ex).getTargetException().getMessage(); + String cause = ((MBeanException)ex).getTargetException().toString(); if (cause == null) - cause = ex.getMessage(); + cause = ex.toString(); ViewUtility.popupInfoMessage(mbean.getName(), cause); } else if (ex instanceof JMException) { - ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage()); + ViewUtility.popupErrorMessage(mbean.getName(), "Management Exception occured \n" + ex.toString()); } else if (ex instanceof ManagementConsoleException) { @@ -174,7 +174,7 @@ public class MBeanUtility } else { - ViewUtility.popupError(mbean.getName(), "Error occured", ex); + ViewUtility.popupErrorMessage(mbean.getName(), ex.toString()); } //ex.printStackTrace(); } diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java index 05425c5c01..fbd7084e3e 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java @@ -1,9 +1,16 @@ package org.apache.qpid.management.ui.views; +import java.util.Arrays; +import java.util.HashMap; + import org.apache.qpid.management.ui.ApplicationRegistry; import org.apache.qpid.management.ui.Constants; +import org.apache.qpid.management.ui.ManagedBean; import org.apache.qpid.management.ui.ServerRegistry; +import org.apache.qpid.management.ui.jmx.MBeanUtility; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -12,28 +19,38 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.widgets.Form; import org.eclipse.ui.forms.widgets.FormToolkit; public class MBeanTypeTabControl { - private FormToolkit _toolkit; - private Form _form; - private TabFolder _tabFolder; - private Composite _composite; - private Label _labelName; - private Label _labelDesc; - private List _list; - private Button _button; + private FormToolkit _toolkit = null; + private Form _form = null; + private TabFolder _tabFolder = null; + private Composite _composite = null; + private Composite _listComposite = null; + private Label _labelName = null; + private Label _labelDesc = null; + private Label _labelList = null; + private org.eclipse.swt.widgets.List _list = null; + private Button _refreshButton = null; + private Button _addButton = null; private String _type = null; + // maps an mbena name with the mbean object. Required to get mbean object when an mbean + // is to be added to the navigation view. + private HashMap<String, ManagedBean> _objectsMap = new HashMap<String, ManagedBean>(); + public MBeanTypeTabControl(TabFolder tabFolder) { _tabFolder = tabFolder; _toolkit = new FormToolkit(_tabFolder.getDisplay()); _form = _toolkit.createForm(_tabFolder); createWidgets(); + addListeners(); } public Control getControl() @@ -41,27 +58,88 @@ public class MBeanTypeTabControl return _form; } + private void addListeners() + { + _addButton.addSelectionListener(new SelectionAdapter(){ + public void widgetSelected(SelectionEvent e) + { + if (_list.getSelectionCount() == 0) + return; + + String[] selectedItems = _list.getSelection(); + for (int i = 0; i < selectedItems.length; i++) + { + String name = selectedItems[i]; + ManagedBean mbean = _objectsMap.get(name); + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + NavigationView view = (NavigationView)window.getActivePage().findView(NavigationView.ID); + try + { + view.addManagedBean(mbean); + } + catch (Exception ex) + { + MBeanUtility.handleException(mbean, ex); + } + } + } + }); + + _refreshButton.addSelectionListener(new SelectionAdapter(){ + public void widgetSelected(SelectionEvent e) + { + try + { + refresh(_type); + } + catch (Exception ex) + { + MBeanUtility.handleException(ex); + } + } + }); + } + private void createWidgets() { _form.getBody().setLayout(new GridLayout()); _composite = _toolkit.createComposite(_form.getBody(), SWT.NONE); _composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - _composite.setLayout(new GridLayout(2, true)); + GridLayout layout = new GridLayout(2, true); + layout.verticalSpacing = 10; + layout.horizontalSpacing = 0; + _composite.setLayout(layout); _labelName = _toolkit.createLabel(_composite, "Type:", SWT.NONE); GridData gridData = new GridData(SWT.CENTER, SWT.TOP, true, false, 2, 1); _labelName.setLayoutData(gridData); _labelName.setFont(ApplicationRegistry.getFont(Constants.FONT_BOLD)); - /* + _labelDesc = _toolkit.createLabel(_composite, " ", SWT.NONE); _labelDesc.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false, 2, 1)); _labelDesc.setFont(ApplicationRegistry.getFont(Constants.FONT_ITALIC)); - _button = _toolkit.createButton(_composite, "<- Add to Navigation", SWT.PUSH); + _refreshButton = _toolkit.createButton(_composite, Constants.BUTTON_REFRESH, SWT.PUSH); + gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false, 2, 1); + gridData.widthHint = 80; + _refreshButton.setLayoutData(gridData); + + _addButton = _toolkit.createButton(_composite, "<- Add to Navigation", SWT.PUSH); gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false); - _button.setLayoutData(gridData); - */ - _list = new List(_composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); + _addButton.setLayoutData(gridData); + + // Composite to contain the item list + _listComposite = _toolkit.createComposite(_composite); + gridData = new GridData(SWT.FILL, SWT.FILL, true, true); + _listComposite.setLayoutData(gridData); + _listComposite.setLayout(new GridLayout()); + + // Label for item name + _labelList = _toolkit.createLabel(_listComposite, " ", SWT.NONE); + _labelList.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false)); + _labelList.setFont(ApplicationRegistry.getFont(Constants.FONT_NORMAL)); + + _list = new List(_listComposite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); gridData = new GridData(SWT.FILL, SWT.FILL, true, true); _list.setLayoutData(gridData); } @@ -71,36 +149,64 @@ public class MBeanTypeTabControl _type = typeName; setHeader(); populateList(); + + _listComposite.layout(); + _composite.layout(); _form.layout(); } private void setHeader() { - _labelName.setText("Type: " + _type); - //_labelDesc.setText("Select the " + _type + " to add in the Navigation View"); + _labelName.setText("Type : " + _type); + _labelDesc.setText("Select the " + _type + "(s) to add in the Navigation View"); + _labelList.setText("-- List of " + _type + "s --"); } + /** + * populates the map with mbean name and the mbean object. + * @throws Exception + */ private void populateList() throws Exception { + // map should be cleared before populating it with new values + _objectsMap.clear(); ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(MBeanView.getServer()); String[] items = null; + java.util.List<ManagedBean> list = null; + + // populate the map and list with appropriate mbeans if (_type.equals(Constants.QUEUE)) { - items = serverRegistry.getQueueNames(); + list = serverRegistry.getQueues(); } else if (_type.equals(Constants.EXCHANGE)) { - items = serverRegistry.getExchangeNames(); + list = serverRegistry.getExchanges();; } else if (_type.equals(Constants.CONNECTION)) { - items = serverRegistry.getConnectionNames(); + list = serverRegistry.getConnections(); } else { throw new Exception("Unknown mbean type " + _type); } + items = getItems(list); _list.setItems(items); } + + // sets the map with appropriate mbean and name + private String[] getItems(java.util.List<ManagedBean> list) + { + String[] items = new String[list.size()]; + int i = 0; + for (ManagedBean mbean : list) + { + items[i++] = mbean.getName(); + _objectsMap.put(mbean.getName(), mbean); + } + Arrays.sort(items); + return items; + } } diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java index e5d5e1ed64..96981e755f 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java @@ -86,24 +86,30 @@ public class MBeanView extends ViewPart IStructuredSelection ss = (IStructuredSelection) sel; _selectedNode = (TreeObject)ss.getFirstElement(); - if (_selectedNode == null) - return; + // mbean should be set to null. A selection done on the navigation view can be either an mbean or // an mbeantype. For mbeantype selection(eg Connection, Queue, Exchange) _mbean will remain null. _mbean = null; setInvisible(); _form.setText(Constants.APPLICATION_NAME); + + // If a selected node(mbean) gets unregistered from mbena server, mbenaview should should + // make the tabfolber for that mbean invisible + if (_selectedNode == null) + return; + setServer(); try { if (Constants.TYPE.equals(_selectedNode.getType())) { - if (typeTabFolder == null) - createTypeTabFolder(); - refreshTypeTabFolder(_selectedNode.getName()); } + else if (Constants.DOMAIN.equals(_selectedNode.getType())) + { + refreshTypeTabFolder(typeTabFolder.getItem(0)); + } else { showSelectedMBean(); @@ -207,23 +213,38 @@ public class MBeanView extends ViewPart // Add selection listener for selection events in the Navigation view getSite().getPage().addSelectionListener(NavigationView.ID, selectionListener); + + // Add mbeantype TabFolder. This will list all the mbeans under a mbeantype (eg Queue, Exchange). + // Using this list mbeans will be added in the navigation view + createTypeTabFolder(); } - public void refreshMBeanView() + public void refreshMBeanView() throws Exception { + int tabIndex = 0; + TabItem tab = null; if (_mbean == null) - return; - - TabFolder tabFolder = tabFolderMap.get(_mbean.getType()); - if (tabFolder == null) - return; - - int index = tabFolder.getSelectionIndex(); - TabItem tab = tabFolder.getItem(index); - if (tab == null) - return; - - refreshTab(tab); + { + tabIndex = typeTabFolder.getSelectionIndex(); + if (tabIndex == -1) + return; + + tab = typeTabFolder.getItem(tabIndex); + refreshTypeTabFolder(tab); + } + else + { + TabFolder tabFolder = tabFolderMap.get(_mbean.getType()); + if (tabFolder == null) + return; + + tabIndex = tabFolder.getSelectionIndex(); + tab = tabFolder.getItem(tabIndex); + if (tab == null) + return; + + refreshTab(tab); + } _form.layout(); } @@ -443,11 +464,7 @@ public class MBeanView extends ViewPart { if (tab == null) { - int index = typeTabFolder.getSelectionIndex(); - if (index == -1) - return; - - tab = typeTabFolder.getItem(index); + return; } typeTabFolder.setSelection(tab); MBeanTypeTabControl controller = (MBeanTypeTabControl)typeTabFolder.getData("CONTROLLER"); diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java index 9e1ceb2148..619aa06598 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java @@ -36,6 +36,7 @@ import org.apache.qpid.management.ui.ManagedBean; 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.exceptions.ManagementConsoleException; import org.apache.qpid.management.ui.jmx.JMXServerRegistry; import org.apache.qpid.management.ui.jmx.MBeanUtility; import org.eclipse.jface.viewers.DoubleClickEvent; @@ -71,8 +72,6 @@ public class NavigationView extends ViewPart 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>(); @@ -143,7 +142,7 @@ public class NavigationView extends ViewPart 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) @@ -281,11 +280,32 @@ public class NavigationView extends ViewPart private void populateDomain(TreeObject domain) throws IOException, Exception { ManagedServer server = (ManagedServer)domain.getParent().getManagedObject(); + + // 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); - addManagedBean(domain, mbean); + 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); + } } } @@ -293,59 +313,69 @@ public class NavigationView extends ViewPart * 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 type + * @param typeName * @return Node if given mbeantype already exists, otherwise null */ - private TreeObject getIfTypeAlreadyExists(TreeObject domain, String type) + 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 boolean doesMBeanNodeAlreadyExist(TreeObject typeNode, String mbeanName) + { + 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 obj mbean + * @param mbean mbean */ - private void addManagedBean(TreeObject domain, ManagedBean obj) + private void addManagedBean(TreeObject domain, ManagedBean mbean) throws Exception { - ManagedServer server = (ManagedServer)domain.getParent().getManagedObject(); - JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server); - serverRegistry.addManagedObject(obj); - - String type = obj.getType(); - String name = obj.getName(); + 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); } } @@ -469,7 +499,6 @@ public class NavigationView extends ViewPart list.remove(objectToRemove); } - //_serverNodeList.remove(objectToRemove); _treeViewer.refresh(); // Remove from the ini file @@ -664,24 +693,6 @@ public class NavigationView extends ViewPart } 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 @@ -717,60 +728,36 @@ public class NavigationView extends ViewPart 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; diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java index ae3eef102d..ef3d6f0106 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java @@ -388,10 +388,10 @@ public class ViewUtility 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); } |