1 #include "InterfaceHandler.h"
\r
4 #include "OCResourceRequest.h"
\r
6 #include "RCSRepresentation.h"
\r
7 #include "RCSRequest.h"
\r
8 #include "RCSResourceObject.h"
\r
9 #include "RCSResourceAttributes.h"
\r
10 #include "ResourceAttributesConverter.h"
\r
12 #include <unordered_map>
\r
16 using namespace OIC::Service;
\r
18 RCSRepresentation buildGetBaselineResponse(const RCSRequest&, RCSResourceObject& resource)
\r
20 RCSResourceObject::LockGuard lock(resource);
\r
22 return RCSRepresentation{ resource.getUri(), resource.getInterfaces(), resource.getTypes(),
\r
23 resource.getAttributes()};
\r
26 RCSRepresentation buildSetBaselineResponse(const RCSRequest& rcsRequest, RCSResourceObject& resource)
\r
28 return buildGetBaselineResponse(rcsRequest, resource);
\r
31 RCSRepresentation buildGetRequestResponse(const RCSRequest&, RCSResourceObject& resource)
\r
33 RCSResourceObject::LockGuard lock(resource);
\r
35 return RCSRepresentation{resource.getAttributes()};
\r
38 RCSRepresentation buildSetRequestResponse(const RCSRequest& rcsRequest, RCSResourceObject& resource)
\r
40 auto requestAttr = ResourceAttributesConverter::fromOCRepresentation(
\r
41 (rcsRequest.getOCRequest())->getResourceRepresentation());
\r
43 RCSResourceObject::LockGuard lock(resource);
\r
45 const RCSResourceAttributes& updatedAttr = resource.getAttributes();
\r
47 for (auto& kvPair : requestAttr)
\r
49 if(updatedAttr.contains(kvPair.key()))
\r
51 kvPair.value() = updatedAttr.at(kvPair.key());
\r
55 //FIXME erase item with iterator.
\r
56 requestAttr.erase(kvPair.key());
\r
60 return RCSRepresentation{ requestAttr };
\r
63 RCSRepresentation buildGetBatchResponse(RCSRequest, RCSResourceObject& resource)
\r
65 RCSRepresentation rcsRep;
\r
67 for (const auto& bound : resource.getBoundResources())
\r
69 rcsRep.addChild(bound->toRepresentation());
\r
75 const std::unordered_map< std::string, InterfaceHandler > g_defaultHandlers {
\r
77 { BASELINE_INTERFACE,
\r
78 InterfaceHandler(buildGetBaselineResponse, buildSetBaselineResponse) },
\r
80 { ACTUATOR_INTERFACE,
\r
81 InterfaceHandler(buildGetRequestResponse, buildSetRequestResponse) },
\r
84 InterfaceHandler(buildGetRequestResponse, nullptr) },
\r
87 InterfaceHandler(buildGetBatchResponse, buildSetBaselineResponse) }
\r
96 InterfaceHandler::InterfaceHandler(GetResponseBuilder getBuilder,
\r
97 SetResponseBuilder setBuilder) :
\r
98 m_getBuilder{ std::move(getBuilder) },
\r
99 m_setBuilder{ std::move(setBuilder) }
\r
103 bool InterfaceHandler::isGetSupported() const
\r
105 return m_getBuilder != nullptr;
\r
108 bool InterfaceHandler::isSetSupported() const
\r
110 return m_setBuilder != nullptr;
\r
113 InterfaceHandler::GetResponseBuilder InterfaceHandler::getGetResponseBuilder() const
\r
115 return m_getBuilder;
\r
118 InterfaceHandler::SetResponseBuilder InterfaceHandler::getSetResponseBuilder() const
\r
120 return m_setBuilder;
\r
123 InterfaceHandler getDefaultInterfaceHandler(const std::string& interfaceName,
\r
124 const std::string& defaultInterfaceName)
\r
126 auto it = g_defaultHandlers.find(interfaceName);
\r
127 if (it != g_defaultHandlers.end()) return it->second;
\r
129 it = g_defaultHandlers.find(defaultInterfaceName);
\r
130 if (it != g_defaultHandlers.end()) return it->second;
\r
132 return g_defaultHandlers.find(OIC::Service::BASELINE_INTERFACE)->second;
\r