From 29cd11df2014407af9de2335e0aad25d89717f58 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Thu, 21 Jul 2016 16:01:23 +0530 Subject: [PATCH] Added API to obtain OCResourceObject from RCSRemoteResourceObject. 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 Reviewed-on: https://gerrit.iotivity.org/gerrit/9551 Tested-by: jenkins-iotivity Reviewed-by: Hun-je Yeon Reviewed-by: Jay Sharma Reviewed-by: Junghyun Oh Reviewed-by: Ashok Babu Channa --- .../include/RCSRemoteResourceObject.h | 8 ++++++++ .../src/resourceClient/RCSRemoteResourceObject.cpp | 22 ++++++++++++++++++++-- .../unittests/ResourceClientTest.cpp | 11 +++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/service/resource-encapsulation/include/RCSRemoteResourceObject.h b/service/resource-encapsulation/include/RCSRemoteResourceObject.h index 7611478..5882c0f 100644 --- a/service/resource-encapsulation/include/RCSRemoteResourceObject.h +++ b/service/resource-encapsulation/include/RCSRemoteResourceObject.h @@ -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() diff --git a/service/resource-encapsulation/src/resourceClient/RCSRemoteResourceObject.cpp b/service/resource-encapsulation/src/resourceClient/RCSRemoteResourceObject.cpp index b10cad6..4bb5b7b 100644 --- a/service/resource-encapsulation/src/resourceClient/RCSRemoteResourceObject.cpp +++ b/service/resource-encapsulation/src/resourceClient/RCSRemoteResourceObject.cpp @@ -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; diff --git a/service/resource-encapsulation/unittests/ResourceClientTest.cpp b/service/resource-encapsulation/unittests/ResourceClientTest.cpp index 5236eab..a442dd4 100644 --- a/service/resource-encapsulation/unittests/ResourceClientTest.cpp +++ b/service/resource-encapsulation/unittests/ResourceClientTest.cpp @@ -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 ocRes = RCSRemoteResourceObject::toOCResource(object); + + EXPECT_NE(nullptr, ocRes); + + EXPECT_EQ(RESOURCEURI, ocRes->uri()); +} + -- 2.7.4