Add response handler in cloud interface to set uri in response
authorMinji Park <minjii.park@samsung.com>
Thu, 21 Jul 2016 01:36:17 +0000 (10:36 +0900)
committerJee Hyeok Kim <jihyeok13.kim@samsung.com>
Thu, 21 Jul 2016 05:53:26 +0000 (05:53 +0000)
- response handler added in DiResource in interface
   to make response have uri with di prefix

Change-Id: I02806e81c65b29bcf9d4b7a3ed8bcb586cc09d31
Signed-off-by: Minji Park <minjii.park@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9529
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jee Hyeok Kim <jihyeok13.kim@samsung.com>
cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/DiResource.java
cloud/stack/src/main/java/org/iotivity/cloud/base/protocols/MessageBuilder.java

index 84b8675..332fc28 100644 (file)
@@ -36,6 +36,7 @@ import org.iotivity.cloud.base.exception.ServerException.PreconditionFailedExcep
 import org.iotivity.cloud.base.protocols.IRequest;
 import org.iotivity.cloud.base.protocols.IResponse;
 import org.iotivity.cloud.base.protocols.MessageBuilder;
+import org.iotivity.cloud.base.protocols.coap.CoapResponse;
 import org.iotivity.cloud.base.protocols.enums.ContentFormat;
 import org.iotivity.cloud.base.protocols.enums.ResponseStatus;
 import org.iotivity.cloud.base.resource.Resource;
@@ -92,6 +93,20 @@ public class DiResource extends Resource {
         return uriPath.toString();
     }
 
+    private IResponse convertReponseUri(IResponse response, String di) {
+
+        String convertedUri = new String();
+
+        CoapResponse coapResponse = (CoapResponse) response;
+
+        if (coapResponse.getUriPath().isEmpty() == false) {
+            convertedUri = "/di/" + di + "/" + coapResponse.getUriPath();
+        }
+
+        return MessageBuilder
+                .modifyResponse(response, convertedUri, null, null);
+    }
+
     class LinkInterfaceHandler implements IResponseEventHandler {
         private Cbor<List<HashMap<String, Object>>> mCbor      = new Cbor<>();
         private String                              mTargetDI  = null;
@@ -117,9 +132,11 @@ public class DiResource extends Resource {
                 convertHref(linkPayload);
             }
 
-            mSrcDevice.sendResponse(MessageBuilder.modifyResponse(response,
-                    ContentFormat.APPLICATION_CBOR, linkPayload != null
-                            ? mCbor.encodingPayloadToCbor(linkPayload) : null));
+            mSrcDevice.sendResponse(MessageBuilder.modifyResponse(
+                    convertReponseUri(response, mTargetDI),
+                    ContentFormat.APPLICATION_CBOR,
+                    linkPayload != null ? mCbor
+                            .encodingPayloadToCbor(linkPayload) : null));
         }
     }
 
@@ -133,12 +150,27 @@ public class DiResource extends Resource {
 
         String deviceId = request.getUriPathSegments().get(1);
 
-        requestChannel.sendRequest(
-                MessageBuilder.modifyRequest(request,
-                        extractTargetUriPath(request), null, null, null),
+        requestChannel.sendRequest(MessageBuilder.modifyRequest(request,
+                extractTargetUriPath(request), null, null, null),
                 new LinkInterfaceHandler(deviceId, srcDevice));
     }
 
+    class DefaultResponseHandler implements IResponseEventHandler {
+        private String mTargetDI  = null;
+        private Device mSrcDevice = null;
+
+        public DefaultResponseHandler(String targetDI, Device srcDevice) {
+            mTargetDI = targetDI;
+            mSrcDevice = srcDevice;
+        }
+
+        @Override
+        public void onResponseReceived(IResponse response) {
+
+            mSrcDevice.sendResponse(convertReponseUri(response, mTargetDI));
+        }
+    }
+
     // This is optional method for packet handling
     @Override
     public void onDefaultRequestReceived(Device srcDevice, IRequest request)
@@ -150,9 +182,11 @@ public class DiResource extends Resource {
             throw new NotFoundException();
         }
 
-        requestChannel.sendRequest(
-                MessageBuilder.modifyRequest(request,
-                        extractTargetUriPath(request), null, null, null),
-                srcDevice);
+        String deviceId = request.getUriPathSegments().get(1);
+
+        requestChannel.sendRequest(MessageBuilder.modifyRequest(request,
+                extractTargetUriPath(request), null, null, null),
+                new DefaultResponseHandler(deviceId, srcDevice));
     }
-}
+
+}
\ No newline at end of file
index c68954a..5a703b7 100644 (file)
@@ -44,6 +44,7 @@ public class MessageBuilder {
         if (request instanceof CoapRequest) {
             CoapRequest coapRequest = (CoapRequest) request;
             CoapResponse coapResponse = new CoapResponse(responseStatus);
+            coapResponse.setUriPath(coapRequest.getUriPath());
             coapResponse.setToken(coapRequest.getToken());
             if (payload != null) {
                 coapResponse.setContentFormat(format);
@@ -117,8 +118,17 @@ public class MessageBuilder {
     public static IResponse modifyResponse(IResponse orgResponse,
             ContentFormat contentFormat, byte[] payload) {
 
+        return modifyResponse(orgResponse, null, contentFormat, payload);
+    }
+
+    public static IResponse modifyResponse(IResponse orgResponse,
+            String uriPath, ContentFormat contentFormat, byte[] payload) {
+
         CoapResponse coapResponse = (CoapResponse) orgResponse;
 
+        if (uriPath != null) {
+            coapResponse.setUriPath(uriPath);
+        }
         if (payload != null) {
             coapResponse.setContentFormat(contentFormat);
             coapResponse.setPayload(payload);