You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2015/07/23 23:54:34 UTC

svn commit: r1692451 - in /qpid/java/trunk: broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/main/java/org/apache/qpid/server/queue/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ broker-pl...

Author: orudyy
Date: Thu Jul 23 21:54:33 2015
New Revision: 1692451

URL: http://svn.apache.org/r1692451
Log:
QPID-6652: [Java Broker] Make remaining REST service calls to be model based

Added:
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js
Removed:
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java
Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js
    qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js
    qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml
    qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java Thu Jul 23 21:54:33 2015
@@ -254,5 +254,7 @@ public interface Queue<X extends Queue<X
     @ManagedOperation(nonModifying = true)
     List<MessageInfo> getMessageInfo(@Param(name = "first", defaultValue = "-1") int first, @Param(name = "last", defaultValue = "-1") int last);
 
+    @ManagedOperation(nonModifying = true)
+    MessageInfo getMessageInfoById(@Param(name = "messageId") long messageId);
 
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java Thu Jul 23 21:54:33 2015
@@ -3282,7 +3282,7 @@ public abstract class AbstractQueue<X ex
     @Override
     public Content getMessageContent(final long messageId)
     {
-        final MessageFinder messageFinder = new MessageFinder(messageId);
+        final MessageContentFinder messageFinder = new MessageContentFinder(messageId);
         visit(messageFinder);
         if(messageFinder.isFound())
         {
@@ -3294,6 +3294,7 @@ public abstract class AbstractQueue<X ex
         }
     }
 
+    @Override
     public List<MessageInfo> getMessageInfo(int first, int last)
     {
         final MessageCollector messageCollector = new MessageCollector(first, last, false);
@@ -3302,6 +3303,14 @@ public abstract class AbstractQueue<X ex
 
     }
 
+    @Override
+    public MessageInfo getMessageInfoById(final long messageId)
+    {
+        final MessageFinder messageFinder = new MessageFinder(messageId);
+        visit(messageFinder);
+        return messageFinder.getMessageInfo();
+    }
+
     private void authorizeMethod(String methodName)
     {
         getSecurityManager().authoriseMethod(Operation.UPDATE,
@@ -3310,16 +3319,45 @@ public abstract class AbstractQueue<X ex
                                              getVirtualHost().getName());
     }
 
-
     private class MessageFinder implements QueueEntryVisitor
     {
         private final long _messageNumber;
+        private MessageInfo _messageInfo;
+
+        private MessageFinder(long messageNumber)
+        {
+            _messageNumber = messageNumber;
+        }
+
+        @Override
+        public boolean visit(QueueEntry entry)
+        {
+            ServerMessage message = entry.getMessage();
+            if(message != null)
+            {
+                if (_messageNumber == message.getMessageNumber())
+                {
+                    _messageInfo = new MessageInfoFacade(entry, true);
+                }
+            }
+            return false;
+        }
+
+        public MessageInfo getMessageInfo()
+        {
+            return _messageInfo;
+        }
+    }
+
+    private class MessageContentFinder implements QueueEntryVisitor
+    {
+        private final long _messageNumber;
         private String _mimeType;
         private long _size;
         private byte[] _content;
         private boolean _found;
 
-        private MessageFinder(long messageNumber)
+        private MessageContentFinder(long messageNumber)
         {
             _messageNumber = messageNumber;
         }

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Thu Jul 23 21:54:33 2015
@@ -73,8 +73,6 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.management.plugin.servlet.rest.JsonValueServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LoggedOnUserPreferencesServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
-import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet;
-import org.apache.qpid.server.management.plugin.servlet.rest.MessageServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.MetaDataServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.QueueReportServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
@@ -318,8 +316,6 @@ public class HttpManagement extends Abst
         root.addServlet(new ServletHolder(new UserPreferencesServlet()), "/service/userpreferences/*");
         root.addServlet(new ServletHolder(new LoggedOnUserPreferencesServlet()), "/service/preferences");
         root.addServlet(new ServletHolder(new StructureServlet()), "/service/structure");
-        root.addServlet(new ServletHolder(new MessageServlet()), "/service/message/*");
-        root.addServlet(new ServletHolder(new MessageContentServlet()), "/service/message-content/*");
         root.addServlet(new ServletHolder(new QueueReportServlet()), "/service/queuereport/*");
 
         root.addServlet(new ServletHolder(new MetaDataServlet(getModel())), "/service/metadata");

Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js?rev=1692451&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js Thu Jul 23 21:54:33 2015
@@ -0,0 +1,85 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+ define(["dojo/_base/lang", "dojo/json", "dojo/_base/declare", "dojo/store/util/QueryResults"],
+  function( lang, json, declare, QueryResults )
+  {
+     return declare("qpid.common.JsonRest", null,
+     {
+        headers:          {},
+        idProperty:       "id",
+        firstProperty:    "first",
+        lastProperty:     "last",
+        accepts:          "application/javascript, application/json",
+        queryOperation:   null,
+        modelObject:      null,
+        management:       null,
+
+        constructor: function(options)
+        {
+            this.headers = {};
+            this.management = options.management;
+            this.modelObject = options.modelObject;
+            this.queryOperation = options.queryOperation;
+            declare.safeMixin(this, options);
+        },
+
+        getIdentity: function(object)
+        {
+            return object[this.idProperty];
+        },
+
+        query: function(query, options)
+        {
+            query = query || {};
+            options = options || {};
+            var headers = lang.mixin({ Accept: this.accepts }, this.headers, options.headers);
+
+            query[this.firstProperty]= options.start >= 0 ? options.start : -1;
+            query[this.lastProperty] = options.count >= 0 && query.first >= 0 ? options.count + query.first : -1;
+
+            if(options.start >= 0 || options.count >= 0)
+            {
+                headers["X-Range"] = "items=" + (options.start || '0') + '-' +
+                    (("count" in options && options.count != Infinity) ?
+                        (options.count + (options.start || 0) - 1) : '');
+                headers.Range = headers["X-Range"];
+            }
+
+            var modelObj = {name: this.queryOperation, parent: this.modelObject, type: this.modelObject.type};
+            var results = management.load(modelObj,
+                                   query,
+                                   {headers: headers});
+
+            results.total = results.response.then(function(response)
+            {
+                var range = response.getHeader("Content-Range");
+                if (!range)
+                {
+                    range = response.getHeader("X-Content-Range");
+                }
+                return range && (range = range.match(/\/(.*)/)) && +range[1];
+            });
+            return QueryResults(results);
+        }
+     });
+
+ });

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js Thu Jul 23 21:54:33 2015
@@ -132,7 +132,8 @@ define(["dojo/_base/lang",
                    otherwise:     function(errback){return promise.otherwise(errback);},
                    trace:         function(){ return promise.trace();},
                    traceRejected: function(){return promise.traceRejected();},
-                   toString:      function(){return promise.toString();}
+                   toString:      function(){return promise.toString();},
+                   response:      promise.response
                });
     };
 
@@ -171,10 +172,16 @@ define(["dojo/_base/lang",
     //
     // returns: promise of type dojo.promise.Promise
     //      Promise returned by dojo.request.xhr with modified then method allowing to use default error handler if none is specified.
-    Management.prototype.load = function(modelObj, parameters)
+    Management.prototype.load = function(modelObj, parameters, requestOptions)
     {
         var url = this.objectToURL(modelObj);
         var request = {url: url};
+
+        if (requestOptions)
+        {
+            lang.mixin(request,requestOptions);
+        }
+
         if (parameters)
         {
             request.query = parameters;

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js Thu Jul 23 21:54:33 2015
@@ -18,7 +18,8 @@
  * under the License.
  *
  */
-define(["dojo/parser",
+define(["dojo/_base/declare",
+        "dojo/parser",
         "dojo/query",
         "dijit/registry",
         "dojo/_base/connect",
@@ -33,18 +34,17 @@ define(["dojo/parser",
         "qpid/management/moveCopyMessages",
         "qpid/management/showMessage",
         "qpid/management/editQueue",
-        "dojo/store/JsonRest",
+        "qpid/common/JsonRest",
         "dojox/grid/EnhancedGrid",
         "dojo/data/ObjectStore",
         "dojox/html/entities",
         "dojo/text!showQueue.html",
-        "dojox/data/JsonRestStore",
         "dojox/grid/enhanced/plugins/Pagination",
         "dojox/grid/enhanced/plugins/IndirectSelection",
         "dojo/domReady!"],
-       function (parser, query, registry, connect, event, json, properties, updater, util, formatter,
+       function (declare, parser, query, registry, connect, event, json, properties, updater, util, formatter,
                  UpdatableStore, addBinding, moveMessages, showMessage, editQueue, JsonRest,
-                 EnhancedGrid, ObjectStore, entities, template, JsonRestStore) {
+                 EnhancedGrid, ObjectStore, entities, template) {
 
            function Queue(name, parent, controller) {
                this.name = name;
@@ -81,13 +81,10 @@ define(["dojo/parser",
                 contentPane.containerNode.innerHTML = template;
                 parser.parse(contentPane.containerNode).then(function(instances)
                 {
-
                             that.queueUpdater = new QueueUpdater(that);
 
                             // double encode to allow slashes in object names.
-                            var myStore = new JsonRest({target: that.management.getFullUrl("service/message/" +
-                                                                                    encodeURIComponent(encodeURIComponent(that.getVirtualHostName())) +
-                                                                                   "/" + encodeURIComponent(encodeURIComponent(that.getQueueName())))});
+                            var myStore = new JsonRest({management: that.management, modelObject: that.modelObj, queryOperation: "getMessageInfo"});
                             var messageGridDiv = query(".messages",contentPane.containerNode)[0];
                             that.dataStore =  new ObjectStore({objectStore: myStore});
                             var userPreferences = this.management.userPreferences;
@@ -115,18 +112,15 @@ define(["dojo/parser",
                                               position: "bottom"
                                           },
                                           indirectSelection: true
-                                }
+                                },
+                                canSort: function(col) { return false; }
                             }, messageGridDiv);
 
                             connect.connect(that.grid, "onRowDblClick", that.grid,
                                              function(evt){
                                                  var idx = evt.rowIndex,
                                                      theItem = this.getItem(idx);
-                                                 var id = that.dataStore.getValue(theItem,"id");
-                                                 showMessage.show(that.management, { messageNumber: id,
-                                                                    queue: that.getQueueName(),
-                                                                    virtualhost: that.getVirtualHostName(),
-                                                                    virtualhostnode: that.getVirtualHostNodeName()});
+                                                 showMessage.show(that.management, that.modelObj, theItem);
                                              });
 
                             var deleteMessagesButton = query(".deleteMessagesButton", contentPane.containerNode)[0];
@@ -182,38 +176,57 @@ define(["dojo/parser",
                 });
            };
 
-           Queue.prototype.deleteMessages = function() {
+           Queue.prototype.deleteMessages = function()
+           {
                var data = this.grid.selection.getSelected();
-               if(data.length) {
-                   var that = this;
-                   if(confirm("Delete " + data.length + " messages?")) {
-                       var query = util.buildDeleteQuery(data, "service/message/" + encodeURIComponent(encodeURIComponent(this.getVirtualHostName())) + "/" + encodeURIComponent(encodeURIComponent(this.getQueueName())));
-                       management.del({url: query}).then(
-                           function(result)
+               if(data.length)
+               {
+                   if(confirm("Delete " + data.length + " messages?"))
+                   {
+                       var modelObj = { type: "queue", name: "deleteMessages", parent: this.modelObj };
+                       var parameters = {messageIds:[]};
+                       for(var i = 0; i<data.length; i++)
+                       {
+                         parameters.messageIds.push(data[i].id);
+                       }
+                       var that = this;
+                       this.management.update(modelObj, parameters).then(
+                         function(result)
+                         {
+                           that.grid.selection.deselectAll();
+                           if (result && result[0])
                            {
-                               that.grid.setQuery({id: "*"});
-                               that.grid.selection.deselectAll();
-                               that.queueUpdater.update();
-                           },
-                           util.xhrErrorHandler);
+                             that.reloadGridData();
+                           }
+                         });
                    }
                }
            };
-           Queue.prototype.clearQueue = function() {
-               var that = this;
-               if(confirm("Clear all messages from queue?")) {
-                   var query = "service/message/"+ encodeURIComponent(encodeURIComponent(that.getVirtualHostName()))
-                       + "/" + encodeURIComponent(encodeURIComponent(that.getQueueName())) + "?clear=true";
-                   that.success = true
-                   this.management.del({url: query}).then(
-                       function(data) {
-                           that.grid.setQuery({id: "*"});
-                           that.grid.selection.deselectAll();
-                           that.queueUpdater.update();
-                       },
-                       util.xhrErrorHandler);
+           Queue.prototype.clearQueue = function()
+           {
+               if(confirm("Clear all messages from queue?"))
+               {
+                   var modelObj = { type: "queue", name: "clearQueue", parent: this.modelObj };
+                   var that = this;
+                   this.management.update(modelObj, {}).then(
+                         function(result)
+                         {
+                           if (result)
+                           {
+                             that.reloadGridData();
+                           }
+                         });
                }
            };
+           Queue.prototype.reloadGridData = function()
+           {
+             var currentPage = this.grid.pagination.currentPage;
+             var currentPageSize = this.grid.pagination.currentPageSize;
+             var first = (currentPage -1 ) * currentPageSize;
+             var last = currentPage * currentPageSize;
+             this.grid.setQuery({first: first, last: last});
+             this.queueUpdater.update();
+           };
            Queue.prototype.moveOrCopyMessages = function(obj) {
                var that = this;
                var move = obj.move;
@@ -231,8 +244,7 @@ define(["dojo/parser",
                                        putData, function() {
                                          if(move)
                                          {
-                                            that.grid.setQuery({id: "*"});
-                                            that.grid.selection.deselectAll();
+                                            that.reloadGridData();
                                          }
                                      });
 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js Thu Jul 23 21:54:33 2015
@@ -56,25 +56,22 @@ define(["dojo/dom",
                             theForm.on("submit", function(e) {
 
                                 event.stop(e);
-                                if(theForm.validate()){
-
-                                    moveMessages.data.destinationQueue = theForm.getValues()["queue"];
-                                    var that = this;
-
-                                    moveMessages.management.post({url: "service/message/"+encodeURIComponent(encodeURIComponent(moveMessages.vhost))
-                                                      +"/"+encodeURIComponent(encodeURIComponent(moveMessages.queue)),
-                                             headers: { "Content-Type": "application/json"}},
-                                             moveMessages.data,
-                                             function(x) {
-                                                          registry.byId("moveMessages").hide();
-                                                          if(moveMessages.next) {
-                                                              moveMessages.next();
-                                                          }
-                                             },
-                                             util.xhrErrorHandler);
-                                    return false;
-
-
+                                if(theForm.validate())
+                                {
+                                   var destination = theForm.getValues()["queue"]
+                                   var messageIds = moveMessages.data.messages
+                                   var modelObj = { type: "queue", name: moveMessages.data.move ? "moveMessages" : "copyMessages", parent: moveMessages.modelObj };
+                                   var parameters = {destination: destination, messageIds: messageIds};
+                                   moveMessages.management.update(modelObj, parameters).then(
+                                     function(result)
+                                     {
+                                       registry.byId("moveMessages").hide();
+                                       if(moveMessages.next)
+                                       {
+                                         moveMessages.next();
+                                       }
+                                     });
+                                   return false;
                                 }else{
                                     alert('Form contains invalid data.  Please correct first');
                                     return false;
@@ -84,9 +81,8 @@ define(["dojo/dom",
 
         moveMessages.show = function(management, modelObj, data, next) {
             var that = this;
+            moveMessages.modelObj = modelObj;
             moveMessages.management = management;
-            moveMessages.vhost = modelObj.parent.name;
-            moveMessages.queue = modelObj.name;
             moveMessages.data = data;
             moveMessages.next = next;
             registry.byId("formMoveMessages").reset();
@@ -96,8 +92,12 @@ define(["dojo/dom",
             management.load({type: "queue", parent: modelObj.parent},  {depth:0}).then(
                 function(data) {
                     var queues =  [];
-                    for(var i=0; i < data.length; i++) {
-                      queues[i] = {id: data[i].name, name: data[i].name};
+                    for(var i=0; i < data.length; i++)
+                    {
+                      if (data[i].name != modelObj.name)
+                      {
+                        queues.push({id: data[i].name, name: data[i].name});
+                      }
                     }
                     var queueStore = new Memory({ data: queues });
 

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js Thu Jul 23 21:54:33 2015
@@ -46,20 +46,24 @@ define(["dojo/dom",
         };
 
         showMessage.loadViewMessage = function(data) {
-            var that = this;
+            var node = construct.create("div", null, win.body(), "last");
             node.innerHTML = data;
-            showMessage.dialogNode = dom.byId("showMessage");
-            parser.instantiate([showMessage.dialogNode]);
+            var that = this;
+            parser.parse(node).then(function(instances)
+            {
+                that.dialogNode = dom.byId("showMessage");
+                var closeButton = query(".closeViewMessage", that.dialogNode)[0];
+                registry.byNode(closeButton).on("click",
+                                function (evt) {
+                                    event.stop(evt);
+                                    that.hide();
+                                });
+            });
+
 
-            var closeButton = query(".closeViewMessage")[0];
-            connect.connect(closeButton, "onclick",
-                            function (evt) {
-                                event.stop(evt);
-                                showMessage.hide();
-                            });
         };
 
-        showMessage.populateShowMessage = function(data) {
+        showMessage.populateShowMessage = function(management, modelObj, data) {
 
             // clear fields set by previous invocation.
             if(populatedFields) {
@@ -89,7 +93,7 @@ define(["dojo/dom",
                                 }
                                 tableStr += "</table>";
                             } else if(domClass.contains(field,"datetime")) {
-                                field.innerHTML = showMessage.management.userPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true});
+                                field.innerHTML = management.userPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true});
                             } else {
                                 field.innerHTML = encode(val);
                             }
@@ -98,39 +102,46 @@ define(["dojo/dom",
                 }
             }
             var contentField = query(".message-content", this.dialogNode)[0];
+            populatedFields.push(contentField);
 
-            if(data.mimeType && data.mimeType.match(/text\/.*/)) {
-                showMessage.management.get({url: "service/message-content/" + encodeURIComponent(encodeURIComponent(showMessage.virtualhost))
-                                            + "/" + encodeURIComponent(encodeURIComponent(showMessage.queue))
-                                            + "/" + encodeURIComponent(encodeURIComponent(showMessage.messageNumber)),
-                                            headers: { "Content-Type": "text/html"},
-                                            handleAs: "text"
-                                    }).then(function(obj) { contentField.innerHTML = encode(obj); }, util.xhrErrorHandler);
-            } else {
-                contentField.innerHTML = "<a href=\"" + showMessage.management.getFullUrl("service/message-content/"
-                                                            + encodeURIComponent(encodeURIComponent(showMessage.virtualhost))
-                                                            + "/" + encodeURIComponent(encodeURIComponent(showMessage.queue))
-                                                            + "/" + encodeURIComponent(encodeURIComponent(showMessage.messageNumber)))
-                                        + "\" target=\"_blank\">Download</a>";
+            var contentModelObj = {name: "getMessageContent", parent: modelObj, type: modelObj.type};
+            var parameters = {messageId: data.id};
+            if(data.mimeType && data.mimeType.match(/text\/.*/))
+            {
+                management.load(contentModelObj,
+                                parameters,
+                                {handleAs: "text", headers: { "Content-Type": data.mimeType}}).then(
+                                function(content)
+                                {
+                                    contentField.innerHTML = encode(content);
+                                    registry.byId("showMessage").show();
+                                });
             }
-            populatedFields.push(contentField);
+            else
+            {
+                var url = management.buildObjectURL(contentModelObj, parameters);
+                contentField.innerHTML = "<a href=\"#\" title=\"" + url + "\">Download</a>";
+
+                var href = query('a', contentField)[0]
+                connect.connect(href, 'onclick',
+                                 function()
+                                 {
+                                      management.download(contentModelObj, parameters);
+                                 });
 
-            registry.byId("showMessage").show();
+                registry.byId("showMessage").show();
+            }
         };
 
-        showMessage.show = function(management, obj) {
-            showMessage.management = management;
-            showMessage.virtualhost = obj.virtualhost;
-            showMessage.queue = obj.queue;
-            showMessage.messageNumber = obj.messageNumber;
-
-            showMessage.management.get({url: "service/message/" + encodeURIComponent(encodeURIComponent(obj.virtualhost))
-                            + "/" + encodeURIComponent(encodeURIComponent(obj.queue))
-                            + "/" + encodeURIComponent(encodeURIComponent(obj.messageNumber))}).then(showMessage.populateShowMessage);
+        showMessage.show = function(management, modelObj, message )
+        {
+            management.load({name: "getMessageInfoById", parent: modelObj, type: modelObj.type}, {messageId: message.id}).then(
+                function(data)
+                {
+                    showMessage.populateShowMessage(management, modelObj, data);
+                });
         };
 
-        var node = construct.create("div", null, win.body(), "last");
-
         showMessage.loadViewMessage(template);
 
         return showMessage;

Modified: qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml
URL: http://svn.apache.org/viewvc/qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml (original)
+++ qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml Thu Jul 23 21:54:33 2015
@@ -348,24 +348,6 @@
           </row>
           <row>
             <entry>
-              <para>/service/message/&lt;virtualhost name&gt;/&lt;queue name&gt;</para>
-            </entry>
-            <entry>Rest service to manage messages(s). Retrieves the details about the messages(s) with GET. Copies, moves messages with POST requests. Deletes messages with DELETE requests </entry>
-          </row>
-          <row>
-            <entry>
-              <para>/service/message-content/&lt;virtualhost name&gt;/&lt;queue name&gt;</para>
-            </entry>
-            <entry>Rest service to retrieve message content</entry>
-          </row>
-          <row>
-            <entry>
-              <para>/service/logrecords</para>
-            </entry>
-            <entry>Rest service to retrieve broker logs</entry>
-          </row>
-          <row>
-            <entry>
               <para>/service/sasl</para>
             </entry>
             <entry>Sasl authentication. Retrieves user current authentication status and broker supported SASL mechanisms (GET). Authenticates user using supported SASL mechanisms (PUT requests)</entry>

Modified: qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java (original)
+++ qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java Thu Jul 23 21:54:33 2015
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -85,7 +86,7 @@ public class MessagesRestTest extends Qp
     public void testGet() throws Exception
     {
         String queueName = getTestQueueName();
-        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", MESSAGE_NUMBER, messages.size());
         int position = 0;
@@ -109,28 +110,28 @@ public class MessagesRestTest extends Qp
         // get message IDs
         List<Long> ids = getMesssageIds(queueName);
 
-        Map<String, Object> message = getRestTestHelper().getJsonAsMap("/service/message/test/" + queueName + "/" + ids.get(0));
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo?first=0&last=0");
+        assertEquals("Unexpected message number returned", 1, messages.size());
+        Map<String, Object> message = messages.get(0);
         assertMessageAttributes(message);
         assertMessageAttributeValues(message, true);
 
-        @SuppressWarnings("unchecked")
-        Map<String, Object> headers = (Map<String, Object>) message.get("headers");
-        assertNotNull("Message headers are not found", headers);
-        assertEquals("Unexpected message header", 0, headers.get("index"));
-
-        Long lastMessageId = ids.get(ids.size() - 1);
-        message = getRestTestHelper().getJsonAsMap("/service/message/test/" + queueName + "/" + lastMessageId);
+        int lastMessageId = ids.size() - 1;
+        messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo?first=" + lastMessageId + "&last=" + lastMessageId);
+        assertEquals("Unexpected message number returned", 1, messages.size());
+        message = messages.get(0);
         assertMessageAttributes(message);
         assertEquals("Unexpected message attribute mimeType", "text/plain", message.get("mimeType"));
         assertEquals("Unexpected message attribute size", STRING_VALUE.getBytes(StandardCharsets.UTF_8).length, message.get("size"));
 
+        message = getRestTestHelper().getJsonAsMap("queue/test/test/" + queueName + "/getMessageInfoById?messageId=" + ids.get(lastMessageId));
         @SuppressWarnings("unchecked")
         Map<String, Object> messageHeader = (Map<String, Object>) message.get("headers");
         assertNotNull("Message headers are not found", messageHeader);
         assertEquals("Unexpected message header value", STRING_VALUE, messageHeader.get(STRING_PROP));
 
         // get content
-        byte[] data = getRestTestHelper().getBytes("/service/message-content/test/" + queueName + "/" + lastMessageId);
+        byte[] data = getRestTestHelper().getBytes("queue/test/test/" + queueName + "/getMessageContent?messageId=" + ids.get(lastMessageId));
         assertTrue("Unexpected message for id " + lastMessageId + ":" + data.length, Arrays.equals(STRING_VALUE.getBytes(StandardCharsets.UTF_8), data));
 
     }
@@ -147,7 +148,7 @@ public class MessagesRestTest extends Qp
 
         // move half of the messages
         int movedNumber = ids.size() / 2;
-        List<Long> movedMessageIds = new ArrayList<Long>();
+        List<Long> movedMessageIds = new ArrayList<>();
         for (int i = 0; i < movedNumber; i++)
         {
             movedMessageIds.add(ids.remove(i));
@@ -155,15 +156,15 @@ public class MessagesRestTest extends Qp
 
         // move messages
 
-        Map<String, Object> messagesData = new HashMap<String, Object>();
-        messagesData.put("messages", movedMessageIds);
-        messagesData.put("destinationQueue", queueName2);
-        messagesData.put("move", Boolean.TRUE);
+        Map<String, Object> messagesData = new HashMap<>();
+        messagesData.put("messageIds", movedMessageIds);
+        messagesData.put("destination", queueName2);
+
 
-        getRestTestHelper().submitRequest("/service/message/test/" + queueName, "POST", messagesData, HttpServletResponse.SC_OK);
+        getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/moveMessages", "POST", messagesData, HttpServletResponse.SC_OK);
 
         // check messages on target queue
-        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName2);
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName2 + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", movedMessageIds.size(), messages.size());
         for (Long id : movedMessageIds)
@@ -173,7 +174,7 @@ public class MessagesRestTest extends Qp
         }
 
         // check messages on original queue
-        messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+        messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", ids.size(), messages.size());
         for (Long id : ids)
@@ -200,21 +201,21 @@ public class MessagesRestTest extends Qp
 
         // copy half of the messages
         int copyNumber = ids.size() / 2;
-        List<Long> copyMessageIds = new ArrayList<Long>();
+        List<Long> copyMessageIds = new ArrayList<>();
         for (int i = 0; i < copyNumber; i++)
         {
             copyMessageIds.add(ids.remove(i));
         }
 
         // copy messages
-        Map<String, Object> messagesData = new HashMap<String, Object>();
-        messagesData.put("messages", copyMessageIds);
-        messagesData.put("destinationQueue", queueName2);
+        Map<String, Object> messagesData = new HashMap<>();
+        messagesData.put("messageIds", copyMessageIds);
+        messagesData.put("destination", queueName2);
 
-        getRestTestHelper().submitRequest("/service/message/test/" + queueName, "POST", messagesData, HttpServletResponse.SC_OK);
+        getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/copyMessages", "POST", messagesData, HttpServletResponse.SC_OK);
 
         // check messages on target queue
-        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName2);
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName2 + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", copyMessageIds.size(), messages.size());
         for (Long id : copyMessageIds)
@@ -224,7 +225,7 @@ public class MessagesRestTest extends Qp
         }
 
         // check messages on original queue
-        messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+        messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", MESSAGE_NUMBER, messages.size());
         for (Long id : ids)
@@ -248,24 +249,20 @@ public class MessagesRestTest extends Qp
 
         // delete half of the messages
         int deleteNumber = ids.size() / 2;
-        StringBuilder queryString = new StringBuilder();
         List<Long> deleteMessageIds = new ArrayList<>();
         for (int i = 0; i < deleteNumber; i++)
         {
             Long id = ids.remove(i);
             deleteMessageIds.add(id);
-            if (queryString.length() > 0)
-            {
-                queryString.append("&");
-            }
-            queryString.append("id=").append(id);
         }
 
         // delete messages
-        getRestTestHelper().submitRequest("/service/message/test/" + queueName + "?" + queryString.toString(), "DELETE", HttpServletResponse.SC_OK);
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("messageIds", deleteMessageIds);
+        getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/deleteMessages", "POST", parameters, HttpServletResponse.SC_OK);
 
         // check messages on queue
-        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", ids.size(), messages.size());
         for (Long id : ids)
@@ -285,10 +282,11 @@ public class MessagesRestTest extends Qp
         String queueName = getTestQueueName();
 
         // clear queue
-        getRestTestHelper().submitRequest("/service/message/test/" + queueName + "?clear=true", "DELETE", HttpServletResponse.SC_OK);
+        getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/clearQueue", "POST",
+                Collections.<String, Object>emptyMap(), HttpServletResponse.SC_OK);
 
         // check messages on queue
-        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
         assertNotNull("Messages are not found", messages);
         assertEquals("Unexpected number of messages", 0, messages.size());
     }
@@ -296,8 +294,8 @@ public class MessagesRestTest extends Qp
 
     private List<Long> getMesssageIds(String queueName) throws IOException
     {
-        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
-        List<Long> ids = new ArrayList<Long>();
+        List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
+        List<Long> ids = new ArrayList<>();
         for (Map<String, Object> message : messages)
         {
             ids.add(((Number) message.get("id")).longValue());
@@ -309,7 +307,6 @@ public class MessagesRestTest extends Qp
     {
         assertMessageAttributes(message);
 
-        assertEquals("Unexpected message attribute position", position, message.get("position"));
         assertEquals("Unexpected message attribute size", position < 10 ? 6 : 7, message.get("size"));
         boolean even = position % 2 == 0;
         assertMessageAttributeValues(message, even);



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