summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-02-09 22:57:49 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-02-09 22:57:49 +0000
commitd9ed5bf6152fe743928f18c1c821197072d89964 (patch)
treee0467d95778ce1002606940037498a1305c5cab5
parenta088ea6d47d23b1e54c1cecc02a26fe569f3982b (diff)
downloadqpid-python-d9ed5bf6152fe743928f18c1c821197072d89964.tar.gz
Implement update
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-amqp-1-0-management@1566462 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java48
1 files changed, 48 insertions, 0 deletions
diff --git a/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java b/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
index 2958fed0a1..18795f58b8 100644
--- a/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
+++ b/java/broker-plugins/management-amqp/src/main/java/org/apache/qpid/server/management/amqp/ManagementNode.java
@@ -422,6 +422,10 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN
{
return performDeleteOperation(requestMessage, entity);
}
+ else if(UPDATE_OPERATION.equals(operation))
+ {
+ return performUpdateOperation(requestMessage, entity);
+ }
else
{
return createFailureResponse(requestMessage, NOT_IMPLEMENTED_STATUS_CODE, "Unable to perform the {0} operation",operation);
@@ -486,6 +490,50 @@ class ManagementNode implements MessageSource<ManagementNodeConsumer,ManagementN
return InternalMessage.createMapMessage(_virtualHost.getMessageStore(),responseHeader, Collections.emptyMap());
}
+
+ private InternalMessage performUpdateOperation(final InternalMessage requestMessage, final ConfiguredObject entity)
+ {
+ final InternalMessageHeader requestHeader = requestMessage.getMessageHeader();
+ final MutableMessageHeader responseHeader = new MutableMessageHeader();
+ responseHeader.setCorrelationId(requestHeader.getCorrelationId() == null
+ ? requestHeader.getMessageId()
+ : requestHeader.getCorrelationId());
+ responseHeader.setMessageId(UUID.randomUUID().toString());
+ responseHeader.setHeader(NAME_ATTRIBUTE, entity.getName());
+ responseHeader.setHeader(IDENTITY_ATTRIBUTE, entity.getId().toString());
+ final String type = getManagementClass(entity.getClass()).getName();
+ responseHeader.setHeader(TYPE_ATTRIBUTE, type);
+
+ Object messageBody = requestMessage.getMessageBody();
+ if(messageBody instanceof Map)
+ {
+ try
+ {
+ entity.setAttributes((Map)messageBody);
+ return performReadOperation(requestMessage, entity);
+ }
+ catch(RuntimeException e)
+ {
+ if (e instanceof AccessControlException || e.getCause() instanceof AMQSecurityException)
+ {
+ return createFailureResponse(requestMessage, STATUS_CODE_FORBIDDEN, e.getMessage());
+ }
+ else
+ {
+ throw e;
+ }
+ }
+ }
+ else
+ {
+ return createFailureResponse(requestMessage,
+ STATUS_CODE_BAD_REQUEST,
+ "The message body in the request was not of the correct type");
+ }
+
+
+ }
+
private ConfiguredObject findSubject(final String name, final String id, final String type)
{
ConfiguredObject subject;