Author: orudyy
Date: Fri Mar 22 10:15:35 2013
New Revision: 1459695
URL: http://svn.apache.org/r1459695
Log:
QPID-4661: Improve broker attribute editing UI to avoid sending of unmodified
attributes, improve UI look-&-feel, improve broker attribute changing
functionality to avoid unnecessary modifications
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
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/model/AuthenticationProvider.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.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/security/group/GroupPrincipalAccessor.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/model/adapter/AuthenticationProviderFactoryTest.java
Modified:
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
(original)
+++
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
Fri Mar 22 10:15:35 2013
@@ -23,17 +23,21 @@ define(["dojo/_base/xhr",
"dojo/_base/event",
"dojo/_base/json",
"dojo/_base/lang",
+ "dojo/dom-construct",
+ "dojo/dom-geometry",
+ "dojo/window",
"dijit/Dialog",
"dijit/form/Form",
"dijit/form/Button",
"dijit/form/RadioButton",
"dijit/form/CheckBox",
"dojox/layout/TableContainer",
+ "dojox/layout/ScrollPane",
"dojox/validate/us",
"dojox/validate/web",
"dojo/domReady!"
],
- function (xhr, event, json, lang) {
+ function (xhr, event, json, lang, dom, geometry, win) {
var util = {};
if (Array.isArray) {
util.isArray = function (object) {
@@ -147,8 +151,16 @@ define(["dojo/_base/xhr",
});
var submitButton = new dijit.form.Button({label: "Submit", type:
"submit"});
var form = new dijit.form.Form();
- form.domNode.appendChild(layout.domNode);
- form.domNode.appendChild(submitButton.domNode);
+
+ var dialogContent = dom.create("div");
+ var dialogContentArea = dom.create("div", { "class":
"dijitDialogPaneContentArea"});
+ var dialogActionBar = dom.create("div", { "class":
"dijitDialogPaneActionBar"} );
+ dialogContent.appendChild(dialogContentArea);
+ dialogContent.appendChild(dialogActionBar);
+ dialogContentArea.appendChild(layout.domNode)
+ dialogActionBar.appendChild(submitButton.domNode);
+ form.domNode.appendChild(dialogContent);
+
var widgets = {};
var requiredFor ={};
for(var i in attributeWidgetFactories)
@@ -170,10 +182,6 @@ define(["dojo/_base/xhr",
{
var dependent = requiredFor[widgetName];
var widget = widgets[widgetName];
- if (widget.value)
- {
- dependent.set("required", true);
- }
if (widget)
{
widget.dependent = dependent;
@@ -185,7 +193,7 @@ define(["dojo/_base/xhr",
var setAttributesDialog = new dijit.Dialog({
title: dialogTitle,
content: form,
- style: "width: 600px"
+ style: "width: 600px; max-height: 80%"
});
form.on("submit", function(e)
{
@@ -204,7 +212,7 @@ define(["dojo/_base/xhr",
{
values[ propName ] = widget.checked;
}
- else if (value != "" || (widget.initialValue && value
!= widget.initialValue))
+ else if (value != widget.initialValue)
{
values[ propName ] = value ? value: null;
}
@@ -239,8 +247,17 @@ define(["dojo/_base/xhr",
}
});
form.connectChildren(true);
+ setAttributesDialog.startup();
+ setAttributesDialog.on("show", function(){
+ var data = geometry.position(layout.domNode);
+ var maxHeight = win.getBox().h * 0.6;
+ if (data.h > maxHeight)
+ {
+ dialogContentArea.style.height = maxHeight + "px";
+ dialogContentArea.style.overflow= "auto";
+ }
+ })
setAttributesDialog.show();
-
};
return util;
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
Fri Mar 22 10:15:35 2013
@@ -47,7 +47,7 @@ public class AuthenticationProviderRecov
AuthenticationProvider authenticationProvider =
_authenticationProviderFactory.create(
configurationEntry.getId(),
broker,
- attributes, null);
+ attributes);
return authenticationProvider;
}
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=1459695&r1=1459694&r2=1459695&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 Mar 22 10:15:35 2013
@@ -18,7 +18,6 @@ import org.apache.qpid.server.model.adap
import org.apache.qpid.server.model.adapter.PortFactory;
import
org.apache.qpid.server.configuration.store.StoreConfigurationChangeListener;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
@@ -103,12 +102,6 @@ public class BrokerRecoverer implements
}
broker.setDefaultAuthenticationProvider(defaultAuthenticationProvider);
- GroupPrincipalAccessor groupPrincipalAccessor = new
GroupPrincipalAccessor(broker.getGroupProviders());
- for (AuthenticationProvider authenticationProvider :
authenticationProviders)
- {
- authenticationProvider.setGroupAccessor(groupPrincipalAccessor);
- }
-
Collection<Port> ports = broker.getPorts();
for (Port port : ports)
{
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
Fri Mar 22 10:15:35 2013
@@ -25,7 +25,6 @@ import java.util.Collection;
import java.util.Collections;
import org.apache.qpid.server.security.SubjectCreator;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
public interface AuthenticationProvider extends ConfiguredObject
{
@@ -67,5 +66,4 @@ public interface AuthenticationProvider
*/
SubjectCreator getSubjectCreator();
- void setGroupAccessor(GroupPrincipalAccessor groupPrincipalAccessor);
}
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
Fri Mar 22 10:15:35 2013
@@ -36,6 +36,7 @@ import javax.security.auth.login.Account
import org.apache.log4j.Logger;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.ConfigurationChangeListener;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.IllegalStateTransitionException;
import org.apache.qpid.server.model.IntegrityViolationException;
@@ -67,8 +68,6 @@ public abstract class AuthenticationProv
protected T _authManager;
protected final Broker _broker;
- private GroupPrincipalAccessor _groupAccessor;
-
protected Collection<String> _supportedAttributes;
Map<String, AuthenticationManagerFactory> _factories;
@@ -238,10 +237,6 @@ public abstract class AuthenticationProv
}
else if(desiredState == State.ACTIVE)
{
- if (_groupAccessor == null)
- {
- throw new IllegalStateTransitionException("Cannot transit into
ACTIVE state with null group accessor!");
- }
_authManager.initialise();
return true;
}
@@ -256,12 +251,7 @@ public abstract class AuthenticationProv
@Override
public SubjectCreator getSubjectCreator()
{
- return new SubjectCreator(_authManager, _groupAccessor);
- }
-
- public void setGroupAccessor(GroupPrincipalAccessor groupAccessor)
- {
- _groupAccessor = groupAccessor;
+ return new SubjectCreator(_authManager, new
GroupPrincipalAccessor(_broker.getGroupProviders()));
}
@Override
@@ -343,7 +333,6 @@ public abstract class AuthenticationProv
}
-
}
public static class PrincipalDatabaseAuthenticationManagerAdapter
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
Fri Mar 22 10:15:35 2013
@@ -33,7 +33,6 @@ import org.apache.qpid.server.plugin.Aut
import org.apache.qpid.server.plugin.QpidServiceLoader;
import org.apache.qpid.server.security.auth.manager.AuthenticationManager;
import
org.apache.qpid.server.security.auth.manager.PrincipalDatabaseAuthenticationManager;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import
org.apache.qpid.server.model.adapter.AuthenticationProviderAdapter.PrincipalDatabaseAuthenticationManagerAdapter;
import
org.apache.qpid.server.model.adapter.AuthenticationProviderAdapter.SimpleAuthenticationProviderAdapter;
@@ -58,9 +57,8 @@ public class AuthenticationProviderFacto
* <p>
* The configured {@link AuthenticationManagerFactory}'s are used to try
to create the {@link AuthenticationProvider}.
* The first non-null instance is returned. The factories are used in
non-deterministic order.
- * @param groupPrincipalAccessor TODO
*/
- public AuthenticationProvider create(UUID id, Broker broker, Map<String,
Object> attributes, GroupPrincipalAccessor groupPrincipalAccessor)
+ public AuthenticationProvider create(UUID id, Broker broker, Map<String,
Object> attributes)
{
for (AuthenticationManagerFactory factory : _factories)
{
@@ -77,7 +75,6 @@ public class AuthenticationProviderFacto
{
authenticationProvider = new
SimpleAuthenticationProviderAdapter(id, broker, manager, attributes,
factory.getAttributeNames());
}
-
authenticationProvider.setGroupAccessor(groupPrincipalAccessor);
return authenticationProvider;
}
}
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=1459695&r1=1459694&r2=1459695&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 Mar 22 10:15:35 2013
@@ -63,7 +63,6 @@ import org.apache.qpid.server.security.a
import
org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory;
import org.apache.qpid.server.security.group.FileGroupManager;
import org.apache.qpid.server.security.group.GroupManager;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.server.security.SubjectCreator;
import org.apache.qpid.server.stats.StatisticsGatherer;
@@ -209,6 +208,14 @@ public class BrokerAdapter extends Abstr
*/
private void createBrokerChildrenFromAttributes()
{
+ createGroupProvider();
+ createKeyStore();
+ createTrustStore();
+ createPeerStore();
+ }
+
+ private void createGroupProvider()
+ {
String groupFile = (String) getAttribute(GROUP_FILE);
if (groupFile != null)
{
@@ -222,6 +229,10 @@ public class BrokerAdapter extends Abstr
{
_groupProviders.remove(DEFAULT_GROUP_PROFIDER_NAME);
}
+ }
+
+ private void createKeyStore()
+ {
Map<String, Object> actualAttributes = getActualAttributes();
String keyStorePath = (String) getAttribute(KEY_STORE_PATH);
if (keyStorePath != null)
@@ -240,6 +251,11 @@ public class BrokerAdapter extends Abstr
{
_keyStores.remove(_defaultKeyStoreId);
}
+ }
+
+ private void createTrustStore()
+ {
+ Map<String, Object> actualAttributes = getActualAttributes();
String trustStorePath = (String) getAttribute(TRUST_STORE_PATH);
if (trustStorePath != null)
{
@@ -257,6 +273,11 @@ public class BrokerAdapter extends Abstr
{
_trustStores.remove(_defaultTrustStoreId);
}
+ }
+
+ private void createPeerStore()
+ {
+ Map<String, Object> actualAttributes = getActualAttributes();
String peerStorePath = (String) getAttribute(PEER_STORE_PATH);
UUID peerStoreId =
UUIDGenerator.generateBrokerChildUUID(TrustStore.class.getSimpleName(),
DEFAULT_PEER_STORE_NAME);
if (peerStorePath != null)
@@ -539,11 +560,7 @@ public class BrokerAdapter extends Abstr
}
- // it's cheap to create the groupPrincipalAccessor on the fly
- GroupPrincipalAccessor groupPrincipalAccessor = new
GroupPrincipalAccessor(_groupProviders.values());
-
- authenticationProvider =
_authenticationProviderFactory.create(UUID.randomUUID(), this, attributes,
- groupPrincipalAccessor);
+ authenticationProvider =
_authenticationProviderFactory.create(UUID.randomUUID(), this, attributes);
addAuthenticationProvider(authenticationProvider);
}
authenticationProvider.setDesiredState(State.INITIALISING,
State.ACTIVE);
@@ -1033,15 +1050,63 @@ public class BrokerAdapter extends Abstr
//TODO: Add management mode check
Map<String, Object> convertedAttributes =
MapValueConverter.convert(attributes, ATTRIBUTE_TYPES);
validateAttributes(convertedAttributes);
- super.changeAttributes(convertedAttributes);
+
+ boolean keyStoreChanged = false;
+ boolean trustStoreChanged = false;
+ boolean peerStoreChanged = false;
+ Collection<String> names = AVAILABLE_ATTRIBUTES;
+ for (String name : names)
+ {
+ if (attributes.containsKey(name))
+ {
+ Object desired = attributes.get(name);
+ Object expected = getAttribute(name);
+ if (changeAttribute(name, expected, desired))
+ {
+ if (GROUP_FILE.equals(name))
+ {
+ createGroupProvider();
+ }
+ else if (DEFAULT_AUTHENTICATION_PROVIDER.equals(name))
+ {
+ if
(!_defaultAuthenticationProvider.getName().equals(desired))
+ {
+ _defaultAuthenticationProvider =
findAuthenticationProviderByName((String)desired);
+ }
+ }
+ else if (KEY_STORE_PATH.equals(name) ||
KEY_STORE_PASSWORD.equals(name) || KEY_STORE_CERT_ALIAS.equals(name))
+ {
+ keyStoreChanged = true;
+ }
+ else if (TRUST_STORE_PATH.equals(name) ||
TRUST_STORE_PASSWORD.equals(name))
+ {
+ trustStoreChanged = true;
+ }
+ else if (PEER_STORE_PATH.equals(name) ||
PEER_STORE_PASSWORD.equals(name))
+ {
+ peerStoreChanged = true;
+ }
+ attributeSet(name, expected, desired);
+ }
+ }
+ }
// the calls below are not thread safe but they should be fine in a
management mode
// as there will be no user connected
- createBrokerChildrenFromAttributes();
- String defaultProviderName =
(String)getAttribute(DEFAULT_AUTHENTICATION_PROVIDER);
- if
(!_defaultAuthenticationProvider.getName().equals(defaultProviderName))
+ // The new keystore/trustore/peerstore will be only used with new ports
+ // At the moment we cannot restart ports with new
keystore/trustore/peerstore
+
+ if (keyStoreChanged)
+ {
+ createKeyStore();
+ }
+ if (trustStoreChanged)
+ {
+ createTrustStore();
+ }
+ if (peerStoreChanged)
{
- _defaultAuthenticationProvider =
findAuthenticationProviderByName(defaultProviderName);
+ createPeerStore();
}
}
Modified:
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
(original)
+++
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
Fri Mar 22 10:15:35 2013
@@ -25,8 +25,6 @@ import java.util.HashSet;
import java.util.Set;
import org.apache.qpid.server.model.GroupProvider;
-import org.apache.qpid.server.model.adapter.GroupProviderAdapter;
-
public class GroupPrincipalAccessor
{
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=1459695&r1=1459694&r2=1459695&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 Mar 22 10:15:35 2013
@@ -53,7 +53,6 @@ import org.apache.qpid.server.model.Virt
import org.apache.qpid.server.model.adapter.AuthenticationProviderFactory;
import org.apache.qpid.server.model.adapter.PortFactory;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.security.group.GroupPrincipalAccessor;
import org.apache.qpid.server.stats.StatisticsGatherer;
import org.apache.qpid.server.virtualhost.VirtualHostRegistry;
@@ -300,9 +299,6 @@ public class BrokerRecovererTest extends
assertNotNull(broker);
assertEquals("Unexpected number of authentication providers", 2,
broker.getAuthenticationProviders().size());
- //verify that a GroupAcessor was added to the AuthenticationProviders
-
verify(_authenticationProvider1).setGroupAccessor(any(GroupPrincipalAccessor.class));
-
verify(authenticationProvider2).setGroupAccessor(any(GroupPrincipalAccessor.class));
}
public void testCreateBrokerWithGroupProvider()
Modified:
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java?rev=1459695&r1=1459694&r2=1459695&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
(original)
+++
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
Fri Mar 22 10:15:35 2013
@@ -74,7 +74,7 @@ public class AuthenticationProviderFacto
when(authenticationManagerFactory.createInstance(attributes)).thenReturn(authenticationManager);
AuthenticationProviderFactory providerFactory = new
AuthenticationProviderFactory(authManagerFactoryServiceLoader);
- AuthenticationProvider provider = providerFactory.create(id, broker,
attributes, null);
+ AuthenticationProvider provider = providerFactory.create(id, broker,
attributes);
assertNotNull("Provider is not created", provider);
assertEquals("Unexpected ID", id, provider.getId());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]