if (debug)
{
log.debug("Executing request for operation " + operationName + " at address " + address);
}
ManagedResource root = getRootResource();
if (root.getSubResource(address) == null)
{
throw new ResourceNotFoundException("Could not locate managed resource for address '" + address + "'");
}
OperationHandler operationHandler = root.getOperationHandler(address, operationName);
if (operationHandler != null)
{
// Obtain binding provider given managed component.
String componentName = (address.size() >= 1) ? address.get(0) : null;
BindingProvider bindingProvider = managementService.getBindingProvider(componentName);
// ModelProvider to use for de-typed models
ModelProvider modelProvider = DmrModelProvider.INSTANCE;
// Execute operation for given registered operation handler
BasicResultHandler resultHandler = new BasicResultHandler();
operationHandler.execute(new OperationContextImpl(request, root, runtimeContext, externalContext, bindingProvider, modelProvider), resultHandler);
if (resultHandler.getFailureDescription() != null)
{
return new FailureResponse(modelProvider.newModel().set(resultHandler.getFailureDescription()));
}
else if (resultHandler.getFailure() != null)
{
return new FailureResponse(resultHandler.getFailure());
}
else
{
Object result = resultHandler.getResult();
// Set descriptions based on the ManagedResource so 'dynamic' extensions don't have to.
if (result instanceof ReadResourceModel)
{
ReadResourceModel readResource = (ReadResourceModel) result;
if (!readResource.isChildDescriptionsSet())
{
populateChildDescriptions(root, address, readResource);
}
if (readResource.getOperations().isEmpty())
{
Map<String, ManagedDescription> descriptions = root.getOperationDescriptions(address);
for (Map.Entry<String, ManagedDescription> desc : descriptions.entrySet())
{
readResource.addOperation(new NamedDescription(desc.getKey(), desc.getValue().getDescription()));
}
}