add sample for sharing light resource using group.
[platform/upstream/iotivity.git] / cloud / interface / src / main / java / org / iotivity / cloud / ciserver / resources / proxy / rd / ResourceFind.java
index ad9a7e3..f5eb7b9 100644 (file)
@@ -49,22 +49,23 @@ import org.iotivity.cloud.util.Cbor;
 
 public class ResourceFind extends Resource {
     IRequestChannel                       mASServer = null;
+    IRequestChannel                       mRDServer = null;
     private Cbor<HashMap<String, Object>> mCbor     = new Cbor<>();
 
     public ResourceFind() {
         super(Arrays.asList(Constants.PREFIX_OIC, Constants.WELL_KNOWN_URI));
 
         mASServer = ConnectorPool.getConnection("account");
+        mRDServer = ConnectorPool.getConnection("rd");
     }
 
     class AccountReceiveHandler implements IResponseEventHandler {
 
-        IRequestChannel  mRDServer = null;
         private Device   mSrcDevice;
         private IRequest mRequest;
 
         public AccountReceiveHandler(IRequest request, Device srcDevice) {
-            mRDServer = ConnectorPool.getConnection("rd");
+
             mSrcDevice = srcDevice;
             mRequest = request;
         }
@@ -96,8 +97,13 @@ public class ResourceFind extends Resource {
                         }
                     } else {
                         String additionalQuery = makeAdditionalQuery(
-                                payloadData, mSrcDevice.getDeviceId());
-
+                                payloadData);
+                        if (additionalQuery == null) {
+                            mSrcDevice.sendResponse(
+                                    MessageBuilder.createResponse(mRequest,
+                                            ResponseStatus.BAD_REQUEST));
+                            return;
+                        }
                         mRequest = MessageBuilder.modifyRequest(mRequest, null,
                                 (mRequest.getUriQuery() != null
                                         ? mRequest.getUriQuery() : "")
@@ -114,8 +120,8 @@ public class ResourceFind extends Resource {
             }
         }
 
-        private String makeAdditionalQuery(HashMap<String, Object> payloadData,
-                String did) {
+        private String makeAdditionalQuery(
+                HashMap<String, Object> payloadData) {
 
             StringBuilder additionalQuery = new StringBuilder();
 
@@ -152,19 +158,26 @@ public class ResourceFind extends Resource {
     @Override
     public void onDefaultRequestReceived(Device srcDevice, IRequest request)
             throws ServerException {
-        StringBuffer uriQuery = new StringBuffer();
-        uriQuery.append(Constants.REQ_MEMBER_ID + "=" + srcDevice.getUserId());
-
-        StringBuffer uriPath = new StringBuffer();
-        uriPath.append(Constants.PREFIX_OIC + "/");
-        uriPath.append(Constants.ACL_URI + "/");
-        uriPath.append(Constants.GROUP_URI + "/");
-        uriPath.append(srcDevice.getUserId());
-
-        IRequest requestToAS = MessageBuilder.createRequest(RequestMethod.GET,
-                uriPath.toString(), uriQuery.toString());
-
-        mASServer.sendRequest(requestToAS,
-                new AccountReceiveHandler(request, srcDevice));
+        if (request.getUriQuery() != null && request.getUriQueryMap()
+                .containsKey(Constants.REQ_DEVICE_ID)) {
+
+            mRDServer.sendRequest(request, srcDevice);
+        } else {
+            StringBuffer uriQuery = new StringBuffer();
+            uriQuery.append(
+                    Constants.REQ_MEMBER_ID + "=" + srcDevice.getUserId());
+
+            StringBuffer uriPath = new StringBuffer();
+            uriPath.append(Constants.PREFIX_OIC + "/");
+            uriPath.append(Constants.ACL_URI + "/");
+            uriPath.append(Constants.GROUP_URI + "/");
+            uriPath.append(srcDevice.getUserId());
+
+            IRequest requestToAS = MessageBuilder.createRequest(
+                    RequestMethod.GET, uriPath.toString(), uriQuery.toString());
+
+            mASServer.sendRequest(requestToAS,
+                    new AccountReceiveHandler(request, srcDevice));
+        }
     }
 }
\ No newline at end of file