From: jyong2.kim Date: Wed, 3 Feb 2016 12:52:56 +0000 (+0900) Subject: Add Manager class of Scene List Resource. X-Git-Tag: 1.2.0+RC1~584^2^2~34 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1434f14cdd5a9379e382828707700aa3d83e7023;p=platform%2Fupstream%2Fiotivity.git Add Manager class of Scene List Resource. SceneListResourceObject class is manager of Scene List resource. and it has handler of request from remote side. Change-Id: I6a5abbda6967b46f75cd6f3e8407187ace382e7d Signed-off-by: jyong2.kim Reviewed-on: https://gerrit.iotivity.org/gerrit/4921 Tested-by: jenkins-iotivity Reviewed-by: Uze Choi --- diff --git a/service/scene-manager/SConscript b/service/scene-manager/SConscript index fab4806..664b7d5 100755 --- a/service/scene-manager/SConscript +++ b/service/scene-manager/SConscript @@ -43,6 +43,7 @@ target_os = env.get('TARGET_OS') ###################################################################### scenemanager_env.AppendUnique(CPPPATH = ['./include']) scenemanager_env.AppendUnique(CPPPATH = ['./src']) +scenemanager_env.AppendUnique(CPPPATH = ['../../resource/csdk/connectivity/api']) scenemanager_env.AppendUnique(CPPPATH = ['../resource-encapsulation/include']) scenemanager_env.AppendUnique(CPPPATH = ['../resource-encapsulation/src/common/primitiveResource/include']) scenemanager_env.AppendUnique(CPPPATH = ['../resource-encapsulation/src/common/expiryTimer/include']) @@ -83,7 +84,11 @@ scenemanager_src = [ SCENE_SRC_DIR + 'SceneMemberObject.cpp', SCENE_SRC_DIR + 'SceneAction.cpp', SCENE_SRC_DIR + 'Scene.cpp', - SCENE_SRC_DIR + 'SceneList.cpp' + SCENE_SRC_DIR + 'SceneList.cpp', + SCENE_SRC_DIR + 'SceneListResourceObject.cpp', + SCENE_SRC_DIR + 'SceneCollectionResourceObject.cpp', + SCENE_SRC_DIR + 'SceneMemberResourceObject.cpp', + SCENE_SRC_DIR + 'SceneUtils.cpp' ] if target_os in ['tizen','android'] : diff --git a/service/scene-manager/src/SceneListResourceObject.cpp b/service/scene-manager/src/SceneListResourceObject.cpp new file mode 100644 index 0000000..76cc05c --- /dev/null +++ b/service/scene-manager/src/SceneListResourceObject.cpp @@ -0,0 +1,118 @@ +//****************************************************************** +// +// Copyright 2016 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 "SceneListResourceObject.h" +#include "RCSRequest.h" +#include "OCApi.h" + +namespace OIC +{ + namespace Service + { + SceneListResourceObject::SceneListResourceObject() + : m_SceneListName(), m_SceneListObj(), m_RequestHandler() + { + m_SceneListObj = RCSResourceObject::Builder( + SCENE_LIST_URI, SCENE_LIST_RT, OC_RSRVD_INTERFACE_DEFAULT). + addInterface(OC::BATCH_INTERFACE). + setDiscoverable(true).setObservable(false).build(); + + { + RCSResourceObject::LockGuard guard(m_SceneListObj); + m_SceneListObj->setAttribute(SCENE_KEY_NAME, SCENE_LIST_DEFAULT_NAME); + m_SceneListObj->setAttribute(SCENE_KEY_RTS, SCENE_LIST_RT); + } + + m_SceneListObj->setSetRequestHandler(&SceneListRequestHandler::onSetRequest); + } + + SceneListResourceObject * SceneListResourceObject::getInstance() + { + static SceneListResourceObject instance; + return & instance; + } + + void SceneListResourceObject::addSceneCollectionResource( + SceneCollectionResourceObject::Ptr newObject) + { + std::unique_lock collectionlock(m_SceneCollectionLock); + m_SceneCollections.push_back(newObject); + m_SceneListObj->bindResource(newObject->getRCSResourceObject()); + } + + std::string SceneListResourceObject::getName() const + { + return m_SceneListName; + } + + void SceneListResourceObject::setName(std::string && newName) + { + m_SceneListName = newName; + + RCSResourceObject::LockGuard guard(m_SceneListObj); + m_SceneListObj->setAttribute(SCENE_KEY_NAME, m_SceneListName); + } + + void SceneListResourceObject::setName(const std::string & newName) + { + setName(std::string(newName)); + } + + const std::vector + SceneListResourceObject::getSceneCollections() + { + std::unique_lock collectionlock(m_SceneCollectionLock); + std::vector retCollections(m_SceneCollections); + return retCollections; + } + + RCSSetResponse + SceneListResourceObject::SceneListRequestHandler::onSetRequest( + const RCSRequest & request, RCSResourceAttributes & attributes) + { + if (request.getInterface() != OC::BATCH_INTERFACE) + { + return RCSSetResponse::create(attributes, SCENE_CLIENT_BADREQUEST). + setAcceptanceMethod(RCSSetResponse::AcceptanceMethod::IGNORE); + } + + auto newObject + = SceneCollectionResourceObject::createSceneCollectionObject(); + + if (attributes.contains(SCENE_KEY_NAME)) + { + newObject->setName(attributes.at(SCENE_KEY_NAME).get()); + } + + SceneListResourceObject::getInstance()->addSceneCollectionResource(newObject); + + auto responseAtt = attributes; + responseAtt[SCENE_KEY_NAME] = RCSResourceAttributes::Value(newObject->getName()); + responseAtt[SCENE_KEY_ID] = RCSResourceAttributes::Value(newObject->getId()); + + auto uri = COAP_TAG + newObject->getAddress() + newObject->getUri(); + responseAtt[SCENE_KEY_PAYLOAD_LINK] + = RCSResourceAttributes::Value(uri); + + return RCSSetResponse::create(responseAtt, SCENE_RESPONSE_SUCCESS). + setAcceptanceMethod(RCSSetResponse::AcceptanceMethod::IGNORE); + } + } +} diff --git a/service/scene-manager/src/SceneListResourceObject.h b/service/scene-manager/src/SceneListResourceObject.h new file mode 100644 index 0000000..e6f86c1 --- /dev/null +++ b/service/scene-manager/src/SceneListResourceObject.h @@ -0,0 +1,106 @@ +//****************************************************************** +// +// Copyright 2016 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. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +/** + * @file + * + * This file contains the declaration of classes and its members related to SceneListResrouceObject + */ + +#ifndef SCENE_LIST_RESOURCE_OBJECT_H +#define SCENE_LIST_RESOURCE_OBJECT_H + +#include + +#include "RCSResourceObject.h" +#include "SceneCollectionResourceObject.h" +#include "SceneCommons.h" + +namespace OIC +{ + namespace Service + { + class SceneListResourceObject + { + public: + /** + * Returns Scene List Resource object as single instance. + */ + static SceneListResourceObject * getInstance(); + + /** + * Add Scene Collection resource object to Scene List Resource. + * + * @param collectionObj created Scene Collection Resource Object by constructor of SceneCollectionResourceObject class + */ + void addSceneCollectionResource(SceneCollectionResourceObject::Ptr collectionObj); + + /** + * Returns Scene List name. + */ + std::string getName() const; + + /** + * Sets Scene List name. + * + * @param name name to set + */ + void setName(std::string && name); + + /** + * @overload + */ + void setName(const std::string &); + + /** + * Returns all of Scene Collection Resource object. + */ + const std::vector getSceneCollections(); + + private: + class SceneListRequestHandler + { + public: + SceneListRequestHandler() = default; + ~SceneListRequestHandler() = default; + + static RCSSetResponse onSetRequest(const RCSRequest &, RCSResourceAttributes &); + }; + + std::string m_SceneListName; + RCSResourceObject::Ptr m_SceneListObj; + SceneListRequestHandler m_RequestHandler; + std::mutex m_SceneCollectionLock; + std::vector m_SceneCollections; + + SceneListResourceObject(); + ~SceneListResourceObject() = default; + + SceneListResourceObject(const SceneListResourceObject &) = delete; + SceneListResourceObject & operator = (const SceneListResourceObject &) = delete; + + SceneListResourceObject(SceneListResourceObject &&) = delete; + SceneListResourceObject && operator = (SceneListResourceObject &&) = delete; + }; + } +} + + +#endif // SCENE_LIST_RESOURCE_OBJECT_H