Get/Put overload implementation in OCResource. Allows for specifiying interface...
authorErich Keane <erich.keane@intel.com>
Thu, 4 Sep 2014 18:23:16 +0000 (11:23 -0700)
committerErich Keane <erich.keane@intel.com>
Mon, 8 Sep 2014 17:23:49 +0000 (10:23 -0700)
Patch 2: fixing the emplace for a crappy old compiler
Patch 3: Sashi's comments
Patch 4: Sudarshan's comments
Change-Id: Ic1e9c07424229325443c532bcb03c67c5bfce6f1

examples/roomclient.cpp
include/IClientWrapper.h
include/InProcClientWrapper.h
include/OCApi.h
include/OCResource.h
include/OutOfProcClientWrapper.h
src/InProcClientWrapper.cpp
src/OCResource.cpp

index f9311a3..b6b2044 100644 (file)
@@ -113,12 +113,10 @@ void putRoomRepresentation(std::shared_ptr<OCResource> resource)
 
         // Create QueryParameters Map and add query params (if any)
         QueryParamsMap qp;
-        qp["if"] = BATCH_INTERFACE;
-
         rep.setAttributeMap(attributeMap);
 
         // Invoke resource's pit API with attribute map, query map and the callback parameter
-        resource->put(rep, qp, &onPut);
+        resource->put("core.room", BATCH_INTERFACE, rep, qp, &onPut);
     }
 }
 
@@ -178,8 +176,7 @@ void getRoomRepresentation(std::shared_ptr<OCResource> resource)
         // Invoke resource's get API with the callback parameter
 
         QueryParamsMap qp;
-        qp["if"] = BATCH_INTERFACE; // LINK_INTERFACE; 
-        resource->get(qp, &onGet);
+        resource->get("core.room", BATCH_INTERFACE, qp, &onGet);
     }
 }
 
index 471d26e..a486d8a 100644 (file)
@@ -37,10 +37,10 @@ namespace OC
             std::function<void(std::shared_ptr<OCResource>)>& callback) = 0;
         
         virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, const QueryParamsMap& queryParams, 
-            std::function<void(const OCRepresentation, const int)>& callback)=0;
+            GetCallback& callback)=0;
 
         virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const OCRepresentation& attributes, 
-            const QueryParamsMap& queryParams, std::function<void(const OCRepresentation, const int)>& callback) = 0;
+            const QueryParamsMap& queryParams, PutCallback& callback) = 0;
 
         virtual OCStackResult ObserveResource(ObserveType observeType, OCDoHandle* handle, 
             const std::string& host, const std::string& uri, const QueryParamsMap& queryParams, 
index fac0c0a..4ecc4a0 100644 (file)
@@ -45,19 +45,19 @@ namespace OC
 
         virtual OCStackResult ListenForResource(const std::string& serviceUrl, const std::string& resourceType, 
             std::function<void(std::shared_ptr<OCResource>)>& callback);
-        
+
         virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, const QueryParamsMap& queryParams, 
-            std::function<void(const OCRepresentation, const int)>& callback);
-        
-        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, const OCRepresentation& attributes, 
-            const QueryParamsMap& queryParams, std::function<void(const OCRepresentation, const int)>& callback);
-        
+            GetCallback& callback);
+
+        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, 
+            const OCRepresentation& attributes, const QueryParamsMap& queryParams, PutCallback& callback);
+
         virtual OCStackResult ObserveResource(ObserveType observeType, OCDoHandle* handle, 
             const std::string& host, const std::string& uri, const QueryParamsMap& queryParams, 
             std::function<void(const OCRepresentation&, const int&, const int&)>& callback);
-        
+
         virtual OCStackResult CancelObserveResource(OCDoHandle handle, const std::string& host, const std::string& uri);
-        
+
         virtual OCStackResult subscribePresence(OCDoHandle* handle, const std::string& host,
             std::function<void(OCStackResult, const int&)> presenceHandler);
 
index f221a85..5f61c0e 100644 (file)
@@ -25,7 +25,7 @@
 #include <sstream>
 #include <vector>
 #include <map>
-
+#include <memory>
 #include "ocstack.h"
 
 namespace OC {
@@ -207,6 +207,8 @@ namespace OC {
             m_resourceInterfaces = resourceInterfaces;
         }
     };
+ typedef std::function<void(const OCRepresentation&, const int)> GetCallback;
+ typedef std::function<void(const OCRepresentation&, const int)> PutCallback;
 } // namespace OC
 
 #endif  
index 0cdf760..810dc4c 100644 (file)
@@ -55,7 +55,6 @@ namespace OC
     friend class InProcClientWrapper;
     public:
         typedef std::shared_ptr<OCResource> Ptr;
-
         /**
         * Virtual destructor
         */
@@ -71,7 +70,7 @@ namespace OC
         * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. 
         * NOTE: OCStackResult is defined in ocstack.h.
         */
-        OCStackResult get(const QueryParamsMap& queryParametersMap, std::function<void(const OCRepresentation, const int)> attributeHandler);
+        OCStackResult get(const QueryParamsMap& queryParametersMap, GetCallback attributeHandler);
         
         /**
         * Function to get the attributes of a resource. 
@@ -95,11 +94,8 @@ namespace OC
         * Currently, single GET request is allowed to do operate on single resource type or resource interface. In future, a single GET <br>
         * can operate on multiple resource types and interfaces. <br>
         * NOTE: A client can traverse a tree or graph by doing successive GETs on the returned resources at a node.<br>
-        * TODO: Implementation
         */
-        OCStackResult get(const std::string& resourceType, const std::string& resourceInterface, const QueryParamsMap& queryParametersMap,
-            std::function<void(const OCRepresentation& rep, const std::vector<std::string>& resourceUriList, const int& errorCode)> attributeHandler) 
-            { return OC_STACK_OK; }
+        OCStackResult get(const std::string& resourceType, const std::string& resourceInterface, const QueryParamsMap& queryParametersMap, GetCallback attributeHandler); 
 
         /**
         * Function to set the attributes of a resource (via PUT)
@@ -115,7 +111,7 @@ namespace OC
         * NOTE: OCStackResult is defined in ocstack.h.
         */
         OCStackResult put(const OCRepresentation& attributeMap, const QueryParamsMap& queryParametersMap, 
-            std::function< void(const OCRepresentation,const int)> attributeHandler);
+            PutCallback attributeHandler);
 
         /**
         * Function to set the attributes of a resource (via PUT)
@@ -132,12 +128,10 @@ namespace OC
         *        set of attribute names and values which needs to be modified
         * @return OCStackResult return value of this API. Returns OC_STACK_OK if success. <br>
         * NOTE: OCStackResult is defined in ocstack.h. <br>
-        * TODO: consider to input hrefs for resource collection
-        * TODO: Implementation
         */
         OCStackResult put(const std::string& resourceType, const std::string& resourceInterface,
             const OCRepresentation& attributeMap, const QueryParamsMap& queryParametersMap, 
-            std::function< void(const OCRepresentation&,const int&)> attributeHandler) { return OC_STACK_OK; }
+            PutCallback attributeHandler);
 
         /**
         * Function to set observation on the resource
index 7333bcf..a769f4b 100644 (file)
@@ -34,13 +34,10 @@ namespace OC
             std::function<void(std::shared_ptr<OCResource>)>& callback) {return OC_STACK_NOTIMPL;}
 
         virtual OCStackResult GetResourceAttributes(const std::string& host, const std::string& uri, 
-            const QueryParamsMap& queryParams, std::function<void(const OCRepresentation, const int)>& callback){return OC_STACK_NOTIMPL;}
-/*        
-        virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, 
-            const AttributeMap& attributes, const QueryParamsMap& queryParams, std::function<void(const AttributeMap,const int)>& callback){return OC_STACK_NOTIMPL;}
- */       
+            const QueryParamsMap& queryParams, GetCallback& callback){return OC_STACK_NOTIMPL;}
+
         virtual OCStackResult SetResourceAttributes(const std::string& host, const std::string& uri, 
-            const OCRepresentation& attributes, const QueryParamsMap& queryParams, std::function<void(const OCRepresentation,const int)>& callback){return OC_STACK_NOTIMPL;}
+            const OCRepresentation& attributes, const QueryParamsMap& queryParams, PutCallback& callback){return OC_STACK_NOTIMPL;}
 
         virtual OCStackResult ObserveResource(ObserveType observeType, OCDoHandle* handle, const std::string& host, 
             const std::string& uri, const QueryParamsMap& queryParams, 
index 01a08fd..5393291 100644 (file)
@@ -233,9 +233,14 @@ namespace OC
         return result;
     }
    
-    struct GetSetContext
+    struct GetContext
     {
-        std::function<void(const OCRepresentation&, const int&)> callback;
+        GetCallback callback;
+    };
+
+    struct SetContext
+    {
+        PutCallback callback;
     };
    
         
@@ -347,7 +352,7 @@ namespace OC
 
     OCStackApplicationResult getResourceCallback(void* ctx, OCDoHandle handle, OCClientResponse* clientResponse)
     {
-        GetSetContext* context = static_cast<GetSetContext*>(ctx);
+        GetContext* context = static_cast<GetContext*>(ctx);
 
         std::cout << "GET JSON: " << (char*) clientResponse->resJSONPayload << endl;
         
@@ -363,11 +368,11 @@ namespace OC
         return OC_STACK_DELETE_TRANSACTION;
     }
     OCStackResult InProcClientWrapper::GetResourceAttributes(const std::string& host, const std::string& uri, 
-        const QueryParamsMap& queryParams, std::function<void(const OCRepresentation, const int)>& callback)
+        const QueryParamsMap& queryParams, GetCallback& callback)
     {
         OCStackResult result;
         OCCallbackData* cbdata = new OCCallbackData();
-        GetSetContext* ctx = new GetSetContext();
+        GetContext* ctx = new GetContext();
         ctx->callback = callback;
         cbdata->context = static_cast<void*>(ctx);
         cbdata->cb = &getResourceCallback;
@@ -398,7 +403,7 @@ namespace OC
     
     OCStackApplicationResult setResourceCallback(void* ctx, OCDoHandle handle, OCClientResponse* clientResponse)
     {
-        GetSetContext* context = static_cast<GetSetContext*>(ctx);
+        SetContext* context = static_cast<SetContext*>(ctx);
         OCRepresentation attrs;
 
         if(clientResponse->result == OC_STACK_OK)
@@ -459,11 +464,12 @@ namespace OC
         return payload.str();
     }
 
-    OCStackResult InProcClientWrapper::SetResourceAttributes(const std::string& host, const std::string& uri, const OCRepresentation& attributes, const QueryParamsMap& queryParams, std::function<void(const OCRepresentation,const int)>& callback)
+    OCStackResult InProcClientWrapper::SetResourceAttributes(const std::string& host, const std::string& uri,
+        const OCRepresentation& attributes, const QueryParamsMap& queryParams, PutCallback& callback)
     {
         OCStackResult result; 
         OCCallbackData* cbdata = new OCCallbackData();
-        GetSetContext* ctx = new GetSetContext();
+        SetContext* ctx = new SetContext();
         ctx->callback = callback;
         cbdata->cb = &setResourceCallback;
 
index 356f2f6..3c841f0 100644 (file)
@@ -37,7 +37,7 @@ namespace OC {
     {
     }
 
-    OCStackResult OCResource::get(const QueryParamsMap& queryParametersMap, std::function<void(const OCRepresentation, const int)> attributeHandler)
+    OCStackResult OCResource::get(const QueryParamsMap& queryParametersMap, GetCallback attributeHandler)
     {
         auto cw = m_clientWrapper.lock();
 
@@ -51,8 +51,34 @@ namespace OC {
         }
     }
 
+    OCStackResult OCResource::get(const std::string& resourceType, const std::string& resourceInterface,
+        const QueryParamsMap& queryParametersMap, GetCallback attributeHandler)
+    {
+        auto cw = m_clientWrapper.lock();
+
+        if(cw)
+        {
+            QueryParamsMap mapCpy(queryParametersMap);
+
+            if(!resourceType.empty())
+            {
+                mapCpy["rt"]=resourceType;
+            }
+            if(!resourceInterface.empty())
+            {
+                mapCpy["if"]= resourceInterface;
+            }
+
+            return get(mapCpy, attributeHandler);
+        }
+        else
+        {
+            return OC_STACK_ERROR;
+        }
+    }
+
     OCStackResult OCResource::put(const OCRepresentation& rep, const QueryParamsMap& queryParametersMap, 
-        std::function<void(const OCRepresentation, const int)> attributeHandler)
+        PutCallback attributeHandler)
     {
         auto cw = m_clientWrapper.lock();
 
@@ -66,6 +92,33 @@ namespace OC {
         }
     }
 
+    OCStackResult OCResource::put(const std::string& resourceType, const std::string& resourceInterface,
+        const OCRepresentation& rep, const QueryParamsMap& queryParametersMap,
+        PutCallback attributeHandler)
+    {
+        auto cw = m_clientWrapper.lock();
+
+        if(cw)
+        {
+            QueryParamsMap mapCpy(queryParametersMap);
+
+            if(!resourceType.empty())
+            {
+                mapCpy["rt"]=resourceType;
+            }
+            if(!resourceInterface.empty())
+            {
+                mapCpy["if"]=resourceInterface;
+            }
+
+            return put(rep, mapCpy, attributeHandler);
+        }
+        else
+        {
+            return OC_STACK_ERROR;
+        }
+    }
+
     OCStackResult OCResource::observe(ObserveType observeType, const QueryParamsMap& queryParametersMap, 
         std::function<void(const OCRepresentation&, const int&, const int&)> observeHandler)
     {