[IOT-1420] Solve that if, rt properties ommited
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / serverBuilder / src / InterfaceHandler.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 21422ba..bf59e69
-#include "InterfaceHandler.h"\r
-\r
-#include "OCApi.h"\r
-#include "OCResourceRequest.h"\r
-\r
-#include "RCSRepresentation.h"\r
-#include "RCSRequest.h"\r
-#include "RCSResourceObject.h"\r
-#include "RCSResourceAttributes.h"\r
-#include "ResourceAttributesConverter.h"\r
-\r
-#include <unordered_map>\r
-\r
-namespace\r
-{\r
-    using namespace OIC::Service;\r
-\r
-    RCSRepresentation buildGetBaselineResponse(const RCSRequest&, RCSResourceObject& resource)\r
-    {\r
-        RCSResourceObject::LockGuard lock(resource);\r
-\r
-        return RCSRepresentation{ resource.getUri(), resource.getInterfaces(), resource.getTypes(),\r
-            resource.getAttributes()};\r
-    }\r
-\r
-    RCSRepresentation buildSetBaselineResponse(const RCSRequest& rcsRequest, RCSResourceObject& resource)\r
-    {\r
-        return buildGetBaselineResponse(rcsRequest, resource);\r
-    }\r
-\r
-    RCSRepresentation buildGetRequestResponse(const RCSRequest&, RCSResourceObject& resource)\r
-    {\r
-        RCSResourceObject::LockGuard lock(resource);\r
-\r
-        return RCSRepresentation{resource.getAttributes()};\r
-    }\r
-\r
-    RCSRepresentation buildSetRequestResponse(const RCSRequest& rcsRequest, RCSResourceObject& resource)\r
-    {\r
-        auto requestAttr = ResourceAttributesConverter::fromOCRepresentation(\r
-                (rcsRequest.getOCRequest())->getResourceRepresentation());\r
-\r
-        RCSResourceObject::LockGuard lock(resource);\r
-\r
-        const RCSResourceAttributes& updatedAttr = resource.getAttributes();\r
-\r
-        for (auto& kvPair : requestAttr)\r
-        {\r
-            if(updatedAttr.contains(kvPair.key()))\r
-            {\r
-                kvPair.value() = updatedAttr.at(kvPair.key());\r
-            }\r
-            else\r
-            {\r
-                //FIXME erase item with iterator.\r
-                requestAttr.erase(kvPair.key());\r
-            }\r
-        }\r
-\r
-        return RCSRepresentation{ requestAttr };\r
-    }\r
-\r
-    RCSRepresentation buildGetBatchResponse(RCSRequest, RCSResourceObject& resource)\r
-    {\r
-        RCSRepresentation rcsRep;\r
-\r
-        for (const auto& bound : resource.getBoundResources())\r
-        {\r
-            rcsRep.addChild(bound->toRepresentation());\r
-        }\r
-\r
-        return rcsRep;\r
-    }\r
-\r
-    const std::unordered_map< std::string, InterfaceHandler > g_defaultHandlers {\r
-\r
-            { BASELINE_INTERFACE,\r
-                InterfaceHandler(buildGetBaselineResponse, buildSetBaselineResponse) },\r
-\r
-            { ACTUATOR_INTERFACE,\r
-                InterfaceHandler(buildGetRequestResponse, buildSetRequestResponse) },\r
-\r
-            { SENSOR_INTERFACE,\r
-                InterfaceHandler(buildGetRequestResponse, nullptr) },\r
-\r
-            { BATCH_INTERFACE,\r
-                InterfaceHandler(buildGetBatchResponse, buildSetBaselineResponse) }\r
-    };\r
-}\r
-\r
-namespace OIC\r
-{\r
-    namespace Service\r
-    {\r
-\r
-        InterfaceHandler::InterfaceHandler(GetResponseBuilder getBuilder,\r
-                SetResponseBuilder setBuilder) :\r
-                m_getBuilder{ std::move(getBuilder) },\r
-                m_setBuilder{ std::move(setBuilder) }\r
-        {\r
-        }\r
-\r
-        bool InterfaceHandler::isGetSupported() const\r
-        {\r
-            return m_getBuilder != nullptr;\r
-        }\r
-\r
-        bool InterfaceHandler::isSetSupported() const\r
-        {\r
-            return m_setBuilder != nullptr;\r
-        }\r
-\r
-        InterfaceHandler::GetResponseBuilder InterfaceHandler::getGetResponseBuilder() const\r
-        {\r
-            return m_getBuilder;\r
-        }\r
-\r
-        InterfaceHandler::SetResponseBuilder InterfaceHandler::getSetResponseBuilder() const\r
-        {\r
-            return m_setBuilder;\r
-        }\r
-\r
-        InterfaceHandler getDefaultInterfaceHandler(const std::string& interfaceName,\r
-                const std::string& defaultInterfaceName)\r
-        {\r
-            auto it = g_defaultHandlers.find(interfaceName);\r
-            if (it != g_defaultHandlers.end()) return it->second;\r
-\r
-            it = g_defaultHandlers.find(defaultInterfaceName);\r
-            if (it != g_defaultHandlers.end()) return it->second;\r
-\r
-            return g_defaultHandlers.find(OIC::Service::BASELINE_INTERFACE)->second;\r
-        }\r
-    }\r
-}\r
+//******************************************************************
+//
+// 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.
+//
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+#include "InterfaceHandler.h"
+
+#include "OCResourceRequest.h"
+
+#include "RCSRepresentation.h"
+#include "RCSRequest.h"
+#include "RCSResourceObject.h"
+#include "RCSResourceAttributes.h"
+#include "ResourceAttributesConverter.h"
+
+#include <unordered_map>
+
+namespace
+{
+    using namespace OIC::Service;
+
+    RCSRepresentation toRepresentation(const RCSResourceObject& resource)
+    {
+        RCSResourceObject::LockGuard lock{ resource, RCSResourceObject::AutoNotifyPolicy::NEVER };
+
+        return RCSRepresentation{ resource.getUri(), resource.getInterfaces(), resource.getTypes(),
+            resource.getAttributes() };
+    }
+
+    RCSRepresentation buildGetBaselineResponse(const RCSRequest&, const RCSResourceObject& resource)
+    {
+        return toRepresentation(resource);
+    }
+
+    RCSRepresentation buildSetBaselineResponse(const RCSRequest& rcsRequest,
+            const RCSResourceObject& resource)
+    {
+        return buildGetBaselineResponse(rcsRequest, resource);
+    }
+
+    RCSRepresentation buildGetRequestResponse(const RCSRequest&, const RCSResourceObject& resource)
+    {
+        RCSResourceObject::LockGuard lock{ resource, RCSResourceObject::AutoNotifyPolicy::NEVER };
+
+        return RCSRepresentation{ resource.getAttributes() };
+    }
+
+    RCSRepresentation buildSetRequestResponse(const RCSRequest& rcsRequest,
+            const RCSResourceObject& resource)
+    {
+        auto requestAttr = ResourceAttributesConverter::fromOCRepresentation(
+                rcsRequest.getOCRequest()->getResourceRepresentation());
+
+        RCSResourceObject::LockGuard lock{ resource, RCSResourceObject::AutoNotifyPolicy::NEVER };
+
+        const RCSResourceAttributes& updatedAttr = resource.getAttributes();
+
+        for (auto it = requestAttr.begin(); it != requestAttr.end();)
+        {
+            if(updatedAttr.contains(it->key()))
+            {
+                it->value() = updatedAttr.at(it->key());
+                ++it;
+            }
+            else
+            {
+                it = requestAttr.erase(it);
+            }
+        }
+
+        return RCSRepresentation{ requestAttr };
+    }
+
+    RCSRepresentation buildGetBatchResponse(RCSRequest, const RCSResourceObject& resource)
+    {
+        RCSRepresentation rcsRep;
+
+        RCSResourceObject::LockGuard lock{ resource, RCSResourceObject::AutoNotifyPolicy::NEVER };
+        rcsRep.setAttributes(resource.getAttributes());
+
+        for (const auto& bound : resource.getBoundResources())
+        {
+            rcsRep.addChild(toRepresentation(*bound));
+        }
+
+        return rcsRep;
+    }
+
+    const std::unordered_map< std::string, InterfaceHandler > g_defaultHandlers {
+
+            { BASELINE_INTERFACE,
+                InterfaceHandler(buildGetBaselineResponse, buildSetBaselineResponse) },
+
+            { ACTUATOR_INTERFACE,
+                InterfaceHandler(buildGetRequestResponse, buildSetRequestResponse) },
+
+            { SENSOR_INTERFACE,
+                InterfaceHandler(buildGetRequestResponse, nullptr) },
+
+            { BATCH_INTERFACE,
+                InterfaceHandler(buildGetBatchResponse, buildSetBaselineResponse) }
+    };
+}
+
+namespace OIC
+{
+    namespace Service
+    {
+
+        InterfaceHandler::InterfaceHandler(GetResponseBuilder getBuilder,
+                SetResponseBuilder setBuilder) :
+                m_getBuilder{ std::move(getBuilder) },
+                m_setBuilder{ std::move(setBuilder) }
+        {
+        }
+
+        bool InterfaceHandler::isGetSupported() const
+        {
+            return m_getBuilder != nullptr;
+        }
+
+        bool InterfaceHandler::isSetSupported() const
+        {
+            return m_setBuilder != nullptr;
+        }
+
+        InterfaceHandler::GetResponseBuilder InterfaceHandler::getGetResponseBuilder() const
+        {
+            return m_getBuilder;
+        }
+
+        InterfaceHandler::SetResponseBuilder InterfaceHandler::getSetResponseBuilder() const
+        {
+            return m_setBuilder;
+        }
+
+        InterfaceHandler getDefaultInterfaceHandler(const std::string& interfaceName,
+                const std::string& defaultInterfaceName)
+        {
+            auto it = g_defaultHandlers.find(interfaceName);
+            if (it != g_defaultHandlers.end()) return it->second;
+
+            it = g_defaultHandlers.find(defaultInterfaceName);
+            if (it != g_defaultHandlers.end()) return it->second;
+
+            return g_defaultHandlers.find(OIC::Service::BASELINE_INTERFACE)->second;
+        }
+    }
+}