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 2013/04/19 17:50:22 UTC
svn commit: r1469916 [1/2] - in /qpid/trunk/qpid/java:
broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/
broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/res...
Author: orudyy
Date: Fri Apr 19 15:50:21 2013
New Revision: 1469916
URL: http://svn.apache.org/r1469916
Log:
QPID-4752: Make the GroupProvider a full broker-level configuration entry instead of a broker attribute.
Added:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderFactory.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupProviderAttributeDescriptions.properties
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html
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/js/qpid/management/GroupProvider.js
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/GroupProviderRecoverer.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManager.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupManager.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/GroupProviderRecovererTest.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupManagerFactoryTest.java
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupManagerTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/security/acl/AbstractACLTestCase.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestHttpsTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupProviderRestTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/GroupRestTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/BrokerACLTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/GroupRestACLTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/acl/UserRestACLTest.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/TestBrokerConfiguration.java
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java Fri Apr 19 15:50:21 2013
@@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletReq
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 Abstr
_actions.put(listProviderAttributes.getName(), listProviderAttributes);
Action listMessageStoreTypes = new ListMessageStoreTypes();
_actions.put(listMessageStoreTypes.getName(), listMessageStoreTypes);
+ Action groupProviderAttributes = new ListGroupProviderAttributes();
+ _actions.put(groupProviderAttributes.getName(), groupProviderAttributes);
}
@Override
Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java?rev=1469916&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java Fri Apr 19 15:50:21 2013
@@ -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;
+ }
+
+}
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html Fri Apr 19 15:50:21 2013
@@ -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>
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=1469916&r1=1469915&r2=1469916&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 Fri Apr 19 15:50:21 2013
@@ -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);
+ }
});
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js Fri Apr 19 15:50:21 2013
@@ -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()
Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js?rev=1469916&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js Fri Apr 19 15:50:21 2013
@@ -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
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js Fri Apr 19 15:50:21 2013
@@ -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);
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=1469916&r1=1469915&r2=1469916&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 Fri Apr 19 15:50:21 2013
@@ -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>
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showGroupProvider.html Fri Apr 19 15:50:21 2013
@@ -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
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java Fri Apr 19 15:50:21 2013
@@ -39,10 +39,10 @@ import org.apache.qpid.server.model.Auth
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.KeyStore;
-import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.TrustStore;
import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
import org.apache.qpid.server.model.adapter.BrokerAdapter;
+import org.apache.qpid.server.model.adapter.GroupProviderFactory;
import org.apache.qpid.server.model.adapter.PortFactory;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
@@ -57,11 +57,13 @@ public class BrokerRecoverer implements
private final PortFactory _portFactory;
private final TaskExecutor _taskExecutor;
private final BrokerOptions _brokerOptions;
+ private final GroupProviderFactory _groupProviderFactory;
- public BrokerRecoverer(AuthenticationProviderFactory authenticationProviderFactory, PortFactory portFactory,
- StatisticsGatherer statisticsGatherer, VirtualHostRegistry virtualHostRegistry, LogRecorder logRecorder,
- RootMessageLogger rootMessageLogger, TaskExecutor taskExecutor, BrokerOptions brokerOptions)
+ public BrokerRecoverer(AuthenticationProviderFactory authenticationProviderFactory, GroupProviderFactory groupProviderFactory,
+ PortFactory portFactory, StatisticsGatherer statisticsGatherer, VirtualHostRegistry virtualHostRegistry,
+ LogRecorder logRecorder, RootMessageLogger rootMessageLogger, TaskExecutor taskExecutor, BrokerOptions brokerOptions)
{
+ _groupProviderFactory = groupProviderFactory;
_portFactory = portFactory;
_authenticationProviderFactory = authenticationProviderFactory;
_statisticsGatherer = statisticsGatherer;
@@ -77,7 +79,8 @@ public class BrokerRecoverer implements
{
StoreConfigurationChangeListener storeChangeListener = new StoreConfigurationChangeListener(entry.getStore());
BrokerAdapter broker = new BrokerAdapter(entry.getId(), entry.getAttributes(), _statisticsGatherer, _virtualHostRegistry,
- _logRecorder, _rootMessageLogger, _authenticationProviderFactory, _portFactory, _taskExecutor, entry.getStore(), _brokerOptions);
+ _logRecorder, _rootMessageLogger, _authenticationProviderFactory, _groupProviderFactory, _portFactory,
+ _taskExecutor, entry.getStore(), _brokerOptions);
broker.addChangeListener(storeChangeListener);
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/DefaultRecovererProvider.java Fri Apr 19 15:50:21 2013
@@ -34,6 +34,7 @@ import org.apache.qpid.server.model.Port
import org.apache.qpid.server.model.TrustStore;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
+import org.apache.qpid.server.model.adapter.GroupProviderFactory;
import org.apache.qpid.server.model.adapter.PortFactory;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
@@ -52,7 +53,7 @@ public class DefaultRecovererProvider im
private final RootMessageLogger _rootMessageLogger;
private final AuthenticationProviderFactory _authenticationProviderFactory;
private final PortFactory _portFactory;
- private final QpidServiceLoader<GroupManagerFactory> _groupManagerServiceLoader;
+ private final GroupProviderFactory _groupProviderFactory;
private final QpidServiceLoader<PluginFactory> _pluginFactoryServiceLoader;
private final TaskExecutor _taskExecutor;
private final BrokerOptions _brokerOptions;
@@ -61,12 +62,12 @@ public class DefaultRecovererProvider im
LogRecorder logRecorder, RootMessageLogger rootMessageLogger, TaskExecutor taskExecutor, BrokerOptions brokerOptions)
{
_authenticationProviderFactory = new AuthenticationProviderFactory(new QpidServiceLoader<AuthenticationManagerFactory>());
+ _groupProviderFactory = new GroupProviderFactory(new QpidServiceLoader<GroupManagerFactory>());
_portFactory = new PortFactory();
_brokerStatisticsGatherer = brokerStatisticsGatherer;
_virtualHostRegistry = virtualHostRegistry;
_logRecorder = logRecorder;
_rootMessageLogger = rootMessageLogger;
- _groupManagerServiceLoader = new QpidServiceLoader<GroupManagerFactory>();
_pluginFactoryServiceLoader = new QpidServiceLoader<PluginFactory>();
_taskExecutor = taskExecutor;
_brokerOptions = brokerOptions;
@@ -77,7 +78,7 @@ public class DefaultRecovererProvider im
{
if (Broker.class.getSimpleName().equals(type))
{
- return new BrokerRecoverer(_authenticationProviderFactory, _portFactory, _brokerStatisticsGatherer, _virtualHostRegistry,
+ return new BrokerRecoverer(_authenticationProviderFactory, _groupProviderFactory, _portFactory, _brokerStatisticsGatherer, _virtualHostRegistry,
_logRecorder, _rootMessageLogger, _taskExecutor, _brokerOptions);
}
else if(VirtualHost.class.getSimpleName().equals(type))
@@ -94,7 +95,7 @@ public class DefaultRecovererProvider im
}
else if(GroupProvider.class.getSimpleName().equals(type))
{
- return new GroupProviderRecoverer(_groupManagerServiceLoader);
+ return new GroupProviderRecoverer(_groupProviderFactory);
}
else if(KeyStore.class.getSimpleName().equals(type))
{
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/GroupProviderRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/GroupProviderRecoverer.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/GroupProviderRecoverer.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/GroupProviderRecoverer.java Fri Apr 19 15:50:21 2013
@@ -24,24 +24,20 @@ import java.util.Map;
import org.apache.qpid.server.configuration.ConfigurationEntry;
import org.apache.qpid.server.configuration.ConfiguredObjectRecoverer;
-import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.configuration.RecovererProvider;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.GroupProvider;
-import org.apache.qpid.server.model.adapter.GroupProviderAdapter;
-import org.apache.qpid.server.plugin.GroupManagerFactory;
-import org.apache.qpid.server.plugin.QpidServiceLoader;
-import org.apache.qpid.server.security.group.GroupManager;
+import org.apache.qpid.server.model.adapter.GroupProviderFactory;
public class GroupProviderRecoverer implements ConfiguredObjectRecoverer<GroupProvider>
{
- private QpidServiceLoader<GroupManagerFactory> _groupManagerServiceLoader;
+ private GroupProviderFactory _groupProviderFactory;
- public GroupProviderRecoverer(QpidServiceLoader<GroupManagerFactory> groupManagerServiceLoader)
+ public GroupProviderRecoverer(GroupProviderFactory groupProviderFactory)
{
super();
- _groupManagerServiceLoader = groupManagerServiceLoader;
+ _groupProviderFactory = groupProviderFactory;
}
@Override
@@ -49,26 +45,9 @@ public class GroupProviderRecoverer impl
{
Broker broker = RecovererHelper.verifyOnlyBrokerIsParent(parents);
Map<String, Object> attributes = configurationEntry.getAttributes();
- GroupManager groupManager = createGroupManager(attributes);
- if (groupManager == null)
- {
- throw new IllegalConfigurationException("Cannot create GroupManager from attributes : " + attributes);
- }
- GroupProviderAdapter groupProviderAdapter = new GroupProviderAdapter(configurationEntry.getId(), groupManager, broker);
- return groupProviderAdapter;
- }
- private GroupManager createGroupManager(Map<String, Object> attributes)
- {
- for(GroupManagerFactory factory : _groupManagerServiceLoader.instancesOf(GroupManagerFactory.class))
- {
- GroupManager groupManager = factory.createInstance(attributes);
- if (groupManager != null)
- {
- return groupManager;
- }
- }
- return null;
- }
+ GroupProvider groupProvider = _groupProviderFactory.recover(configurationEntry.getId(), broker, attributes);
+ return groupProvider;
+ }
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java Fri Apr 19 15:50:21 2013
@@ -86,12 +86,6 @@ public interface Broker extends Configur
*/
String ACL_FILE = "aclFile";
- /*
- * A temporary attributes to set the broker group file.
- * TODO: Remove them after adding a full support to configure authorization providers via management layers.
- */
- String GROUP_FILE = "groupFile";
-
// Attributes
Collection<String> AVAILABLE_ATTRIBUTES =
Collections.unmodifiableList(
@@ -134,7 +128,6 @@ public interface Broker extends Configur
VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN,
VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE,
VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_WARN,
- GROUP_FILE,
ACL_FILE
));
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Fri Apr 19 15:50:21 2013
@@ -63,8 +63,6 @@ import org.apache.qpid.server.security.S
import org.apache.qpid.server.security.access.Operation;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
import org.apache.qpid.server.security.auth.manager.SimpleAuthenticationManager;
-import org.apache.qpid.server.security.group.FileGroupManager;
-import org.apache.qpid.server.security.group.GroupManager;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.store.MessageStoreCreator;
import org.apache.qpid.server.util.MapValueConverter;
@@ -97,7 +95,6 @@ public class BrokerAdapter extends Abstr
put(NAME, String.class);
put(DEFAULT_VIRTUAL_HOST, String.class);
- put(GROUP_FILE, String.class);
put(VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_CLOSE, Long.class);
put(VIRTUALHOST_STORE_TRANSACTION_IDLE_TIMEOUT_WARN, Long.class);
put(VIRTUALHOST_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE, Long.class);
@@ -123,7 +120,6 @@ public class BrokerAdapter extends Abstr
public static final long DEFAULT_STORE_TRANSACTION_IDLE_TIMEOUT_WARN = 0l;
public static final long DEFAULT_STORE_TRANSACTION_OPEN_TIMEOUT_CLOSE = 0l;
public static final long DEFAULT_STORE_TRANSACTION_OPEN_TIMEOUT_WARN = 0l;
- private static final String DEFAULT_GROUP_PROVIDER_NAME = "defaultGroupProvider";
@SuppressWarnings("serial")
private static final Map<String, Object> DEFAULTS = Collections.unmodifiableMap(new HashMap<String, Object>(){{
@@ -170,6 +166,7 @@ public class BrokerAdapter extends Abstr
private final Map<String, KeyStore> _keyStores = new HashMap<String, KeyStore>();
private final Map<String, TrustStore> _trustStores = new HashMap<String, TrustStore>();
+ private final GroupProviderFactory _groupProviderFactory;
private final AuthenticationProviderFactory _authenticationProviderFactory;
private final PortFactory _portFactory;
@@ -183,7 +180,8 @@ public class BrokerAdapter extends Abstr
public BrokerAdapter(UUID id, Map<String, Object> attributes, StatisticsGatherer statisticsGatherer, VirtualHostRegistry virtualHostRegistry,
LogRecorder logRecorder, RootMessageLogger rootMessageLogger, AuthenticationProviderFactory authenticationProviderFactory,
- PortFactory portFactory, TaskExecutor taskExecutor, ConfigurationEntryStore brokerStore, BrokerOptions brokerOptions)
+ GroupProviderFactory groupProviderFactory, PortFactory portFactory, TaskExecutor taskExecutor, ConfigurationEntryStore brokerStore,
+ BrokerOptions brokerOptions)
{
super(id, DEFAULTS, MapValueConverter.convert(attributes, ATTRIBUTE_TYPES), taskExecutor);
_statisticsGatherer = statisticsGatherer;
@@ -192,14 +190,13 @@ public class BrokerAdapter extends Abstr
_rootMessageLogger = rootMessageLogger;
_statistics = new StatisticsAdapter(statisticsGatherer);
_authenticationProviderFactory = authenticationProviderFactory;
+ _groupProviderFactory = groupProviderFactory;
_portFactory = portFactory;
_securityManager = new SecurityManager((String)getAttribute(ACL_FILE));
addChangeListener(_securityManager);
- createBrokerChildrenFromAttributes();
_supportedStoreTypes = new MessageStoreCreator().getStoreTypes();
_brokerStore = brokerStore;
_brokerOptions = brokerOptions;
- createBrokerChildrenFromAttributes();
if (_brokerOptions.isManagementMode())
{
AuthenticationManager authManager = new SimpleAuthenticationManager(BrokerOptions.MANAGEMENT_MODE_USER_NAME, _brokerOptions.getManagementModePassword());
@@ -209,32 +206,6 @@ public class BrokerAdapter extends Abstr
}
}
- /*
- * A temporary method to create broker children that can be only configured via broker attributes
- */
- private void createBrokerChildrenFromAttributes()
- {
- createGroupProvider();
-
- }
-
- private void createGroupProvider()
- {
- String groupFile = (String) getAttribute(GROUP_FILE);
- if (groupFile != null)
- {
- GroupManager groupManager = new FileGroupManager(groupFile);
- UUID groupProviderId = UUIDGenerator.generateBrokerChildUUID(GroupProvider.class.getSimpleName(),
- DEFAULT_GROUP_PROVIDER_NAME);
- GroupProviderAdapter groupProviderAdapter = new GroupProviderAdapter(groupProviderId, groupManager, this);
- _groupProviders.put(DEFAULT_GROUP_PROVIDER_NAME, groupProviderAdapter);
- }
- else
- {
- _groupProviders.remove(DEFAULT_GROUP_PROVIDER_NAME);
- }
- }
-
public Collection<VirtualHost> getVirtualHosts()
{
synchronized(_vhostAdapters)
@@ -462,6 +433,10 @@ public class BrokerAdapter extends Abstr
{
return (C) createTrustStore(attributes);
}
+ else if(childClass == GroupProvider.class)
+ {
+ return (C) createGroupProvider(attributes);
+ }
else
{
throw new IllegalArgumentException("Cannot create child of class " + childClass.getSimpleName());
@@ -535,6 +510,14 @@ public class BrokerAdapter extends Abstr
authenticationProvider.addChangeListener(this);
}
+ private GroupProvider createGroupProvider(Map<String, Object> attributes)
+ {
+ GroupProvider groupProvider = _groupProviderFactory.create(UUID.randomUUID(), this, attributes);
+ groupProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
+ addGroupProvider(groupProvider);
+ return groupProvider;
+ }
+
private void addGroupProvider(GroupProvider groupProvider)
{
synchronized (_groupProviders)
@@ -549,9 +532,20 @@ public class BrokerAdapter extends Abstr
groupProvider.addChangeListener(this);
}
- private boolean deleteGroupProvider(GroupProvider object)
+ private boolean deleteGroupProvider(GroupProvider groupProvider)
{
- throw new UnsupportedOperationException("Not implemented yet!");
+ GroupProvider removedGroupProvider = null;
+ synchronized (_groupProviders)
+ {
+ removedGroupProvider = _groupProviders.remove(groupProvider.getName());
+ }
+
+ if(removedGroupProvider != null)
+ {
+ removedGroupProvider.removeChangeListener(this);
+ }
+
+ return removedGroupProvider != null;
}
private KeyStore createKeyStore(Map<String, Object> attributes)
@@ -724,6 +718,12 @@ public class BrokerAdapter extends Abstr
{
removedPort = _portAdapters.remove(portAdapter.getPort());
}
+
+ if (removedPort != null)
+ {
+ removedPort.removeChangeListener(this);
+ }
+
return removedPort != null;
}
@@ -734,6 +734,12 @@ public class BrokerAdapter extends Abstr
{
removedAuthenticationProvider = _authenticationProviders.remove(authenticationProvider.getId());
}
+
+ if(removedAuthenticationProvider != null)
+ {
+ removedAuthenticationProvider.removeChangeListener(this);
+ }
+
return removedAuthenticationProvider != null;
}
@@ -1030,11 +1036,6 @@ public class BrokerAdapter extends Abstr
Object expected = getAttribute(name);
if (changeAttribute(name, expected, desired))
{
- if (GROUP_FILE.equals(name))
- {
- createGroupProvider();
- }
-
attributeSet(name, expected, desired);
}
}
@@ -1049,12 +1050,6 @@ public class BrokerAdapter extends Abstr
// create a security manager to validate the ACL specified in file
new SecurityManager(aclFile);
}
- String groupFile = (String) convertedAttributes.get(GROUP_FILE);
- if (groupFile != null)
- {
- // create a group manager to validate the groups specified in file
- new FileGroupManager(groupFile);
- }
String defaultVirtualHost = (String) convertedAttributes.get(DEFAULT_VIRTUAL_HOST);
if (defaultVirtualHost != null)
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderAdapter.java Fri Apr 19 15:50:21 2013
@@ -24,6 +24,7 @@ import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
@@ -48,9 +49,11 @@ public class GroupProviderAdapter extend
{
private final GroupManager _groupManager;
private final Broker _broker;
- public GroupProviderAdapter(UUID id, GroupManager groupManager, Broker broker)
+ private Collection<String> _supportedAttributes;
+
+ public GroupProviderAdapter(UUID id, Broker broker, GroupManager groupManager, Map<String, Object> attributes, Collection<String> attributeNames)
{
- super(id, broker.getTaskExecutor());
+ super(id, null, null, broker.getTaskExecutor());
if (groupManager == null)
{
@@ -58,13 +61,37 @@ public class GroupProviderAdapter extend
}
_groupManager = groupManager;
_broker = broker;
+ _supportedAttributes = createSupportedAttributes(attributeNames);
addParent(Broker.class, broker);
+
+ // set attributes now after all attribute names are known
+ if (attributes != null)
+ {
+ for (String name : _supportedAttributes)
+ {
+ if (attributes.containsKey(name))
+ {
+ changeAttribute(name, null, attributes.get(name));
+ }
+ }
+ }
+ }
+
+ protected Collection<String> createSupportedAttributes(Collection<String> factoryAttributes)
+ {
+ List<String> attributesNames = new ArrayList<String>(AVAILABLE_ATTRIBUTES);
+ if (factoryAttributes != null)
+ {
+ attributesNames.addAll(factoryAttributes);
+ }
+
+ return Collections.unmodifiableCollection(attributesNames);
}
@Override
public String getName()
{
- return _groupManager.getClass().getSimpleName();
+ return (String)getAttribute(NAME);
}
@Override
@@ -129,17 +156,13 @@ public class GroupProviderAdapter extend
@Override
public Collection<String> getAttributeNames()
{
- return GroupProvider.AVAILABLE_ATTRIBUTES;
+ return _supportedAttributes;
}
@Override
public Object getAttribute(String name)
{
- if (TYPE.equals(name))
- {
- return getName();
- }
- else if (CREATED.equals(name))
+ if (CREATED.equals(name))
{
// TODO
}
@@ -155,10 +178,6 @@ public class GroupProviderAdapter extend
{
return LifetimePolicy.PERMANENT;
}
- else if (NAME.equals(name))
- {
- return getName();
- }
else if (STATE.equals(name))
{
return State.ACTIVE; // TODO
@@ -220,11 +239,91 @@ public class GroupProviderAdapter extend
}
}
+ public GroupManager getGroupManager()
+ {
+ return _groupManager;
+ }
+
private SecurityManager getSecurityManager()
{
return _broker.getSecurityManager();
}
+ @Override
+ protected boolean setState(State currentState, State desiredState)
+ {
+ if (desiredState == State.ACTIVE)
+ {
+ _groupManager.open();
+ return true;
+ }
+ else if (desiredState == State.STOPPED)
+ {
+ _groupManager.close();
+ return true;
+ }
+ else if (desiredState == State.DELETED)
+ {
+ _groupManager.close();
+ _groupManager.onDelete();
+ return true;
+ }
+ return false;
+ }
+
+ public Set<Principal> getGroupPrincipalsForUser(String username)
+ {
+ return _groupManager.getGroupPrincipalsForUser(username);
+ }
+
+ @Override
+ protected void childAdded(ConfiguredObject child)
+ {
+ // no-op, prevent storing groups in the broker store
+ }
+
+ @Override
+ protected void childRemoved(ConfiguredObject child)
+ {
+ // no-op, as per above, groups are not in the store
+ }
+
+ @Override
+ protected void authoriseSetDesiredState(State currentState, State desiredState) throws AccessControlException
+ {
+ if(desiredState == State.DELETED)
+ {
+ if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), GroupProvider.class, Operation.DELETE))
+ {
+ throw new AccessControlException("Deletion of groups provider is denied");
+ }
+ }
+ }
+
+ @Override
+ protected void authoriseSetAttribute(String name, Object expected, Object desired) throws AccessControlException
+ {
+ if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), GroupProvider.class, Operation.UPDATE))
+ {
+ throw new AccessControlException("Setting of group provider attributes is denied");
+ }
+ }
+
+ @Override
+ protected void authoriseSetAttributes(Map<String, Object> attributes) throws AccessControlException
+ {
+ if (!_broker.getSecurityManager().authoriseConfiguringBroker(getName(), GroupProvider.class, Operation.UPDATE))
+ {
+ throw new AccessControlException("Setting of group provider attributes is denied");
+ }
+ }
+
+ @Override
+ protected void changeAttributes(Map<String, Object> attributes)
+ {
+ throw new UnsupportedOperationException("Changing attributes on group providers is not supported.");
+ }
+
private class GroupAdapter extends AbstractAdapter implements Group
{
private final String _group;
@@ -526,23 +625,5 @@ public class GroupProviderAdapter extend
}
}
- @Override
- protected boolean setState(State currentState, State desiredState)
- {
- if (desiredState == State.ACTIVE)
- {
- return true;
- }
- else if (desiredState == State.STOPPED)
- {
- return true;
- }
- // TODO: DELETE state is ignored for now
- return false;
- }
- public Set<Principal> getGroupPrincipalsForUser(String username)
- {
- return _groupManager.getGroupPrincipalsForUser(username);
- }
}
Added: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderFactory.java?rev=1469916&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderFactory.java (added)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/GroupProviderFactory.java Fri Apr 19 15:50:21 2013
@@ -0,0 +1,118 @@
+/*
+ *
+ * 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.adapter;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.plugin.GroupManagerFactory;
+import org.apache.qpid.server.plugin.QpidServiceLoader;
+import org.apache.qpid.server.security.group.GroupManager;
+
+public class GroupProviderFactory
+{
+ private final Map<String, GroupManagerFactory> _factories;
+ private Collection<String> _supportedGroupProviders;
+
+ public GroupProviderFactory(QpidServiceLoader<GroupManagerFactory> groupManagerFactoryServiceLoader)
+ {
+ Iterable<GroupManagerFactory> factories = groupManagerFactoryServiceLoader.instancesOf(GroupManagerFactory.class);
+
+ Map<String, GroupManagerFactory> registeredGroupProviderFactories = new HashMap<String, GroupManagerFactory>();
+ for (GroupManagerFactory factory : factories)
+ {
+ GroupManagerFactory existingFactory = registeredGroupProviderFactories.put(factory.getType(), factory);
+ if (existingFactory != null)
+ {
+ throw new IllegalConfigurationException("Group provider factory of the same type '" + factory.getType()
+ + "' is already registered using class '" + existingFactory.getClass().getName()
+ + "', can not register class '" + factory.getClass().getName() + "'");
+ }
+ }
+ _factories = registeredGroupProviderFactories;
+ _supportedGroupProviders = Collections.unmodifiableCollection(registeredGroupProviderFactories.keySet());
+ }
+
+ /**
+ * Creates {@link GroupProvider} for given ID, {@link Broker} and attributes.
+ * <p>
+ * The configured {@link GroupManagerFactory}'s are used to try to create the {@link GroupProvider}. The first non-null
+ * instance is returned. The factories are used in non-deterministic order.
+ */
+ public GroupProvider create(UUID id, Broker broker, Map<String, Object> attributes)
+ {
+ GroupProviderAdapter authenticationProvider = createGroupProvider(id, broker, attributes);
+ authenticationProvider.getGroupManager().onCreate();
+ return authenticationProvider;
+ }
+
+ /**
+ * Recovers {@link GroupProvider} with given ID, {@link Broker} and attributes.
+ * <p>
+ * The configured {@link GroupManagerFactory}'s are used to try to create the {@link GroupProvider}. The first non-null
+ * instance is returned. The factories are used in non-deterministic order.
+ */
+ public GroupProvider recover(UUID id, Broker broker, Map<String, Object> attributes)
+ {
+ return createGroupProvider(id, broker, attributes);
+ }
+
+ public Collection<String> getSupportedGroupProviders()
+ {
+ return _supportedGroupProviders;
+ }
+
+ private GroupProviderAdapter createGroupProvider(UUID id, Broker broker, Map<String, Object> attributes)
+ {
+ for (GroupManagerFactory factory : _factories.values())
+ {
+ GroupManager manager = factory.createInstance(attributes);
+ if (manager != null)
+ {
+ verifyGroupManager(manager, broker);
+ return new GroupProviderAdapter(id, broker, manager, attributes,factory.getAttributeNames());
+ }
+ }
+ throw new IllegalConfigurationException("No group provider factory found for configuration attributes " + attributes);
+ }
+
+ private void verifyGroupManager(GroupManager manager, Broker broker)
+ {
+ Collection<GroupProvider> groupProviders = broker.getGroupProviders();
+ for (GroupProvider groupProvider : groupProviders)
+ {
+ if (groupProvider instanceof GroupProviderAdapter)
+ {
+ GroupManager providerManager = ((GroupProviderAdapter) groupProvider).getGroupManager();
+ if (manager.equals(providerManager))
+ {
+ throw new IllegalConfigurationException("A group provider with the same settings already exists");
+ }
+ }
+ }
+ }
+}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/plugin/GroupManagerFactory.java Fri Apr 19 15:50:21 2013
@@ -18,11 +18,34 @@
*/
package org.apache.qpid.server.plugin;
+import java.util.Collection;
import java.util.Map;
+import org.apache.qpid.server.model.GroupProvider;
import org.apache.qpid.server.security.group.GroupManager;
public interface GroupManagerFactory
{
+ public static final String ATTRIBUTE_TYPE = GroupProvider.TYPE;
+
GroupManager createInstance(Map<String, Object> attributes);
+
+ /**
+ * Returns the authentication provider type
+ * @return authentication provider type
+ */
+ String getType();
+
+ /**
+ * Get the names of attributes the group manager which can be passed into {@link #createInstance(Map)} to create the
+ * group manager
+ *
+ * @return the collection of attribute names
+ */
+ Collection<String> getAttributeNames();
+
+ /**
+ * @return returns human readable descriptions for the attributes
+ */
+ Map<String, String> getAttributeDescriptions();
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManager.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManager.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManager.java Fri Apr 19 15:50:21 2013
@@ -19,6 +19,7 @@
*/
package org.apache.qpid.server.security.group;
+import java.io.File;
import java.io.IOException;
import java.security.Principal;
import java.util.Collections;
@@ -34,32 +35,26 @@ import org.apache.qpid.server.security.a
* This plugin is configured in the following manner:
* </p>
* <pre>
- * <file-group-manager>
- * <attributes>
- * <attribute>
- * <name>groupFile</name>
- * <value>${conf}/groups</value>
- * </attribute>
- * </attributes>
- * </file-group-manager>
+ * "groupproviders":[
+ * ...
+ * {
+ * "name" : "...",
+ * "type" : "GroupFile",
+ * "path" : "path/to/file/with/groups",
+ * }
+ * ...
+ * ]
* </pre>
*/
public class FileGroupManager implements GroupManager
{
private final FileGroupDatabase _groupDatabase;
-
+ private final String _groupFile;
public FileGroupManager(String groupFile)
{
+ _groupFile = groupFile;
_groupDatabase = new FileGroupDatabase();
- try
- {
- _groupDatabase.setGroupFile(groupFile);
- }
- catch (IOException e)
- {
- throw new IllegalConfigurationException("Unable to set group file " + groupFile, e);
- }
}
@Override
@@ -144,4 +139,101 @@ public class FileGroupManager implements
}
+ @Override
+ public void onDelete()
+ {
+ File file = new File(_groupFile);
+ if (file.exists())
+ {
+ if (!file.delete())
+ {
+ throw new IllegalConfigurationException("Cannot delete group file");
+ }
+ }
+ }
+
+ @Override
+ public void onCreate()
+ {
+ File file = new File(_groupFile);
+ if (!file.exists())
+ {
+ File parent = file.getParentFile();
+ if (!parent.exists())
+ {
+ parent.mkdirs();
+ }
+ if (parent.exists())
+ {
+ try
+ {
+ file.createNewFile();
+ }
+ catch (IOException e)
+ {
+ throw new IllegalConfigurationException("Cannot create group file");
+ }
+ }
+ else
+ {
+ throw new IllegalConfigurationException("Cannot create group file");
+ }
+ }
+ }
+
+ @Override
+ public void open()
+ {
+ try
+ {
+ _groupDatabase.setGroupFile(_groupFile);
+ }
+ catch (IOException e)
+ {
+ throw new IllegalConfigurationException("Unable to set group file " + _groupFile, e);
+ }
+ }
+
+ @Override
+ public void close()
+ {
+ // no-op
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return ((_groupFile == null) ? 0 : _groupFile.hashCode());
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ if (obj == null)
+ {
+ return false;
+ }
+ if (getClass() != obj.getClass())
+ {
+ return false;
+ }
+ FileGroupManager other = (FileGroupManager) obj;
+ if (_groupFile == null)
+ {
+ if (other._groupFile != null)
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+ return _groupFile.equals(other._groupFile);
+ }
+
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/FileGroupManagerFactory.java Fri Apr 19 15:50:21 2013
@@ -20,32 +20,60 @@ package org.apache.qpid.server.security.
import static org.apache.qpid.server.util.MapValueConverter.getStringAttribute;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
-import org.apache.commons.lang.StringUtils;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.model.GroupProvider;
import org.apache.qpid.server.plugin.GroupManagerFactory;
+import org.apache.qpid.server.util.ResourceBundleLoader;
public class FileGroupManagerFactory implements GroupManagerFactory
{
- static final String FILE_GROUP_MANAGER_TYPE = "file-group-manager";
- static final String FILE = "file";
+ public static final String RESOURCE_BUNDLE = "org.apache.qpid.server.security.group.FileGroupProviderAttributeDescriptions";
+
+ public static final String GROUP_FILE_PROVIDER_TYPE = "GroupFile";
+ public static final String PATH = "path";
+
+ public static final Collection<String> ATTRIBUTES = Collections.<String> unmodifiableList(Arrays.asList(
+ ATTRIBUTE_TYPE,
+ PATH
+ ));
@Override
public GroupManager createInstance(Map<String, Object> attributes)
{
- if(!FILE_GROUP_MANAGER_TYPE.equals(getStringAttribute(GroupProvider.TYPE, attributes, null)))
+ if(attributes == null || !GROUP_FILE_PROVIDER_TYPE.equals(attributes.get(ATTRIBUTE_TYPE)))
{
return null;
}
- String groupFile = getStringAttribute(FILE, attributes, null);
- if (StringUtils.isBlank(groupFile))
+ String groupFile = getStringAttribute(PATH, attributes, null);
+ if (groupFile == null || "".equals(groupFile.trim()))
{
throw new IllegalConfigurationException("Path to file containing groups is not specified!");
}
+
return new FileGroupManager(groupFile);
}
+ @Override
+ public String getType()
+ {
+ return GROUP_FILE_PROVIDER_TYPE;
+ }
+
+ @Override
+ public Collection<String> getAttributeNames()
+ {
+ return ATTRIBUTES;
+ }
+
+ @Override
+ public Map<String, String> getAttributeDescriptions()
+ {
+ return ResourceBundleLoader.getResources(RESOURCE_BUNDLE);
+ }
+
}
Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupManager.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupManager.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupManager.java Fri Apr 19 15:50:21 2013
@@ -37,4 +37,12 @@ public interface GroupManager
void addUserToGroup(String user, String group);
void removeUserFromGroup(String user, String group);
+
+ void open();
+
+ void close();
+
+ void onDelete();
+
+ void onCreate();
}
Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java Fri Apr 19 15:50:21 2013
@@ -49,6 +49,7 @@ import org.apache.qpid.server.model.Port
import org.apache.qpid.server.model.TrustStore;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
+import org.apache.qpid.server.model.adapter.GroupProviderFactory;
import org.apache.qpid.server.model.adapter.PortFactory;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.stats.StatisticsGatherer;
@@ -70,7 +71,7 @@ public class BrokerRecovererTest extends
{
super.setUp();
- _brokerRecoverer = new BrokerRecoverer(mock(AuthenticationProviderFactory.class), mock(PortFactory.class), mock(StatisticsGatherer.class),
+ _brokerRecoverer = new BrokerRecoverer(mock(AuthenticationProviderFactory.class), mock(GroupProviderFactory.class), mock(PortFactory.class), mock(StatisticsGatherer.class),
mock(VirtualHostRegistry.class), mock(LogRecorder.class), mock(RootMessageLogger.class), mock(TaskExecutor.class), mock(BrokerOptions.class));
when(_brokerEntry.getId()).thenReturn(_brokerId);
when(_brokerEntry.getChildren()).thenReturn(_brokerEntryChildren);
Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/GroupProviderRecovererTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/GroupProviderRecovererTest.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/GroupProviderRecovererTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/GroupProviderRecovererTest.java Fri Apr 19 15:50:21 2013
@@ -30,6 +30,7 @@ import org.apache.qpid.server.configurat
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.GroupProvider;
+import org.apache.qpid.server.model.adapter.GroupProviderFactory;
import org.apache.qpid.server.plugin.GroupManagerFactory;
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.security.group.GroupManager;
@@ -46,6 +47,7 @@ public class GroupProviderRecovererTest
private QpidServiceLoader<GroupManagerFactory> _groupManagerServiceLoader;
private Broker _broker;
private ConfigurationEntry _configurationEntry;
+ private GroupProviderFactory _groupProviderFactory;
@SuppressWarnings("unchecked")
protected void setUp() throws Exception
@@ -58,6 +60,7 @@ public class GroupProviderRecovererTest
_groupManagerServiceLoader = mock(QpidServiceLoader.class);
when(_groupManagerServiceLoader.instancesOf(GroupManagerFactory.class)).thenReturn(Collections.singletonList(_factory ));
+ _groupProviderFactory = new GroupProviderFactory(_groupManagerServiceLoader);
_broker = mock(Broker.class);
@@ -70,8 +73,9 @@ public class GroupProviderRecovererTest
{
GroupManager groupManager = mock(GroupManager.class);
String name = groupManager.getClass().getSimpleName();
+ _attributes.put(GroupProvider.NAME, name);
when(_factory.createInstance(_attributes)).thenReturn(groupManager);
- GroupProviderRecoverer groupProviderRecoverer = new GroupProviderRecoverer(_groupManagerServiceLoader);
+ GroupProviderRecoverer groupProviderRecoverer = new GroupProviderRecoverer(_groupProviderFactory);
GroupProvider groupProvider = groupProviderRecoverer.create(null, _configurationEntry, _broker);
assertNotNull("Null group provider", groupProvider);
assertEquals("Unexpected name", name, groupProvider.getName());
@@ -82,7 +86,7 @@ public class GroupProviderRecovererTest
{
when(_factory.createInstance(_attributes)).thenReturn(null);
- GroupProviderRecoverer groupProviderRecoverer = new GroupProviderRecoverer(_groupManagerServiceLoader);
+ GroupProviderRecoverer groupProviderRecoverer = new GroupProviderRecoverer(_groupProviderFactory);
try
{
groupProviderRecoverer.create(null, _configurationEntry, _broker);
Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupManagerFactoryTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupManagerFactoryTest.java?rev=1469916&r1=1469915&r2=1469916&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupManagerFactoryTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/group/FileGroupManagerFactoryTest.java Fri Apr 19 15:50:21 2013
@@ -35,8 +35,8 @@ public class FileGroupManagerFactoryTest
public void testInstanceCreated() throws Exception
{
- _configuration.put(GroupProvider.TYPE, FileGroupManagerFactory.FILE_GROUP_MANAGER_TYPE);
- _configuration.put(FileGroupManagerFactory.FILE, _emptyButValidGroupFile);
+ _configuration.put(GroupProvider.TYPE, FileGroupManagerFactory.GROUP_FILE_PROVIDER_TYPE);
+ _configuration.put(FileGroupManagerFactory.PATH, _emptyButValidGroupFile);
GroupManager manager = _factory.createInstance(_configuration);
assertNotNull(manager);
@@ -60,8 +60,8 @@ public class FileGroupManagerFactoryTest
public void testRejectsConfigThatIsMissingAttributeValue() throws Exception
{
- _configuration.put(GroupProvider.TYPE, FileGroupManagerFactory.FILE_GROUP_MANAGER_TYPE);
- _configuration.put(FileGroupManagerFactory.FILE, null);
+ _configuration.put(GroupProvider.TYPE, FileGroupManagerFactory.GROUP_FILE_PROVIDER_TYPE);
+ _configuration.put(FileGroupManagerFactory.PATH, null);
try
{
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org