You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by bh...@apache.org on 2007/01/03 16:38:04 UTC

svn commit: r492184 - in /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui: ./ actions/ jmx/ views/

Author: bhupendrab
Date: Wed Jan  3 07:38:03 2007
New Revision: 492184

URL: http://svn.apache.org/viewvc?view=rev&rev=492184
Log:
QPID-213

Modified:
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
    incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java Wed Jan  3 07:38:03 2007
@@ -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 @@
 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 @@
         _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);
+    }
+    
+    protected void addQueueMBean(ManagedBean mbean)
+    {
+        _queues.add(mbean);
+    }
+    
+    protected void removeConnectionMBean(ManagedBean mbean)
+    {
+        _connections.remove(mbean);
+    }
+    
+    protected void removeExchangeMBean(ManagedBean mbean)
+    {
+        _exchanges.remove(mbean);
+    }
     
-    public List<ManagedBean> getObjectsToBeAdded()
+    protected void removeQueueMBean(ManagedBean mbean)
     {
-        return null;
+        _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;

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java Wed Jan  3 07:38:03 2007
@@ -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.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 @@
             view.refresh();
             
             MBeanView mbeanview = (MBeanView)_window.getActivePage().findView(MBeanView.ID);
-            mbeanview.refreshMBeanView();
+            try
+            {
+                mbeanview.refreshMBeanView();
+            }
+            catch (Exception ex)
+            {
+                MBeanUtility.handleException(ex);
+            }
         }
     }
 }

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java Wed Jan  3 07:38:03 2007
@@ -26,6 +26,7 @@
 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 @@
     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 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 @@
         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 @@
         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 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 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()

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java Wed Jan  3 07:38:03 2007
@@ -143,30 +143,30 @@
     {
         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 @@
         }
         else 
         {
-            ViewUtility.popupError(mbean.getName(), "Error occured", ex);
+            ViewUtility.popupErrorMessage(mbean.getName(), ex.toString());
         }
         //ex.printStackTrace();
     }

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java Wed Jan  3 07:38:03 2007
@@ -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.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 @@
         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 @@
         _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;
     }
 }

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java Wed Jan  3 07:38:03 2007
@@ -86,24 +86,30 @@
 
             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 @@
         
         // 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 @@
     {
         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");

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Wed Jan  3 07:38:03 2007
@@ -36,6 +36,7 @@
 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 @@
     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 @@
         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 @@
     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 @@
      * 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 @@
             list.remove(objectToRemove);
         }
         
-        //_serverNodeList.remove(objectToRemove);
         _treeViewer.refresh();
         
         // Remove from the ini file
@@ -664,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
     
     
@@ -717,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;
             

Modified: incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java?view=diff&rev=492184&r1=492183&r2=492184
==============================================================================
--- incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java (original)
+++ incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java Wed Jan  3 07:38:03 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);
 
     }