Repository: qpid-broker-j Updated Branches: refs/heads/7.0.x 969f7a3c6 -> 8c23f302d
QPID-8102: [Broker-J] Address review comments Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/8c23f302 Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/8c23f302 Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/8c23f302 Branch: refs/heads/7.0.x Commit: 8c23f302dc55a9159c202539249819d4c68311a6 Parents: 94901a3 Author: Alex Rudyy <oru...@apache.org> Authored: Fri Feb 23 14:15:09 2018 +0000 Committer: Keith Wall <kw...@apache.org> Committed: Fri Feb 23 15:01:44 2018 +0000 ---------------------------------------------------------------------- .../server/virtualhost/AbstractVirtualHost.java | 12 ++-- .../resources/js/qpid/management/VirtualHost.js | 25 ++++++--- .../js/qpid/management/editVirtualHost.js | 58 ++++++++++++++------ .../virtualhost/NodeAutoCreationPolicyForm.js | 38 ++++++------- .../virtualhost/NodeAutoCreationPolicyForm.html | 13 +++-- 5 files changed, 93 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c23f302/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java ---------------------------------------------------------------------- diff --git a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index e4ca989..7d2402c 100644 --- a/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -464,7 +464,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte String pattern = policy.getPattern(); if(pattern == null) { - throw new IllegalArgumentException("The 'pattern' attribute of a NodeAutoCreationPattern MUST be supplied: " + policy); + throw new IllegalArgumentException("The 'pattern' attribute of a NodeAutoCreationPolicy MUST be supplied: " + policy); } try @@ -473,7 +473,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } catch (PatternSyntaxException e) { - throw new IllegalArgumentException("The 'pattern' attribute of a NodeAutoCreationPattern MUST be a valid " + throw new IllegalArgumentException("The 'pattern' attribute of a NodeAutoCreationPolicy MUST be a valid " + "Java Regular Expression Pattern, the value '" + pattern + "' is not: " + policy); } @@ -490,23 +490,23 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } if(sourceClass == null) { - throw new IllegalArgumentException("The node type of a NodeAutoCreationPattern must be a valid child type " + throw new IllegalArgumentException("The node type of a NodeAutoCreationPolicy must be a valid child type " + "of a VirtualHost, '" + nodeType + "' is not."); } if(policy.isCreatedOnConsume() && !MessageSource.class.isAssignableFrom(sourceClass)) { - throw new IllegalArgumentException("A NodeAutoCreationPattern which creates nodes on consume must have a " + throw new IllegalArgumentException("A NodeAutoCreationPolicy which creates nodes on consume must have a " + "nodeType which implements MessageSource, '" + nodeType + "' does not."); } if(policy.isCreatedOnPublish() && !MessageDestination.class.isAssignableFrom(sourceClass)) { - throw new IllegalArgumentException("A NodeAutoCreationPattern which creates nodes on publish must have a " + throw new IllegalArgumentException("A NodeAutoCreationPolicy which creates nodes on publish must have a " + "nodeType which implements MessageDestination, '" + nodeType + "' does not."); } if(!(policy.isCreatedOnConsume() || policy.isCreatedOnPublish())) { - throw new IllegalArgumentException("A NodeAutoCreationPattern must create on consume, create on publish or both."); + throw new IllegalArgumentException("A NodeAutoCreationPolicy must create on consume, create on publish or both."); } } http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c23f302/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js ---------------------------------------------------------------------- diff --git a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js index 6df7870..7a96baa 100644 --- a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js +++ b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/VirtualHost.js @@ -513,7 +513,8 @@ define(["dojo/parser", markup = "<div class='keyValuePair'>"; for(var key in value) { - markup += "<div>" + key + "=" + value[key] + "</div>"; + markup += "<div>" + entities.encode(String(key)) + "=" + + entities.encode(String(value[key])) + "</div>"; } markup += "</div>" } @@ -709,23 +710,31 @@ define(["dojo/parser", { for (var i = 0; i < data.length; i++) { - dstore.put(data[i]); + dstore.putSync(data[i]); } } - dstore.fetch() + var objectsToRemove = []; + dstore.fetchSync() .forEach(function (object) { - if (data) + if (object) { - for (var i = 0; i < data.length; i++) + if (data) { - if (data[i][idProperty] === object[idProperty]) + for (var i = 0; i < data.length; i++) { - return; + if (data[i][idProperty] === object[idProperty]) + { + return; + } } } + objectsToRemove.push(object[idProperty]); } - dstore.remove(object[idProperty]); }); + for (var i = 0 ; i < objectsToRemove.length; i++) + { + dstore.removeSync(objectsToRemove[i]); + } }; return VirtualHost; http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c23f302/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js ---------------------------------------------------------------------- diff --git a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js index 01dc072..fd0c577 100644 --- a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js +++ b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js @@ -258,7 +258,7 @@ define(["dojox/html/entities", } }); - this._initNodeAutoCreationPolicies(data); + this._initNodeAutoCreationPolicies(data.actual && data.actual.nodeAutoCreationPolicies ? data.actual.nodeAutoCreationPolicies : []); this.dialog.startup(); this.dialog.show(); if (!this.resizeEventRegistered) @@ -302,7 +302,7 @@ define(["dojox/html/entities", label: 'All', selector: 'checkbox' }, - nodeType: { + type: { label: "Node Type" }, pattern: { @@ -317,17 +317,17 @@ define(["dojox/html/entities", attributes: { label: "Attributes", sortable: false, - formatter: function(value, object) - { + formatter: function (value, object) { var markup = ""; if (value) { markup = "<div class='keyValuePair'>"; - for(var key in value) + for (var key in value) { - markup += "<div>" + key + "=" + value[key] + "</div>"; + markup += "<div>" + entities.encode(String(key)) + "=" + + entities.encode(String(value[key])) + "</div>"; } - markup +="</div>" + markup += "</div>" } return markup; } @@ -346,9 +346,22 @@ define(["dojox/html/entities", this._policyGrid.on('dgrid-deselect', lang.hitch(this, this._policySelectionChanged)); }, - _initNodeAutoCreationPolicies: function (data) { - this._policies = - data.actual && data.actual.nodeAutoCreationPolicies ? data.actual.nodeAutoCreationPolicies : []; + _toDgridFriendlyNodeAutoCreationPolicyObject: function (policy) { + return { pattern: policy.pattern, + type: policy.nodeType, + attributes: policy.attributes, + createdOnPublish: policy.createdOnPublish, + createdOnConsume: policy.createdOnConsume}; + }, + _initNodeAutoCreationPolicies: function (policies) { + + var dgridFriendlyPolicies = []; + for (var i = 0; i < policies.length; i++) + { + dgridFriendlyPolicies.push(this._toDgridFriendlyNodeAutoCreationPolicyObject(policies[i])); + } + + this._policies = dgridFriendlyPolicies; var Store = MemoryStore.createSubclass(TrackableStore); this._policyStore = new Store({ data: this._policies, @@ -373,7 +386,11 @@ define(["dojox/html/entities", this.nodeAutoCreationPolicyForm.on("create", lang.hitch(this, function (e) { try { - this._policyStore.putSync(e.data); + this._policyStore.putSync(this._toDgridFriendlyNodeAutoCreationPolicyObject(e.data)); + if (e.oldData && e.oldData.pattern !== e.data.pattern) + { + this._policyStore.removeSync(e.oldData.pattern); + } } catch (e) { @@ -387,7 +404,7 @@ define(["dojox/html/entities", }, _policySelected: function (event) { var row = this._policyGrid.row(event); - this._showNodeAutoCreationPolicyForm(row.data); + this._showNodeAutoCreationPolicyForm(this._toNodeAutoCreationPolicyObject(row.data)); }, _deleteNodeAutoCreationPolicy: function () { var selected = this._getSelectedPolicies(); @@ -418,11 +435,20 @@ define(["dojox/html/entities", }, _getNodeAutoCreationPolicies: function () { var policies = []; - this._policyStore.fetchSync().forEach(function (policy) { - policies.push(policy); - }); + this._policyStore.fetchSync().forEach(lang.hitch(this, function (policy) { + policies.push(this._toNodeAutoCreationPolicyObject(policy)); + })); return policies; - } + }, + _toNodeAutoCreationPolicyObject: function (policy) { + return { + pattern: policy.pattern, + nodeType: policy.type, + attributes: policy.attributes, + createdOnPublish: policy.createdOnPublish, + createdOnConsume: policy.createdOnConsume + }; + }, }; virtualHostEditor.init(); http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c23f302/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/NodeAutoCreationPolicyForm.js ---------------------------------------------------------------------- diff --git a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/NodeAutoCreationPolicyForm.js b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/NodeAutoCreationPolicyForm.js index c250063..bfa0d74 100644 --- a/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/NodeAutoCreationPolicyForm.js +++ b/broker-plugins/management-http/src/main/java/resources/js/qpid/management/virtualhost/NodeAutoCreationPolicyForm.js @@ -171,7 +171,7 @@ define(["dojo/_base/declare", createdOnConsume: this.createdOnConsume.checked, attributes: this._getObjectAttributes() }; - this.emit("create", {data: data}); + this.emit("create", {data: data, oldData: this._policy}); this.nodeAutoCreationPolicyDialog.hide(); } else @@ -198,8 +198,8 @@ define(["dojo/_base/declare", _addAttribute: function () { var id = (++this._id); var item = { - name: "<new>", - value: "<new>", + name: "", + value: "", id: id }; this.addAttributeButton.set("disabled", true); @@ -212,10 +212,10 @@ define(["dojo/_base/declare", { console.error("failure to add new attribute:" + e); } + this._onChange(); }, _deleteAttribute: function () { var selected = this._getSelectedAttributes(); - var newDeleted = false; if (selected.length > 0) { for (var s in selected) @@ -226,20 +226,14 @@ define(["dojo/_base/declare", var item = this._store.getSync(id); if (item) { - if (item.name === "<new>") - { - newDeleted = true; - } this._store.removeSync(selected[s]); } } } this._attributesGrid.clearSelection(); } - if (newDeleted) - { - this.addAttributeButton.set("disabled", false); - } + this.addAttributeButton.set("disabled", this._emptyPatternFound()); + this._onChange(); }, _getSelectedAttributes: function () { var selected = []; @@ -254,13 +248,8 @@ define(["dojo/_base/declare", return selected; }, _onGridEdit: function (e) { - if (e.value !== "<new>") - { - if (e.cell.column.field==="name" && e.oldValue === "<new>" && e.value !== "<new>") - { - this.addAttributeButton.set("disabled", false); - } - } + this.addAttributeButton.set("disabled", this._emptyPatternFound()); + this._onChange(); }, _gridSelectionChanged: function () { var selected = this._getSelectedAttributes(); @@ -350,6 +339,17 @@ define(["dojo/_base/declare", }), true); this._attributesGrid.startup(); } + }, + _emptyPatternFound: function () { + var emptyPatternDetected = false; + this._store.fetchSync() + .forEach(function (value) { + if (value && value.pattern === "") + { + emptyPatternDetected = true; + } + }); + return emptyPatternDetected; } }); }); http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c23f302/broker-plugins/management-http/src/main/java/resources/virtualhost/NodeAutoCreationPolicyForm.html ---------------------------------------------------------------------- diff --git a/broker-plugins/management-http/src/main/java/resources/virtualhost/NodeAutoCreationPolicyForm.html b/broker-plugins/management-http/src/main/java/resources/virtualhost/NodeAutoCreationPolicyForm.html index bef23eb..ed8e861 100644 --- a/broker-plugins/management-http/src/main/java/resources/virtualhost/NodeAutoCreationPolicyForm.html +++ b/broker-plugins/management-http/src/main/java/resources/virtualhost/NodeAutoCreationPolicyForm.html @@ -37,8 +37,9 @@ data-dojo-props="name: 'pattern', required: true, intermediateChanges: true, - placeHolder: 'Name matching regular expression', - title: 'Enter name matching regular expression'"/> + placeHolder: 'regular expression', + title: 'Policy will apply to requests for new nodes with names matching this pattern', + promptMessage: 'Policy will apply to requests for new nodes with names matching this pattern'"/> </div> <div class="clear"> <label class="formLabel-labelCell tableContainer-labelCell" for="${id}_nodeType" @@ -50,8 +51,8 @@ placeHolder: 'Type of Node', required: true, value: 'Queue', - title: 'Type of node to create.', - promptMessage: 'Select type of node to create.', + title: 'Select type of node created by this policy', + promptMessage: 'Type of the automatically created node.', intermediateChanges: true"> <option value="Queue" selected="true">Queue</option> <option value="Exchange">Exchange</option> @@ -95,6 +96,10 @@ <legend>Attributes:</legend> <div data-dojo-attach-point="attributes" id="${id}_attributes" class="nodeAutoCreationPolicyAttributes"></div> + <div data-dojo-type="dijit/Tooltip" + data-dojo-props="connectId: ['${id}_attributes'], + label: 'Attributes applied to the automatically created node'"> + </div> <div> <button data-dojo-type="dijit/form/Button" id="${id}_addAttributeButton" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org