Separate PrimitiveResource implementation
authorcoderhyme <jhyo.kim@samsung.com>
Thu, 18 Jun 2015 06:48:59 +0000 (15:48 +0900)
committerUze Choi <uzchoi@samsung.com>
Tue, 23 Jun 2015 04:04:40 +0000 (04:04 +0000)
Change-Id: I3f209fa80a38156a0b8b668406ced390d375febe
Signed-off-by: coderhyme <jhyo.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/1375
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/basis/common/primitiveResource/include/PrimitiveResource.h
service/basis/common/primitiveResource/include/internal/PrimitiveResourceImpl.h [new file with mode: 0644]
service/basis/common/primitiveResource/src/PrimitiveResource.cpp

index 8f7e411..2d7fa3b 100755 (executable)
@@ -52,30 +52,31 @@ namespace OIC
             using ObserveCallback = std::function<
                     void(const HeaderOptions&, const ResponseStatement&, int, int)>;
 
-        private:
-            using BaseResource = OC::OCResource;
-            using BaseResourcePtr = BaseResource::Ptr;
-
         public:
-            static PrimitiveResource::Ptr create(const BaseResourcePtr&);
+            static PrimitiveResource::Ptr create(const std::shared_ptr<OC::OCResource>&);
+
+            virtual ~PrimitiveResource() = default;
 
-            void requestGet(GetCallback);
-            void requestSet(const ResourceAttributes&, SetCallback);
-            void requestObserve(ObserveCallback);
-            void cancelObserve();
+            virtual void requestGet(GetCallback) = 0;
+            virtual void requestSet(const ResourceAttributes&, SetCallback) = 0;
+            virtual void requestObserve(ObserveCallback) = 0;
+            virtual void cancelObserve() = 0;
 
-            std::string getUri() const;
-            std::string getHost() const;
-            std::vector< std::string > getTypes() const;
-            std::vector< std::string > getInterfaces() const;
+            virtual std::string getUri() const = 0;
+            virtual std::string getHost() const = 0;
+            virtual std::vector< std::string > getTypes() const = 0;
+            virtual std::vector< std::string > getInterfaces() const = 0;
 
-            bool isObservable() const;
+            virtual bool isObservable() const = 0;
 
-        private:
-            PrimitiveResource(const BaseResourcePtr&);
+        protected:
+            PrimitiveResource() = default;
 
-        private:
-            BaseResourcePtr m_ocResource;
+            PrimitiveResource(const PrimitiveResource&) = delete;
+            PrimitiveResource(PrimitiveResource&&) = delete;
+
+            PrimitiveResource& operator=(const PrimitiveResource&) const = delete;
+            PrimitiveResource& operator=(PrimitiveResource&&) const = delete;
         };
 
         using FindCallback = std::function<void(std::shared_ptr<PrimitiveResource>)>;
@@ -85,4 +86,5 @@ namespace OIC
 
     }
 }
+
 #endif // __PRIMITIVERESOURCE_H
diff --git a/service/basis/common/primitiveResource/include/internal/PrimitiveResourceImpl.h b/service/basis/common/primitiveResource/include/internal/PrimitiveResourceImpl.h
new file mode 100644 (file)
index 0000000..6fdc93a
--- /dev/null
@@ -0,0 +1,116 @@
+//******************************************************************
+//
+// Copyright 2015 Samsung Electronics All Rights Reserved.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#ifndef __PRIMITIVERESOURCEIMPL_H
+#define __PRIMITIVERESOURCEIMPL_H
+
+#include <PrimitiveResource.h>
+#include <ResponseStatement.h>
+
+#include <internal/ResourceAtrributesConverter.h>
+
+namespace OIC
+{
+    namespace Service
+    {
+
+        template< typename BaseResource >
+        class PrimitiveResourceImpl: public PrimitiveResource
+        {
+        private:
+            using BaseResourcePtr = std::shared_ptr< BaseResource >;
+
+        private:
+            static ResponseStatement createResponseStatement(
+                    const OC::OCRepresentation& ocRepresentation)
+            {
+                return ResponseStatement::create(
+                        ResourceAttributesConverter::fromOCRepresentation(ocRepresentation));
+            }
+
+        public:
+            PrimitiveResourceImpl(const BaseResourcePtr& baseResource) :
+                    m_baseResource{ baseResource }
+            {
+            }
+
+            void requestGet(GetCallback callback) override
+            {
+                using namespace std::placeholders;
+
+                m_baseResource->get(OC::QueryParamsMap(),
+                        std::bind(callback, _1, std::bind(createResponseStatement, _2), _3));
+            }
+
+            void requestSet(const ResourceAttributes& attrs, SetCallback callback) override
+            {
+                using namespace std::placeholders;
+
+                m_baseResource->put(ResourceAttributesConverter::toOCRepresentation(attrs),
+                        OC::QueryParamsMap{},
+                        std::bind(callback, _1, std::bind(createResponseStatement, _2), _3));
+            }
+
+            void requestObserve(ObserveCallback callback) override
+            {
+                using namespace std::placeholders;
+
+                m_baseResource->observe(OC::ObserveType::ObserveAll, OC::QueryParamsMap{ },
+                        bind(callback, _1, bind(createResponseStatement, _2), _3, _4));
+            }
+
+            void cancelObserve() override
+            {
+                m_baseResource->cancelObserve();
+            }
+
+            std::string getUri() const override
+            {
+                return m_baseResource->uri();
+            }
+
+            std::string getHost() const override
+            {
+                return m_baseResource->host();
+            }
+
+            std::vector< std::string > getTypes() const override
+            {
+                return m_baseResource->getResourceTypes();
+            }
+
+            std::vector< std::string > getInterfaces() const override
+            {
+                return m_baseResource->getResourceInterfaces();
+            }
+
+            bool isObservable() const override
+            {
+                return m_baseResource->isObservable();
+            }
+
+        private:
+            BaseResourcePtr m_baseResource;
+        };
+
+    }
+}
+
+#endif // __PRIMITIVERESOURCEIMPL_H
index a66469e..570e296 100755 (executable)
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 #include <PrimitiveResource.h>
-#include <ResourceAttributes.h>
-#include <ResponseStatement.h>
 
-#include <internal/ResourceAtrributesConverter.h>
+#include <internal/PrimitiveResourceImpl.h>
 
 #include <OCPlatform.h>
 
-namespace
-{
-    using namespace OIC::Service;
-
-    ResponseStatement createResponseStatement(const OC::OCRepresentation& ocRepresentation)
-    {
-        return ResponseStatement::create(
-                ResourceAttributesConverter::fromOCRepresentation(ocRepresentation));
-    }
-
-} // unnamed namespace
-
-
 namespace OIC
 {
     namespace Service
     {
-        using namespace std::placeholders;
-
-        PrimitiveResource::PrimitiveResource(const BaseResourcePtr& ocResource) :
-                m_ocResource{ ocResource }
-        {
-        }
 
-        PrimitiveResource::Ptr PrimitiveResource::create(const BaseResourcePtr& ptr)
+        PrimitiveResource::Ptr PrimitiveResource::create(
+                const std::shared_ptr<OC::OCResource>& ptr)
         {
-            return std::shared_ptr< PrimitiveResource >(new PrimitiveResource{ ptr });
+            return std::shared_ptr< PrimitiveResource >(
+                    new PrimitiveResourceImpl< OC::OCResource >{ ptr });
         }
 
-        void PrimitiveResource::requestGet(GetCallback callback)
-        {
-            m_ocResource->get(OC::QueryParamsMap(),
-                    std::bind(callback, _1, std::bind(createResponseStatement, _2), _3));
-        }
-
-        void PrimitiveResource::requestSet(const ResourceAttributes& attrs, SetCallback callback)
-        {
-            m_ocResource->put(ResourceAttributesConverter::toOCRepresentation(attrs),
-                    OC::QueryParamsMap{},
-                    std::bind(callback, _1, std::bind(createResponseStatement, _2), _3));
-        }
-
-        void PrimitiveResource::requestObserve(ObserveCallback callback)
-        {
-            m_ocResource->observe(OC::ObserveType::ObserveAll, OC::QueryParamsMap{},
-                    bind(callback, _1, bind(createResponseStatement, _2), _3, _4));
-        }
-
-        void PrimitiveResource::cancelObserve()
-        {
-            m_ocResource->cancelObserve();
-        }
-
-        bool PrimitiveResource::isObservable() const
-        {
-            return m_ocResource->isObservable();
-        }
-
-        std::string PrimitiveResource::getUri() const
-        {
-            return m_ocResource->uri();
-        }
-
-        std::string PrimitiveResource::getHost() const
-        {
-            return m_ocResource->host();
-        }
-
-        std::vector< std::string > PrimitiveResource::getTypes() const
-        {
-            return m_ocResource->getResourceTypes();
-        }
-
-        std::vector< std::string > PrimitiveResource::getInterfaces() const
-        {
-            return m_ocResource->getResourceInterfaces();
-        }
-
-
-
         void discoverResource(const std::string& host, const std::string& resourceURI,
                 OCConnectivityType connectivityType, FindCallback resourceHandler)
         {