diff options
| author | Alex Rudyy <orudyy@apache.org> | 2013-04-19 15:50:21 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2013-04-19 15:50:21 +0000 |
| commit | d792f4deff8d3ce6b4672c7156ad56eb4438c01d (patch) | |
| tree | 168c7f96f14cd252a237adfd83a7acb968c59715 /qpid/java/broker-plugins | |
| parent | 31524543f12e083c30d55b72b5ade680ab3f48ae (diff) | |
| download | qpid-python-d792f4deff8d3ce6b4672c7156ad56eb4438c01d.tar.gz | |
QPID-4752: Make the GroupProvider a full broker-level configuration entry instead of a broker attribute.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1469916 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
9 files changed, 376 insertions, 27 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java index a77096fbe8..626dfa1d6c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java @@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.qpid.server.management.plugin.servlet.rest.action.ListAuthenticationProviderAttributes; +import org.apache.qpid.server.management.plugin.servlet.rest.action.ListGroupProviderAttributes; import org.apache.qpid.server.management.plugin.servlet.rest.action.ListMessageStoreTypes; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; @@ -52,6 +53,8 @@ public class HelperServlet extends AbstractServlet _actions.put(listProviderAttributes.getName(), listProviderAttributes); Action listMessageStoreTypes = new ListMessageStoreTypes(); _actions.put(listMessageStoreTypes.getName(), listMessageStoreTypes); + Action groupProviderAttributes = new ListGroupProviderAttributes(); + _actions.put(groupProviderAttributes.getName(), groupProviderAttributes); } @Override diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java new file mode 100644 index 0000000000..d1414faa71 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java @@ -0,0 +1,76 @@ +/* + * 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.management.plugin.servlet.rest.action; + +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; + +import org.apache.qpid.server.management.plugin.servlet.rest.Action; +import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.plugin.GroupManagerFactory; +import org.apache.qpid.server.plugin.QpidServiceLoader; + +public class ListGroupProviderAttributes implements Action +{ + private static final String ATTRIBUTES = "attributes"; + private static final String DESCRIPTIONS = "descriptions"; + private Map<String, GroupManagerFactory> _factories; + + public ListGroupProviderAttributes() + { + _factories = new TreeMap<String, GroupManagerFactory>(); + Iterable<GroupManagerFactory> factories = new QpidServiceLoader<GroupManagerFactory>() + .instancesOf(GroupManagerFactory.class); + for (GroupManagerFactory factory : factories) + { + _factories.put(factory.getType(), factory); + } + } + + @Override + public String getName() + { + return ListGroupProviderAttributes.class.getSimpleName(); + } + + @Override + public Object perform(Map<String, Object> request, Broker broker) + { + Map<String, Object> attributes = new TreeMap<String, Object>(); + for (String providerType : _factories.keySet()) + { + GroupManagerFactory factory = _factories.get(providerType); + + Map<String, Object> data = new HashMap<String, Object>(); + data.put(ATTRIBUTES, factory.getAttributeNames()); + Map<String, String> resources = factory.getAttributeDescriptions(); + if (resources != null) + { + data.put(DESCRIPTIONS, resources); + } + + attributes.put(factory.getType(), data); + } + return attributes; + } + +} 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 index 734e8b5419..5055cbdc47 100644 --- 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 @@ -19,6 +19,8 @@ - --> <div class="FileGroupManager"> + <span style="">Path:</span><span class="path" style="position:absolute; left:6em"></span> + <br/> <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Groups'"> <div class="groups"></div> <button data-dojo-type="dijit.form.Button" class="addGroupButton">Add Group</button> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js index 73936b7b3c..e5631745a8 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js @@ -32,6 +32,7 @@ define(["dojo/_base/xhr", "qpid/management/addVirtualHost", "qpid/management/addPort", "qpid/management/addKeystore", + "qpid/management/addGroupProvider", "dojox/grid/enhanced/plugins/Pagination", "dojox/grid/enhanced/plugins/IndirectSelection", "dijit/layout/AccordionContainer", @@ -42,7 +43,7 @@ define(["dojo/_base/xhr", "dijit/form/CheckBox", "dojo/store/Memory", "dojo/domReady!"], - function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, addAuthenticationProvider, addVirtualHost, addPort, addKeystore) { + function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, addAuthenticationProvider, addVirtualHost, addPort, addKeystore, addGroupProvider) { function Broker(name, parent, controller) { this.name = name; @@ -88,16 +89,6 @@ define(["dojo/_base/xhr", name: "aclFile"}) } }, { - name: "groupFile", - createWidget: function(brokerData) - { - return new dijit.form.ValidationTextBox({ - required: false, - value: brokerData.groupFile, - label: "Group file location:", - name: "groupFile"}); - } - }, { name: "statisticsReportingPeriod", createWidget: function(brokerData) { return new dijit.form.ValidationTextBox({ @@ -453,6 +444,35 @@ define(["dojo/_base/xhr", "Are you sure you want to delete trust store"); } ); + + var addGroupProviderButton = query(".addGroupProvider", contentPane.containerNode)[0]; + connect.connect(registry.byNode(addGroupProviderButton), "onClick", + function(evt){addGroupProvider.show();}); + + var deleteGroupProvider = query(".deleteGroupProvider", contentPane.containerNode)[0]; + connect.connect(registry.byNode(deleteGroupProvider), "onClick", + function(evt){ + var warning = ""; + var data = that.brokerUpdater.groupProvidersGrid.grid.selection.getSelected(); + if(data.length && data.length > 0) + { + for(var i = 0; i<data.length; i++) + { + if (data[i].type.indexOf("File") != -1) + { + warning = "NOTE: provider deletion will also remove the group file on disk.\n\n" + break; + } + } + } + + util.deleteGridSelections( + that.brokerUpdater, + that.brokerUpdater.groupProvidersGrid.grid, + "rest/groupprovider", + warning + "Are you sure you want to delete group provider"); + } + ); }}); }; @@ -559,7 +579,7 @@ define(["dojo/_base/xhr", that.keyStoresGrid = new UpdatableStore(that.brokerData.keystores, query(".broker-key-stores")[0], [ { name: "Name", field: "name", width: "20%"}, - { name: "Path", field: "path", width: "50%"}, + { name: "Path", field: "path", width: "40%"}, { name: "Type", field: "type", width: "5%"}, { name: "Key Manager Algorithm", field: "keyManagerFactoryAlgorithm", width: "20%"}, { name: "Alias", field: "certificateAlias", width: "15%"} @@ -576,10 +596,10 @@ define(["dojo/_base/xhr", that.trustStoresGrid = new UpdatableStore(that.brokerData.truststores, query(".broker-trust-stores")[0], [ { name: "Name", field: "name", width: "20%"}, - { name: "Path", field: "path", width: "50%"}, + { name: "Path", field: "path", width: "40%"}, { name: "Type", field: "type", width: "5%"}, - { name: "Trust Manager Algorithm", field: "trustManagerFactoryAlgorithm", width: "20%"}, - { name: "Peers only", field: "peersOnly", width: "15%", + { name: "Trust Manager Algorithm", field: "trustManagerFactoryAlgorithm", width: "25%"}, + { name: "Peers only", field: "peersOnly", width: "10%", formatter: function(val){ return "<input type='radio' disabled='disabled' "+(val ? "checked='checked'": "")+" />"; } @@ -593,6 +613,19 @@ define(["dojo/_base/xhr", that.controller.show("truststore", name, brokerObj); }); }, gridProperties, EnhancedGrid); + that.groupProvidersGrid = + new UpdatableStore(that.brokerData.groupproviders, query(".broker-group-providers")[0], + [ { name: "Name", field: "name", width: "50%"}, + { name: "Type", field: "type", width: "50%"} + ], 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("groupprovider", name, brokerObj); + }); + }, gridProperties, EnhancedGrid); }); @@ -688,6 +721,10 @@ define(["dojo/_base/xhr", { that.trustStoresGrid.update(that.brokerData.truststores); } + if (that.groupProvidersGrid) + { + that.groupProvidersGrid.update(that.brokerData.groupproviders); + } }); 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 4e05f4b0ea..98e01773ef 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 @@ -27,10 +27,12 @@ define(["dojo/_base/xhr", "qpid/common/util", "qpid/common/UpdatableStore", "dojox/grid/EnhancedGrid", + "dijit/registry", + "dojo/_base/event", "dojox/grid/enhanced/plugins/Pagination", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], - function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid) { + function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, event) { function GroupProvider(name, parent, controller) { this.name = name; @@ -43,7 +45,7 @@ define(["dojo/_base/xhr", } GroupProvider.prototype.getTitle = function() { - return "GroupProvider"; + return "GroupProvider: " + this.name ; }; GroupProvider.prototype.open = function(contentPane) { @@ -61,6 +63,13 @@ define(["dojo/_base/xhr", 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(); + }); }}); }; @@ -68,12 +77,37 @@ define(["dojo/_base/xhr", updater.remove( this.groupProviderAdapter ); }; + GroupProvider.prototype.deleteGroupProvider = function() { + var warnMessage = ""; + if (this.groupProviderAdapter.groupProviderData && this.groupProviderAdapter.groupProviderData.type.indexOf("File") != -1) + { + warnMessage = "NOTE: provider deletion will also remove the group file on disk.\n\n"; + } + if(confirm(warnMessage + "Are you sure you want to delete group provider '" + this.name + "'?")) { + var query = "rest/groupprovider/" +encodeURIComponent(this.name); + this.success = true + var that = this; + xhr.del({url: query, sync: true, handleAs: "json"}).then( + function(data) { + that.close(); + that.contentPane.onClose() + that.controller.tabContainer.removeChild(that.contentPane); + that.contentPane.destroyRecursive(); + }, + function(error) {that.success = false; that.failureReason = error;}); + if(!this.success ) { + alert("Error:" + this.failureReason); + } + } + }; + function GroupProviderUpdater(node, groupProviderObj, controller) { this.controller = controller; this.name = query(".name", node)[0]; + this.type = query(".type", node)[0]; this.query = "rest/groupprovider/"+encodeURIComponent(groupProviderObj.name); - + this.typeUI ={"GroupFile": "FileGroupManager"}; var that = this; xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}) @@ -85,9 +119,10 @@ define(["dojo/_base/xhr", that.updateHeader(); - require(["qpid/management/groupprovider/"+that.groupProviderData.type], + var ui = that.typeUI[that.groupProviderData.type]; + require(["qpid/management/groupprovider/"+ ui], function(SpecificProvider) { - that.details = new SpecificProvider(node, groupProviderObj, controller); + that.details = new SpecificProvider(query(".providerDetails", node)[0], groupProviderObj, controller); that.details.update(); }); @@ -98,6 +133,7 @@ define(["dojo/_base/xhr", GroupProviderUpdater.prototype.updateHeader = function() { this.name.innerHTML = this.groupProviderData[ "name" ]; + this.type.innerHTML = this.groupProviderData[ "type" ]; }; GroupProviderUpdater.prototype.update = function() 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 new file mode 100644 index 0000000000..c8cd33fd6a --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js @@ -0,0 +1,177 @@ +/* + * + * 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/_base/xhr", + "dojo/dom", + "dojo/dom-construct", + "dijit/registry", + "dojo/parser", + "dojo/_base/array", + "dojo/_base/event", + 'dojo/_base/json', + "qpid/common/util", + "dojo/store/Memory", + "dojox/validate/us", + "dojox/validate/web", + "dijit/Dialog", + "dijit/form/CheckBox", + "dijit/form/Textarea", + "dijit/form/ComboBox", + "dijit/form/TextBox", + "dijit/form/ValidationTextBox", + "dijit/form/Button", + "dijit/form/Form", + "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}$", + 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: "rest/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); + } + } + 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); + } + } + } + }; + typeList.on("change", onChangeHandler); + onChangeHandler(typeList.value); + return new dijit.layout.ContentPane({content: typeContainer, style:{padding: 0}}); + } + }]; + + util.showSetAttributesDialog( + fields, + groupProvider ? groupProvider : {}, + "rest/groupprovider" + (name ? "/" + encodeURIComponent(name.name) : ""), + groupProvider ? "Edit group provider - " + groupProvider.name : "Add group provider", + groupProvider ? false : true); + }; + return addGroupProvider; + });
\ No newline at end of file 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 index 44fc9702e2..02276b8713 100644 --- 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 @@ -82,11 +82,12 @@ define(["dojo/_base/xhr", 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")[0]; + var groupDiv = query(".groups", node)[0]; var gridProperties = { height: 400, @@ -109,7 +110,15 @@ define(["dojo/_base/xhr", that.groupsGrid = new UpdatableStore(that.groupProviderData.groups, groupDiv, [ { name: "Group Name", field: "name", width: "100%" } - ], null, gridProperties, EnhancedGrid); + ], 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); + }); + }, gridProperties, EnhancedGrid); var addGroupButton = query(".addGroupButton", node)[0]; @@ -167,6 +176,7 @@ define(["dojo/_base/xhr", xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}) .then(function(data) { that.groupProviderData = data[0]; + that.path.innerHTML = that.groupProviderData.path; util.flattenStatistics( that.groupProviderData ); that.groupsGrid.update(that.groupProviderData.groups); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html index 9e267f0d5d..4acf42da46 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html @@ -65,10 +65,6 @@ <div class="formLabel-labelCell" style="float:left; width: 250px;">ACL file location:</div> <div id="brokerAttribute.aclFile" style="float:left;"></div> </div> - <div id="brokerAttribute.groupFile.container" style="display: none; clear:both"> - <div class="formLabel-labelCell" style="float:left; width: 250px;">Group file location:</div> - <div id="brokerAttribute.groupFile" style="float:left;"></div> - </div> <div id="brokerAttribute.statisticsReportingPeriod.container" style="display: none; clear:both"> <div class="formLabel-labelCell" style="float:left; width: 250px;">Statistics reporting period:</div> <div id="brokerAttribute.statisticsReportingPeriod" style="float:left;"></div> @@ -189,6 +185,12 @@ <button data-dojo-type="dijit.form.Button" class="deleteTruststore">Delete Trust Store</button> </div> <br/> + <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Group Providers'"> + <div class="broker-group-providers"></div> + <button data-dojo-type="dijit.form.Button" class="addGroupProvider">Add Group Provider</button> + <button data-dojo-type="dijit.form.Button" class="deleteGroupProvider">Delete Group Provider</button> + </div> + <br/> <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Log File', open: false"> <div class="broker-logfile"></div> </div> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html index 914857db5c..332c7f5eaa 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html @@ -22,4 +22,10 @@ <span style="">Name:</span><span class="name" style="position:absolute; left:6em"></span> <br/> <span style="">Type:</span><span class="type" style="position:absolute; left:6em"></span> -</div>
\ No newline at end of file + <br/> + <div class="providerDetails"></div> + <div class="dijitDialogPaneActionBar"> + <input class="deleteGroupProviderButton" type="button" value="Delete Group provider" label="Delete Group Provider" dojoType="dijit.form.Button" /> + </div> +</div> +<br/>
\ No newline at end of file |
