From b01427061008ed26afd5a08e18fe1d0ce81dbf25 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Wed, 4 Feb 2015 14:33:38 +0000 Subject: QPID-6360: [Java Broker] Extend the UI to support creation of alternate group providers and the new config based group provider plugin git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1657255 13f79535-47bb-0310-9956-ffa450edef68 --- .../server/model/GroupManagingGroupProvider.java | 24 ++ .../model/adapter/FileBasedGroupProvider.java | 3 +- .../server/security/group/GroupProviderImpl.java | 3 +- .../src/main/java/resources/addGroupProvider.html | 66 +++++ .../main/java/resources/group/addGroupMember.html | 5 +- .../src/main/java/resources/group/showGroup.html | 6 +- .../java/resources/groupprovider/addGroup.html | 5 +- .../resources/groupprovider/groupfile/add.html | 37 +++ .../resources/groupprovider/groupfile/show.html | 25 ++ .../groupprovider/showFileGroupManager.html | 34 --- .../showGroupManagingGroupProvider.html | 30 +++ .../resources/js/qpid/management/GroupProvider.js | 144 +++++++---- .../js/qpid/management/addGroupProvider.js | 280 +++++++++++---------- .../resources/js/qpid/management/group/Group.js | 9 +- .../management/groupprovider/FileGroupManager.js | 262 ------------------- .../groupprovider/GroupManagingGroupProvider.js | 209 +++++++++++++++ .../qpid/management/groupprovider/groupfile/add.js | 37 +++ .../management/groupprovider/groupfile/show.js | 37 +++ .../groupprovider/managedgroupprovider/add.js | 26 ++ .../groupprovider/managedgroupprovider/show.js | 35 +++ .../src/main/java/resources/showGroupProvider.html | 5 +- 21 files changed, 791 insertions(+), 491 deletions(-) create mode 100644 qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupManagingGroupProvider.java create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/addGroupProvider.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html delete mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html delete mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/add.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/groupfile/show.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/managedgroupprovider/add.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/managedgroupprovider/show.js (limited to 'qpid/java') diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupManagingGroupProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupManagingGroupProvider.java new file mode 100644 index 0000000000..a961d77776 --- /dev/null +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/GroupManagingGroupProvider.java @@ -0,0 +1,24 @@ +/* + * 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. + */ +package org.apache.qpid.server.model; + +@ManagedAnnotation +public interface GroupManagingGroupProvider extends ManagedInterface +{ +} diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java index d338dad300..631ed3e8f7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileBasedGroupProvider.java @@ -20,12 +20,13 @@ */ package org.apache.qpid.server.model.adapter; +import org.apache.qpid.server.model.GroupManagingGroupProvider; import org.apache.qpid.server.model.GroupProvider; import org.apache.qpid.server.model.ManagedAttribute; import org.apache.qpid.server.model.ManagedObject; @ManagedObject( category = false, type = "GroupFile" ) -public interface FileBasedGroupProvider> extends GroupProvider +public interface FileBasedGroupProvider> extends GroupProvider, GroupManagingGroupProvider { String PATH="path"; diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/group/GroupProviderImpl.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/group/GroupProviderImpl.java index 6728ba2fed..ecc166f8fc 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/group/GroupProviderImpl.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/group/GroupProviderImpl.java @@ -30,6 +30,7 @@ import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.Group; +import org.apache.qpid.server.model.GroupManagingGroupProvider; import org.apache.qpid.server.model.GroupMember; import org.apache.qpid.server.model.GroupProvider; import org.apache.qpid.server.model.ManagedObject; @@ -38,7 +39,7 @@ import org.apache.qpid.server.model.State; import org.apache.qpid.server.model.StateTransition; @ManagedObject(category = false, type = GroupProviderImpl.CONFIG_TYPE) -public class GroupProviderImpl extends AbstractConfiguredObject implements GroupProvider +public class GroupProviderImpl extends AbstractConfiguredObject implements GroupProvider, GroupManagingGroupProvider { public static final String CONFIG_TYPE = "ManagedGroupProvider"; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addGroupProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addGroupProvider.html new file mode 100644 index 0000000000..b622fe94d2 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addGroupProvider.html @@ -0,0 +1,66 @@ + + +
+
+
+
+
+
+
Name*:
+
+ +
+
+
+
Type*:
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/group/addGroupMember.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/group/addGroupMember.html index 0372468f91..e479e8cb74 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/group/addGroupMember.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/group/addGroupMember.html @@ -30,8 +30,9 @@
- - +
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html index 4fddf727d0..c84e794ac1 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html @@ -23,8 +23,10 @@
- - +
+ + +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html index 8d3431808a..29ce2ebe6c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html @@ -30,8 +30,9 @@
- - +
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html new file mode 100644 index 0000000000..7fc458cd4f --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html @@ -0,0 +1,37 @@ + +
+
+
Path*:
+
+ +
+
+ +
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html new file mode 100644 index 0000000000..740c65fd38 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html @@ -0,0 +1,25 @@ + +
+
+
Path to file:
+
+
+
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html deleted file mode 100644 index d266971ee2..0000000000 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html +++ /dev/null @@ -1,34 +0,0 @@ - -
-
-
Path:
-
-
-
-
-
-
- - -
- -
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html new file mode 100644 index 0000000000..62a6c7537c --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html @@ -0,0 +1,30 @@ + +
+
+
+
+ + +
+
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js index 09473524b5..f739e52665 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js @@ -22,18 +22,24 @@ define(["dojo/_base/xhr", "dojo/parser", "dojo/query", "dojo/_base/connect", + "dojo/_base/array", + "dojo/_base/event", "qpid/common/properties", "qpid/common/updater", "qpid/common/util", + "qpid/common/metadata", "qpid/common/UpdatableStore", "dojox/grid/EnhancedGrid", "dijit/registry", - "dojo/_base/event", "dojox/html/entities", + "dojo/text!showGroupProvider.html", + "qpid/management/addGroupProvider", "dojox/grid/enhanced/plugins/Pagination", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], - function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, event, entities) { + function (xhr, parser, query, connect, array, event, properties, updater, util, metadata, UpdatableStore, + EnhancedGrid, registry, entities, template, addGroupProvider) + { function GroupProvider(name, parent, controller) { this.name = name; @@ -45,38 +51,63 @@ define(["dojo/_base/xhr", return "GroupProvider: " + this.name ; }; - GroupProvider.prototype.open = function(contentPane) { + GroupProvider.prototype.open = function(contentPane) + { var that = this; this.contentPane = contentPane; - xhr.get({url: "showGroupProvider.html", - sync: true, - load: function(data) { - contentPane.containerNode.innerHTML = data; - parser.parse(contentPane.containerNode); - - that.groupProviderAdapter = new GroupProviderUpdater(contentPane.containerNode, that.modelObj, that.controller); - - updater.add( that.groupProviderAdapter ); - - that.groupProviderAdapter.update(); - - var deleteButton = query(".deleteGroupProviderButton", contentPane.containerNode)[0]; - var deleteWidget = registry.byNode(deleteButton); - connect.connect(deleteWidget, "onClick", - function(evt){ - event.stop(evt); - that.deleteGroupProvider(); - }); - }}); + contentPane.containerNode.innerHTML = template; + parser.parse(contentPane.containerNode); + + this.groupProviderUpdater = new GroupProviderUpdater(contentPane.containerNode, this.modelObj, this.controller); + + // load data + this.groupProviderUpdater.update(); + + this.deleteButton = registry.byNode(query(".deleteGroupProviderButton", contentPane.containerNode)[0]); + this.deleteButton.on("click", function(evt){ event.stop(evt); that.deleteGroupProvider(); }); + + this.editButton = registry.byNode(query(".editGroupProviderButton", contentPane.containerNode)[0]); + this.editButton.on("click", function(evt){ event.stop(evt); that.editGroupProvider(); }); + + var type = this.groupProviderUpdater.groupProviderData.type; + var providerDetailsNode = query(".providerDetails", contentPane.containerNode)[0]; + + require(["qpid/management/groupprovider/"+ encodeURIComponent(type.toLowerCase()) + "/show"], + function(DetailsUI) + { + that.groupProviderUpdater.details = new DetailsUI({containerNode: providerDetailsNode, parent: that}); + that.groupProviderUpdater.details.update(that.groupProviderUpdater.groupProviderData); + }); + + var managedInterfaces = metadata.getMetaData("GroupProvider", type).managedInterfaces; + if (managedInterfaces) + { + + var managedInterfaceUI = this.groupProviderUpdater.managedInterfaces; + + array.forEach(managedInterfaces, + function(managedInterface) + { + require(["qpid/management/groupprovider/" + encodeURIComponent(managedInterface)], + function(ManagedInterface) + { + managedInterfaceUI[ManagedInterface] = new ManagedInterface(providerDetailsNode, that.modelObj, that.controller); + managedInterfaceUI[ManagedInterface].update(that.groupProviderUpdater.groupProviderData); + }); + }); + } + + updater.add( this.groupProviderUpdater ); }; + GroupProvider.prototype.close = function() { - updater.remove( this.groupProviderAdapter ); + updater.remove( this.groupProviderUpdater ); }; GroupProvider.prototype.deleteGroupProvider = function() { var warnMessage = ""; - if (this.groupProviderAdapter.groupProviderData && this.groupProviderAdapter.groupProviderData.type.indexOf("File") != -1) + if (this.groupProviderUpdater.groupProviderData && this.groupProviderUpdater.groupProviderData.type.indexOf("File") != -1) { warnMessage = "NOTE: provider deletion will also remove the group file on disk.\n\n"; } @@ -96,7 +127,23 @@ define(["dojo/_base/xhr", util.xhrErrorHandler(this.failureReason); } } - }; + }; + + GroupProvider.prototype.editGroupProvider = function() + { + xhr.get( + { + url: this.groupProviderUpdater.query, + sync: true, + content: { actuals: true }, + handleAs: "json", + load: function(actualData) + { + addGroupProvider.show(actualData[0]); + } + } + ); + } function GroupProviderUpdater(node, groupProviderObj, controller) { @@ -105,27 +152,8 @@ define(["dojo/_base/xhr", this.type = query(".type", node)[0]; this.state = query(".state", node)[0]; this.query = "api/latest/groupprovider/"+encodeURIComponent(groupProviderObj.name); - this.typeUI ={"GroupFile": "FileGroupManager"}; - var that = this; - - xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}) - .then(function(data) - { - that.groupProviderData = data[0]; - - util.flattenStatistics( that.groupProviderData ); - - that.updateHeader(); - - var ui = that.typeUI[that.groupProviderData.type]; - require(["qpid/management/groupprovider/"+ ui], - function(SpecificProvider) { - that.details = new SpecificProvider(query(".providerDetails", node)[0], groupProviderObj, controller); - that.details.update(); - }); - - }); - + this.managedInterfaces = {}; + this.details = null; } GroupProviderUpdater.prototype.updateHeader = function() @@ -138,6 +166,28 @@ define(["dojo/_base/xhr", GroupProviderUpdater.prototype.update = function() { var that = this; + xhr.get({url: this.query, sync: true, handleAs: "json"}).then(function(data) {that._update(data[0]);}); + }; + + GroupProviderUpdater.prototype._update = function(data) + { + this.groupProviderData = data; + util.flattenStatistics( this.groupProviderData ); + this.updateHeader(); + + if (this.details) + { + this.details.update(this.groupProviderData); + } + + for(var managedInterface in this.managedInterfaces) + { + var managedInterfaceUI = this.managedInterfaces[managedInterface]; + if (managedInterfaceUI) + { + managedInterfaceUI.update(this.groupProviderData); + } + } }; return GroupProvider; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js index 82281ad3d3..f158b8ceb6 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js @@ -18,7 +18,7 @@ * under the License. * */ -define(["dojo/_base/lang", +define([ "dojo/_base/xhr", "dojo/dom", "dojo/dom-construct", @@ -26,8 +26,10 @@ define(["dojo/_base/lang", "dojo/parser", "dojo/_base/array", "dojo/_base/event", - 'dojo/_base/json', + 'dojo/json', "qpid/common/util", + "qpid/common/metadata", + "dojo/text!addGroupProvider.html", "dojo/store/Memory", "dojox/validate/us", "dojox/validate/web", @@ -42,140 +44,152 @@ define(["dojo/_base/lang", "dijit/layout/ContentPane", "dojox/layout/TableContainer", "dojo/domReady!"], - function (lang, xhr, dom, construct, registry, parser, array, event, json, util) { - - var addGroupProvider = {}; - - addGroupProvider.show = function(groupProvider) { - var fields = [{ - name: "name", - createWidget: function(groupProvider) { - return new dijit.form.ValidationTextBox({ - required: true, - value: groupProvider.name, - disabled: groupProvider.name ? true : false, - label: "Name*:", - regexp: "^[\x20-\x2e\x30-\x7F]{1,255}$", - promptMessage: "Name of group provider.", - placeHolder: "name", - name: "name"}); - } - }, { - name: "type", - createWidget: function(groupProvider) { - - var typeContainer = construct.create("div"); - - var typeListContainer = new dojox.layout.TableContainer({ - cols: 1, - "labelWidth": "300", - customClass: "formLabel", - showLabels: true, - orientation: "horiz" - }); - - typeContainer.appendChild(typeListContainer.domNode); - - var providers = []; - var fieldSetContainers = {}; - xhr.get({ - url: "service/helper?action=ListGroupProviderAttributes", - handleAs: "json", - sync: true - }).then( - function(data) { - var providerIndex = 0; - - for (var providerType in data) { - if (data.hasOwnProperty(providerType)) { - providers[providerIndex++] = {id: providerType, name: providerType}; - - var attributes = data[providerType].attributes; - var descriptions = data[providerType].descriptions; - - var layout = new dojox.layout.TableContainer( { - cols: 1, - "labelWidth": "300", - customClass: "formLabel", - showLabels: true, - orientation: "horiz" - }); - - for(var i=0; i < attributes.length; i++) { - if ("type" == attributes[i]) - { - continue; - } - var labelValue = attributes[i]; - if (descriptions && descriptions[attributes[i]]) - { - labelValue = descriptions[attributes[i]]; - } - var text = new dijit.form.TextBox({ - label: labelValue + ":", - name: attributes[i] - }); - layout.addChild(text); - } - - typeContainer.appendChild(layout.domNode); - fieldSetContainers[providerType] = layout; - } - } - }); - - var providersStore = new dojo.store.Memory({ data: providers }); - - var typeList = new dijit.form.FilteringSelect({ - required: true, - value: groupProvider.type, - store: providersStore, - label: "Type*:", - name: "type"}); - - typeListContainer.addChild(typeList); - - var onChangeHandler = function onChangeHandler(newValue){ - for (var i in fieldSetContainers) { - var container = fieldSetContainers[i]; - var descendants = container.getChildren(); - for(var i in descendants){ - var descendant = descendants[i]; - var propName = descendant.name; - if (propName) { - descendant.set("disabled", true); - } + function (xhr, dom, construct, registry, parser, array, event, json, util, metadata, template) + { + + var addGroupProvider = + { + init: function() + { + var that=this; + this.containerNode = construct.create("div", {innerHTML: template}); + parser.parse(this.containerNode); + + this.groupProviderName = registry.byId("addGroupProvider.name"); + this.groupProviderName.set("regExpGen", util.nameOrContextVarRegexp); + + this.dialog = registry.byId("addGroupProvider"); + this.addButton = registry.byId("addGroupProvider.addButton"); + this.cancelButton = registry.byId("addGroupProvider.cancelButton"); + this.cancelButton.on("click", function(e){that._cancel(e);}); + this.addButton.on("click", function(e){that._add(e);}); + + this.groupProviderTypeFieldsContainer = dom.byId("addGroupProvider.typeFields"); + this.groupProviderForm = registry.byId("addGroupProvider.form"); + + this.groupProviderType = registry.byId("addGroupProvider.type"); + this.groupProviderType.on("change", function(type){that._groupProviderTypeChanged(type);}); + + var supportedTypes = metadata.getTypesForCategory("GroupProvider"); + supportedTypes.sort(); + var supportedTypesStore = util.makeTypeStore(supportedTypes); + this.groupProviderType.set("store", supportedTypesStore); + }, + show: function(actualData) + { + this.initialData = actualData; + this.groupProviderForm.reset(); + + if (actualData) + { + this._destroyTypeFields(this.containerNode); + this._initFields(actualData); + } + this.groupProviderName.set("disabled", actualData == null ? false : true); + this.groupProviderType.set("disabled", actualData == null ? false : true); + this.dialog.set("title", actualData == null ? "Add Group Provider" : "Edit Group Provider - " + actualData.name) + this.dialog.show(); + }, + _initFields:function(data) + { + var type = data["type"]; + var attributes = metadata.getMetaData("GroupProvider", type).attributes; + for(var name in attributes) + { + var widget = registry.byId("addGroupProvider."+name); + if (widget) + { + widget.set("value", data[name]); } - container.domNode.style.display = "none"; - } - var container = fieldSetContainers[newValue]; - if (container) - { - container.domNode.style.display = "block"; - var descendants = container.getChildren(); - for(var i in descendants){ - var descendant = descendants[i]; - var propName = descendant.name; - if (propName) { - descendant.set("disabled", false); - } + } + }, + _cancel: function(e) + { + event.stop(e); + this.dialog.hide(); + }, + _add: function(e) + { + event.stop(e); + this._submit(); + }, + _submit: function() + { + if (this.groupProviderForm.validate()) + { + var success = false,failureReason=null; + + var groupProviderData = util.getFormWidgetValues(this.groupProviderForm, this.initialData); + var encodedName = encodeURIComponent(this.groupProviderName.value); + var jsonString = json.stringify(groupProviderData); + + try { + xhr.put( + { + url: "api/latest/groupprovider/" + encodedName, + sync: true, + handleAs: "json", + headers: { "Content-Type": "application/json"}, + putData: jsonString, + load: function(x) {success = true; }, + error: function(error) {success = false; failureReason = error;} + }); + } + catch (e) + { + console.warn(e); } - } - }; - typeList.on("change", onChangeHandler); - onChangeHandler(typeList.value); - return new dijit.layout.ContentPane({content: typeContainer, style:{padding: 0}}); - } - }]; - util.showSetAttributesDialog( - fields, - groupProvider ? groupProvider : {}, - "api/latest/groupprovider" + (name ? "/" + encodeURIComponent(name.name) : ""), - groupProvider ? "Edit group provider - " + groupProvider.name : "Add group provider", - "Group", - groupProvider && groupProvider.type ? groupProvider.type : "Group", - groupProvider ? false : true); + if (success == true) + { + this.dialog.hide(); + } + else + { + util.xhrErrorHandler(failureReason); + } + } + else + { + alert('Form contains invalid data. Please correct first'); + } + }, + _groupProviderTypeChanged: function(type) + { + this._destroyTypeFields(this.groupProviderTypeFieldsContainer); + if (type) + { + var that = this; + require([ "qpid/management/groupprovider/" + type.toLowerCase() + "/add"], function(typeUI) + { + try + { + typeUI.show({containerNode: that.groupProviderTypeFieldsContainer, parent: that, data: that.initialData}); + util.applyMetadataToWidgets(that.groupProviderTypeFieldsContainer, "GroupProvider", type); + } + catch(e) + { + console.warn(e); + } + }); + } + }, + _destroyTypeFields: function(typeFieldsContainer) + { + var widgets = registry.findWidgets(typeFieldsContainer); + array.forEach(widgets, function(item) { item.destroyRecursive();}); + construct.empty(typeFieldsContainer); + } }; + + try + { + addGroupProvider.init(); + } + catch(e) + { + console.warn(e); + } return addGroupProvider; + }); \ No newline at end of file diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js index 8f63a8c935..8ac6be04cc 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js @@ -34,11 +34,12 @@ define(["dojo/_base/xhr", "dojox/grid/EnhancedGrid", "dojo/data/ObjectStore", "qpid/management/group/addGroupMember", + "dojox/html/entities", "dojox/grid/enhanced/plugins/Pagination", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], function (xhr, parser, query, registry, connect, event, json, properties, updater, util, formatter, - UpdatableStore, JsonRest, EnhancedGrid, ObjectStore, addGroupMember) { + UpdatableStore, JsonRest, EnhancedGrid, ObjectStore, addGroupMember, entities) { function Group(name, parent, controller) { this.name = name; @@ -78,10 +79,8 @@ define(["dojo/_base/xhr", parser.parse(contentPane.containerNode); that.groupUpdater = new GroupUpdater(contentPane.containerNode, that, that.controller); - - updater.add( that.groupUpdater ); - that.groupUpdater.update(); + updater.add( that.groupUpdater ); var addGroupMemberButton = query(".addGroupMemberButton", contentPane.containerNode)[0]; connect.connect(registry.byNode(addGroupMemberButton), "onClick", @@ -128,7 +127,7 @@ define(["dojo/_base/xhr", "durable", "lifetimePolicy", "type"]); - + this.name.innerHTML = entities.encode(String(groupObj.getGroupName())); this.query = "api/latest/groupmember/"+ encodeURIComponent(groupObj.getGroupProviderName()) + "/" + encodeURIComponent(groupObj.getGroupName()); xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js deleted file mode 100644 index 4ee411633f..0000000000 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js +++ /dev/null @@ -1,262 +0,0 @@ -/* - * - * 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/xhr", - "dojo/dom", - "dojo/parser", - "dojo/query", - "dojo/dom-construct", - "dojo/_base/connect", - "dojo/_base/window", - "dojo/_base/event", - "dojo/_base/json", - "dijit/registry", - "dojox/html/entities", - "qpid/common/util", - "qpid/common/properties", - "qpid/common/updater", - "qpid/common/UpdatableStore", - "dojox/grid/EnhancedGrid", - "dojox/grid/enhanced/plugins/Pagination", - "dojox/grid/enhanced/plugins/IndirectSelection", - "dojox/validate/us", "dojox/validate/web", - "dijit/Dialog", - "dijit/form/TextBox", - "dijit/form/ValidationTextBox", - "dijit/form/TimeTextBox", "dijit/form/Button", - "dijit/form/Form", - "dijit/form/DateTextBox", - "dojo/domReady!"], - function (xhr, dom, parser, query, construct, connect, win, event, json, registry, entities, util, properties, updater, UpdatableStore, EnhancedGrid) { - function DatabaseGroupManager(containerNode, groupProviderObj, controller) { - var node = construct.create("div", null, containerNode, "last"); - var that = this; - this.name = groupProviderObj.name; - xhr.get({url: "groupprovider/showFileGroupManager.html", - sync: true, - load: function(data) { - node.innerHTML = data; - parser.parse(node); - - - that.groupDatabaseUpdater= new GroupProviderUpdater(node, groupProviderObj, controller); - - updater.add( that.groupDatabaseUpdater); - - that.groupDatabaseUpdater.update(); - - - }}); - } - - DatabaseGroupManager.prototype.update = function() { - this.groupDatabaseUpdater.update(); - }; - - DatabaseGroupManager.prototype.close = function() { - updater.remove( this.groupDatabaseUpdater ); - }; - - function GroupProviderUpdater(node, groupProviderObj, controller) - { - this.controller = controller; - this.query = "api/latest/groupprovider/"+encodeURIComponent(groupProviderObj.name); - this.name = groupProviderObj.name; - var that = this; - - xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}) - .then(function(data) { - that.path = query(".path", node)[0]; - that.groupProviderData = data[0]; - - util.flattenStatistics( that.groupProviderData ); - - var groupDiv = query(".groups", node)[0]; - - var gridProperties = { - height: 400, - keepSelection: true, - plugins: { - pagination: { - pageSizes: ["10", "25", "50", "100"], - description: true, - sizeSwitch: true, - pageStepper: true, - gotoButton: true, - maxPageStep: 4, - position: "bottom" - }, - indirectSelection: true - - }}; - - - that.groupsGrid = - new UpdatableStore(that.groupProviderData.groups, groupDiv, - [ { name: "Group Name", field: "name", width: "100%" } - ], function(obj) { - connect.connect(obj.grid, "onRowDblClick", obj.grid, - function(evt){ - var idx = evt.rowIndex, - theItem = this.getItem(idx); - var name = obj.dataStore.getValue(theItem,"name"); - that.controller.show("group", name, groupProviderObj, theItem.id); - }); - }, gridProperties, EnhancedGrid); - - - var addGroupButton = query(".addGroupButton", node)[0]; - connect.connect(registry.byNode(addGroupButton), "onClick", function(evt){ addGroup.show(groupProviderObj.name) }); - - var deleteGroupButton = query(".deleteGroupButton", node)[0]; - var deleteWidget = registry.byNode(deleteGroupButton); - connect.connect(deleteWidget, "onClick", - function(evt){ - event.stop(evt); - that.deleteGroups(); - }); - }); - } - - GroupProviderUpdater.prototype.deleteGroups = function() - { - var grid = this.groupsGrid.grid; - var data = grid.selection.getSelected(); - if(data.length) { - var that = this; - if(confirm("Delete " + data.length + " groups?")) { - var i, queryParam; - for(i = 0; i
- +
- + +
-- cgit v1.2.1