Author: orudyy
Date: Thu May 29 09:32:24 2014
New Revision: 1598232

URL: http://svn.apache.org/r1598232
Log:
QPID-5413: [Java Broker-Web Management] Allow stopping and starting of virtual 
host nodes and virtual hosts from the broker tab

Modified:
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js?rev=1598232&r1=1598231&r2=1598232&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
 Thu May 29 09:32:24 2014
@@ -18,10 +18,12 @@
  * under the License.
  *
  */
-define(["dojo/store/Memory",
-                               "dojox/grid/DataGrid",
-                               "dojo/data/ObjectStore",
-                               "dojo/store/Observable"], function (Memory, 
DataGrid, ObjectStore, Observable) {
+define(["dojo/json",
+        "qpid/common/util",
+        "dojo/store/Memory",
+        "dojox/grid/DataGrid",
+        "dojo/data/ObjectStore",
+        "dojo/store/Observable"], function (json, util, Memory, DataGrid, 
ObjectStore, Observable) {
 
     function UpdatableStore( data, divName, structure, func, props, Grid, 
notObservable ) {
 
@@ -86,19 +88,10 @@ define(["dojo/store/Memory",
         if(data) {
             for(var i=0; i < data.length; i++) {
                 if(theItem = store.get(data[i].id)) {
-                    var modified;
-                    for(var propName in data[i]) {
-                        if(data[i].hasOwnProperty(propName)) {
-                            if(theItem[ propName ] != data[i][ propName ]) {
-                                theItem[ propName ] = data[i][ propName ];
-                                modified = true;
-                                changed = true;
-                            }
-                        }
-                    }
+                    var modified = !util.equals(theItem, data[i]);
                     if(modified) {
                         store.put(data[i], {overwrite: true});
-                        if (store instanceof Observable)
+                        if (store.notify)
                         {
                           store.notify(theItem, data[i].id);
                         }

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1598232&r1=1598231&r2=1598232&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
 Thu May 29 09:32:24 2014
@@ -21,7 +21,7 @@
 
 define(["dojo/_base/xhr",
         "dojo/_base/event",
-        "dojo/_base/json",
+        "dojo/json",
         "dojo/_base/lang",
         "dojo/dom-construct",
         "dojo/dom-geometry",
@@ -266,7 +266,7 @@ define(["dojo/_base/xhr",
                      }
                      xhr.put({url: url , sync: true, handleAs: "json",
                               headers: { "Content-Type": "application/json"},
-                              putData: json.toJson(values),
+                              putData: json.stringify(values),
                               load: function(x) {that.success = true; },
                               error: function(error) {that.success = false; 
that.failureReason = error;}});
                      if(this.success === true)
@@ -371,5 +371,125 @@ define(["dojo/_base/xhr",
                }
            }
 
+           util.sendRequest = function (url, method, attributes, sync)
+           {
+               var success = false;
+               var failureReason = "";
+               var syncRequired = sync == undefined ? true : sync;
+               if (method == "POST" || method == "PUT")
+               {
+                 xhr.put({
+                   url: url,
+                   sync: syncRequired,
+                   handleAs: "json",
+                   headers: { "Content-Type": "application/json"},
+                   putData: json.stringify(attributes),
+                   load: function(x) {success = true; },
+                   error: function(error) {success = false; failureReason = 
error;}
+                 });
+               }
+               else if (method == "DELETE")
+               {
+                 xhr.del({url: url, sync: syncRequired, handleAs: 
"json"}).then(
+                       function(data) { success = true; },
+                       function(error) {success = false; failureReason = 
error;}
+                 );
+               }
+
+               if (syncRequired && !success)
+               {
+                   alert("Error:" + failureReason);
+               }
+               return success;
+           }
+
+           util.equals = function(object1, object2)
+           {
+             if (object1 && object2)
+             {
+               if (typeof object1 != typeof object2)
+               {
+                 return false;
+               }
+               else
+               {
+                 if (object1 instanceof Array || typeof object1 == "array")
+                 {
+                   if (object1.length != object2.length)
+                   {
+                     return false;
+                   }
+
+                   for (var i = 0, l=object1.length; i < l; i++)
+                   {
+                     var item = object1[i];
+                     if (item && (item instanceof Array  || typeof item == 
"array" || item instanceof Object))
+                     {
+                       if (!this.equals(item, object2[i]))
+                       {
+                         return false;
+                       }
+                     }
+                     else if (item != object2[i])
+                     {
+                         return false;
+                     }
+                   }
+
+                   return true;
+                 }
+                 else if (object1 instanceof Object)
+                 {
+                   for (propName in object1)
+                   {
+                       if (object1.hasOwnProperty(propName) != 
object2.hasOwnProperty(propName))
+                       {
+                           return false;
+                       }
+                       else if (typeof object1[propName] != typeof 
object2[propName])
+                       {
+                           return false;
+                       }
+                   }
+
+                   for(propName in object2)
+                   {
+                       var object1Prop = object1[propName];
+                       var object2Prop = object2[propName];
+
+                       if (object2.hasOwnProperty(propName) != 
object1.hasOwnProperty(propName))
+                       {
+                           return false;
+                       }
+                       else if (typeof object1Prop != typeof object2Prop)
+                       {
+                           return false;
+                       }
+
+                       if(!object2.hasOwnProperty(propName))
+                       {
+                         // skip functions
+                         continue;
+                       }
+
+                       if (object1Prop && (object1Prop instanceof Array || 
typeof object1Prop == "array" || object1Prop instanceof Object))
+                       {
+                         if (!this.equals(object1Prop, object2Prop))
+                         {
+                           return false;
+                         }
+                       }
+                       else if(object1Prop != object2Prop)
+                       {
+                          return false;
+                       }
+                   }
+                   return true;
+                 }
+               }
+             }
+             return object1 === object2;
+           }
+
            return util;
        });

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1598232&r1=1598231&r2=1598232&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
 Thu May 29 09:32:24 2014
@@ -21,6 +21,7 @@
 define(["dojo/_base/xhr",
         "dojo/parser",
         "dojo/query",
+        "dojo/json",
         "dojo/_base/connect",
         "qpid/common/properties",
         "qpid/common/updater",
@@ -48,7 +49,7 @@ define(["dojo/_base/xhr",
         "dijit/Menu",
         "dijit/MenuItem",
         "dojo/domReady!"],
-       function (xhr, parser, query, connect, properties, updater, util, 
UpdatableStore, EnhancedGrid, registry, entities, addAuthenticationProvider, 
addVirtualHostNode, addPort, addKeystore, addGroupProvider, 
addAccessControlProvider) {
+       function (xhr, parser, query, json, connect, properties, updater, util, 
UpdatableStore, EnhancedGrid, registry, entities, addAuthenticationProvider, 
addVirtualHostNode, addPort, addKeystore, addGroupProvider, 
addAccessControlProvider) {
 
            function Broker(name, parent, controller) {
                this.name = name;
@@ -330,7 +331,7 @@ define(["dojo/_base/xhr",
                                      selectionMode: "single",
                                      plugins: {
                                               pagination: {
-                                                  pageSizes: ["10", "25", 
"50", "100"],
+                                                  pageSizes: [10, 25, 50, 100],
                                                   description: true,
                                                   sizeSwitch: true,
                                                   pageStepper: true,
@@ -382,24 +383,31 @@ define(["dojo/_base/xhr",
                                                         function(evt){
                                                             var idx = 
evt.rowIndex,
                                                                 theItem = 
this.getItem(idx);
-                                                            
that.showVirtualHost(theItem, brokerObj);
+                                                            if 
(theItem.virtualhosts)
+                                                            {
+                                                                
that.showVirtualHost(theItem, brokerObj);
+                                                            }
                                                         });
-                                                }, gridProperties, 
EnhancedGrid);
+                                                }, gridProperties, 
EnhancedGrid, true);
 
-                             var virtualHostNodeMenuButton = 
registry.byNode(query(".virtualHostNodeMenuButton", node)[0]);
-                             var virtualHostMenuButton = 
registry.byNode(query(".virtualHostMenuButton", node)[0]);
+                             that.virtualHostNodeMenuButton = 
registry.byNode(query(".virtualHostNodeMenuButton", node)[0]);
+                             that.virtualHostMenuButton = 
registry.byNode(query(".virtualHostMenuButton", node)[0]);
 
-                             var toggleVirtualHostNodeNodeMenus = 
function(rowIndex){
-                               var data = 
that.vhostsGrid.grid.selection.getSelected();
-                               
virtualHostNodeMenuButton.set("disabled",data.length!=1);
-                               
virtualHostMenuButton.set("disabled",data.length!=1 );
-                             };
+                             var hostMenuItems = 
that.virtualHostMenuButton.dropDown.getChildren();
+                             var viewVirtualHostItem = hostMenuItems[0];
+                             var startVirtualHostItem = hostMenuItems[1];
+                             var stopVirtualHostItem = hostMenuItems[2];
 
-                             connect.connect(that.vhostsGrid.grid.selection, 
'onSelected',  toggleVirtualHostNodeNodeMenus);
-                             connect.connect(that.vhostsGrid.grid.selection, 
'onDeselected',  toggleVirtualHostNodeNodeMenus);
+                             var nodeMenuItems = 
that.virtualHostNodeMenuButton.dropDown.getChildren();
+                             var viewNodeItem = nodeMenuItems[0];
+                             var deleteNodeItem = nodeMenuItems[1];
+                             var startNodeItem = nodeMenuItems[2];
+                             var stopNodeItem = nodeMenuItems[3];
+
+                             var toggler =  function(index){ 
that.toggleVirtualHostNodeNodeMenus(index);}
+                             connect.connect(that.vhostsGrid.grid.selection, 
'onSelected', toggler);
+                             connect.connect(that.vhostsGrid.grid.selection, 
'onDeselected', toggler);
 
-                             var hostMenuItems = 
virtualHostMenuButton.dropDown.getChildren();
-                             var viewVirtualHostItem = hostMenuItems[0];
                              viewVirtualHostItem.on("click", function(){
                                var data = 
that.vhostsGrid.grid.selection.getSelected();
                                if (data.length == 1)
@@ -408,9 +416,7 @@ define(["dojo/_base/xhr",
                                }
                              });
 
-                             var nodeMenuItems = 
virtualHostNodeMenuButton.dropDown.getChildren();
-                             var viewNodeButton = nodeMenuItems[0];
-                             viewNodeButton.on("click",
+                             viewNodeItem.on("click",
                                      function(evt){
                                        var data = 
that.vhostsGrid.grid.selection.getSelected();
                                        if (data.length == 1)
@@ -420,8 +426,8 @@ define(["dojo/_base/xhr",
                                        }
                                  }
                              );
-                             var deleteNodeButton = nodeMenuItems[1];
-                             deleteNodeButton.on("click",
+
+                             deleteNodeItem.on("click",
                                      function(evt){
                                          util.deleteGridSelections(
                                                  that,
@@ -431,6 +437,63 @@ define(["dojo/_base/xhr",
                                  }
                              );
 
+                             startNodeItem.on("click",
+                               function(event)
+                               {
+                                 var data = 
that.vhostsGrid.grid.selection.getSelected();
+                                 if (data.length == 1)
+                                 {
+                                   var item = data[0];
+                                   
util.sendRequest("api/latest/virtualhostnode/" + encodeURIComponent(item.name),
+                                           "PUT", {desiredState: "ACTIVE"});
+                                 }
+                               });
+
+                             stopNodeItem.on("click",
+                               function(event)
+                               {
+                                 var data = 
that.vhostsGrid.grid.selection.getSelected();
+                                 if (data.length == 1)
+                                 {
+                                   var item = data[0];
+                                   if (confirm("Stopping the node will also 
shutdown the virtual host. "
+                                           + "Are you sure you want to stop 
virtual host node '"
+                                           + 
entities.encode(String(item.name)) +"'?"))
+                                   {
+                                       
util.sendRequest("api/latest/virtualhostnode/" + encodeURIComponent(item.name),
+                                               "PUT", {desiredState: 
"STOPPED"});
+                                   }
+                                 }
+                               });
+
+                             startVirtualHostItem.on("click", function(event)
+                               {
+                                 var data = 
that.vhostsGrid.grid.selection.getSelected();
+                                 if (data.length == 1 && data[0].virtualhosts)
+                                 {
+                                   var item = data[0];
+                                   var host = item.virtualhosts[0];
+                                   util.sendRequest("api/latest/virtualhost/" 
+ encodeURIComponent(item.name) + "/" + encodeURIComponent(host.name),
+                                           "PUT", {desiredState: "ACTIVE"});
+                                 }
+                               });
+
+                             stopVirtualHostItem.on("click", function(event)
+                               {
+                                 var data = 
that.vhostsGrid.grid.selection.getSelected();
+                                 if (data.length == 1 && data[0].virtualhosts)
+                                 {
+                                   var item = data[0];
+                                   var host = item.virtualhosts[0];
+                                   if (confirm("Are you sure you want to stop 
virtual host '"
+                                           + 
entities.encode(String(host.name)) +"'?"))
+                                   {
+                                       
util.sendRequest("api/latest/virtualhost/" + encodeURIComponent(item.name) + 
"/" + encodeURIComponent(host.name),
+                                               "PUT", {desiredState: 
"STOPPED"});
+                                   }
+                                 }
+                               });
+
                              gridProperties.selectionMode="extended";
 
                              that.portsGrid =
@@ -633,7 +696,11 @@ define(["dojo/_base/xhr",
 
                                                                                
        that.updateHeader();
 
-                                                                               
        that.vhostsGrid.update(that.brokerData.virtualhostnodes);
+                                                                               
        if (that.vhostsGrid.update(that.brokerData.virtualhostnodes))
+                                                                               
        {
+                                                                               
            that.vhostsGrid.grid._refresh();
+                                                                               
            that.toggleVirtualHostNodeNodeMenus();
+                                                                               
        }
 
                                                                                
        that.portsGrid.update(that.brokerData.ports);
 
@@ -670,5 +737,43 @@ define(["dojo/_base/xhr",
                dojo.byId("brokerAttribute.modelVersion").innerHTML = 
entities.encode(String(brokerData.modelVersion));
            }
 
+           BrokerUpdater.prototype.toggleVirtualHostNodeNodeMenus = 
function(rowIndex)
+           {
+             var data = this.vhostsGrid.grid.selection.getSelected();
+             var selected = data.length==1;
+             this.virtualHostNodeMenuButton.set("disabled", !selected);
+             this.virtualHostMenuButton.set("disabled", !selected || 
!data[0].virtualhosts);
+             if (selected)
+             {
+                 var nodeMenuItems = 
this.virtualHostNodeMenuButton.dropDown.getChildren();
+                 var hostMenuItems = 
this.virtualHostMenuButton.dropDown.getChildren();
+
+                 var startNodeItem = nodeMenuItems[2];
+                 var stopNodeItem = nodeMenuItems[3];
+
+                 var viewVirtualHostItem = hostMenuItems[0];
+                 var startVirtualHostItem = hostMenuItems[1];
+                 var stopVirtualHostItem = hostMenuItems[2];
+
+                 var node = data[0];
+                 startNodeItem.set("disabled", node.state != "STOPPED");
+                 stopNodeItem.set("disabled", node.state != "ACTIVE");
+
+                 if (node.virtualhosts)
+                 {
+                     viewVirtualHostItem.set("disabled", false);
+
+                     var host = node.virtualhosts[0];
+                     startVirtualHostItem.set("disabled", host.state != 
"STOPPED");
+                     stopVirtualHostItem.set("disabled", host.state != 
"ACTIVE");
+                 }
+                 else
+                 {
+                     viewVirtualHostItem.set("disabled", true);
+                     startVirtualHostItem.set("disabled", true);
+                     stopVirtualHostItem.set("disabled", true);
+                 }
+             }
+           };
            return Broker;
        });

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html?rev=1598232&r1=1598231&r2=1598232&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
 Thu May 29 09:32:24 2014
@@ -79,20 +79,16 @@
             <div data-dojo-type="dijit.Menu">
                 <div data-dojo-type="dijit.MenuItem">View</div>
                 <div data-dojo-type="dijit.MenuItem">Delete</div>
-                <div data-dojo-type="dijit.MenuItem"
-                    data-dojo-props="disabled: true,onClick: 
function(){alert('TODO');}">Start</div>
-                <div data-dojo-type="dijit.MenuItem"
-                    data-dojo-props="disabled:true, onClick: 
function(){alert('TODO');}">Stop</div>
+                <div data-dojo-type="dijit.MenuItem" 
data-dojo-props="disabled:true">Start</div>
+                <div data-dojo-type="dijit.MenuItem" 
data-dojo-props="disabled:true">Stop</div>
             </div>
           </div>
         <div data-dojo-type="dijit.form.DropDownButton" 
class="virtualHostMenuButton" data-dojo-props="iconClass: 
'dijitIconPackage',disabled:true">
             <span>Virtual Host</span>
             <div data-dojo-type="dijit.Menu" class="virtualHostMenu">
                 <div data-dojo-type="dijit.MenuItem" class="viewVirtualHost" 
>View</div>
-                <div data-dojo-type="dijit.MenuItem"
-                    data-dojo-props="disabled: true,onClick: 
function(){alert('TODO');}">Start</div>
-                <div data-dojo-type="dijit.MenuItem"
-                    data-dojo-props="disabled:true, onClick: 
function(){alert('TODO');}">Quiesce</div>
+                <div data-dojo-type="dijit.MenuItem" 
data-dojo-props="disabled:true">Start</div>
+                <div data-dojo-type="dijit.MenuItem" 
data-dojo-props="disabled:true">Stop</div>
             </div>
           </div>
     </div>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to