in broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java [242:376]
protected AbstractConfiguredObject(final ConfiguredObject<?> parent,
Map<String, Object> attributes,
TaskExecutor taskExecutor,
Model model)
{
_taskExecutor = taskExecutor;
if(taskExecutor == null)
{
throw new NullPointerException("task executor is null");
}
_model = model;
_parent = parent;
_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());
_stateChangeMethods = model.getTypeRegistry().getStateChangeMethods(getClass());
if(_parent instanceof AbstractConfiguredObject && ((AbstractConfiguredObject)_parent)._encrypter != null)
{
_encrypter = ((AbstractConfiguredObject)_parent)._encrypter;
}
else if(_parent instanceof ConfigurationSecretEncrypterSource && ((ConfigurationSecretEncrypterSource)_parent).getEncrypter() != null)
{
_encrypter = ((ConfigurationSecretEncrypterSource)_parent).getEncrypter();
}
if(_parent instanceof AbstractConfiguredObject && ((AbstractConfiguredObject)_parent).getAccessControl() != null)
{
_parentAccessControl = ((AbstractConfiguredObject)_parent).getAccessControl();
}
else if(_parent instanceof AccessControlSource && ((AccessControlSource)_parent).getAccessControl()!=null)
{
_parentAccessControl = ((AccessControlSource)_parent).getAccessControl();
}
if(_parent instanceof AbstractConfiguredObject && ((AbstractConfiguredObject)_parent).getSystemPrincipal() != null)
{
_systemPrincipal = ((AbstractConfiguredObject)_parent).getSystemPrincipal();
}
else if(_parent instanceof SystemPrincipalSource && ((SystemPrincipalSource)_parent).getSystemPrincipal()!=null)
{
_systemPrincipal = ((SystemPrincipalSource)_parent).getSystemPrincipal();
}
Object idObj = attributes.get(ID);
UUID uuid;
if(idObj == null)
{
uuid = UUID.randomUUID();
attributes = new LinkedHashMap<>(attributes);
attributes.put(ID, uuid);
}
else
{
uuid = AttributeValueConverter.UUID_CONVERTER.convert(idObj, this);
}
_id = uuid;
_name = AttributeValueConverter.STRING_CONVERTER.convert(attributes.get(NAME),this);
if(_name == null)
{
throw new IllegalArgumentException("The name attribute is mandatory for " + getClass().getSimpleName() + " creation.");
}
_type = ConfiguredObjectTypeRegistry.getType(getClass());
_managesChildStorage = managesChildren(_category) || managesChildren(_typeClass);
_bestFitInterface = calculateBestFitInterface();
if(attributes.get(TYPE) != null && !_type.equals(attributes.get(TYPE)))
{
throw new IllegalConfigurationException("Provided type is " + attributes.get(TYPE)
+ " but calculated type is " + _type);
}
else if(attributes.get(TYPE) == null)
{
attributes = new LinkedHashMap<>(attributes);
attributes.put(TYPE, _type);
}
populateChildTypeMaps();
Object durableObj = attributes.get(DURABLE);
_durable = AttributeValueConverter.BOOLEAN_CONVERTER.convert(durableObj == null
? ((ConfiguredSettableAttribute) (_attributeTypes
.get(DURABLE))).defaultValue()
: durableObj, this);
for (String name : getAttributeNames())
{
if (attributes.containsKey(name))
{
final Object value = attributes.get(name);
if (value != null)
{
_attributes.put(name, value);
}
}
}
if(!_attributes.containsKey(CREATED_BY))
{
final AuthenticatedPrincipal currentUser = AuthenticatedPrincipal.getCurrentUser();
if(currentUser != null)
{
_attributes.put(CREATED_BY, currentUser.getName());
}
}
if(!_attributes.containsKey(CREATED_TIME))
{
_attributes.put(CREATED_TIME, System.currentTimeMillis());
}
for(ConfiguredObjectAttribute<?,?> attr : _attributeTypes.values())
{
if(!attr.isDerived())
{
ConfiguredSettableAttribute<?,?> autoAttr = (ConfiguredSettableAttribute<?,?>)attr;
if (autoAttr.isMandatory() && !(_attributes.containsKey(attr.getName())
|| !"".equals(autoAttr.defaultValue())))
{
deleted();
throw new IllegalArgumentException("Mandatory attribute "
+ attr.getName()
+ " not supplied for instance of "
+ getClass().getName());
}
}
}
}