1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 /// @file OCResourceRequest.h
23 /// @brief This file contains the declaration of classes and its members related to
26 #ifndef __OCRESOURCEREQUEST_H
27 #define __OCRESOURCEREQUEST_H
29 #include <boost/property_tree/ptree.hpp>
30 #include <boost/property_tree/json_parser.hpp>
33 #include "OCRepresentation.h"
38 * @brief OCResourceRequest provides APIs to extract details from a request URI
40 class OCResourceRequest
43 typedef std::shared_ptr<OCResourceRequest> Ptr;
48 virtual ~OCResourceRequest(void)
53 * Retrieves the type of request string for the entity handler function to operate
54 * @return std::string request type. This could be 'GET'/'PUT'/'POST'/'DELETE'
56 std::string getRequestType() const {return m_requestType;}
59 * Retrieves the query parameters from the request
60 * @return std::string query parameters in the request
62 const QueryParamsMap& getQueryParameters() const {return m_queryParameters;}
65 * Retrieves the request handler flag type. This can be either INIT flag or
66 * REQUEST flag or OBSERVE flag.
68 * INIT indicates that the vendor's entity handler should go and perform
69 * initialization operations
70 * REQUEST indicates that it is a request of certain type (GET/PUT/POST/DELETE)
71 * and entity handler needs to perform corresponding operations
72 * OBSERVE indicates that the request is of type Observe and entity handler
73 * needs to perform corresponding operations
74 * @return int type of request flag
76 int getRequestHandlerFlag() const {return m_requestHandlerFlag;}
79 * Provides the entire resource attribute representation
80 * @return OCRepresentation reference containing the name value pairs representing the resource's attributes
82 const OCRepresentation& getResourceRepresentation() const {return m_representation;}
85 * @return ObservationInfo reference provides observation information
87 const ObservationInfo& getObservationInfo() const {return m_observationInfo;}
91 * @param resourceUri specifies the resource uri
93 void setResourceUri(const std::string resourceUri)
95 m_resourceUri = resourceUri;
100 * @return std::string resource uri
102 std::string getResourceUri(void)
104 return m_resourceUri;
107 /** This API retrieves headerOptions which was sent from a client
108 * @return std::map HeaderOptions with the header options
110 const HeaderOptions& getHeaderOptions() const {return m_headerOptions;}
113 std::string m_requestType;
114 std::string m_resourceUri;
115 QueryParamsMap m_queryParameters;
116 int m_requestHandlerFlag;
117 OCRepresentation m_representation;
118 ObservationInfo m_observationInfo;
119 HeaderOptions m_headerOptions;
122 // TODO: This is not a public API for app developers.
123 // This function will not be exposed in future
124 void setRequestType(const std::string& requestType)
126 m_requestType = requestType;
129 // TODO: This is not a public API for app developers.
130 // This function will not be exposed in future
131 void setPayload(const std::string& requestPayload)
133 AttributeMap attributeMap;
134 // TODO: The following JSON Parse implementation should be seperated into utitilites
135 // and used wherever required.
136 // e.g. parse(std::string& payload, Attributemap& attributeMap)
138 std::stringstream requestStream;
139 requestStream << requestPayload;
140 boost::property_tree::ptree root;
143 boost::property_tree::read_json(requestStream, root);
145 catch(boost::property_tree::json_parser::json_parser_error &e)
151 // TODO this expects the representation oc:{} and not oc:[{}]
152 // this representation is fine when setting for simple resource.
153 boost::property_tree::ptree payload = root.get_child(OC::Key::OCKEY, boost::property_tree::ptree());
155 for(auto& item: payload)
157 std::string name = item.first.data();
158 std::string value = item.second.data();
160 attributeMap[name] = value;
163 m_representation.setAttributeMap(attributeMap);
166 // TODO: This is not a public API for app developers.
167 // This function will not be exposed in future
168 void setQueryParams(QueryParamsMap& queryParams)
170 m_queryParameters = queryParams;
173 // TODO: This is not a public API for app developers.
174 // This function will not be exposed in future
175 void setRequestHandlerFlag(int requestHandlerFlag)
177 m_requestHandlerFlag = requestHandlerFlag;
180 // TODO: This is not a public API for app developers.
181 // This function will not be exposed in future
182 void setObservationInfo(const ObservationInfo& observationInfo)
184 m_observationInfo = observationInfo;
187 // TODO: This is not a public API for app developers.
188 // This function will not be exposed in future
189 void setHeaderOptions(const HeaderOptions& headerOptions)
191 m_headerOptions = headerOptions;
196 #endif //__OCRESOURCEREQUEST_H