-#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;
+ }
+ }
+}