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 2014/05/29 11:32:24 UTC
svn commit: r1598232 - in
/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources:
js/qpid/common/UpdatableStore.js js/qpid/common/util.js
js/qpid/management/Broker.js showBroker.html
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: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org