Author: robbie
Date: Fri Jul 24 09:32:11 2009
New Revision: 797387

URL: http://svn.apache.org/viewvc?rev=797387&view=rev
Log:
QPID-2005: make the fanout exchange mbean return a single wildcard binding 
entry with all queues listed.

Modify the management console to auto-select the wildcard binding when the 
exchange is viewed. Also, suppress the warning on entering no binding key when 
creating a fanout exchange binding, but auto-fill the field with the wildcard 
for clarity.

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
    
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java?rev=797387&r1=797386&r2=797387&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/FanoutExchange.java
 Fri Jul 24 09:32:11 2009
@@ -59,6 +59,8 @@
     @MBeanDescription("Management Bean for Fanout Exchange")
     private final class FanoutExchangeMBean extends ExchangeMBean
     {
+        private static final String BINDING_KEY_SUBSTITUTE = "*";
+        
         @MBeanConstructor("Creates an MBean for AMQ fanout exchange")
         public FanoutExchangeMBean() throws JMException
         {
@@ -71,15 +73,23 @@
         {
 
             _bindingList = new TabularDataSupport(_bindinglistDataType);
+            
+            if(_queues.isEmpty())
+            {
+                return _bindingList;
+            }
+
+            ArrayList<String> queueNames = new ArrayList<String>();
 
             for (AMQQueue queue : _queues)
             {
                 String queueName = queue.getName().toString();
-
-                Object[] bindingItemValues = {queueName, new 
String[]{queueName}};
-                CompositeData bindingData = new 
CompositeDataSupport(_bindingDataType, COMPOSITE_ITEM_NAMES, bindingItemValues);
-                _bindingList.put(bindingData);
+                queueNames.add(queueName);
             }
+            
+            Object[] bindingItemValues = {BINDING_KEY_SUBSTITUTE, 
queueNames.toArray(new String[0])};
+            CompositeData bindingData = new 
CompositeDataSupport(_bindingDataType, COMPOSITE_ITEM_NAMES, bindingItemValues);
+            _bindingList.put(bindingData);
 
             return _bindingList;
         }
@@ -94,7 +104,7 @@
 
             try
             {
-                queue.bind(FanoutExchange.this, new AMQShortString(binding), 
null);
+                queue.bind(FanoutExchange.this, new 
AMQShortString(BINDING_KEY_SUBSTITUTE), null);
             }
             catch (AMQException ex)
             {

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java?rev=797387&r1=797386&r2=797387&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
 Fri Jul 24 09:32:11 2009
@@ -20,6 +20,9 @@
  */
 package org.apache.qpid.management.ui.views.exchange;
 
+import static org.apache.qpid.management.ui.Constants.EXCHANGE_TYPE;
+import static 
org.apache.qpid.management.ui.Constants.DEFAULT_EXCHANGE_TYPE_VALUES;
+
 import java.util.Collection;
 import java.util.List;
 
@@ -29,6 +32,7 @@
 import javax.management.openmbean.CompositeDataSupport;
 import javax.management.openmbean.TabularDataSupport;
 
+import org.apache.qpid.management.ui.ApiVersion;
 import org.apache.qpid.management.ui.ApplicationRegistry;
 import org.apache.qpid.management.ui.ManagedBean;
 import org.apache.qpid.management.common.mbeans.ManagedExchange;
@@ -79,6 +83,7 @@
             
     private TabularDataSupport _bindings = null;
     private ManagedExchange _emb;
+    private ApiVersion _ApiVersion;
     
     static final String BINDING_KEY = ManagedExchange.COMPOSITE_ITEM_NAMES[0];
     static final String QUEUES = ManagedExchange.COMPOSITE_ITEM_NAMES[1];
@@ -87,6 +92,7 @@
     {
         super(tabFolder);
         _mbean = mbean;
+        _ApiVersion = 
ApplicationRegistry.getServerRegistry(mbean).getManagementApiVersion();
         _emb = (ManagedExchange) 
MBeanServerInvocationHandler.newProxyInstance(mbsc, 
                                 mbean.getObjectName(), ManagedExchange.class, 
false);
         _toolkit = new FormToolkit(_tabFolder.getDisplay());
@@ -130,10 +136,26 @@
         }
         catch (Exception e)
         {
-            MBeanUtility.handleException(mbean,e);
+            MBeanUtility.handleException(_mbean,e);
         }
 
         _keysTableViewer.setInput(_bindings);
+        
+        //if we have a Qpid JMX API 1.3+ server
+        if(_ApiVersion.greaterThanOrEqualTo(1, 3))
+        {
+            //if it is a fanout exchange
+            if(isFanoutExchange())
+            {
+                //if there are any queue bindings, there is a single wildcard 
binding key
+                //auto-select it to show all the queues bound to the exchange
+                if (_keysTable.getItemCount() == 1)
+                {
+                    _keysTable.setSelection(0);
+                    updateQueuesTable();
+                }
+            }
+        }
 
         layout();
     }
@@ -263,19 +285,7 @@
         _keysTableViewer.addSelectionChangedListener(new 
ISelectionChangedListener(){
             public void selectionChanged(SelectionChangedEvent evt)
             {
-                int selectionIndex = _keysTable.getSelectionIndex();
-
-                if (selectionIndex != -1)
-                {
-                       final CompositeData selectedMsg = 
(CompositeData)_keysTable.getItem(selectionIndex).getData();
-
-                       String[] queues = (String[]) selectedMsg.get(QUEUES);
-                       _queuesTableViewer.setInput(queues);
-                }
-                else
-                {
-                       _queuesTableViewer.setInput(new String[]{"Select a 
binding key to view queues"});
-                }
+                updateQueuesTable();
             }
         });
         
@@ -296,6 +306,28 @@
         
     }
 
+    private void updateQueuesTable()
+    {
+        int selectionIndex = _keysTable.getSelectionIndex();
+
+        if (selectionIndex != -1)
+        {
+            final CompositeData selectedMsg = 
(CompositeData)_keysTable.getItem(selectionIndex).getData();
+
+            String[] queues = (String[]) selectedMsg.get(QUEUES);
+            _queuesTableViewer.setInput(queues);
+        }
+        else
+        {
+            _queuesTableViewer.setInput(new String[]{"Select a binding key to 
view queues"});
+        }
+    }
+    
+    private boolean isFanoutExchange()
+    {
+        return 
_mbean.getProperty(EXCHANGE_TYPE).equalsIgnoreCase(DEFAULT_EXCHANGE_TYPE_VALUES[1]);
+
+    }
     
     /**
      * Content Provider class for the table viewer
@@ -477,6 +509,10 @@
         
_toolkit.createLabel(bindingComposite,"Binding:").setBackground(shell.getBackground());
         final Text bindingText = new Text(bindingComposite, SWT.BORDER);
         bindingText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, 
false));
+        if(isFanoutExchange())
+        {
+            bindingText.setText("*");
+        }
 
         Composite okCancelButtonsComp = _toolkit.createComposite(shell);
         okCancelButtonsComp.setBackground(shell.getBackground());
@@ -507,7 +543,7 @@
             {
                 String binding = bindingText.getText();
                 
-                if (binding == null || binding.length() == 0)
+                if (!isFanoutExchange() && (binding == null || 
binding.length() == 0))
                 {                            
                     ViewUtility.popupErrorMessage("Create New Binding", 
"Please enter a valid binding");
                     return;

Modified: 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java?rev=797387&r1=797386&r2=797387&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
 (original)
+++ 
qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
 Fri Jul 24 09:32:11 2009
@@ -132,7 +132,7 @@
         }
         catch (Exception e)
         {
-            MBeanUtility.handleException(mbean,e);
+            MBeanUtility.handleException(_mbean,e);
         }
 
         _bindingNumberTableViewer.setInput(_bindings);



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to