summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-03-23 18:16:30 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-03-23 18:16:30 +0000
commitcf179ab67843a62cb333663d8a9429610f3a47f3 (patch)
tree2fbf523b3dcde51d7e25c2ce71f8993653efac2b
parentbbd99c28a2f7bc4e17629a984caa65333b55e7e2 (diff)
downloadqpid-python-cf179ab67843a62cb333663d8a9429610f3a47f3.tar.gz
QPID-5633 : [Java Broker] Change the way StoreConfigurationChangeListener derives the "type" (actually category) of the ConfiguredObject
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1580559 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java94
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java5
-rw-r--r--qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java5
4 files changed, 14 insertions, 93 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
index e030d50e56..addc42e6f9 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListener.java
@@ -87,7 +87,7 @@ public class StoreConfigurationChangeListener implements ConfigurationChangeList
private ConfigurationEntry toConfigurationEntry(ConfiguredObject object)
{
- Class<? extends ConfiguredObject> objectType = getConfiguredObjectType(object);
+ Class<? extends ConfiguredObject> objectType = object.getCategoryClass();
Set<UUID> childrenIds = getChildrenIds(object, objectType);
ConfigurationEntry entry = new ConfigurationEntry(object.getId(), objectType.getSimpleName(),
object.getActualAttributes(), childrenIds, _store);
@@ -120,98 +120,6 @@ public class StoreConfigurationChangeListener implements ConfigurationChangeList
return childrenIds;
}
- private Class<? extends ConfiguredObject> getConfiguredObjectType(ConfiguredObject object)
- {
- if (object instanceof Broker)
- {
- return Broker.class;
- }
- else if (object instanceof VirtualHost)
- {
- return VirtualHost.class;
- }
- else if (object instanceof Port)
- {
- return Port.class;
- }
- else if (object instanceof AuthenticationProvider)
- {
- return AuthenticationProvider.class;
- }
- return getConfiguredObjectTypeFromImplementedInterfaces(object.getClass());
- }
-
- @SuppressWarnings("unchecked")
- private Class<? extends ConfiguredObject> getConfiguredObjectTypeFromImplementedInterfaces(Class<?> objectClass)
- {
- // get all implemented interfaces extending ConfiguredObject
- Set<Class<?>> interfaces = getImplementedInterfacesExtendingSuper(objectClass, ConfiguredObject.class);
-
- if (interfaces.size() == 0)
- {
- throw new StoreException("Can not identify the configured object type");
- }
-
- if (interfaces.size() == 1)
- {
- return (Class<? extends ConfiguredObject>)interfaces.iterator().next();
- }
-
- Set<Class<?>> superInterfaces = new HashSet<Class<?>>();
-
- // find all super interfaces
- for (Class<?> interfaceClass : interfaces)
- {
- for (Class<?> interfaceClass2 : interfaces)
- {
- if (interfaceClass != interfaceClass2)
- {
- if (interfaceClass.isAssignableFrom(interfaceClass2))
- {
- superInterfaces.add(interfaceClass);
- }
- }
- }
- }
-
- // remove super interfaces
- for (Class<?> superInterface : superInterfaces)
- {
- interfaces.remove(superInterface);
- }
-
- if (interfaces.size() == 1)
- {
- return (Class<? extends ConfiguredObject>)interfaces.iterator().next();
- }
- else
- {
- throw new StoreException("Can not identify the configured object type as an it implements"
- + " more than one configured object interfaces: " + interfaces);
- }
-
- }
-
- private Set<Class<?>> getImplementedInterfacesExtendingSuper(Class<?> classInstance, Class<?> superInterface)
- {
- Set<Class<?>> interfaces = new HashSet<Class<?>>();
- Class<?>[] classInterfaces = classInstance.getInterfaces();
- for (Class<?> interfaceClass : classInterfaces)
- {
- if (interfaceClass!= superInterface && superInterface.isAssignableFrom(interfaceClass))
- {
- interfaces.add(interfaceClass);
- }
- }
- Class<?> superClass = classInstance.getSuperclass();
- if (superClass != null)
- {
- Set<Class<?>> superClassInterfaces = getImplementedInterfacesExtendingSuper(superClass, superInterface);
- interfaces.addAll(superClassInterfaces);
- }
- return interfaces;
- }
-
@Override
public String toString()
{
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
index b674f1e7db..740ccf8200 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/ConfiguredObject.java
@@ -276,4 +276,7 @@ public interface ConfiguredObject<X extends ConfiguredObject<X>>
ConfiguredObject... otherParents);
void setAttributes(Map<String, Object> attributes) throws IllegalStateException, AccessControlException, IllegalArgumentException;
+
+ Class<? extends ConfiguredObject> getCategoryClass();
+
}
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java
index 1bdb638765..2a12284f1f 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AbstractConfiguredObject.java
@@ -256,6 +256,11 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
return _name;
}
+ public Class<? extends ConfiguredObject> getCategoryClass()
+ {
+ return getCategory(getClass());
+ }
+
public State getDesiredState()
{
return null; //TODO
diff --git a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java
index c23c4715e8..c5786fb981 100644
--- a/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java
+++ b/qpid/java/broker-core/src/test/java/org/apache/qpid/server/configuration/store/StoreConfigurationChangeListenerTest.java
@@ -63,7 +63,9 @@ public class StoreConfigurationChangeListenerTest extends QpidTestCase
{
notifyBrokerStarted();
Broker broker = mock(Broker.class);
+ when(broker.getCategoryClass()).thenReturn(Broker.class);
VirtualHost child = mock(VirtualHost.class);
+ when(child.getCategoryClass()).thenReturn(VirtualHost.class);
_listener.childAdded(broker, child);
verify(_store).save(any(ConfigurationEntry.class), any(ConfigurationEntry.class));
}
@@ -72,7 +74,9 @@ public class StoreConfigurationChangeListenerTest extends QpidTestCase
{
notifyBrokerStarted();
Broker broker = mock(Broker.class);
+ when(broker.getCategoryClass()).thenReturn(Broker.class);
VirtualHost child = mock(VirtualHost.class);
+ when(child.getCategoryClass()).thenReturn(VirtualHost.class);
_listener.childRemoved(broker, child);
verify(_store).save(any(ConfigurationEntry.class));
}
@@ -81,6 +85,7 @@ public class StoreConfigurationChangeListenerTest extends QpidTestCase
{
notifyBrokerStarted();
Broker broker = mock(Broker.class);
+ when(broker.getCategoryClass()).thenReturn(Broker.class);
_listener.attributeSet(broker, Broker.QUEUE_FLOW_CONTROL_SIZE_BYTES, null, 1);
verify(_store).save(any(ConfigurationEntry.class));
}