diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2014-04-30 01:22:13 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2014-04-30 01:22:13 +0000 |
| commit | ae71aa7102a41735e49ec5c98409bc69fffd9a8f (patch) | |
| tree | f0709ee8c5993d6995e5de59c0cdc855a540614e /qpid/java/broker-plugins | |
| parent | 0d49f2fa419a414e1c9548001fcbde03d442f5c1 (diff) | |
| download | qpid-python-ae71aa7102a41735e49ec5c98409bc69fffd9a8f.tar.gz | |
QPID-5578 : [Java Broker] Use annotation to allow registration of all ConfiguredObject types at startup. Use this meta data for REST servlets. Remove unnecessary pluggable factory interfaces
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1591170 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins')
17 files changed, 138 insertions, 265 deletions
diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java index 961eb25236..d54f226a00 100644 --- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java +++ b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java @@ -27,6 +27,6 @@ import org.apache.qpid.server.model.ManagedObject; @ManagedObject( category = false, type="AclFile" ) public interface ACLFileAccessControlProvider<X extends ACLFileAccessControlProvider<X>> extends AccessControlProvider<X> { - @ManagedAttribute( automate = true, mandatory = true ) + @ManagedAttribute( automate = true, mandatory = true, description = "File location" ) String getPath(); } diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactory.java b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactory.java deleted file mode 100644 index 1547adc6e5..0000000000 --- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactory.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -package org.apache.qpid.server.security.access.plugins; - -import java.util.Map; - -import org.apache.qpid.server.model.AbstractConfiguredObjectTypeFactory; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.model.ConfiguredObject; -import org.apache.qpid.server.plugin.AccessControlProviderFactory; -import org.apache.qpid.server.plugin.PluggableService; -import org.apache.qpid.server.util.ResourceBundleLoader; - -@PluggableService -public class ACLFileAccessControlProviderFactory extends AbstractConfiguredObjectTypeFactory<ACLFileAccessControlProviderImpl> implements AccessControlProviderFactory<ACLFileAccessControlProviderImpl> -{ - public static final String RESOURCE_BUNDLE = "org.apache.qpid.server.security.access.plugins.FileAccessControlProviderAttributeDescriptions"; - - public ACLFileAccessControlProviderFactory() - { - super(ACLFileAccessControlProviderImpl.class); - } - - @Override - public Map<String, String> getAttributeDescriptions() - { - return ResourceBundleLoader.getResources(RESOURCE_BUNDLE); - } - - @Override - public ACLFileAccessControlProviderImpl createInstance(final Map<String, Object> attributes, - final ConfiguredObject<?>... parents) - { - return new ACLFileAccessControlProviderImpl(attributes, getParent(Broker.class,parents)); - } - -} diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java index c3ce92f5b1..554f2f46c5 100644 --- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java +++ b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderImpl.java @@ -35,8 +35,8 @@ import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.IllegalStateTransitionException; import org.apache.qpid.server.model.ManagedAttributeField; +import org.apache.qpid.server.model.ManagedObjectFactoryConstructor; import org.apache.qpid.server.model.State; -import org.apache.qpid.server.plugin.AccessControlProviderFactory; import org.apache.qpid.server.security.AccessControl; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.util.MapValueConverter; @@ -50,12 +50,12 @@ public class ACLFileAccessControlProviderImpl protected DefaultAccessControl _accessControl; protected final Broker _broker; - protected Map<String, AccessControlProviderFactory> _factories; private AtomicReference<State> _state; @ManagedAttributeField private String _path; + @ManagedObjectFactoryConstructor public ACLFileAccessControlProviderImpl(Map<String, Object> attributes, Broker broker) { super(parentsMap(broker), attributes); diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/FileAccessControlProviderAttributeDescriptions.properties b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/FileAccessControlProviderAttributeDescriptions.properties deleted file mode 100644 index e847e90f57..0000000000 --- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/FileAccessControlProviderAttributeDescriptions.properties +++ /dev/null @@ -1,19 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -path=File location*
\ No newline at end of file diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java index fab6ad1750..01da01eb97 100644 --- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java +++ b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProviderFactoryTest.java @@ -33,9 +33,7 @@ import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.model.AccessControlProvider; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.BrokerModel; -import org.apache.qpid.server.model.ConfiguredObjectFactory; import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl; -import org.apache.qpid.server.model.GroupProvider; import org.apache.qpid.server.security.access.FileAccessControlProviderConstants; import org.apache.qpid.test.utils.QpidTestCase; import org.apache.qpid.test.utils.TestFileUtils; @@ -43,28 +41,30 @@ import org.apache.qpid.test.utils.TestFileUtils; public class ACLFileAccessControlProviderFactoryTest extends QpidTestCase { private Broker _broker; + private ConfiguredObjectFactoryImpl _objectFactory; @Override public void setUp() throws Exception { super.setUp(); _broker = mock(Broker.class); - ConfiguredObjectFactory objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance()); + _objectFactory = new ConfiguredObjectFactoryImpl(BrokerModel.getInstance()); - when(_broker.getObjectFactory()).thenReturn(objectFactory); - when(_broker.getModel()).thenReturn(objectFactory.getModel()); + when(_broker.getObjectFactory()).thenReturn(_objectFactory); + when(_broker.getModel()).thenReturn(_objectFactory.getModel()); when(_broker.getCategoryClass()).thenReturn(Broker.class); } public void testCreateInstanceWhenAclFileIsNotPresent() { - ACLFileAccessControlProviderFactory factory = new ACLFileAccessControlProviderFactory(); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(AccessControlProvider.ID, UUID.randomUUID()); attributes.put(AccessControlProvider.NAME, "acl"); + attributes.put(AccessControlProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE); + try { - AccessControlProvider acl = factory.create(null, attributes, _broker); + AccessControlProvider acl = _objectFactory.create(AccessControlProvider.class, attributes, _broker); fail("ACL was created without a configuration file path specified"); } catch(IllegalArgumentException e) @@ -73,16 +73,16 @@ public class ACLFileAccessControlProviderFactoryTest extends QpidTestCase } } + public void testCreateInstanceWhenAclFileIsSpecified() { File aclFile = TestFileUtils.createTempFile(this, ".acl", "ACL ALLOW all all"); - ACLFileAccessControlProviderFactory factory = new ACLFileAccessControlProviderFactory(); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(AccessControlProvider.ID, UUID.randomUUID()); attributes.put(AccessControlProvider.NAME, "acl"); - attributes.put(GroupProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE); + attributes.put(AccessControlProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE); attributes.put(FileAccessControlProviderConstants.PATH, aclFile.getAbsolutePath()); - AccessControlProvider acl = factory.create(null, attributes, _broker); + AccessControlProvider acl = _objectFactory.create(AccessControlProvider.class, attributes, _broker); acl.getAccessControl().open(); assertNotNull("ACL was not created from acl file: " + aclFile.getAbsolutePath(), acl); @@ -92,15 +92,14 @@ public class ACLFileAccessControlProviderFactoryTest extends QpidTestCase { File aclFile = new File(TMP_FOLDER, "my-non-existing-acl-" + System.currentTimeMillis()); assertFalse("ACL file " + aclFile.getAbsolutePath() + " actually exists but should not", aclFile.exists()); - ACLFileAccessControlProviderFactory factory = new ACLFileAccessControlProviderFactory(); Map<String, Object> attributes = new HashMap<String, Object>(); attributes.put(AccessControlProvider.ID, UUID.randomUUID()); attributes.put(AccessControlProvider.NAME, "acl"); - attributes.put(GroupProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE); + attributes.put(AccessControlProvider.TYPE, FileAccessControlProviderConstants.ACL_FILE_PROVIDER_TYPE); attributes.put(FileAccessControlProviderConstants.PATH, aclFile.getAbsolutePath()); try { - AccessControlProvider control = factory.create(null, attributes, _broker); + AccessControlProvider control = _objectFactory.create(AccessControlProvider.class, attributes, _broker); control.getAccessControl().open(); fail("It should not be possible to create and initialise ACL with non existing file"); } diff --git a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java index 523640adad..0ce2555bcf 100644 --- a/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java +++ b/qpid/java/broker-plugins/access-control/src/test/java/org/apache/qpid/server/security/access/plugins/RuleSetTest.java @@ -192,7 +192,7 @@ public class RuleSetTest extends QpidTestCase ExchangeImpl<?> exchange = mock(ExchangeImpl.class); when(exchange.getParent(VirtualHost.class)).thenReturn(_virtualHost); - when(exchange.getTypeName()).thenReturn(_exchangeType); + when(exchange.getType()).thenReturn(_exchangeType); when(_virtualHost.getName()).thenReturn(ALLOWED_VH); assertEquals(Result.ALLOWED, _ruleSet.check(_testSubject, Operation.CREATE, ObjectType.EXCHANGE, new ObjectProperties(exchange))); diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java index db94249c64..af1bd00ae9 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java +++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java @@ -32,10 +32,9 @@ import java.util.UUID; import org.apache.log4j.Logger; +import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.server.consumer.ConsumerImpl; -import org.apache.qpid.server.exchange.DirectExchange; import org.apache.qpid.server.exchange.ExchangeImpl; -import org.apache.qpid.server.exchange.HeadersExchange; import org.apache.qpid.server.filter.AMQInvalidArgumentException; import org.apache.qpid.server.filter.FilterManager; import org.apache.qpid.server.filter.FilterManagerFactory; @@ -49,7 +48,6 @@ import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.NoFactoryForTypeException; import org.apache.qpid.server.model.Queue; import org.apache.qpid.server.model.UnknownConfiguredObjectException; -import org.apache.qpid.server.plugin.ExchangeType; import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.QueueArgumentsConverter; import org.apache.qpid.server.store.DurableConfigurationStore; @@ -694,11 +692,11 @@ public class ServerSessionDelegate extends SessionDelegate if(nameNullOrEmpty(method.getExchange())) { // special case handling to fake the existence of the default exchange for 0-10 - if(!DirectExchange.TYPE.getType().equals(method.getType())) + if(!ExchangeDefaults.DIRECT_EXCHANGE_CLASS.equals(method.getType())) { exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Attempt to redeclare default exchange " - + " of type " + DirectExchange.TYPE.getType() + + " of type " + ExchangeDefaults.DIRECT_EXCHANGE_CLASS + " to " + method.getType() +"."); } if(!nameNullOrEmpty(method.getAlternateExchange())) @@ -721,11 +719,11 @@ public class ServerSessionDelegate extends SessionDelegate } else { - if (!exchange.getTypeName().equals(method.getType()) + if (!exchange.getType().equals(method.getType()) && (method.getType() != null && method.getType().length() > 0)) { exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Attempt to redeclare exchange: " - + exchangeName + " of type " + exchange.getTypeName() + " to " + method.getType() + "."); + + exchangeName + " of type " + exchange.getType() + " to " + method.getType() + "."); } } } @@ -762,11 +760,11 @@ public class ServerSessionDelegate extends SessionDelegate catch(ExchangeExistsException e) { ExchangeImpl exchange = e.getExistingExchange(); - if(!exchange.getTypeName().equals(method.getType())) + if(!exchange.getType().equals(method.getType())) { exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Attempt to redeclare exchange: " + exchangeName - + " of type " + exchange.getTypeName() + + " of type " + exchange.getType() + " to " + method.getType() +"."); } else if(method.hasAlternateExchange() @@ -887,18 +885,6 @@ public class ServerSessionDelegate extends SessionDelegate return false; } - private boolean isStandardExchange(ExchangeImpl exchange, Collection<ExchangeType<? extends ExchangeImpl>> registeredTypes) - { - for(ExchangeType type : registeredTypes) - { - if(type.getDefaultExchangeName().equals( exchange.getName() )) - { - return true; - } - } - return false; - } - @Override public void exchangeQuery(Session session, ExchangeQuery method) { @@ -912,7 +898,7 @@ public class ServerSessionDelegate extends SessionDelegate { // Fake the existence of the "default" exchange for 0-10 result.setDurable(true); - result.setType(DirectExchange.TYPE.getType()); + result.setType(ExchangeDefaults.DIRECT_EXCHANGE_CLASS); result.setNotFound(false); } else @@ -922,7 +908,7 @@ public class ServerSessionDelegate extends SessionDelegate if(exchange != null) { result.setDurable(exchange.isDurable()); - result.setType(exchange.getTypeName()); + result.setType(exchange.getType()); result.setNotFound(false); } else @@ -968,9 +954,9 @@ public class ServerSessionDelegate extends SessionDelegate { exception(session, method, ExecutionErrorCode.NOT_FOUND, "Exchange: '" + exchangeName + "' not found"); } - else if(exchange.getExchangeType().equals(HeadersExchange.TYPE) && (!method.hasArguments() || method.getArguments() == null || !method.getArguments().containsKey("x-match"))) + else if(exchange.getType().equals(ExchangeDefaults.HEADERS_EXCHANGE_CLASS) && (!method.hasArguments() || method.getArguments() == null || !method.getArguments().containsKey("x-match"))) { - exception(session, method, ExecutionErrorCode.INTERNAL_ERROR, "Bindings to an exchange of type " + HeadersExchange.TYPE.getType() + " require an x-match header"); + exception(session, method, ExecutionErrorCode.INTERNAL_ERROR, "Bindings to an exchange of type " + ExchangeDefaults.HEADERS_EXCHANGE_CLASS + " require an x-match header"); } else { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java index 73b53c5e64..aaf88c81d5 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ExchangeDeclareHandler.java @@ -28,12 +28,12 @@ import org.apache.log4j.Logger; import org.apache.qpid.AMQConnectionException; import org.apache.qpid.AMQException; +import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.framing.AMQMethodBody; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.ExchangeDeclareBody; import org.apache.qpid.framing.MethodRegistry; import org.apache.qpid.protocol.AMQConstant; -import org.apache.qpid.server.exchange.DirectExchange; import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.model.LifetimePolicy; import org.apache.qpid.server.model.NoFactoryForTypeException; @@ -81,11 +81,11 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener<Exchange if(isDefaultExchange(exchangeName)) { - if(!new AMQShortString(DirectExchange.TYPE.getType()).equals(body.getType())) + if(!new AMQShortString(ExchangeDefaults.DIRECT_EXCHANGE_CLASS).equals(body.getType())) { throw new AMQConnectionException(AMQConstant.NOT_ALLOWED, "Attempt to redeclare default exchange: " + " of type " - + DirectExchange.TYPE.getType() + + ExchangeDefaults.DIRECT_EXCHANGE_CLASS + " to " + body.getType() +".", body.getClazz(), body.getMethod(), body.getMajor(), body.getMinor(),null); @@ -100,11 +100,11 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener<Exchange { throw body.getChannelException(AMQConstant.NOT_FOUND, "Unknown exchange: " + exchangeName); } - else if (!(body.getType() == null || body.getType().length() ==0) && !exchange.getTypeName().equals(body.getType().asString())) + else if (!(body.getType() == null || body.getType().length() ==0) && !exchange.getType().equals(body.getType().asString())) { throw new AMQConnectionException(AMQConstant.NOT_ALLOWED, "Attempt to redeclare exchange: " + - exchangeName + " of type " + exchange.getTypeName() + exchangeName + " of type " + exchange.getType() + " to " + body.getType() +".",body.getClazz(), body.getMethod(),body.getMajor(),body.getMinor(),null); } @@ -137,11 +137,11 @@ public class ExchangeDeclareHandler implements StateAwareMethodListener<Exchange catch(ExchangeExistsException e) { exchange = e.getExistingExchange(); - if(!new AMQShortString(exchange.getTypeName()).equals(body.getType())) + if(!new AMQShortString(exchange.getType()).equals(body.getType())) { throw new AMQConnectionException(AMQConstant.NOT_ALLOWED, "Attempt to redeclare exchange: " + exchangeName + " of type " - + exchange.getTypeName() + + exchange.getType() + " to " + body.getType() +".", body.getClazz(), body.getMethod(), body.getMajor(), body.getMinor(),null); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java index e3f40c3555..0140d2ec7e 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/QueueBindHandler.java @@ -20,9 +20,13 @@ */ package org.apache.qpid.server.protocol.v0_8.handler; +import java.security.AccessControlException; +import java.util.Map; + import org.apache.log4j.Logger; import org.apache.qpid.AMQException; +import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.framing.AMQMethodBody; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.framing.FieldTable; @@ -30,17 +34,13 @@ import org.apache.qpid.framing.MethodRegistry; import org.apache.qpid.framing.QueueBindBody; import org.apache.qpid.protocol.AMQConstant; import org.apache.qpid.server.exchange.ExchangeImpl; -import org.apache.qpid.server.exchange.TopicExchange; import org.apache.qpid.server.protocol.v0_8.AMQChannel; import org.apache.qpid.server.protocol.v0_8.AMQProtocolSession; -import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.protocol.v0_8.state.AMQStateManager; import org.apache.qpid.server.protocol.v0_8.state.StateAwareMethodListener; +import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.virtualhost.VirtualHostImpl; -import java.security.AccessControlException; -import java.util.Map; - public class QueueBindHandler implements StateAwareMethodListener<QueueBindBody> { private static final Logger _log = Logger.getLogger(QueueBindHandler.class); @@ -125,7 +125,7 @@ public class QueueBindHandler implements StateAwareMethodListener<QueueBindBody> if (!exch.isBound(bindingKey, arguments, queue)) { - if(!exch.addBinding(bindingKey, queue, arguments) && TopicExchange.TYPE.equals(exch.getExchangeType())) + if(!exch.addBinding(bindingKey, queue, arguments) && ExchangeDefaults.TOPIC_EXCHANGE_CLASS.equals(exch.getType())) { exch.replaceBinding(bindingKey, queue, arguments); } diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java index f6823824fd..7a844cbc79 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java @@ -58,13 +58,12 @@ import org.apache.qpid.amqp_1_0.type.transport.AmqpError; import org.apache.qpid.amqp_1_0.type.transport.Detach; import org.apache.qpid.amqp_1_0.type.transport.Error; import org.apache.qpid.amqp_1_0.type.transport.Transfer; +import org.apache.qpid.exchange.ExchangeDefaults; import org.apache.qpid.filter.SelectorParsingException; import org.apache.qpid.filter.selector.ParseException; import org.apache.qpid.server.binding.BindingImpl; import org.apache.qpid.server.consumer.ConsumerImpl; -import org.apache.qpid.server.exchange.DirectExchange; import org.apache.qpid.server.exchange.ExchangeImpl; -import org.apache.qpid.server.exchange.TopicExchange; import org.apache.qpid.server.filter.JMSSelectorFilter; import org.apache.qpid.server.filter.SimpleFilterManager; import org.apache.qpid.server.message.MessageInstance; @@ -259,7 +258,7 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS { if(!hasBindingFilter && entry.getValue() instanceof ExactSubjectFilter - && exchange.getExchangeType() == DirectExchange.TYPE) + && exchange.getType().equals(ExchangeDefaults.DIRECT_EXCHANGE_CLASS)) { ExactSubjectFilter filter = (ExactSubjectFilter) filters.values().iterator().next(); source.setFilter(filters); @@ -269,7 +268,7 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS } else if(!hasBindingFilter && entry.getValue() instanceof MatchingSubjectFilter - && exchange.getExchangeType() == TopicExchange.TYPE) + && exchange.getType().equals(ExchangeDefaults.TOPIC_EXCHANGE_CLASS)) { MatchingSubjectFilter filter = (MatchingSubjectFilter) filters.values().iterator().next(); source.setFilter(filters); diff --git a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java index e9fe0b59fa..69479b73d6 100644 --- a/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java +++ b/qpid/java/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java @@ -115,7 +115,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra ExchangeImpl exchange = vhost.getExchange(exchangeName); String exchangeClass = exchange == null ? ExchangeDefaults.DIRECT_EXCHANGE_CLASS - : exchange.getTypeName(); + : exchange.getType(); props.setReplyTo(exchangeClass + "://" + exchangeName + "//?routingkey='" + (routingKey == null ? "" : routingKey + "'")); diff --git a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java index 0bd1cf27dc..8f43cdf9ef 100644 --- a/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java +++ b/qpid/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java @@ -50,9 +50,9 @@ import org.apache.qpid.server.message.MessageSource; import org.apache.qpid.server.message.ServerMessage; import org.apache.qpid.server.message.internal.InternalMessage; import org.apache.qpid.server.message.internal.InternalMessageHeader; -import org.apache.qpid.server.model.AbstractConfiguredObject; import org.apache.qpid.server.model.ConfigurationChangeListener; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry; import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.State; import org.apache.qpid.server.plugin.MessageConverter; @@ -235,7 +235,7 @@ class ManagementNode implements MessageSource, MessageDestination } } managedEntityType = new ManagedEntityType(clazz.getName(), parentSet.toArray(new ManagedEntityType[parentSet.size()]), - (String[])(AbstractConfiguredObject.getAttributeNames( + (String[])(ConfiguredObjectTypeRegistry.getAttributeNames( clazz).toArray(new String[0])), opsList.toArray(new String[opsList.size()])); _entityTypes.put(clazz.getName(),managedEntityType); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java index 0ed97ac3a0..1937ee8744 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementUtil.java @@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.codec.binary.Base64; + import org.apache.qpid.server.management.plugin.servlet.ServletConnectionPrincipal; import org.apache.qpid.server.management.plugin.session.LoginLogoutReporter; import org.apache.qpid.server.model.AuthenticationProvider; @@ -44,7 +45,7 @@ import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; import org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus; import org.apache.qpid.server.security.auth.SubjectAuthenticationResult; import org.apache.qpid.server.security.auth.UsernamePrincipal; -import org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManagerFactory; +import org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManager; import org.apache.qpid.transport.network.security.ssl.SSLUtil; public class HttpManagementUtil @@ -162,7 +163,7 @@ public class HttpManagementUtil { principal = certificates[0].getSubjectX500Principal(); - if(!Boolean.valueOf(String.valueOf(authenticationProvider.getAttribute(ExternalAuthenticationManagerFactory.ATTRIBUTE_USE_FULL_DN)))) + if(!Boolean.valueOf(String.valueOf(authenticationProvider.getAttribute(ExternalAuthenticationManager.ATTRIBUTE_USE_FULL_DN)))) { String username; String dn = ((X500Principal) principal).getName(X500Principal.RFC2253); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/AbstractSpecialisedAttributeLister.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/AbstractSpecialisedAttributeLister.java new file mode 100644 index 0000000000..173e4fce66 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/AbstractSpecialisedAttributeLister.java @@ -0,0 +1,77 @@ +/* + * + * 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.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeMap; +import java.util.TreeSet; + +import org.apache.qpid.server.management.plugin.servlet.rest.Action; +import org.apache.qpid.server.model.Broker; +import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.ConfiguredObjectAttribute; +import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry; + +abstract class AbstractSpecialisedAttributeLister<T extends ConfiguredObject> implements Action +{ + + + private static final String ATTRIBUTES = "attributes"; + private static final String DESCRIPTIONS = "descriptions"; + + @Override + final public Object perform(Map<String, Object> request, Broker broker) + { + Collection<Class<? extends ConfiguredObject>> groupProviderTypes = + ConfiguredObjectTypeRegistry.getTypeSpecialisations(getCategoryClass()); + + Map<String, Object> attributes = new TreeMap<String, Object>(); + + for (Class<? extends ConfiguredObject> groupProviderType : groupProviderTypes) + { + Collection<ConfiguredObjectAttribute<?, ?>> typeSpecificAttributes = + ConfiguredObjectTypeRegistry.getTypeSpecificAttributes(groupProviderType); + + Map<String, Object> data = new HashMap<String, Object>(); + + Collection<String> attributeNames = new TreeSet<>(); + Map<String,String> descriptions = new HashMap<>(); + for(ConfiguredObjectAttribute<?, ?> attr : typeSpecificAttributes) + { + attributeNames.add(attr.getName()); + if(!"".equals(attr.getAnnotation().description())) + { + descriptions.put(attr.getName(), attr.getAnnotation().description()); + } + } + data.put(ATTRIBUTES, attributeNames); + data.put(DESCRIPTIONS, descriptions); + + attributes.put(ConfiguredObjectTypeRegistry.getType(groupProviderType), data); + } + return attributes; + } + + abstract Class<T> getCategoryClass(); + +} diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAccessControlProviderAttributes.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAccessControlProviderAttributes.java index 84d05997b5..1eb3f9a9ac 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAccessControlProviderAttributes.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAccessControlProviderAttributes.java @@ -20,32 +20,10 @@ */ 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.model.AccessControlProvider; -import org.apache.qpid.server.management.plugin.servlet.rest.Action; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.plugin.AccessControlProviderFactory; -import org.apache.qpid.server.plugin.QpidServiceLoader; - -public class ListAccessControlProviderAttributes implements Action +public class ListAccessControlProviderAttributes extends AbstractSpecialisedAttributeLister<AccessControlProvider> { - private static final String ATTRIBUTES = "attributes"; - private static final String DESCRIPTIONS = "descriptions"; - private Map<String, AccessControlProviderFactory> _factories; - - public ListAccessControlProviderAttributes() - { - _factories = new TreeMap<String, AccessControlProviderFactory>(); - Iterable<AccessControlProviderFactory> factories = new QpidServiceLoader<AccessControlProviderFactory>() - .instancesOf(AccessControlProviderFactory.class); - for (AccessControlProviderFactory factory : factories) - { - _factories.put(factory.getType(), factory); - } - } - @Override public String getName() { @@ -53,25 +31,8 @@ public class ListAccessControlProviderAttributes implements Action } @Override - public Object perform(Map<String, Object> request, Broker broker) + Class<AccessControlProvider> getCategoryClass() { - Map<String, Object> attributes = new TreeMap<String, Object>(); - for (String providerType : _factories.keySet()) - { - AccessControlProviderFactory<?> factory = _factories.get(providerType); - - Map<String, Object> data = new HashMap<String, Object>(); - // TODO RG - fix - // 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; + return AccessControlProvider.class; } - } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java index 5c629587e0..3e006a705a 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAuthenticationProviderAttributes.java @@ -20,32 +20,10 @@ */ 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.model.AuthenticationProvider; -import org.apache.qpid.server.management.plugin.servlet.rest.Action; -import org.apache.qpid.server.model.Broker; -import org.apache.qpid.server.plugin.AuthenticationManagerFactory; -import org.apache.qpid.server.plugin.QpidServiceLoader; - -public class ListAuthenticationProviderAttributes implements Action +public class ListAuthenticationProviderAttributes extends AbstractSpecialisedAttributeLister<AuthenticationProvider> { - private static final String ATTRIBUTES = "attributes"; - private static final String DESCRIPTIONS = "descriptions"; - private Map<String, AuthenticationManagerFactory> _factories; - - public ListAuthenticationProviderAttributes() - { - _factories = new TreeMap<String, AuthenticationManagerFactory>(); - Iterable<AuthenticationManagerFactory> factories = new QpidServiceLoader<AuthenticationManagerFactory>() - .instancesOf(AuthenticationManagerFactory.class); - for (AuthenticationManagerFactory factory : factories) - { - _factories.put(factory.getType(), factory); - } - } - @Override public String getName() { @@ -53,24 +31,8 @@ public class ListAuthenticationProviderAttributes implements Action } @Override - public Object perform(Map<String, Object> request, Broker broker) + Class<AuthenticationProvider> getCategoryClass() { - Map<String, Object> attributes = new TreeMap<String, Object>(); - for (String providerType : _factories.keySet()) - { - AuthenticationManagerFactory 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; + return AuthenticationProvider.class; } - } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java index d1414faa71..ecb4320f1f 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java @@ -20,32 +20,10 @@ */ 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.model.GroupProvider; -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 +public class ListGroupProviderAttributes extends AbstractSpecialisedAttributeLister<GroupProvider> { - 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() { @@ -53,24 +31,8 @@ public class ListGroupProviderAttributes implements Action } @Override - public Object perform(Map<String, Object> request, Broker broker) + Class<GroupProvider> getCategoryClass() { - 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; + return GroupProvider.class; } - } |
