Add setLocation API for PUT response
authorJee Hyeok Kim <jihyeok13.kim@samsung.com>
Mon, 8 Aug 2016 08:03:42 +0000 (17:03 +0900)
committerJee Hyeok Kim <jihyeok13.kim@samsung.com>
Tue, 9 Aug 2016 01:18:56 +0000 (01:18 +0000)
1. Add setLocation for resource creator
2. Apply setLocation to MQ server

Change-Id: I143dd14471bb9b8055f7d3a60e9e58c22697d481
Signed-off-by: Jee Hyeok Kim <jihyeok13.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10123
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Minji Park <minjii.park@samsung.com>
cloud/messagequeue/src/main/java/org/iotivity/cloud/mqserver/resources/MQBrokerResource.java
cloud/messagequeue/src/main/java/org/iotivity/cloud/mqserver/topic/Topic.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/IResponse.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/coap/CoapMessage.java

index 3419704..84aae72 100644 (file)
@@ -84,7 +84,8 @@ public class MQBrokerResource extends Resource {
     private IResponse handleGetRequest(Device srcDevice, IRequest request) {
 
         // DISCOVER
-        if (request.getUriPathSegments().size() == getUriPathSegments().size()) {
+        if (request.getUriPathSegments().size() == getUriPathSegments()
+                .size()) {
             return discoverTopic(request);
         }
 
@@ -106,9 +107,11 @@ public class MQBrokerResource extends Resource {
     // CREATE topic
     private IResponse handlePutRequest(IRequest request) {
 
-        if (request.getUriPathSegments().size() == getUriPathSegments().size()) {
+        if (request.getUriPathSegments().size() == getUriPathSegments()
+                .size()) {
 
-            throw new BadRequestException("topic name is not included in request uri");
+            throw new BadRequestException(
+                    "topic name is not included in request uri");
         }
 
         return createTopic(request);
@@ -129,7 +132,8 @@ public class MQBrokerResource extends Resource {
     private IResponse createTopic(IRequest request) {
 
         // main topic creation request
-        if (request.getUriPathSegments().size() == getUriPathSegments().size() + 1) {
+        if (request.getUriPathSegments().size() == getUriPathSegments().size()
+                + 1) {
             return createMainTopic(request);
         }
 
@@ -158,8 +162,8 @@ public class MQBrokerResource extends Resource {
         String uriPath = request.getUriPath();
 
         String parentName = uriPath.substring(0, uriPath.lastIndexOf('/'));
-        String targetName = request.getUriPathSegments().get(
-                request.getUriPathSegments().size() - 1);
+        String targetName = request.getUriPathSegments()
+                .get(request.getUriPathSegments().size() - 1);
 
         Topic parentTopic = mTopicManager.getTopic(parentName);
 
@@ -230,14 +234,14 @@ public class MQBrokerResource extends Resource {
         }
 
         return MessageBuilder.createResponse(request, ResponseStatus.CONTENT,
-                ContentFormat.APPLICATION_CBOR, MessageQueueUtils.buildPayload(
-                        Constants.MQ_TOPICLIST, topicList));
+                ContentFormat.APPLICATION_CBOR, MessageQueueUtils
+                        .buildPayload(Constants.MQ_TOPICLIST, topicList));
     }
 
     private IResponse createMainTopic(IRequest request) {
 
-        String topicName = request.getUriPathSegments().get(
-                request.getUriPathSegments().size() - 1);
+        String topicName = request.getUriPathSegments()
+                .get(request.getUriPathSegments().size() - 1);
 
         String type = new String();
 
@@ -267,7 +271,10 @@ public class MQBrokerResource extends Resource {
             throw new InternalServerErrorException("create topic falied");
         }
 
-        return MessageBuilder.createResponse(request, ResponseStatus.CREATED);
+        IResponse response = MessageBuilder.createResponse(request,
+                ResponseStatus.CREATED);
+        response.setLocationPath(request.getUriPath());
+        return response;
     }
 
     private IResponse removeMainTopic(IRequest request) {
index fe8ae80..52a6321 100644 (file)
@@ -98,8 +98,8 @@ public class Topic {
 
     public IResponse handleCreateSubtopic(IRequest request) {
 
-        String newTopicName = request.getUriPathSegments().get(
-                request.getUriPathSegments().size() - 1);
+        String newTopicName = request.getUriPathSegments()
+                .get(request.getUriPathSegments().size() - 1);
 
         String newTopicType = new String();
 
@@ -122,7 +122,10 @@ public class Topic {
             mSubtopics.put(newTopicName, newTopic);
         }
 
-        return MessageBuilder.createResponse(request, ResponseStatus.CREATED);
+        IResponse response = MessageBuilder.createResponse(request,
+                ResponseStatus.CREATED);
+        response.setLocationPath(request.getUriPath());
+        return response;
     }
 
     public IResponse handleRemoveSubtopic(IRequest request, String topicName) {
@@ -163,8 +166,8 @@ public class Topic {
         }
 
         synchronized (mSubscribers) {
-            mSubscribers.put(request.getRequestId(), new TopicSubscriber(
-                    srcDevice, request));
+            mSubscribers.put(request.getRequestId(),
+                    new TopicSubscriber(srcDevice, request));
         }
 
         return MessageBuilder.createResponse(request, ResponseStatus.CONTENT,
@@ -175,8 +178,8 @@ public class Topic {
 
         synchronized (mSubscribers) {
 
-            TopicSubscriber subscriber = mSubscribers.get(request
-                    .getRequestId());
+            TopicSubscriber subscriber = mSubscribers
+                    .get(request.getRequestId());
 
             mSubscribers.remove(subscriber.mRequest.getRequestId());
 
@@ -254,8 +257,8 @@ public class Topic {
         synchronized (mSubscribers) {
             for (TopicSubscriber subscriber : mSubscribers.values()) {
 
-                subscriber.mSubscriber.sendResponse(MessageBuilder
-                        .createResponse(subscriber.mRequest,
+                subscriber.mSubscriber.sendResponse(
+                        MessageBuilder.createResponse(subscriber.mRequest,
                                 ResponseStatus.CONTENT,
                                 ContentFormat.APPLICATION_CBOR, mLatestData));
             }
index 236640f..e4b0ced 100644 (file)
@@ -29,4 +29,6 @@ public interface IResponse {
     public int getPayloadSize();
 
     public byte[] getPayload();
+
+    public void setLocationPath(String locationPath);
 }
index c98afac..b89c6b4 100644 (file)
@@ -414,4 +414,26 @@ public abstract class CoapMessage extends Message {
 
         return ContentFormat.NO_CONTENT;
     }
+
+    @Override
+    public void setLocationPath(String locationPath) {
+        if (location_path == null) {
+            location_path = new ArrayList<>();
+        } else {
+            location_path.clear();
+        }
+
+        if (locationPath == null || locationPath.length() == 0) {
+            location_path.clear();
+            location_path = null;
+            return;
+        }
+
+        String[] pathSegments = locationPath.split("/");
+        for (String pathSegment : pathSegments) {
+            if (pathSegment.length() == 0)
+                continue;
+            location_path.add(pathSegment.getBytes(StandardCharsets.UTF_8));
+        }
+    }
 }