Merge branch 'master' into group-manager
[platform/upstream/iotivity.git] / service / scene-manager / src / SceneMemberResource.h
1 //******************************************************************
2 //
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 /**
22  * @file
23  *
24  * This file contains the declaration of classes and its members related to SceneMemberResrouceObject
25  */
26
27 #ifndef SCENE_MEMBER_RESOURCE_OBJECT_H
28 #define SCENE_MEMBER_RESOURCE_OBJECT_H
29
30 #include "RCSResourceObject.h"
31 #include "RCSRemoteResourceObject.h"
32 #include "SceneCommons.h"
33
34 namespace OIC
35 {
36     namespace Service
37     {
38         class SceneMemberResource
39                 : public std::enable_shared_from_this<SceneMemberResource>
40         {
41         public:
42             typedef std::shared_ptr< SceneMemberResource > Ptr;
43
44             /**
45              * Callback definition to be invoked when the response of setRemoteAttribitues is received.
46              *
47              * @param attrs the result attributes
48              * @param eCode the error code received from the resource
49              *
50              * @see RCSRemoteResourceObject::setRemoteAttributes
51              */
52             typedef std::function< void(const RCSResourceAttributes & attrs, int eCode) >
53                 executeCallback;
54
55             /**
56              * A Mapping information about each scene values.
57              */
58             struct MappingInfo
59             {
60                 MappingInfo(
61                         std::string scene,
62                         std::string keyName,
63                         RCSResourceAttributes::Value val)
64                 :sceneName(scene), key(keyName), value(val) { }
65                 MappingInfo(MappingInfo &&) = default;
66                 MappingInfo(const MappingInfo &) = default;
67                 std::string sceneName;              ///< name of scene value
68                 std::string key;                    ///< key to set at attributes of remote resource
69                 RCSResourceAttributes::Value value; ///< val to set at attributes of remote resource
70             };
71
72             ~SceneMemberResource() = default;
73
74             /**
75              * Register a Scene member resource and return a SceneMemberResourceObject
76              * using link information of remote resource.
77              *
78              * @param attrs information to make scene member resource
79              */
80             static SceneMemberResource::Ptr
81             createSceneMemberResource(RCSResourceAttributes && attrs);
82
83             /**
84              * @overload
85              */
86             static SceneMemberResource::Ptr
87             createSceneMemberResource(const RCSResourceAttributes &);
88
89             /**
90              * Register a Scene member resource and returns a SceneMemberResourceObject
91              * using information of RCSRemoteResourceObject.
92              *
93              * @param remoteObj information to make scene member resource
94              */
95             static SceneMemberResource::Ptr
96             createSceneMemberResource(RCSRemoteResourceObject::Ptr remoteObj);
97
98             /**
99              * Add Scene mapping information at scene member resource.
100              *
101              * @param mappingInfo
102              */
103             void addMappingInfo(MappingInfo && mappingInfo);
104
105             /**
106              * @overload
107              */
108             void addMappingInfo(const MappingInfo &);
109
110             /**
111              * Returns all Mapping information of a scene member resource.
112              */
113             std::vector<MappingInfo> getMappingInfo();
114
115             /**
116              * Returns ID of a Scene member resource.
117              */
118             std::string getId() const;
119
120             /**
121              * Returns Uri of a Scene member resource. (e.g. coap://192.168.0.2.1:12345/SceneMember)
122              */
123             std::string getFullUri() const;
124
125             /**
126              * Returns RCSRemoteResourceObject about Scene member resource
127              */
128             RCSRemoteResourceObject::Ptr getRemoteResourceObject() const;
129
130             /**
131              * Returns RCSResourceObject of Scene member resource
132              */
133             RCSResourceObject::Ptr getRCSResourceObject() const;
134
135             /**
136              * Execute of Scene Action (with callback for response).
137              *
138              * @param sceneValue scene value to execute
139              * @param cb callback to response
140              */
141             void execute(std::string && sceneValue, executeCallback cb);
142
143             /**
144              * @overload
145              */
146             void execute(const std::string &, executeCallback);
147
148             /**
149              * Execute of Scene Action (without callback for response).
150              *
151              * @param sceneValue scene value to execute
152              */
153             void execute(std::string && sceneValue);
154
155             /**
156              * @overload
157              */
158             void execute(const std::string &);
159
160         private:
161             class SceneMemberRequestHandler
162             {
163             public:
164                 SceneMemberRequestHandler() = default;
165                 ~SceneMemberRequestHandler() = default;
166
167                 std::weak_ptr<SceneMemberResource> m_Owner;
168
169                 RCSSetResponse onSetRequest(const RCSRequest & , RCSResourceAttributes &);
170             };
171
172             std::string m_Uri;
173             RCSResourceObject::Ptr m_SceneMemberResourceObj;
174             RCSRemoteResourceObject::Ptr m_RemoteMemberObj;
175             SceneMemberRequestHandler m_RequestHandler;
176
177             SceneMemberResource() = default;
178
179             SceneMemberResource(const SceneMemberResource &) = delete;
180             SceneMemberResource & operator = (const SceneMemberResource &) = delete;
181
182             SceneMemberResource(SceneMemberResource &&) = delete;
183             SceneMemberResource && operator = (SceneMemberResource &&) = delete;
184         };
185     }
186 }
187
188 #endif // SCENE_MEMBER_RESOURCE_OBJECT_H