public CreateResourceReport createResource(CreateResourceReport report) {
if (report.getPluginConfiguration().getSimpleValue("path").contains("jdbc")) {
ASConnection connection = getASConnection();
ConfigurationDefinition configDef = report.getResourceType().getResourceConfigurationDefinition();
CreateResourceDelegate delegate = new CreateResourceDelegate(configDef, connection, getAddress()) {
@Override
protected Map<String, Object> prepareSimplePropertyMap(PropertyMap property, PropertyDefinitionMap propertyDefinition) {
// Note this is all pretty much copied from ConfigurationWriteDelegate.prepareSimplePropertyMap
Map<String,PropertyDefinition> memberDefinitions = propertyDefinition.getMap();
Map<String,Object> results = new HashMap<String,Object>();
for (String name : memberDefinitions.keySet()) {
PropertyDefinition memberDefinition = memberDefinitions.get(name);
if (memberDefinition instanceof PropertyDefinitionSimple) {
PropertyDefinitionSimple pds = (PropertyDefinitionSimple) memberDefinition;
PropertySimple ps = (PropertySimple) property.get(name);
if ((ps==null || ps.getStringValue()==null ) && !pds.isRequired())
continue;
if (ps!=null)
results.put(name,ps.getStringValue());
}
// This is added since it isn't supported already.
// Should be merged with https://github.com/rhq-project/rhq/pull/128
else if (memberDefinition instanceof PropertyDefinitionMap) {
PropertyDefinitionMap pdm = (PropertyDefinitionMap) memberDefinition;
PropertyMap pm = (PropertyMap) property.get(name);
if ((pm==null || pm.getMap().isEmpty()) && !pdm.isRequired())
continue;
if (pm != null) {
Map<String, Object> innerMap = prepareSimplePropertyMap(pm, pdm);
results.put(name, innerMap);
}
}
else {
log.error(" *** not yet supported *** : " + memberDefinition.getName());
}
}
return results;
}
};
report = delegate.createResource(report);
} else {
report = super.createResource(report);
}
// Since our properties are can be added at parent resource creation time, we have to make sure they are added.
if (report.getStatus() == CreateResourceStatus.SUCCESS) {
// Now we have to send this as an update, so the properties are created properly
ConfigurationUpdateReport updateReport = new ConfigurationUpdateReport(report.getResourceConfiguration());
ConfigurationDefinition configDef = report.getResourceType().getResourceConfigurationDefinition();
Address address = new Address(getAddress());
address.add(report.getPluginConfiguration().getSimpleValue("path"),report.getUserSpecifiedResourceName());
ConfigurationWriteDelegate delegate = new ConfigurationWriteDelegate(configDef, getASConnection(), address);
delegate.updateResourceConfiguration(updateReport);
if (updateReport.getStatus() != ConfigurationUpdateStatus.SUCCESS) {
report.setErrorMessage(updateReport.getErrorMessage());
report.setStatus(CreateResourceStatus.FAILURE);
}