diff options
| author | Kim van der Riet <kpvdr@apache.org> | 2007-02-14 20:02:03 +0000 |
|---|---|---|
| committer | Kim van der Riet <kpvdr@apache.org> | 2007-02-14 20:02:03 +0000 |
| commit | a22f3f594d6eee7d610fb4f140e18cddd7c880f6 (patch) | |
| tree | 5adb376ed217d2debaff1c0bdd59af1a1c93e829 /java/management/eclipse-plugin/src | |
| parent | 9cb1922884c5b258c961046e6fd48e5152aa79d5 (diff) | |
| download | qpid-python-a22f3f594d6eee7d610fb4f140e18cddd7c880f6.tar.gz | |
First backmerge from trunk to 0-9 branch for Java. Not all java tests passing yet
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@507672 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/management/eclipse-plugin/src')
17 files changed, 350 insertions, 138 deletions
diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java index 756d404596..2fadee6f54 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java @@ -32,12 +32,15 @@ public class Constants public final static String ITEM_TYPE = "type"; public final static String SERVER = "server"; public final static String DOMAIN = "domain"; - public final static String TYPE = "mbeantype"; + public final static String NODE_TYPE_MBEANTYPE = "mbeantype"; + // currently used only for virtual host instances, but will work as general also + public final static String TYPE_INSTANCE = "mbeantype_instance"; public final static String MBEAN = "mbean"; public final static String ATTRIBUTE = "Attribute"; public final static String ATTRIBUTES = "Attributes"; public final static String NOTIFICATION = "Notifications"; public final static String RESULT = "Result"; + public final static String VIRTUAL_HOST = "VirtualHost"; public final static String ATTRIBUTE_QUEUE_DEPTH = "QueueDepth"; diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ManagedBean.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ManagedBean.java index 7da5621345..e87d77159d 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ManagedBean.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ManagedBean.java @@ -32,6 +32,7 @@ public abstract class ManagedBean extends ManagedObject private String _uniqueName = ""; private String _domain = ""; private String _type = ""; + private String _virtualHostName = "Default"; private ManagedServer _server = null; private HashMap _properties = null; @@ -47,6 +48,7 @@ public abstract class ManagedBean extends ManagedObject public void setProperties(HashMap properties) { this._properties = properties; + setVirtualHostName(getProperty(Constants.VIRTUAL_HOST)); } public String getDomain() { @@ -82,4 +84,17 @@ public abstract class ManagedBean extends ManagedObject this._uniqueName = uniqueName; } + public String getVirtualHostName() + { + return _virtualHostName; + } + + public void setVirtualHostName(String virtualHost) + { + if (virtualHost != null) + { + this._virtualHostName = virtualHost; + } + } + } 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 6fbfdcd06f..4f6bbd8bc0 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 @@ -23,6 +23,8 @@ package org.apache.qpid.management.ui; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import org.apache.qpid.management.ui.jmx.ClientListener; import org.apache.qpid.management.ui.model.ManagedAttributeModel; @@ -33,11 +35,14 @@ public abstract class ServerRegistry { private ManagedServer _managedServer = null; // list of all Connection mbeans - protected List<ManagedBean> _connections = new ArrayList<ManagedBean>(); + //private List<ManagedBean> _connections = new ArrayList<ManagedBean>(); + private ConcurrentMap<String,List<ManagedBean>> _connections = new ConcurrentHashMap<String,List<ManagedBean>>(); // list of all exchange mbeans - protected List<ManagedBean> _exchanges = new ArrayList<ManagedBean>(); + //private List<ManagedBean> _exchanges = new ArrayList<ManagedBean>(); + private ConcurrentMap<String,List<ManagedBean>> _exchanges = new ConcurrentHashMap<String,List<ManagedBean>>(); // list of all queue mbenas - protected List<ManagedBean> _queues = new ArrayList<ManagedBean>(); + //private List<ManagedBean> _queues = new ArrayList<ManagedBean>(); + private ConcurrentMap<String,List<ManagedBean>> _queues = new ConcurrentHashMap<String,List<ManagedBean>>(); public ServerRegistry() { @@ -61,47 +66,58 @@ public abstract class ServerRegistry protected void addConnectionMBean(ManagedBean mbean) { - _connections.add(mbean); + String vHost = mbean.getVirtualHostName(); + _connections.putIfAbsent(vHost, new ArrayList<ManagedBean>()); + List<ManagedBean> beans = _connections.get(vHost); + beans.add(mbean); } protected void addExchangeMBean(ManagedBean mbean) { - _exchanges.add(mbean); + String vHost = mbean.getVirtualHostName(); + _exchanges.putIfAbsent(vHost, new ArrayList<ManagedBean>()); + List<ManagedBean> beans = _exchanges.get(vHost); + beans.add(mbean); } protected void addQueueMBean(ManagedBean mbean) { - _queues.add(mbean); + String vHost = mbean.getVirtualHostName(); + _queues.putIfAbsent(vHost, new ArrayList<ManagedBean>()); + List<ManagedBean> beans = _queues.get(vHost); + beans.add(mbean); } protected void removeConnectionMBean(ManagedBean mbean) { - _connections.remove(mbean); + String vHost = mbean.getVirtualHostName(); + List<ManagedBean> beans = _connections.get(vHost); + beans.remove(mbean); } protected void removeExchangeMBean(ManagedBean mbean) { - _exchanges.remove(mbean); + _exchanges.get(mbean.getVirtualHostName()).remove(mbean); } protected void removeQueueMBean(ManagedBean mbean) { - _queues.remove(mbean); + _queues.get(mbean.getVirtualHostName()).remove(mbean); } - public List<ManagedBean> getConnections() + public List<ManagedBean> getConnections(String virtualHost) { - return _connections; + return _connections.get(virtualHost); } - public List<ManagedBean> getExchanges() + public List<ManagedBean> getExchanges(String virtualHost) { - return _exchanges; + return _exchanges.get(virtualHost); } - public List<ManagedBean> getQueues() + public List<ManagedBean> getQueues(String virtualHost) { - return _queues; + return _queues.get(virtualHost); } public abstract void addManagedObject(ManagedBean key); @@ -123,11 +139,11 @@ public abstract class ServerRegistry public abstract OperationDataModel getOperationModel(ManagedBean mbean); - public abstract String[] getQueueNames(); + public abstract String[] getQueueNames(String vistualHostName); - public abstract String[] getExchangeNames(); + public abstract String[] getExchangeNames(String vistualHostName); - public abstract String[] getConnectionNames(); + public abstract String[] getConnectionNames(String vistualHostName); public abstract List<NotificationObject> getNotifications(ManagedBean mbean); diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java index 00a9ae7653..6a23051a9e 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientListener.java @@ -43,8 +43,6 @@ public class ClientListener implements NotificationListener public void handleNotification(Notification notification, Object handback) { - System.out.println("\nReceived server notification: " + notification); - ObjectName objName = null; String type = notification.getType(); if (MBeanServerNotification.REGISTRATION_NOTIFICATION.equals(type)) diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientNotificationListener.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientNotificationListener.java index 31b761fcf3..c6ecda4b4c 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientNotificationListener.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/ClientNotificationListener.java @@ -34,7 +34,6 @@ public class ClientNotificationListener extends ClientListener public void handleNotification(Notification notification, Object handback) { - System.out.println("\nReceived mbean notification: " + notification); ObjectName objName = (ObjectName)notification.getSource(); //String type = notification.getType(); getServerRegistry().addNotification(objName, notification); 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 c087bd2e72..72c4fa3d9d 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 @@ -131,15 +131,15 @@ public class JMXServerRegistry extends ServerRegistry public void addManagedObject(ManagedBean mbean) { - if (Constants.QUEUE.equals(mbean.getType()) && !mbean.getName().startsWith("tmp_")) + if (mbean.getType().endsWith(Constants.QUEUE) && !mbean.getName().startsWith("tmp_")) { addQueueMBean(mbean); } - else if (Constants.EXCHANGE.equals(mbean.getType())) + else if (mbean.getType().endsWith(Constants.EXCHANGE)) { addExchangeMBean(mbean); } - else if (Constants.CONNECTION.equals(mbean.getType())) + else if (mbean.getType().endsWith(Constants.CONNECTION)) { addConnectionMBean(mbean); } @@ -149,11 +149,11 @@ public class JMXServerRegistry extends ServerRegistry public void removeManagedObject(ManagedBean mbean) { - if (Constants.QUEUE.equals(mbean.getType())) + if (mbean.getType().endsWith(Constants.QUEUE)) removeQueueMBean(mbean); - else if (Constants.EXCHANGE.equals(mbean.getType())) + else if (mbean.getType().endsWith(Constants.EXCHANGE)) removeExchangeMBean(mbean); - else if (Constants.CONNECTION.equals(mbean.getType())) + else if (mbean.getType().endsWith(Constants.CONNECTION)) removeConnectionMBean(mbean); _mbeansMap.remove(mbean.getUniqueName()); @@ -212,21 +212,31 @@ public class JMXServerRegistry extends ServerRegistry _notificationsMap.get(mbean.getUniqueName()).clear(); } + /** + * Adds notification name and type to the map. The map contains all the notification names, + * subscribed for an mbean. + * @param mbean + * @param name + * @param type + */ public void addNotificationListener(ManagedBean mbean, String name, String type) { - HashMap<String, List<String>> map = _subscribedNotificationMap.get(mbean.getUniqueName()); + // Get the subscribed notifications map for given mbean. If map is null then create a new one. + HashMap<String, List<String>> map = _subscribedNotificationMap.get(mbean.getUniqueName()); if (map == null) { map = new HashMap<String, List<String>>(); _subscribedNotificationMap.put(mbean.getUniqueName(),map); } + // Get the list of notification types for given notification name. If null, then create a new list. List<String> list = map.get(name); if (list == null) { list = new ArrayList<String>(); map.put(name, list); } + // Now add the notification type to the list if (Constants.ALL.equals(type)) { List<NotificationInfoModel> infoList = _notificationInfoMap.get(mbean.getUniqueName()); @@ -247,9 +257,12 @@ public class JMXServerRegistry extends ServerRegistry list.add(type); } - System.out.println("Subscribed for notification :" + mbean.getUniqueName()); + //System.out.println("Subscribed for notification :" + mbean.getUniqueName()); } + /** + * Checks if the given notification name and type are subscribed for the mbean. + */ public boolean hasSubscribedForNotifications(ManagedBean mbean, String name, String type) { if (_subscribedNotificationMap.containsKey(mbean.getUniqueName())) @@ -266,11 +279,20 @@ public class JMXServerRegistry extends ServerRegistry return false; } + /** + * Clears the notification name and type information from the subscribed notifications map + * and removes the listener from mbeanserver connection + * @param mbean + * @param name + * @param type + * @throws Exception + */ public void removeNotificationListener(ManagedBean mbean, String name, String type) throws Exception { - System.out.println("Removed notification listener :" + mbean.getUniqueName() + name +type); + //System.out.println("Removed notification listener :" + mbean.getUniqueName() + name +type); if (_subscribedNotificationMap.containsKey(mbean.getUniqueName())) { + // get the notifications map. This map contains the notification name mapped with the notification types HashMap<String, List<String>> map = _subscribedNotificationMap.get(mbean.getUniqueName()); if (map.containsKey(name)) { @@ -281,8 +303,16 @@ public class JMXServerRegistry extends ServerRegistry else if (type != null) { map.get(name).remove(type); + if (map.get(name).isEmpty()) + { + map.remove(name); + } } } + if (map.size() == 0) + { + _subscribedNotificationMap.remove(mbean.getUniqueName()); + } JMXManagedObject jmxbean = (JMXManagedObject)mbean; _mbsc.removeNotificationListener(jmxbean.getObjectName(), _notificationListener); @@ -335,33 +365,45 @@ public class JMXServerRegistry extends ServerRegistry return _operationModelMap.get(mbean.getUniqueName()); } - public String[] getQueueNames() + public String[] getQueueNames(String virtualHostName) { - String[] queues = new String[_queues.size()]; + List<ManagedBean> list = getQueues(virtualHostName); + if (list == null) + return null; + + String[] queues = new String[list.size()]; int i = 0; - for (ManagedBean mbean : _queues) + for (ManagedBean mbean : list) { queues[i++] = mbean.getName(); } return queues; } - public String[] getExchangeNames() + public String[] getExchangeNames(String virtualHostName) { - String[] exchanges = new String[_exchanges.size()]; + List<ManagedBean> list = getExchanges(virtualHostName); + if (list == null) + return null; + + String[] exchanges = new String[list.size()]; int i = 0; - for (ManagedBean mbean : _exchanges) + for (ManagedBean mbean : list) { exchanges[i++] = mbean.getName(); } return exchanges; } - public String[] getConnectionNames() + public String[] getConnectionNames(String virtualHostName) { - String[] connections = new String[_connections.size()]; + List<ManagedBean> list = getExchanges(virtualHostName); + if (list == null) + return null; + + String[] connections = new String[list.size()]; int i = 0; - for (ManagedBean mbean : _connections) + for (ManagedBean mbean : list) { connections[i++] = mbean.getName(); } diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/AttributeData.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/AttributeData.java index 601f499a0c..ccd4cf8df8 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/AttributeData.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/AttributeData.java @@ -25,7 +25,7 @@ public class AttributeData String name = ""; String description = ""; String dataType = ""; - Object value = null; + Object value = ""; boolean readable = true; boolean writable = false; @@ -63,7 +63,8 @@ public class AttributeData } public void setValue(Object value) { - this.value = value; + if (value != null) + this.value = value; } public boolean isReadable() { diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java index 8bf4e30c64..2b8e5cee1a 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java @@ -20,8 +20,6 @@ */ package org.apache.qpid.management.ui.views; -import javax.management.openmbean.TabularDataSupport; - import org.apache.qpid.management.ui.ApplicationRegistry; import org.apache.qpid.management.ui.Constants; import org.apache.qpid.management.ui.ManagedBean; @@ -421,7 +419,7 @@ public class AttributesTabControl extends TabControl { int width = 500; int height = 250; - if (data.getValue() instanceof TabularDataSupport) + if (!isSimpleType(data.getValue())) { width = 650; height = 450; @@ -516,12 +514,12 @@ public class AttributesTabControl extends TabControl } else { - if (attribute.getValue() instanceof TabularDataSupport) + if (!isSimpleType(attribute.getValue())) { Composite composite = new Composite(parent, SWT.BORDER); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - ViewUtility.createTabularDataHolder(_toolkit, composite,(TabularDataSupport)attribute.getValue()); + ViewUtility.populateCompositeWithData(_toolkit, composite, attribute.getValue()); } else { 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 73d56634ec..3e76e3e1c0 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 @@ -233,19 +233,19 @@ public class MBeanTypeTabControl // populate the map and list with appropriate mbeans if (_type.equals(Constants.QUEUE)) { - list = serverRegistry.getQueues(); + list = serverRegistry.getQueues(MBeanView.getVirtualHost()); items = getQueueItems(list); _sortBySizeButton.setVisible(true); } else if (_type.equals(Constants.EXCHANGE)) { - list = serverRegistry.getExchanges(); + list = serverRegistry.getExchanges(MBeanView.getVirtualHost()); items = getItems(list); _sortBySizeButton.setVisible(false); } else if (_type.equals(Constants.CONNECTION)) { - list = serverRegistry.getConnections(); + list = serverRegistry.getConnections(MBeanView.getVirtualHost()); items = getItems(list); _sortBySizeButton.setVisible(false); } @@ -255,11 +255,15 @@ public class MBeanTypeTabControl } _list.setItems(items); + } // sets the map with appropriate mbean and name private String[] getItems(java.util.List<ManagedBean> list) { + if (list == null) + return new String[0]; + Collections.sort(list, _sorterByName); String[] items = new String[list.size()]; int i = 0; @@ -273,6 +277,9 @@ public class MBeanTypeTabControl private String[] getQueueItems(java.util.List<ManagedBean> list) throws Exception { + if (list == null) + return new String[0]; + // Sort the list. It will keep the mbeans in sorted order in the _queueMap, which is required for // sorting the queue according to size etc Collections.sort(list, _sorterByName); 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 96981e755f..e3cd92f38a 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 @@ -64,6 +64,7 @@ public class MBeanView extends ViewPart private static ManagedServer _server = null; private TreeObject _selectedNode = null; private ManagedBean _mbean = null; + private static String _virtualHostName = null; // This map contains a TabFolder for each kind of MBean. TabFolder is mapped with mbeantype(eg Connection, Queue etc) private HashMap<String, TabFolder> tabFolderMap = new HashMap<String, TabFolder>(); private ISelectionListener selectionListener = new SelectionListenerImpl(); @@ -102,14 +103,10 @@ public class MBeanView extends ViewPart setServer(); try { - if (Constants.TYPE.equals(_selectedNode.getType())) + if (Constants.NODE_TYPE_MBEANTYPE.equals(_selectedNode.getType())) { refreshTypeTabFolder(_selectedNode.getName()); } - else if (Constants.DOMAIN.equals(_selectedNode.getType())) - { - refreshTypeTabFolder(typeTabFolder.getItem(0)); - } else { showSelectedMBean(); @@ -134,16 +131,20 @@ public class MBeanView extends ViewPart if (Constants.SERVER.equals(_selectedNode.getType())) { _server = (ManagedServer)_selectedNode.getManagedObject(); + _virtualHostName = null; } else { TreeObject parent = _selectedNode.getParent(); - while (!parent.getType().equals(Constants.SERVER)) + while (parent != null && !parent.getType().equals(Constants.SERVER)) { parent = parent.getParent(); } - _server = (ManagedServer)parent.getManagedObject(); + if (parent != null && parent.getType().equals(Constants.SERVER)) + _server = (ManagedServer)parent.getManagedObject(); + + _virtualHostName = _selectedNode.getVirtualHost(); } } @@ -152,6 +153,11 @@ public class MBeanView extends ViewPart return _server; } + public static String getVirtualHost() + { + return _virtualHostName; + } + private void showSelectedMBean() throws Exception { if (Constants.NOTIFICATION.equals(_selectedNode.getType())) 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 619aa06598..8e262075a9 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 @@ -33,6 +33,7 @@ import java.util.List; 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.ManagedObject; import org.apache.qpid.management.ui.ManagedServer; import org.apache.qpid.management.ui.ServerRegistry; import org.apache.qpid.management.ui.exceptions.InfoRequiredException; @@ -266,7 +267,7 @@ public class NavigationView extends ViewPart catch(Exception ex) { System.out.println("\nError in connecting to Qpid broker "); - System.out.println("\n" + ex.toString()); + ex.printStackTrace(); } } @@ -280,7 +281,7 @@ 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 @@ -290,7 +291,7 @@ public class NavigationView extends ViewPart 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()); @@ -302,27 +303,43 @@ public class NavigationView extends ViewPart // 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))) + + if (!(mbean.getType().endsWith(Constants.CONNECTION) || + mbean.getType().endsWith(Constants.EXCHANGE) || + mbean.getType().endsWith(Constants.QUEUE))) { addManagedBean(domain, mbean); } } } + private void addDefaultNodes(TreeObject parent) + { + TreeObject typeChild = new TreeObject(Constants.CONNECTION, Constants.NODE_TYPE_MBEANTYPE); + typeChild.setParent(parent); + typeChild.setVirtualHost(parent.getVirtualHost()); + typeChild = new TreeObject(Constants.EXCHANGE, Constants.NODE_TYPE_MBEANTYPE); + typeChild.setParent(parent); + typeChild.setVirtualHost(parent.getVirtualHost()); + typeChild = new TreeObject(Constants.QUEUE, Constants.NODE_TYPE_MBEANTYPE); + typeChild.setParent(parent); + typeChild.setVirtualHost(parent.getVirtualHost()); + } + /** * 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 parent * @param typeName * @return Node if given mbeantype already exists, otherwise null */ - private TreeObject getMBeanTypeNode(TreeObject domain, String typeName) + private TreeObject getMBeanTypeNode(TreeObject parent, String typeName) { - List<TreeObject> childNodes = domain.getChildren(); - + List<TreeObject> childNodes = parent.getChildren(); for (TreeObject child : childNodes) { - if (Constants.TYPE.equals(child.getType()) && typeName.equals(child.getName())) + if ((Constants.NODE_TYPE_MBEANTYPE.equals(child.getType()) || Constants.TYPE_INSTANCE.equals(child.getType())) && + typeName.equals(child.getName())) return child; } return null; @@ -346,46 +363,82 @@ public class NavigationView extends ViewPart */ 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 mbeanNode = null; - if (typeNode != null) // type node already exists - { - if (name == null) + String[] types = mbean.getType().split("\\."); + TreeObject typeNode = null; + TreeObject parentNode = domain; + // Run this loop till all nodes for this mbean are created. + for (int i = 0; i < types.length; i++) + { + String type = types[i]; + String valueOftype = mbean.getProperty(type); + typeNode = getMBeanTypeNode(parentNode, type); + + if (typeNode == null) { - throw new ManagementConsoleException("Two mbeans can't exist without a name and with same type"); + // If the ObjectName doesn't have name property, that means there will be only one instance + // of this mbean for given "type". So there will be no type node created for this mbean. + if (name == null && (i == types.length -1)) + { + break; + } + typeNode = createTypeNode(parentNode, type); + typeNode.setVirtualHost(mbean.getVirtualHostName()); } - mbeanNode = new TreeObject(mbean); - mbeanNode.setParent(typeNode); - } - else - { - // 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 + parentNode = typeNode; + + // Create instances node for this type if value exists. For eg, for different virtual hosts, the + // nodes with given value will be created. + if (valueOftype == null) { - typeNode = new TreeObject(type, Constants.TYPE); - typeNode.setParent(domain); - mbeanNode = new TreeObject(mbean); - mbeanNode.setParent(typeNode); - } - else // A managedObject with only type + break; + } + typeNode = getMBeanTypeNode(parentNode, valueOftype); + if (typeNode == null) { - mbeanNode = new TreeObject(mbean); - mbeanNode.setParent(domain); + typeNode = createTypeInstanceNode(parentNode, valueOftype); + typeNode.setVirtualHost(mbean.getVirtualHostName()); + + // Create default nodes for VHost instances + if (type.equals(Constants.VIRTUAL_HOST)) + { + addDefaultNodes(typeNode); + } } + parentNode = typeNode; + } + + if (typeNode == null) + { + typeNode = parentNode; } + if (doesMBeanNodeAlreadyExist(typeNode, name)) + return; + + TreeObject mbeanNode = new TreeObject(mbean); + mbeanNode.setParent(typeNode); + // Add notification node // TODO: show this only if the mbean sends any notification TreeObject notificationNode = new TreeObject(Constants.NOTIFICATION, Constants.NOTIFICATION); notificationNode.setParent(mbeanNode); } + private TreeObject createTypeNode(TreeObject parent, String name) + { + TreeObject typeNode = new TreeObject(name, Constants.NODE_TYPE_MBEANTYPE); + typeNode.setParent(parent); + return typeNode; + } + + private TreeObject createTypeInstanceNode(TreeObject parent, String name) + { + TreeObject typeNode = new TreeObject(name, Constants.TYPE_INSTANCE); + typeNode.setParent(parent); + return typeNode; + } + /** * Removes all the child nodes of the given parent node * @param parent @@ -678,7 +731,14 @@ public class NavigationView extends ViewPart public String getText(Object element) { TreeObject node = (TreeObject)element; - return node.getName(); + if (node.getType().equals(Constants.NODE_TYPE_MBEANTYPE)) + { + return node.getName() + "s"; + } + else + { + return node.getName(); + } } public Font getFont(Object element) @@ -718,19 +778,21 @@ public class NavigationView extends ViewPart { while(true) { - if (_managedServerMap.isEmpty()) - continue; + if (!_managedServerMap.isEmpty()) + { + refreshRemovedObjects(); + refreshClosedServerConnections(); + } try { - Thread.sleep(2000); + Thread.sleep(3000); } catch(Exception ex) { } - refreshRemovedObjects(); - refreshClosedServerConnections(); + }// end of while loop }// end of run method. }// end of Worker class diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java index 3eb93f55d3..c45ad7b362 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java @@ -326,7 +326,6 @@ public class NotificationsTabControl extends TabControl Shell shell = null; public void doubleClick(DoubleClickEvent event) { - System.out.println("DoubleClickEvent" + event); display = Display.getCurrent(); shell = new Shell(display, SWT.BORDER | SWT.CLOSE | SWT.MIN | SWT.MAX | SWT.RESIZE); diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java index 58349ab7a5..8568ee33bf 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java @@ -24,9 +24,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map.Entry; -import javax.management.openmbean.CompositeDataSupport; -import javax.management.openmbean.TabularDataSupport; - import org.apache.qpid.management.ui.ApplicationRegistry; import org.apache.qpid.management.ui.Constants; import org.apache.qpid.management.ui.ManagedBean; @@ -92,6 +89,7 @@ public class OperationTabControl extends TabControl // for customized method in header exchange private HashMap<Text, Text> headerBindingHashMap = null; + private String _virtualHostName = null; public OperationTabControl(TabFolder tabFolder) { @@ -155,6 +153,7 @@ public class OperationTabControl extends TabControl { _mbean = mbean; _opData = opData; + _virtualHostName = _mbean.getProperty(Constants.VIRTUAL_HOST); // Setting the form to be invisible. Just in case the mbean server connection // is done and it takes time in getting the response, then the ui should be blank @@ -219,8 +218,8 @@ public class OperationTabControl extends TabControl } // Customised parameter widgets - if (_mbean.getType().equals(Constants.EXCHANGE) && - "headers".equals(_mbean.getProperty(Constants.EXCHANGE_TYPE)) && + if (_mbean.getType().endsWith(Constants.EXCHANGE) && + Constants.EXCHANGE_TYPE_VALUES[2].equals(_mbean.getProperty(Constants.EXCHANGE_TYPE)) && _opData.getName().equalsIgnoreCase("createNewBinding")) { customCreateNewBinding(); @@ -247,7 +246,7 @@ public class OperationTabControl extends TabControl if (param.getName().equals(Constants.QUEUE)) { Combo combo = new Combo(_paramsComposite, SWT.READ_ONLY | SWT.DROP_DOWN); - String[] items = ApplicationRegistry.getServerRegistry(_mbean).getQueueNames(); + String[] items = ApplicationRegistry.getServerRegistry(_mbean).getQueueNames(_virtualHostName); combo.setItems(items); combo.add("Select Queue", 0); combo.select(0); @@ -259,7 +258,7 @@ public class OperationTabControl extends TabControl else if (param.getName().equals(Constants.EXCHANGE)) { Combo combo = new Combo(_paramsComposite, SWT.READ_ONLY | SWT.DROP_DOWN); - String[] items = ApplicationRegistry.getServerRegistry(_mbean).getExchangeNames(); + String[] items = ApplicationRegistry.getServerRegistry(_mbean).getExchangeNames(_virtualHostName); combo.setItems(items); combo.add("Select Exchange", 0); combo.select(0); @@ -360,8 +359,8 @@ public class OperationTabControl extends TabControl formData.left = new FormAttachment(label, 5); formData.right = new FormAttachment(valueNumerator); - Combo combo = new Combo(composite, SWT.READ_ONLY | SWT.DROP_DOWN); - String[] items = ApplicationRegistry.getServerRegistry(_mbean).getQueueNames(); + Combo combo = new Combo(composite, SWT.READ_ONLY | SWT.DROP_DOWN); + String[] items = ApplicationRegistry.getServerRegistry(_mbean).getQueueNames(_virtualHostName); combo.setItems(items); combo.add("Select Queue", 0); combo.select(0); @@ -472,7 +471,7 @@ public class OperationTabControl extends TabControl int width = 600; int height = 400; Shell shell = ViewUtility.createPopupShell(Constants.RESULT, width, height); - populateResults(result, shell); + ViewUtility.populateCompositeWithData(_toolkit, shell, result); shell.open(); while (!shell.isDisposed()) { @@ -484,23 +483,6 @@ public class OperationTabControl extends TabControl } /** - * Displays the operation result - * @param result - * @param parent - */ - private void populateResults(Object result, Composite parent) - { - if (result instanceof TabularDataSupport) - { - ViewUtility.createTabularDataHolder(_toolkit, parent, (TabularDataSupport)result); - } - else if (result instanceof CompositeDataSupport) - { - ViewUtility.populateCompositeDataHolder(_toolkit, parent, (CompositeDataSupport)result); - } - } - - /** * Clears the parameter values of the operation */ private void clearParameters() @@ -521,7 +503,7 @@ public class OperationTabControl extends TabControl */ private void clearParameterValues(Composite control) { - if (control == null) + if (control == null || (control.isDisposed())) return; Control[] controls = control.getChildren(); @@ -623,7 +605,7 @@ public class OperationTabControl extends TabControl else { ViewUtility.disposeChildren(_resultsComposite); - populateResults(result, _resultsComposite); + ViewUtility.populateCompositeWithData(_toolkit, _resultsComposite, result); _resultsComposite.layout(); _form.layout(); } diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TabControl.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TabControl.java index c8916044cb..0793e33538 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TabControl.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TabControl.java @@ -20,6 +20,8 @@ */ package org.apache.qpid.management.ui.views; +import java.util.ArrayList; + import org.apache.qpid.management.ui.ManagedBean; import org.apache.qpid.management.ui.model.OperationData; import org.eclipse.swt.widgets.Control; @@ -34,6 +36,26 @@ public abstract class TabControl protected ManagedBean _mbean = null; protected TabFolder _tabFolder = null; + private static java.util.List<String> simpleTypes = new ArrayList<String>(); + + static + { + simpleTypes.add("java.math.BigDecimal"); + simpleTypes.add("java.math.BigInteger"); + simpleTypes.add("java.lang.Boolean"); + simpleTypes.add("java.lang.Byte"); + simpleTypes.add("java.lang.Character"); + simpleTypes.add("java.util.Date"); + simpleTypes.add("java.lang.Double"); + simpleTypes.add("java.lang.Float"); + simpleTypes.add("java.lang.Integer"); + simpleTypes.add("java.lang.Long"); + simpleTypes.add("javax.management.ObjectName"); + simpleTypes.add("java.lang.Short"); + simpleTypes.add("java.lang.String"); + simpleTypes.add("boolean"); + } + public TabControl(TabFolder tabFolder) { _tabFolder = tabFolder; @@ -61,4 +83,9 @@ public abstract class TabControl { } + + public boolean isSimpleType(Object data) + { + return simpleTypes.contains(data.getClass().getName()); + } } diff --git a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TreeObject.java b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TreeObject.java index 36dc753a1e..29d6b2edc4 100644 --- a/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TreeObject.java +++ b/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/TreeObject.java @@ -32,6 +32,7 @@ public class TreeObject private String _name; private String _type; private String _url; + private String _virtualHost; private TreeObject _parent; private List<TreeObject> _children = new ArrayList<TreeObject>(); private ManagedObject _object; @@ -47,7 +48,8 @@ public class TreeObject _name = obj.getName(); if (_name == null && (obj instanceof ManagedBean)) { - _name = ((ManagedBean)obj).getType(); + String[] types = ((ManagedBean)obj).getType().split("\\."); + _name = types[types.length - 1]; } this._type = Constants.MBEAN; this._object = obj; @@ -96,6 +98,16 @@ public class TreeObject { this._url = url; } + + public String getVirtualHost() + { + return _virtualHost; + } + + public void setVirtualHost(String vHost) + { + _virtualHost = vHost; + } public ManagedObject getManagedObject() { 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 ef3d6f0106..c21be5d68c 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 @@ -28,6 +28,7 @@ import java.util.Set; import javax.management.openmbean.ArrayType; import javax.management.openmbean.CompositeData; +import javax.management.openmbean.CompositeDataSupport; import javax.management.openmbean.CompositeType; import javax.management.openmbean.OpenType; import javax.management.openmbean.TabularDataSupport; @@ -53,6 +54,10 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; +/** + * Utility Class for displaying OpenMbean data types by creating required SWT widgets + * @author Bhupendra Bhardwaj + */ public class ViewUtility { public static final String OP_NAME = "operation_name"; @@ -77,8 +82,26 @@ public class ViewUtility SUPPORTED_ARRAY_DATATYPES.add("java.util.Date"); } + /** + * Populates the composite with given openmbean data type (TabularType or CompositeType) + * @param toolkit + * @param parent composite + * @param data open mbean data type(either composite type or tabular data type) + */ + public static void populateCompositeWithData(FormToolkit toolkit, Composite parent, Object data) + { + if (data instanceof TabularDataSupport) + { + ViewUtility.createTabularDataHolder(toolkit, parent, (TabularDataSupport)data); + } + else if (data instanceof CompositeDataSupport) + { + ViewUtility.populateCompositeWithCompositeData(toolkit, parent, (CompositeDataSupport)data); + } + } + @SuppressWarnings("unchecked") - public static void createTabularDataHolder(FormToolkit toolkit, Composite parent, TabularDataSupport tabularData) + private static void createTabularDataHolder(FormToolkit toolkit, Composite parent, TabularDataSupport tabularData) { Composite composite = toolkit.createComposite(parent, SWT.BORDER); GridLayout layout = new GridLayout(4, true); @@ -109,7 +132,7 @@ public class ViewUtility // display the first record CompositeData data = (CompositeData)(list.get(0)).getValue(); composite.setData(INDEX, 0); - populateCompositeDataHolder(toolkit, compositeDataHolder, data); + populateCompositeWithCompositeData(toolkit, compositeDataHolder, data); enableOrDisableTraversalButtons(composite); } @@ -135,7 +158,15 @@ public class ViewUtility } } - public static Composite createCompositeDataHolder(final FormToolkit toolkit, final Composite dataHolder, CompositeType compositeType) + /** + * Sets up the given composite for holding a CompositeData. Create traversal buttons, label etc and + * creates a child Composite, which should be populated with the CompositeData + * @param toolkit + * @param dataHolder + * @param compositeType + * @return + */ + private static Composite createCompositeDataHolder(final FormToolkit toolkit, final Composite dataHolder, CompositeType compositeType) { String desc = compositeType.getDescription(); Label description = toolkit.createLabel(dataHolder, desc, SWT.CENTER); @@ -164,6 +195,7 @@ public class ViewUtility layoutData.widthHint = 80; lastRecordButton.setLayoutData(layoutData); + // Now create the composite, which will hold the CompositeData final Composite composite = toolkit.createComposite(dataHolder, SWT.NONE); GridLayout layout = new GridLayout(); layout.horizontalSpacing = layout.verticalSpacing = 0; @@ -179,7 +211,8 @@ public class ViewUtility dataHolder.setData(PREV, previousRecordButton); dataHolder.setData(LAST, lastRecordButton); - // Listener for the traversal buttons + // Listener for the traversal buttons. When a button is clicked the respective + // CompositeData will be populated in the composite SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) @@ -188,8 +221,9 @@ public class ViewUtility return; Button traverseButton =(Button)e.widget; + // Get the CompositeData respective to the button selected CompositeData data = getCompositeData(dataHolder, traverseButton.getText()); - populateCompositeDataHolder(toolkit, composite, data); + populateCompositeWithCompositeData(toolkit, composite, data); enableOrDisableTraversalButtons(dataHolder); } }; @@ -202,6 +236,13 @@ public class ViewUtility return composite; } + /** + * The CompositeData is set as data with the Composite and using the index, this method will + * return the corresponding CompositeData + * @param compositeHolder + * @param dataIndex + * @return the CompositeData respective to the index + */ private static CompositeData getCompositeData(Composite compositeHolder, String dataIndex) { List objectData = (List)compositeHolder.getData(); @@ -236,13 +277,18 @@ public class ViewUtility // Set the index being shown. compositeHolder.setData(INDEX, index); - System.out.println("index :" + index); return (CompositeData)((Map.Entry)objectData.get(index)).getValue(); } + /** + * Populates the given composite with the CompositeData. Creates required widgets to hold the data types + * @param toolkit + * @param parent + * @param data CompositeData + */ @SuppressWarnings("unchecked") - public static void populateCompositeDataHolder(FormToolkit toolkit, Composite parent, CompositeData data/*String dataIndex*/) + private static void populateCompositeWithCompositeData(FormToolkit toolkit, Composite parent, CompositeData data) { Control[] oldControls = parent.getChildren(); for (int i = 0; i < oldControls.length; i++) @@ -273,7 +319,6 @@ public class ViewUtility if (itemType.isArray()) { OpenType type = ((ArrayType)itemType).getElementOpenType(); - System.out.println("Array Element type = " + type.getClassName()); // If Byte array and mimetype is text, convert to text string if (type.getClassName().equals(Byte.class.getName())) { @@ -343,7 +388,6 @@ public class ViewUtility try { String textMessage = new String(byteArray, encoding); - System.out.println("\nMessage : \n" + textMessage + "\n"); Text valueText = toolkit.createText(compositeHolder, textMessage, SWT.READ_ONLY | SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL); diff --git a/java/management/eclipse-plugin/src/main/resources/unix/configuration/config.ini b/java/management/eclipse-plugin/src/main/resources/unix/configuration/config.ini index d50b06cbcf..aa2d21fd48 100644 --- a/java/management/eclipse-plugin/src/main/resources/unix/configuration/config.ini +++ b/java/management/eclipse-plugin/src/main/resources/unix/configuration/config.ini @@ -24,3 +24,4 @@ eclipse.product=org.apache.qpid.management.ui.product eclipse.application=org.apache.qpid.management.ui.application
osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.core.runtime@start,com.ibm.icu,org.apache.qpid.management.ui,org.eclipse.core.commands,org.eclipse.core.contenttype,org.eclipse.core.expressions,org.eclipse.core.jobs,org.eclipse.core.runtime.compatibility.auth,org.eclipse.core.runtime.compatibility.registry,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.help,org.eclipse.jface,org.eclipse.swt,org.eclipse.swt.motif.linux.x86,org.eclipse.swt.gtk.linux.x86_64,org.eclipse.swt.gtk.linux.x86,org.eclipse.swt.gtk.linux.ppc,org.eclipse.swt.motif.hpux.PA_RISC,org.eclipse.swt.gtk.solaris.sparc,org.eclipse.swt.motif.solaris.sparc,org.eclipse.swt.carbon.macocx,org.eclipse.ui,org.eclipse.ui.forms,org.eclipse.ui.workbench
osgi.bundles.defaultStartLevel=4
+eof=eof
\ No newline at end of file |
