1 //******************************************************************
3 // Copyright 2016 Samsung Electronics 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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
23 #include "SceneCollectionResource.h"
31 Scene::Scene(const std::string& sceneName,
32 SceneCollectionResource::Ptr sceneCollectionResource) :
33 m_name(sceneName), m_sceneCollectionResource(sceneCollectionResource) {}
35 SceneAction::Ptr Scene::addNewSceneAction(
36 const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
37 std::string key, RCSResourceAttributes::Value value)
39 RCSResourceAttributes resAttr;
41 return addNewSceneAction(pRCSRemoteResourceObject, std::move(resAttr));
44 SceneAction::Ptr Scene::addNewSceneAction(
45 const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject,
46 RCSResourceAttributes attr)
48 if(pRCSRemoteResourceObject == nullptr)
50 throw RCSInvalidParameterException("pRCSRemoteResourceObject is empty!");
53 SceneMemberResource::Ptr sceneMemberResObj;
54 sceneMemberResObj = SceneMemberResource::createSceneMemberResource(
55 pRCSRemoteResourceObject);
58 m_sceneCollectionResource->addSceneMember(sceneMemberResObj);
60 catch(RCSBadRequestException& e)
62 auto sceneMemberRes = m_sceneCollectionResource->findSceneMembers(m_name);
64 auto it = std::find_if(sceneMemberRes.begin(), sceneMemberRes.end(),
65 [&pRCSRemoteResourceObject](const SceneMemberResource::Ptr& member)
67 return member->getRemoteResourceObject() == pRCSRemoteResourceObject;
71 if(it != sceneMemberRes.end())
73 throw RCSBadRequestException(
74 "It is already registered member. Please set Execution Parameter!");
77 auto sceneMembers = m_sceneCollectionResource->getSceneMembers();
78 auto memberRes = std::find_if(sceneMembers.begin(), sceneMembers.end(),
79 [&pRCSRemoteResourceObject](const SceneMemberResource::Ptr& member)
81 return member->getRemoteResourceObject() == pRCSRemoteResourceObject;
84 return SceneAction::Ptr(new SceneAction((*memberRes), m_name, attr));
87 return SceneAction::Ptr(new SceneAction(sceneMemberResObj, m_name, attr));
90 SceneAction::Ptr Scene::getSceneAction(
91 const RCSRemoteResourceObject::Ptr& pRCSRemoteResourceObject) const
93 auto sceneMemberRes = m_sceneCollectionResource->findSceneMembers(m_name);
95 auto it = std::find_if(sceneMemberRes.begin(), sceneMemberRes.end(),
96 [&pRCSRemoteResourceObject](const SceneMemberResource::Ptr& member)
98 return member->getRemoteResourceObject() == pRCSRemoteResourceObject;
102 if(it == sceneMemberRes.end())
104 throw RCSInvalidParameterException("Unknown Remote Resource!");
107 RCSResourceAttributes actionParam;
108 for(const auto &info : (*it)->findMappingInfos(m_name))
110 actionParam[info.key] = info.value;
113 return SceneAction::Ptr(new SceneAction((*it), m_name, actionParam));
116 std::vector<SceneAction::Ptr> Scene::getSceneActions() const
118 std::vector<SceneAction::Ptr> actions;
119 auto sceneMemberRes = m_sceneCollectionResource->findSceneMembers(m_name);
121 std::for_each(sceneMemberRes.begin(), sceneMemberRes.end(),
122 [&](const SceneMemberResource::Ptr& member)
124 RCSResourceAttributes actionParam;
126 for(const auto &it : member->findMappingInfos(m_name))
128 actionParam[it.key] = it.value;
130 actions.push_back(SceneAction::Ptr(
131 new SceneAction(member, m_name, actionParam)));
138 std::string Scene::getName() const
143 void Scene::execute(ExecuteCallback cb)
147 throw RCSInvalidParameterException("Callback is empty!");
150 m_sceneCollectionResource->execute(m_name, std::move(cb));
152 } /* namespace Service */
153 } /* namespace OIC */