Added API to obtain OCResourceObject from RCSRemoteResourceObject.
authorAbhishek Pandey <abhi.siso@samsung.com>
Thu, 21 Jul 2016 10:31:23 +0000 (16:01 +0530)
committerAshok Babu Channa <ashok.channa@samsung.com>
Thu, 4 Aug 2016 05:01:53 +0000 (05:01 +0000)
Resource Encapsulation layer's RCSRemoteResourceObject class does not provide
all the operations (e.g. PUT, DELETE) that IoTivity base layer provides.

If application wants to invoke base layer API's directly, it needs to obtain
OCResoureObject. Obtaining this object is not possible without calling base
layer discovery. However, if application wants to use both RE layer and Base
layer there will be redundant discovery going on.

To avoid this problem, we added an API that returns OCResoureObject maintained
in RE layer. Using this object, application can call base layer APIs without
additional discovery.

Change-Id: I87757d70bd5df3463c3573831d7392e7b45c670a
Signed-off-by: Abhishek Pandey <abhi.siso@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9551
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Hun-je Yeon <hunje.yeon@samsung.com>
Reviewed-by: Jay Sharma <jay.sharma@samsung.com>
Reviewed-by: Junghyun Oh <junghyun.oh@samsung.com>
Reviewed-by: Ashok Babu Channa <ashok.channa@samsung.com>
service/resource-encapsulation/include/RCSRemoteResourceObject.h
service/resource-encapsulation/src/resourceClient/RCSRemoteResourceObject.cpp
service/resource-encapsulation/unittests/ResourceClientTest.cpp

index 7611478..5882c0f 100644 (file)
@@ -251,6 +251,14 @@ namespace OIC
                     std::shared_ptr< OC::OCResource > ocResource);
 
             /**
+             * Returns an equivalent OCResource using RCSRemoteResourceObject instance.
+             *
+             * @throw RCSInvalidParameterException If rcsResource is nullptr.
+             */
+            static std::shared_ptr< OC::OCResource > toOCResource(
+                    RCSRemoteResourceObject::Ptr rcsResource);
+
+            /**
              * Returns whether monitoring is enabled.
              *
              * @see startMonitoring()
index b10cad6..4bb5b7b 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "RCSRemoteResourceObject.h"
 
+#include "OCPlatform.h"
+
 #include "ResourceBroker.h"
 #include "ResourceCacheManager.h"
 
@@ -166,7 +168,6 @@ namespace OIC
             return m_map;
         }
 
-
         RCSRemoteResourceObject::RCSRemoteResourceObject(
                 std::shared_ptr< PrimitiveResource > primtiveResource) :
                 m_primitiveResource{ primtiveResource },
@@ -186,7 +187,6 @@ namespace OIC
             catch(std::exception &e){
                 OIC_LOG_V(ERROR, TAG, "%s", e.what());
             }
-
         }
 
         RCSRemoteResourceObject::Ptr RCSRemoteResourceObject::fromOCResource(
@@ -201,6 +201,24 @@ namespace OIC
                     PrimitiveResource::create(ocResource));
         }
 
+        std::shared_ptr< OC::OCResource > RCSRemoteResourceObject::toOCResource(
+        RCSRemoteResourceObject::Ptr rcsResource)
+        {
+            if (!rcsResource)
+            {
+                throw RCSInvalidParameterException("the rcs resource must not be nullptr.");
+            }
+
+            OC::OCResource::Ptr ocResource = OC::OCPlatform::constructResourceObject(rcsResource->getAddress(),
+                rcsResource->getUri(),
+                CT_DEFAULT,
+                rcsResource->isObservable(),
+                rcsResource->getTypes(),
+                rcsResource->getInterfaces());
+
+            return ocResource;
+        }
+
         bool RCSRemoteResourceObject::isMonitoring() const
         {
             return m_brokerId != 0;
index 5236eab..a442dd4 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "UnitTestHelper.h"
 
+#include "OCResource.h"
+
 #include "RCSRemoteResourceObject.h"
 #include "RCSDiscoveryManager.h"
 #include "RCSResourceObject.h"
@@ -393,3 +395,12 @@ TEST_F(RemoteResourceObjectTest, HasSameInterfaceWithServer)
     EXPECT_EQ(RESOURCEINTERFACE, object->getInterfaces()[0]);
 }
 
+TEST_F(RemoteResourceObjectTest, GetValidOCResourceTest)
+{
+    std::shared_ptr<OC::OCResource> ocRes = RCSRemoteResourceObject::toOCResource(object);
+
+    EXPECT_NE(nullptr, ocRes);
+
+    EXPECT_EQ(RESOURCEURI, ocRes->uri());
+}
+