You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2012/03/25 00:13:07 UTC

svn commit: r1304961 - in /qpid/branches/java-config-and-management/qpid/java: broker-plugins/extras/src/main/java/org/apache/qpid/extras/exchanges/example/ broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/api/ b...

Author: rgodfrey
Date: Sat Mar 24 23:13:07 2012
New Revision: 1304961

URL: http://svn.apache.org/viewvc?rev=1304961&view=rev
Log:
NO-JIRA: [Java Config] Updates to queue and vhost management

Added:
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/vhost.css
      - copied, changed from r1304877, qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/vhost.js
      - copied, changed from r1304877, qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/vhost.html
      - copied, changed from r1304877, qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
Modified:
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/extras/src/main/java/org/apache/qpid/extras/exchanges/example/TestExchange.java
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/api/ExchangesServlet.java
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ExchangeServlet.java
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostServlet.java
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/common.css
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
    qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ExchangeConfig.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Exchange.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
    qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/extras/src/main/java/org/apache/qpid/extras/exchanges/example/TestExchange.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/extras/src/main/java/org/apache/qpid/extras/exchanges/example/TestExchange.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/extras/src/main/java/org/apache/qpid/extras/exchanges/example/TestExchange.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/extras/src/main/java/org/apache/qpid/extras/exchanges/example/TestExchange.java Sat Mar 24 23:13:07 2012
@@ -52,12 +52,12 @@ public class TestExchange implements Exc
 
     public void addBindingListener(final BindingListener listener)
     {
-        //To change body of implemented methods use File | Settings | File Templates.
+      
     }
 
     public void removeBindingListener(final BindingListener listener)
     {
-        //To change body of implemented methods use File | Settings | File Templates.
+      
     }
 
     public AMQShortString getNameShortString()
@@ -107,42 +107,52 @@ public class TestExchange implements Exc
 
     public Map<String, Object> getArguments()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public long getBindingCount()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
     }
 
     public long getBindingCountHigh()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
     }
 
     public long getMsgReceives()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
     }
 
     public long getMsgRoutes()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
+    }
+
+    public long getMsgDrops()
+    {
+        return 0;
     }
 
     public long getByteReceives()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
     }
 
     public long getByteRoutes()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
+    }
+
+    public long getByteDrops()
+    {
+        return 0;
     }
 
     public long getCreateTime()
     {
-        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+        return 0;
     }
 
     public void setAlternateExchange(Exchange exchange)
@@ -177,27 +187,23 @@ public class TestExchange implements Exc
 
     public Collection<Binding> getBindings()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
-    public void initialise(VirtualHost host, AMQShortString name, boolean durable, boolean autoDelete)
-            throws AMQException
-    {
-    }
 
     public VirtualHostConfig getVirtualHost()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public String getName()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public ExchangeType getType()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public boolean isAutoDelete()
@@ -227,17 +233,17 @@ public class TestExchange implements Exc
 
     public UUID getId()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public ExchangeConfigType getConfigType()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public ConfiguredObject getParent()
     {
-        return null;  //To change body of implemented methods use File | Settings | File Templates.
+        return null;
     }
 
     public boolean isDurable()

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/api/ExchangesServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/api/ExchangesServlet.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/api/ExchangesServlet.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/api/ExchangesServlet.java Sat Mar 24 23:13:07 2012
@@ -117,7 +117,7 @@ public class ExchangesServlet extends Ht
         Map<String,Object> arguments = new HashMap<String, Object>();
         for(String key : exchange.getAttributeNames())
         {
-            if(!key.equals(Exchange.EXCHANGE_TYPE))
+            if(!key.equals(Exchange.TYPE))
             {
                 arguments.put(key, exchange.getAttribute(key));
             }

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ExchangeServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ExchangeServlet.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ExchangeServlet.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ExchangeServlet.java Sat Mar 24 23:13:07 2012
@@ -145,7 +145,7 @@ public class ExchangeServlet extends Abs
         Map<String,Object> arguments = new HashMap<String, Object>();
         for(String key : exchange.getAttributeNames())
         {
-            if(!key.equals(Exchange.EXCHANGE_TYPE))
+            if(!key.equals(Exchange.TYPE))
             {
                 arguments.put(key, exchange.getAttribute(key));
             }

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostServlet.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostServlet.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostServlet.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostServlet.java Sat Mar 24 23:13:07 2012
@@ -27,18 +27,27 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import org.apache.qpid.server.model.Binding;
 import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Connection;
+import org.apache.qpid.server.model.Consumer;
+import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.State;
 import org.apache.qpid.server.model.Statistics;
 import org.apache.qpid.server.model.VirtualHost;
 import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
 
 public class VirtualHostServlet extends AbstractServlet
 {
@@ -58,6 +67,11 @@ public class VirtualHostServlet extends 
         response.setContentType("application/json");
         response.setStatus(HttpServletResponse.SC_OK);
 
+        response.setHeader("Cache-Control","no-cache");
+        response.setHeader("Pragma","no-cache");
+        response.setDateHeader ("Expires", 0);
+
+
         Collection<VirtualHost> vhosts = _broker.getVirtualHosts();
 
         String[] sortKeys = request.getParameterValues("sort");
@@ -74,6 +88,8 @@ public class VirtualHostServlet extends 
         final PrintWriter writer = response.getWriter();
 
         ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
+
         List<Map> vhostList = new ArrayList<Map>();
 
         if(request.getPathInfo() == null || request.getPathInfo().length()==0)
@@ -81,7 +97,7 @@ public class VirtualHostServlet extends 
 
             for(VirtualHost vhost : vhosts)
             {
-                Map<String, Object> data = convertObject(vhost);
+                Map<String, Object> data = convertToObject(vhost);
 
 
                 vhostList.add(data);
@@ -95,7 +111,7 @@ public class VirtualHostServlet extends 
             {
                 if(vhostName.equals(vhost.getName()))
                 {
-                    Map<String, Object> data = convertObject(vhost);
+                    Map<String, Object> data = convertToObject(vhost);
 
                     vhostList.add(data);
                     break;
@@ -110,22 +126,81 @@ public class VirtualHostServlet extends 
         mapper.writeValue(writer, vhostList);
     }
 
-    private Map<String, Object> convertObject(VirtualHost vhost)
+    private Map<String,Object> convertToObject(final VirtualHost virtualHost)
+    {
+        Map<String, Object> object = convertObjectToMap(virtualHost);
+
+
+        List<Map<String,Object>> queues = new ArrayList<Map<String, Object>>();
+
+        for(Queue queue : virtualHost.getQueues())
+        {
+            queues.add(convertObjectToMap(queue));
+        }
+
+        if(!queues.isEmpty())
+        {
+            object.put("queues", queues);
+        }
+
+        List<Map<String,Object>> exchanges = new ArrayList<Map<String, Object>>();
+
+        for(Exchange exchange : virtualHost.getExchanges())
+        {
+            exchanges.add(convertObjectToMap(exchange));
+        }
+
+        if(!exchanges.isEmpty())
+        {
+            object.put("exchanges", exchanges);
+        }
+
+
+
+        List<Map<String,Object>> connections = new ArrayList<Map<String, Object>>();
+
+        for(Connection connection : virtualHost.getConnections())
+        {
+            connections.add(convertObjectToMap(connection));
+        }
+
+        if(!connections.isEmpty())
+        {
+            object.put("connections", connections);
+        }
+
+        return object;
+    }
+
+    private Map<String, Object> convertObjectToMap(final ConfiguredObject confObject)
     {
-        Map<String, Object> data = new HashMap<String, Object>();
-        data.put("id", vhost.getId());
-        data.put("name", vhost.getName());
-        data.put("connection-count", vhost.getConnections().size());
-        data.put("exchange-count", vhost.getExchanges().size());
-        data.put("queue-count", vhost.getQueues().size());
-        Statistics stats = vhost.getStatistics();
-
-        data.put("bytes-out-total", stats.getStatistic("bytes-out-total"));
-        data.put("bytes-in-total", stats.getStatistic("bytes-in-total"));
-        data.put("msgs-out-total", stats.getStatistic("msgs-out-total"));
-        data.put("msgs-in-total", stats.getStatistic("msgs-in-total"));
+        Map<String, Object> object = new LinkedHashMap<String, Object>();
+
+        for(String name : confObject.getAttributeNames())
+        {
+            Object value = confObject.getAttribute(name);
+            if(value != null)
+            {
+                object.put(name, value);
+            }
+        }
 
-        return data;
+        Statistics statistics = confObject.getStatistics();
+        Map<String, Object> statMap = new HashMap<String, Object>();
+        for(String name : statistics.getStatisticNames())
+        {
+            Object value = statistics.getStatistic(name);
+            if(value != null)
+            {
+                statMap.put(name, value);
+            }
+        }
+
+        if(!statMap.isEmpty())
+        {
+            object.put("statistics", statMap);
+        }
+        return object;
     }
 
 

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/common.css
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/common.css?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/common.css (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/common.css Sat Mar 24 23:13:07 2012
@@ -13,7 +13,8 @@ html, body {
     background: white;
     color: #333;
 }
-#queueLayout {
+
+#pageLayout {
     height: 100%;
 }
 button {

Copied: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/vhost.css (from r1304877, qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css)
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/vhost.css?p2=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/vhost.css&p1=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css&r1=1304877&r2=1304961&rev=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/queue.css (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/css/vhost.css Sat Mar 24 23:13:07 2012
@@ -1,10 +1,16 @@
 
-#bindings {
+#queues {
 	width: 100%;
 	height: 100px;
 }
 
-#consumers {
+#exhanges {
+	width: 100%;
+	height: 100px;
+}
+
+
+#connections {
 	width: 100%;
 	height: 100px;
 }

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js Sat Mar 24 23:13:07 2012
@@ -196,9 +196,13 @@ require(["dojo/store/JsonRest",
             this.unacknowledgedBytes = dom.byId("unacknowledgedBytes");
             this.unacknowledgedBytesUnits = dom.byId("unacknowledgedBytesUnits");
 
+            urlQuery = dojo.queryToObject(dojo.doc.location.search.substr((dojo.doc.location.search[0] === "?" ? 1 : 0)));
+            this.query = "/rest/queue/"+ urlQuery.vhost + "/" + urlQuery.queue;
+
+
             var thisObj = this;
 
-            xhr.get({url: "/rest/queue/test/queue", handleAs: "json"}).then(function(data)
+            xhr.get({url: this.query, handleAs: "json"}).then(function(data)
                              {
                                 thisObj.queueData = data[0];
                                 var stats = thisObj.queueData[ "statistics" ];
@@ -255,7 +259,7 @@ require(["dojo/store/JsonRest",
 
             var thisObj = this;
 
-            xhr.get({url: "/rest/queue/test/queue", handleAs: "json"}).then(function(data)
+            xhr.get({url: this.query, handleAs: "json"}).then(function(data)
                  {
                     thisObj.queueData = data[0];
                     var stats = thisObj.queueData[ "statistics" ];

Copied: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/vhost.js (from r1304877, qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js)
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/vhost.js?p2=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/vhost.js&p1=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js&r1=1304877&r2=1304961&rev=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/queue.js (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/js/vhost.js Sat Mar 24 23:13:07 2012
@@ -182,41 +182,86 @@ require(["dojo/store/JsonRest",
 
          }
 
+         function flattenStatistics(data)
+         {
+             var stats = data[ "statistics" ];
+
+             // flatten statistics into attributes
+             for(var propName in stats)
+             {
+                 data[ propName ] = stats[ propName ];
+             }
+
+         }
+
 
-         function QueueUpdater()
+         function Updater()
          {
             this.name = dom.byId("name");
             this.state = dom.byId("state");
             this.durable = dom.byId("durable");
             this.lifetimePolicy = dom.byId("lifetimePolicy");
-            this.queueDepthMessages = dom.byId("queueDepthMessages");
-            this.queueDepthBytes = dom.byId("queueDepthBytes");
-            this.queueDepthBytesUnits = dom.byId("queueDepthBytesUnits");
-            this.unacknowledgedMessages = dom.byId("unacknowledgedMessages");
-            this.unacknowledgedBytes = dom.byId("unacknowledgedBytes");
-            this.unacknowledgedBytesUnits = dom.byId("unacknowledgedBytesUnits");
+
+            urlQuery = dojo.queryToObject(dojo.doc.location.search.substr((dojo.doc.location.search[0] === "?" ? 1 : 0)));
+            this.query = "/rest/virtualhost/"+ urlQuery.vhost ;
+
 
             var thisObj = this;
 
-            xhr.get({url: "/rest/queue/test/queue", handleAs: "json"}).then(function(data)
+            xhr.get({url: this.query, handleAs: "json"}).then(function(data)
                              {
-                                thisObj.queueData = data[0];
-                                var stats = thisObj.queueData[ "statistics" ];
+                                thisObj.vhostData = data[0];
+                                var stats = thisObj.vhostData[ "statistics" ];
 
                                 // flatten statistics into attributes
-                                for(var propName in stats)
+                                flattenStatistics( thisObj.vhostData );
+                                if(thisObj.vhostData.queues)
                                 {
-                                    thisObj.queueData[ propName ] = stats[ propName ];
+                                    for(var i = 0; i < thisObj.vhostData.queues.length; i++)
+                                    {
+                                        flattenStatistics( thisObj.vhostData.queues[i]);
+                                    }
+                                }
+                                if(thisObj.vhostData.exchanges)
+                                {
+                                    for(var i = 0; i < thisObj.vhostData.exchanges.length; i++)
+                                    {
+                                        flattenStatistics( thisObj.vhostData.exchanges[i]);
+                                    }
                                 }
 
                                 thisObj.updateHeader();
-                                thisObj.bindingsGrid = new UpdatableStore(thisObj.queueData.bindings, "bindings",
-                                                         [ { name: "Exchange",    field: "exchange",      width: "90px"},
-                                                           { name: "Binding Key", field: "name",          width: "120px"},
+                                thisObj.queuesGrid = new UpdatableStore(thisObj.vhostData.queues, "queues",
+                                                         [ { name: "Name",    field: "name",      width: "90px"},
+                                                           { name: "Messages", field: "queueDepthMessages", width: "90px"},
                                                            { name: "Arguments",   field: "arguments",     width: "200px"}
+                                                         ],
+                                                         function(obj)
+                                                         {
+                                                             dojo.connect(obj.grid, "onRowDblClick", obj.grid,
+                                                             function(evt){
+                                                                    var idx = evt.rowIndex,
+                                                                    item = this.getItem(idx);
+
+                                                                    url = "/queue?vhost="
+                                                                     + thisObj.vhostData.name + "&queue=" +
+                                                                    obj.dataStore.getValue(item,"name");
+
+                                                                    window.location = url;
+
+                                                            });
+                                                         } );
+
+                                thisObj.exchangesGrid = new UpdatableStore(thisObj.vhostData.exchanges, "exchanges",
+                                                         [ { name: "Name",    field: "name",      width: "120px"},
+                                                           { name: "Type", field: "type", width: "120px"},
+                                                           { name: "Binding Count", field: "bindingCount",
+                                                           width: "90px"}
                                                          ]);
 
-                                thisObj.consumersGrid = new UpdatableStore(thisObj.queueData.consumers, "consumers",
+
+                                thisObj.connectionsGrid = new UpdatableStore(thisObj.vhostData.connections,
+                                                         "connections",
                                                          [ { name: "Name",    field: "name",      width: "70px"},
                                                            { name: "Mode", field: "distributionMode", width: "70px"},
                                                            { name: "Msgs Rate", field: "msgRate",
@@ -231,51 +276,35 @@ require(["dojo/store/JsonRest",
 
          }
 
-         QueueUpdater.prototype.updateHeader = function()
+         Updater.prototype.updateHeader = function()
          {
-            this.name.innerHTML = this.queueData[ "name" ];
-            this.state.innerHTML = this.queueData[ "state" ];
-            this.durable.innerHTML = this.queueData[ "durable" ];
-            this.lifetimePolicy.innerHTML = this.queueData[ "lifetimePolicy" ];
-
-            this.queueDepthMessages.innerHTML = this.queueData["queueDepthMessages"];
-            bytesDepth = new formatBytes( this.queueData["queueDepthBytes"] );
-            this.queueDepthBytes.innerHTML = "(" + bytesDepth.value;
-            this.queueDepthBytesUnits.innerHTML = bytesDepth.units + ")"
-
-            this.unacknowledgedMessages.innerHTML = this.queueData["unacknowledgedMessages"];
-            bytesDepth = new formatBytes( this.queueData["unacknowledgedBytes"] );
-            this.unacknowledgedBytes.innerHTML = "(" + bytesDepth.value;
-            this.unacknowledgedBytesUnits.innerHTML = bytesDepth.units + ")"
+            this.name.innerHTML = this.vhostData[ "name" ];
+            this.state.innerHTML = this.vhostData[ "state" ];
+            this.durable.innerHTML = this.vhostData[ "durable" ];
+            this.lifetimePolicy.innerHTML = this.vhostData[ "lifetimePolicy" ];
+
 
          }
 
-         QueueUpdater.prototype.update = function()
+         Updater.prototype.update = function()
          {
 
             var thisObj = this;
 
-            xhr.get({url: "/rest/queue/test/queue", handleAs: "json"}).then(function(data)
+            xhr.get({url: this.query, handleAs: "json"}).then(function(data)
                  {
-                    thisObj.queueData = data[0];
-                    var stats = thisObj.queueData[ "statistics" ];
+                    thisObj.vhostData = data[0];
+                    var stats = thisObj.vhostData[ "statistics" ];
 
                     // flatten statistics into attributes
                     for(var propName in stats)
                     {
-                        thisObj.queueData[ propName ] = stats[ propName ];
+                        thisObj.vhostData[ propName ] = stats[ propName ];
                     }
 
-                    var bindings = thisObj.queueData[ "bindings" ];
-                    for(var i=0; i < bindings.length; i++)
-                    {
-                        bindings[i].arguments = dojo.toJson(bindings[i].arguments);
-                        bindings[i].argumentString = dojo.toJson(bindings[i].arguments);
-
-                    }
 
 
-                    var consumers = thisObj.queueData[ "consumers" ];
+                    var consumers = thisObj.vhostData[ "consumers" ];
                     if(consumers)
                     {
                         for(var i=0; i < consumers.length; i++)
@@ -293,36 +322,36 @@ require(["dojo/store/JsonRest",
 
 
                     // update alerting info
-                    alertRepeatGap = new formatTime( thisObj.queueData["alertRepeatGap"] );
+                    alertRepeatGap = new formatTime( thisObj.vhostData["alertRepeatGap"] );
 
                     dom.byId("alertRepeatGap").innerHTML = alertRepeatGap.value;
                     dom.byId("alertRepeatGapUnits").innerHTML = alertRepeatGap.units;
 
 
-                    alertMsgAge = new formatTime( thisObj.queueData["alertThresholdMessageAge"] );
+                    alertMsgAge = new formatTime( thisObj.vhostData["alertThresholdMessageAge"] );
 
                     dom.byId("alertThresholdMessageAge").innerHTML = alertMsgAge.value;
                     dom.byId("alertThresholdMessageAgeUnits").innerHTML = alertMsgAge.units;
 
-                    alertMsgSize = new formatBytes( thisObj.queueData["alertThresholdMessageSize"] );
+                    alertMsgSize = new formatBytes( thisObj.vhostData["alertThresholdMessageSize"] );
 
                     dom.byId("alertThresholdMessageSize").innerHTML = alertMsgSize.value;
                     dom.byId("alertThresholdMessageSizeUnits").innerHTML = alertMsgSize.units;
 
-                    alertQueueDepth = new formatBytes( thisObj.queueData["alertThresholdQueueDepthBytes"] );
+                    alertQueueDepth = new formatBytes( thisObj.vhostData["alertThresholdQueueDepthBytes"] );
 
                     dom.byId("alertThresholdQueueDepthBytes").innerHTML = alertQueueDepth.value;
                     dom.byId("alertThresholdQueueDepthBytesUnits").innerHTML = alertQueueDepth.units;
 
-                    dom.byId("alertThresholdQueueDepthMessages").innerHTML = thisObj.queueData["alertThresholdQueueDepthMessages"];
+                    dom.byId("alertThresholdQueueDepthMessages").innerHTML = thisObj.vhostData["alertThresholdQueueDepthMessages"];
 
-                    stats = thisObj.queueData[ "statistics" ];
+                    stats = thisObj.vhostData[ "statistics" ];
 
                     var sampleTime = new Date();
-                    var messageIn = stats["totalEnqueuedMessages"];
-                    var bytesIn = stats["totalEnqueuedBytes"];
-                    var messageOut = stats["totalDequeuedMessages"];
-                    var bytesOut = stats["totalDequeuedBytes"];
+                    var messageIn = stats["messagesIn"];
+                    var bytesIn = stats["bytesIn"];
+                    var messageOut = stats["messagesOut"];
+                    var bytesOut = stats["bytesOut"];
 
                     if(thisObj.sampleTime)
                     {
@@ -376,23 +405,25 @@ require(["dojo/store/JsonRest",
                     thisObj.bytesIn = bytesIn;
                     thisObj.messageOut = messageOut;
                     thisObj.bytesOut = bytesOut;
-                    thisObj.consumers = consumers;
 
-                    // update bindings
-                    thisObj.bindingsGrid.update(thisObj.queueData.bindings)
+                    // update queues
+                    thisObj.queuesGrid.update(thisObj.vhostData.queues)
+
+                    // update exchanges
+                    thisObj.exchangesGrid.update(thisObj.vhostData.exchanges)
 
-                    // update consumers
-                    thisObj.consumersGrid.update(thisObj.queueData.consumers)
+                    // update connections
+                    thisObj.connectionsGrid.update(thisObj.vhostData.connections)
 
 
                  });
          };
 
-         queueUpdater = new QueueUpdater();
+         updater = new Updater();
 
-         updateList.push( queueUpdater );
+         updateList.push( updater );
 
-         queueUpdater.update();
+         updater.update();
 
          setInterval(function(){
                for(var i = 0; i < updateList.length; i++)

Modified: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html Sat Mar 24 23:13:07 2012
@@ -34,7 +34,7 @@
 	<body class="claro">
 
 
-    <div id="queueLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline'">
+    <div id="pageLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline'">
         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">Top pane</div>
         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'leading'">Leading pane</div>
         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">

Copied: qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/vhost.html (from r1304877, qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html)
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/vhost.html?p2=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/vhost.html&p1=qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html&r1=1304877&r2=1304961&rev=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/queue.html (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker-plugins/management/src/main/java/resources/vhost.html Sat Mar 24 23:13:07 2012
@@ -2,7 +2,7 @@
 <html lang="en">
 	<head>
 		<meta charset="utf-8">
-		<title>Queue</title>
+		<title>Virtual Host</title>
 		<!--<link rel="stylesheet" href="/dojo/1.7.2/dojo/resources/dojo.css">
 		<link rel="stylesheet" href="/dojo/1.7.2/dijit/themes/claro/claro.css">
 		<link rel="stylesheet" href="/dojo/1.7.2/dojox/grid/resources/claroGrid.css">-->
@@ -10,7 +10,7 @@
         <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dijit/themes/claro/claro.css">
         <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojox/grid/resources/claroGrid.css">
 
-        <link rel="stylesheet" href="../css/queue.css" media="screen">
+        <link rel="stylesheet" href="../css/vhost.css" media="screen">
 
 		<link rel="stylesheet" href="css/common.css" media="screen">
 
@@ -28,29 +28,19 @@
                 "dijit/TitlePane", "dojo/parser"]);
             </script>
 
-        <script src="/js/queue.js">
+        <script src="/js/vhost.js">
         </script>
 	</head>
 	<body class="claro">
 
 
-    <div id="queueLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline'">
+    <div id="pageLayout" data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'headline'">
         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'top'">Top pane</div>
         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'leading'">Leading pane</div>
         <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region:'center'">
-            <span style="">Queue:</span><span id="name" style="position:absolute; left:6em"></span>
-            <span style="position:absolute; left:26em">Size:</span>
-            <span id="queueDepthMessages" style="position:absolute; right:9.5em"></span>
-            <span style="position:absolute; right: 5em; width: 4em"> msgs</span>
-            <span id="queueDepthBytes" style="position:absolute; right: 3.3em">(</span>
-            <span id="queueDepthBytesUnits" style="position:absolute; right: 0em; width: 3em">)</span>
+            <span style="">Name:</span><span id="name" style="position:absolute; left:6em"></span>
             <br/>
             <span style="">State:</span><span id="state" style="position:absolute; left:6em"></span>
-            <span style="position:absolute; left:26em">Pre-fetched:</span>
-            <span id="unacknowledgedMessages" style="position:absolute; right:9.5em"></span>
-            <span style="position:absolute; right: 5em; width: 4em"> msgs</span>
-            <span id="unacknowledgedBytes" style="position:absolute; right: 3.3em"></span>
-            <span id="unacknowledgedBytesUnits" style="position:absolute; right: 0em; width: 3em"></span>
             <br/>
             <span style="">Durable:</span><span id="durable" style="position:absolute; left:6em"></span>
             <span style="position:absolute; left:26em">Inbound:</span>
@@ -67,12 +57,16 @@
             <span id="bytesOutRateUnits" style="position:absolute; right: 0em; width: 3em"></span>
             <br/>
             <br/>
-            <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Bindings'">
-                <div id="bindings"></div>
+            <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Exchanges'">
+                <div id="exchanges"></div>
             </div>
             <br/>
-            <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Consumers'">
-                <div id="consumers"></div>
+            <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Queues'">
+                <div id="queues"></div>
+            </div>
+            <br/>
+            <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Connections'">
+                <div id="connections"></div>
             </div>
             <br/>
             <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Alerting Thresholds'">

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/qmf/ManagementExchange.java Sat Mar 24 23:13:07 2012
@@ -537,6 +537,11 @@ public class ManagementExchange implemen
         return getMsgReceives();
     }
 
+    public long getMsgDrops()
+    {
+        return 0l;
+    }
+
     public long getByteReceives()
     {
         return _bytesReceived.get();
@@ -547,6 +552,11 @@ public class ManagementExchange implemen
         return getByteReceives();
     }
 
+    public long getByteDrops()
+    {
+        return 0l;
+    }
+
     public long getCreateTime()
     {
         return _createTime;

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ExchangeConfig.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ExchangeConfig.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ExchangeConfig.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ExchangeConfig.java Sat Mar 24 23:13:07 2012
@@ -49,7 +49,12 @@ public interface ExchangeConfig extends 
 
     long getMsgRoutes();
 
+    long getMsgDrops();
+
     long getByteReceives();
 
     long getByteRoutes();
+
+    long getByteDrops();
+
 }
\ No newline at end of file

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java Sat Mar 24 23:13:07 2012
@@ -89,6 +89,8 @@ public abstract class AbstractExchange i
     private final AtomicLong _receivedMessageSize = new AtomicLong();
     private final AtomicLong _routedMessageCount = new AtomicLong();
     private final AtomicLong _routedMessageSize = new AtomicLong();
+    private final AtomicLong _droppedMessageCount = new AtomicLong();
+    private final AtomicLong _droppedMessageSize = new AtomicLong();
 
     private final CopyOnWriteArrayList<Exchange.BindingListener> _listeners = new CopyOnWriteArrayList<Exchange.BindingListener>();
 
@@ -361,6 +363,11 @@ public abstract class AbstractExchange i
             _routedMessageCount.incrementAndGet();
             _routedMessageSize.addAndGet(message.getSize());
         }
+        else
+        {
+            _droppedMessageCount.incrementAndGet();
+            _droppedMessageSize.addAndGet(message.getSize());
+        }
         return queues;
     }
 
@@ -376,6 +383,11 @@ public abstract class AbstractExchange i
         return _routedMessageCount.get();
     }
 
+    public long getMsgDrops()
+    {
+        return _droppedMessageCount.get();
+    }
+
     public long getByteReceives()
     {
         return _receivedMessageSize.get();
@@ -386,6 +398,11 @@ public abstract class AbstractExchange i
         return _routedMessageSize.get();
     }
 
+    public long getByteDrops()
+    {
+        return _droppedMessageSize.get();
+    }
+
     public long getCreateTime()
     {
         return _createTime;

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Exchange.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Exchange.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Exchange.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Exchange.java Sat Mar 24 23:13:07 2012
@@ -20,14 +20,57 @@
  */
 package org.apache.qpid.server.model;
 
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 public interface Exchange extends ConfiguredObject
 {
-
-    //atribute names
-    String EXCHANGE_TYPE = "exchangeType";
+    String BINDING_COUNT = "bindingCount";
+    String BYTES_DROPPED = "bytesDropped";
+    String BYTES_IN      = "bytesIn";
+    String MESSAGES_DROPPED = "messagesDropped";
+    String MESSAGES_IN      = "messagesIn";
+    String PRODUCER_COUNT   = "producerCount";
+    String STATE_CHANGED    = "stateChanged";
+
+    public static final Collection<String> AVAILABLE_STATISTICS =
+            Collections.unmodifiableList(
+                    Arrays.asList(BINDING_COUNT,
+                                  BYTES_DROPPED,
+                                  BYTES_IN,
+                                  MESSAGES_DROPPED,
+                                  MESSAGES_IN,
+                                  PRODUCER_COUNT,
+                                  STATE_CHANGED));
+
+    String CREATED                              = "created";
+    String DURABLE                              = "durable";
+    String ID                                   = "id";
+    String LIFETIME_POLICY                      = "lifetimePolicy";
+    String NAME                                 = "name";
+    String STATE                                = "state";
+    String TIME_TO_LIVE                         = "timeToLive";
+    String UPDATED                              = "updated";
+    String ALTERNATE_EXCHANGE                   = "alternateExchange";
+    String TYPE                                 = "type";
+
+    // Attributes
+    public static final Collection<String> AVAILABLE_ATTRIBUTES =
+            Collections.unmodifiableList(
+                    Arrays.asList(
+                            ID,
+                            NAME,
+                            STATE,
+                            DURABLE,
+                            LIFETIME_POLICY,
+                            TIME_TO_LIVE,
+                            CREATED,
+                            UPDATED,
+                            ALTERNATE_EXCHANGE,
+                            TYPE
+                    ));
 
     String getExchangeType();
 

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/VirtualHost.java Sat Mar 24 23:13:07 2012
@@ -50,7 +50,64 @@ public interface VirtualHost extends Con
                             LOCAL_TRANSACTION_ROLLBACKS, MESSAGES_IN, MESSAGES_OUT, MESSAGES_RETAINED, STATE_CHANGED,
                             XA_TRANSACTION_BRANCH_ENDS, XA_TRANSACTION_BRANCH_STARTS, XA_TRANSACTION_BRANCH_SUSPENDS));
 
+    String ALERT_REPEAT_GAP = "alertRepeatGap";
+    String ALERT_THRESHOLD_MESSAGE_AGE = "alertThresholdMessageAge";
+    String ALERT_THRESHOLD_MESSAGE_SIZE = "alertThresholdMessageSize";
+    String ALERT_THRESHOLD_QUEUE_DEPTH_BYTES = "alertThresholdQueueDepthBytes";
+    String ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES = "alertThresholdQueueDepthMessages";
+    String DEAD_LETTER_QUEUE_ENABLED            = "deadLetterQueueEnabled";
+    String FEDERATION_TAG                       = "federationTag";
+    String HOUSEKEEPING_CHECK_PERIOD            = "housekeepingCheckPeriod";
+    String MAXIMUM_DELIVERY_ATTEMPTS            = "maximumDeliveryAttempts";
+    String QUEUE_FLOW_CONTROL_SIZE_BYTES        = "queueFlowControlSizeBytes";
+    String QUEUE_FLOW_RESUME_SIZE_BYTES         = "queueFlowResumeSizeBytes";
+    String STORE_CONFIGURATION                  = "storeConfiguration";
+    String STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE = "storeTransactionIdleTimeoutClose";
+    String STORE_TRANSACTION_IDLE_TIMEOUT_WARN  = "storeTransactionIdleTimeoutWarn";
+    String STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE = "storeTransactionOpenTimeoutClose";
+    String STORE_TRANSACTION_OPEN_TIMEOUT_WARN  = "storeTransactionOpenTimeoutWarn";
+    String STORE_TYPE                           = "storeType";
+    String SUPPORTED_EXCHANGE_TYPES             = "supportedExchangeTypes";
+    String SUPPORTED_QUEUE_TYPES                = "supportedQueueTypes";
+    String CREATED                              = "created";
+    String DURABLE                              = "durable";
+    String ID                                   = "id";
+    String LIFETIME_POLICY                      = "lifetimePolicy";
+    String NAME                                 = "name";
+    String STATE                                = "state";
+    String TIME_TO_LIVE                         = "timeToLive";
+    String UPDATED                              = "updated";
     // Attributes
+    public static final Collection<String> AVAILABLE_ATTRIBUTES =
+            Collections.unmodifiableList(
+                    Arrays.asList(
+                            ID,
+                            NAME,
+                            STATE,
+                            DURABLE,
+                            LIFETIME_POLICY,
+                            TIME_TO_LIVE,
+                            CREATED,
+                            UPDATED,
+                            SUPPORTED_EXCHANGE_TYPES,
+                            SUPPORTED_QUEUE_TYPES,
+                            DEAD_LETTER_QUEUE_ENABLED,
+                            FEDERATION_TAG,
+                            HOUSEKEEPING_CHECK_PERIOD,
+                            MAXIMUM_DELIVERY_ATTEMPTS,
+                            QUEUE_FLOW_CONTROL_SIZE_BYTES,
+                            QUEUE_FLOW_RESUME_SIZE_BYTES,
+                            STORE_TYPE,
+                            STORE_CONFIGURATION,
+                            STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE,
+                            STORE_TRANSACTION_IDLE_TIMEOUT_WARN,
+                            STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE,
+                            STORE_TRANSACTION_OPEN_TIMEOUT_WARN,
+                            ALERT_REPEAT_GAP,
+                            ALERT_THRESHOLD_MESSAGE_AGE,
+                            ALERT_THRESHOLD_MESSAGE_SIZE,
+                            ALERT_THRESHOLD_QUEUE_DEPTH_BYTES,
+                            ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES));
 
 
 

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/ExchangeAdapter.java Sat Mar 24 23:13:07 2012
@@ -48,12 +48,14 @@ final class ExchangeAdapter extends Abst
     private final Map<Binding, BindingAdapter> _bindingAdapters =
             new HashMap<Binding, BindingAdapter>();
     private VirtualHostAdapter _vhost;
+    private final ExchangeStatistics _statistics;
 
 
     public ExchangeAdapter(final VirtualHostAdapter virtualHostAdapter,
                            final org.apache.qpid.server.exchange.Exchange exchange)
     {
         super(virtualHostAdapter.getName(), exchange.getName());
+        _statistics = new ExchangeStatistics();
         _vhost = virtualHostAdapter;
         _exchange = exchange;
         addParent(org.apache.qpid.server.model.VirtualHost.class, virtualHostAdapter);
@@ -205,7 +207,7 @@ final class ExchangeAdapter extends Abst
 
     public Statistics getStatistics()
     {
-        return NoStatistics.getInstance();
+        return _statistics;
     }
 
     public void bindingAdded(org.apache.qpid.server.exchange.Exchange exchange, Binding binding)
@@ -245,4 +247,105 @@ final class ExchangeAdapter extends Abst
     {
         return _exchange;
     }
+
+    @Override
+    public Object getAttribute(String name)
+    {
+        if(ID.equals(name))
+        {
+            return getId();    
+        }
+        else if(NAME.equals(name))
+        {
+            return getName();
+        }
+        else if(STATE.equals(name))
+        {
+            return State.ACTIVE;
+        }
+        else if(DURABLE.equals(name))
+        {
+            return isDurable();
+        }
+        else if(LIFETIME_POLICY.equals(name))
+        {
+            return LifetimePolicy.PERMANENT;
+        }
+        else if(TIME_TO_LIVE.equals(name))
+        {
+
+        }
+        else if(CREATED.equals(name))
+        {
+
+        }
+        else if(UPDATED.equals(name))
+        {
+
+        }
+        else if(ALTERNATE_EXCHANGE.equals(name))
+        {
+            return _exchange.getAlternateExchange();
+        }
+        else if(TYPE.equals(name))
+        {
+            return _exchange.getType().getName().asString();
+        }
+        return super.getAttribute(name);
+    }
+
+    @Override
+    public Object setAttribute(String name, Object expected, Object desired)
+            throws IllegalStateException, AccessControlException, IllegalArgumentException
+    {
+        return super.setAttribute(name, expected, desired);    //TODO - Implement
+    }
+
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return AVAILABLE_ATTRIBUTES;
+    }
+
+    private class ExchangeStatistics implements Statistics
+    {
+
+        public Collection<String> getStatisticNames()
+        {
+            return AVAILABLE_STATISTICS;
+        }
+
+        public Object getStatistic(String name)
+        {
+            if(BINDING_COUNT.equals(name))
+            {
+                return _exchange.getBindingCount();
+            }
+            else if(BYTES_DROPPED.equals(name))
+            {
+                return _exchange.getByteDrops();
+            }
+            else if(BYTES_IN.equals(name))
+            {
+                return _exchange.getByteReceives();
+            }
+            else if(MESSAGES_DROPPED.equals(name))
+            {
+                return _exchange.getMsgDrops();
+            }
+            else if(MESSAGES_IN.equals(name))
+            {
+                return _exchange.getMsgReceives();
+            }
+            else if(PRODUCER_COUNT.equals(name))
+            {
+
+            }
+            else if(STATE_CHANGED.equals(name))
+            {
+
+            }
+            return null;  // TODO - Implement
+        }
+    }
 }

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java Sat Mar 24 23:13:07 2012
@@ -71,6 +71,7 @@ final class VirtualHostAdapter extends A
 
     private final Map<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter> _exchangeAdapters =
             new HashMap<org.apache.qpid.server.exchange.Exchange, ExchangeAdapter>();
+
     private final StatisticsAdapter _statistics;
 
 
@@ -548,4 +549,136 @@ final class VirtualHostAdapter extends A
     {
         return _virtualHost;
     }
+
+    @Override
+    public Object getAttribute(String name)
+    {
+        if(ID.equals(name))
+        {
+            return getId();    
+        }
+        else if(NAME.equals(name))
+        {
+            return getName();
+        }
+        else if(STATE.equals(name))
+        {
+            return State.ACTIVE;
+        }
+        else if(DURABLE.equals(name))
+        {
+            return isDurable();
+        }
+        else if(LIFETIME_POLICY.equals(name))
+        {
+            return LifetimePolicy.PERMANENT;
+        }
+        else if(TIME_TO_LIVE.equals(name))
+        {
+            // TODO
+        }
+        else if(CREATED.equals(name))
+        {
+            // TODO
+        }
+        else if(UPDATED.equals(name))
+        {
+            // TODO
+        }
+        else if(SUPPORTED_EXCHANGE_TYPES.equals(name))
+        {
+            List<String> types = new ArrayList<String>();
+            for(ExchangeType type : _virtualHost.getExchangeFactory().getRegisteredTypes())
+            {
+                types.add(type.getName().asString());
+            }
+            return Collections.unmodifiableCollection(types);
+        }
+        else if(SUPPORTED_QUEUE_TYPES.equals(name))
+        {
+            // TODO
+        }
+        else if(DEAD_LETTER_QUEUE_ENABLED.equals(name))
+        {
+            return _virtualHost.getConfiguration().isDeadLetterQueueEnabled();
+        }
+        else if(FEDERATION_TAG.equals(name))
+        {
+            return _virtualHost.getFederationTag();
+        }
+        else if(HOUSEKEEPING_CHECK_PERIOD.equals(name))
+        {
+            return _virtualHost.getConfiguration().getHousekeepingCheckPeriod();
+        }
+        else if(MAXIMUM_DELIVERY_ATTEMPTS.equals(name))
+        {
+            return _virtualHost.getConfiguration().getMaxDeliveryCount();
+        }
+        else if(QUEUE_FLOW_CONTROL_SIZE_BYTES.equals(name))
+        {
+            return _virtualHost.getConfiguration().getCapacity();
+        }
+        else if(QUEUE_FLOW_RESUME_SIZE_BYTES.equals(name))
+        {
+            return _virtualHost.getConfiguration().getFlowResumeCapacity();
+        }
+        else if(STORE_TYPE.equals(name))
+        {
+            // TODO
+        }
+        else if(STORE_CONFIGURATION.equals(name))
+        {
+            // TODO
+        }
+        else if(STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE.equals(name))
+        {
+            return _virtualHost.getConfiguration().getTransactionTimeoutIdleClose();
+        }
+        else if(STORE_TRANSACTION_IDLE_TIMEOUT_WARN.equals(name))
+        {
+            return _virtualHost.getConfiguration().getTransactionTimeoutIdleWarn();
+        }
+        else if(STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE.equals(name))
+        {
+            return _virtualHost.getConfiguration().getTransactionTimeoutOpenClose();
+        }
+        else if(STORE_TRANSACTION_OPEN_TIMEOUT_WARN.equals(name))
+        {
+            return _virtualHost.getConfiguration().getTransactionTimeoutOpenWarn();
+        }
+        else if(ALERT_REPEAT_GAP.equals(name))
+        {
+            return _virtualHost.getConfiguration().getMinimumAlertRepeatGap();
+        }
+        else if(ALERT_THRESHOLD_MESSAGE_AGE.equals(name))
+        {
+            return _virtualHost.getConfiguration().getMaximumMessageAge();
+        }
+        else if(ALERT_THRESHOLD_MESSAGE_SIZE.equals(name))
+        {
+            return _virtualHost.getConfiguration().getMaximumMessageSize();
+        }
+        else if(ALERT_THRESHOLD_QUEUE_DEPTH_BYTES.equals(name))
+        {
+            return _virtualHost.getConfiguration().getMaximumQueueDepth();
+        }
+        else if(ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES.equals(name))
+        {
+            return _virtualHost.getConfiguration().getMaximumMessageCount();
+        }
+        return super.getAttribute(name);
+    }
+
+    @Override
+    public Object setAttribute(String name, Object expected, Object desired)
+            throws IllegalStateException, AccessControlException, IllegalArgumentException
+    {
+        return super.setAttribute(name, expected, desired);    //TODO - Implement
+    }
+
+    @Override
+    public Collection<String> getAttributeNames()
+    {
+        return AVAILABLE_ATTRIBUTES;
+    }
 }

Modified: qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java?rev=1304961&r1=1304960&r2=1304961&view=diff
==============================================================================
--- qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java (original)
+++ qpid/branches/java-config-and-management/qpid/java/broker/src/main/java/org/apache/qpid/server/model/impl/ExchangeImpl.java Sat Mar 24 23:13:07 2012
@@ -59,7 +59,7 @@ class ExchangeImpl extends AbstractConfi
     private static Map<String, Object> fixAttributes(final Map<String, Object> attributes, final String exchangeType)
     {
         Map<String,Object> fixedAttributes = new HashMap<String, Object>(attributes);
-        fixedAttributes.put(EXCHANGE_TYPE, exchangeType);
+        fixedAttributes.put(TYPE, exchangeType);
         return fixedAttributes;
     }
 
@@ -71,7 +71,7 @@ class ExchangeImpl extends AbstractConfi
 
     public String getExchangeType()
     {
-        return (String) getAttribute(EXCHANGE_TYPE);
+        return (String) getAttribute(TYPE);
     }
 
     public Collection<Binding> getBindings()



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org