Modify Scene Manager Local-side Interface Logic
authorjyong2.kim <jyong2.kim@samsung.com>
Fri, 26 Feb 2016 06:44:25 +0000 (15:44 +0900)
committerUze Choi <uzchoi@samsung.com>
Mon, 29 Feb 2016 05:35:08 +0000 (05:35 +0000)
- SceneCollection : change map to unordered_map
- Scene : modify logic of addNewSceneAction API

Change-Id: Idb420fb44d1eb3ed36261db1d4357de403ba225a
Signed-off-by: ChaJiWon <jw_wonny.cha@samsung.com>
Signed-off-by: jyong2.kim <jyong2.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/5213
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/scene-manager/include/Scene.h
service/scene-manager/include/SceneCollection.h
service/scene-manager/src/Scene.cpp

index 8dd774c..92d23ba 100755 (executable)
@@ -33,12 +33,6 @@ namespace OIC
         class Scene
         {
         public:
-            class InvalidExecuteCallbackException: public RCSException
-            {
-            public:
-                InvalidExecuteCallbackException(std::string&& what) :
-                    RCSException{ std::move(what) } {}
-            };
             class InvalidAddMemberRequestException: public RCSException
             {
             public:
index e128c51..4a4cf03 100755 (executable)
@@ -32,13 +32,6 @@ namespace OIC
         class SceneCollection
         {
         public:
-            class InvalidSceneNameException: public RCSException
-            {
-                public:
-                InvalidSceneNameException(std::string&& what) :
-                    RCSException{ std::move(what) } {}
-            };
-
             typedef std::shared_ptr< SceneCollection > Ptr;
 
         private:
index ecca8c3..752341a 100755 (executable)
@@ -20,7 +20,6 @@
 
 #include "Scene.h"
 #include "SceneCollectionResource.h"
-#include <iostream>
 #include <algorithm>
 
 namespace OIC
@@ -49,6 +48,45 @@ namespace OIC
                 throw RCSInvalidParameterException("RCSRemoteResoureObjectPtr value is null");
             }
 
+
+            auto sceneMemberResObjs = m_sceneCollectionResourceObj->getSceneMembers();
+            bool isRegistered = false;
+
+            SceneMemberResource::Ptr foundMember;
+            std::function<void(const RCSRemoteResourceObject::Ptr&,
+                    const SceneMemberResource::Ptr&)> buildActionParam = [&](
+                            const RCSRemoteResourceObject::Ptr & RCSRemoteResourceObjectPtr,
+                            const SceneMemberResource::Ptr & member)
+                            {
+                                if(RCSRemoteResourceObjectPtr == member->getRemoteResourceObject())
+                                {
+                                    foundMember = member;
+                                    for(const auto &it: member->getMappingInfo())
+                                    {
+                                        isRegistered = (it.sceneName == m_name);
+                                    }
+                                }
+                            };
+
+
+            std::for_each(sceneMemberResObjs.begin(), sceneMemberResObjs.end(),
+                    [&buildActionParam, &RCSRemoteResourceObjectPtr](
+                            const SceneMemberResource::Ptr& member)
+                        {
+                            buildActionParam(RCSRemoteResourceObjectPtr, member);
+                        });
+
+            if(isRegistered)
+            {
+                throw InvalidAddMemberRequestException(
+                        "It is already registered member. Please set Execution Parameter!");
+            }
+
+            if(foundMember)
+            {
+                return SceneAction::Ptr(new SceneAction(foundMember, m_name, attr));
+            }
+
             SceneMemberResource::Ptr sceneMemberResObj;
             sceneMemberResObj = SceneMemberResource::createSceneMemberResource(
                     RCSRemoteResourceObjectPtr);
@@ -56,14 +94,16 @@ namespace OIC
             {
                 m_sceneCollectionResourceObj->addSceneMember(sceneMemberResObj);
             }
-            catch(...)
+            catch(std::exception e)
             {
-                throw InvalidAddMemberRequestException("Already existed Member!");
+                throw InvalidAddMemberRequestException(
+                        "It is already registered member. Please set Execution Parameter!");
             }
 
             return SceneAction::Ptr(new SceneAction(sceneMemberResObj, m_name, attr));
+
         }
-//        TODO : need to confirm return type vector or Pointer
+
         SceneAction::Ptr Scene::getSceneAction(
                 const RCSRemoteResourceObject::Ptr& RCSRemoteResourceObjectPtr) const
         {
@@ -72,21 +112,29 @@ namespace OIC
             RCSResourceAttributes actionParam;
             SceneMemberResource::Ptr foundMember;
 
-            std::for_each (sceneMemberResObjs.begin(), sceneMemberResObjs.end(),
-                    [&, RCSRemoteResourceObjectPtr](
-                            const SceneMemberResource::Ptr& member)
-                    {
-                        if(RCSRemoteResourceObjectPtr == member->getRemoteResourceObject())
-                        {
-                            foundMember = member;
-                            for(const auto &it: member->getMappingInfo())
+            std::function<void(const RCSRemoteResourceObject::Ptr&,
+                    const SceneMemberResource::Ptr&)> buildActionParam = [&](
+                            const RCSRemoteResourceObject::Ptr & RCSRemoteResourceObjectPtr,
+                            const SceneMemberResource::Ptr & member)
                             {
-                                if(it.sceneName == m_name)
+                                if(RCSRemoteResourceObjectPtr == member->getRemoteResourceObject())
                                 {
-                                    actionParam[it.key] = it.value;
+                                    foundMember = member;
+                                for(const auto &it: member->getMappingInfo())
+                                {
+                                    if(it.sceneName == m_name)
+                                    {
+                                        actionParam[it.key] = it.value;
+                                    }
                                 }
                             }
-                        }
+                            };
+
+            std::for_each (sceneMemberResObjs.begin(), sceneMemberResObjs.end(),
+                    [&RCSRemoteResourceObjectPtr, &buildActionParam](
+                            const SceneMemberResource::Ptr& member)
+                    {
+                        buildActionParam(RCSRemoteResourceObjectPtr, member);
                     });
 
             if(actionParam.empty())
@@ -104,10 +152,9 @@ namespace OIC
 
             RCSResourceAttributes actionParam;
 
-            std::for_each (sceneMemberResObjs.begin(), sceneMemberResObjs.end(),
-                    [&](const SceneMemberResource::Ptr& member)
+            std::function<void(const SceneMemberResource::Ptr&)> buildActionParams =
+                    [&](const SceneMemberResource::Ptr & member)
                     {
-//                        actionParam = getActionParamofMappingInfo(mappingInfo);
                         for(const auto &it: member->getMappingInfo())
                         {
                             if(it.sceneName == m_name)
@@ -121,6 +168,12 @@ namespace OIC
                                     new SceneAction(member, m_name, actionParam)));
                             actionParam.clear();
                         }
+                    };
+
+            std::for_each (sceneMemberResObjs.begin(), sceneMemberResObjs.end(),
+                    [&buildActionParams](const SceneMemberResource::Ptr& member)
+                    {
+                        buildActionParams(member);
                     });
 
             return actions;
@@ -131,13 +184,13 @@ namespace OIC
             return m_name;
         }
 
-        void Scene::removeSceneAction(const SceneAction::Ptr& sceneActionPtr)
+        void Scene::removeSceneAction(const SceneAction::Ptr& /*sceneActionPtr*/)
         {
 //            TODO : need to implement
         }
 
         void Scene::removeSceneAction(
-                const RCSRemoteResourceObject::Ptr& RCSRemoteResourceObjectPtr)
+                const RCSRemoteResourceObject::Ptr& /*RCSRemoteResourceObjectPtr*/)
         {
 //            TODO : : need to implement
         }
@@ -151,22 +204,5 @@ namespace OIC
 
             m_sceneCollectionResourceObj->execute(m_name, cb);
         }
-
-//        RCSResourceAttributes Scene::getActionParamofMappingInfo(
-//                std::vector<SceneMemberResource::MappingInfo> mappingInfo)
-//        {
-//            RCSResourceAttributes actionParam;
-//
-//            std::for_each (mappingInfo.begin(), mappingInfo.end(),
-//                [& actionParam](const SCeneCollectionResource::MappingInfo & mInfo)
-//                {
-//                    if (mInfo.sceneName == m_name)
-//                    {
-//                        actionParam[mInfo.key] = mInfo.value;
-//                    }
-//                });
-//
-//            return actionParam;
-//        }
     } /* namespace Service */
 } /* namespace OIC */