summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
index 05f980baca..0056f37b9a 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
@@ -120,8 +120,11 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
private final TaskExecutor _taskExecutor;
private final Class<? extends ConfiguredObject> _category;
+ private final Class<? extends ConfiguredObject> _typeClass;
private final Class<? extends ConfiguredObject> _bestFitInterface;
private final Model _model;
+ private final boolean _managesChildStorage;
+
@ManagedAttributeField
private long _createdTime;
@@ -204,6 +207,8 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
_model = model;
_category = ConfiguredObjectTypeRegistry.getCategory(getClass());
+ Class<? extends ConfiguredObject> typeClass = model.getTypeRegistry().getTypeClass(getClass());
+ _typeClass = typeClass == null ? _category : typeClass;
_attributeTypes = model.getTypeRegistry().getAttributeTypes(getClass());
_automatedFields = model.getTypeRegistry().getAutomatedFields(getClass());
@@ -240,6 +245,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
}
_type = ConfiguredObjectTypeRegistry.getType(getClass());
+ _managesChildStorage = managesChildren(_category) || managesChildren(_typeClass);
_bestFitInterface = calculateBestFitInterface();
if(attributes.get(TYPE) != null && !_type.equals(attributes.get(TYPE)))
@@ -313,6 +319,11 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
}
}
+ private boolean managesChildren(final Class<? extends ConfiguredObject> clazz)
+ {
+ return clazz.getAnnotation(ManagedObject.class).managesChildren();
+ }
+
private Class<? extends ConfiguredObject> calculateBestFitInterface()
{
Set<Class<? extends ConfiguredObject>> candidates = new HashSet<Class<? extends ConfiguredObject>>();
@@ -973,11 +984,24 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
return _model;
}
+ @Override
public Class<? extends ConfiguredObject> getCategoryClass()
{
return _category;
}
+ @Override
+ public Class<? extends ConfiguredObject> getTypeClass()
+ {
+ return _typeClass;
+ }
+
+ @Override
+ public boolean managesChildStorage()
+ {
+ return _managesChildStorage;
+ }
+
public Map<String,String> getContext()
{
return _context == null ? Collections.<String,String>emptyMap() : Collections.unmodifiableMap(_context);