Fixed error handling at function of AddScene.
authorjyong2.kim <jyong2.kim@samsung.com>
Wed, 24 Feb 2016 11:50:25 +0000 (20:50 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 26 Feb 2016 08:43:38 +0000 (08:43 +0000)
Fixed bug of exception handling to Add Same Scene.
If add scene as already exist value, It is ignored now.
When the patch is merged, throw exception.

Added get function of target resource uri of Scene member resource.
Fixed bug of call CA function before initialize Stack at Scene Collection Resource Class.

Change-Id: I7f72d7dfef541ae680a47d2d386a39ec674c4871
Signed-off-by: jyong2.kim <jyong2.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/5179
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/scene-manager/src/SceneCollectionResource.cpp
service/scene-manager/src/SceneCollectionResource.h
service/scene-manager/src/SceneMemberResource.cpp
service/scene-manager/src/SceneMemberResource.h

index 72008b4..bb3d248 100644 (file)
@@ -37,25 +37,25 @@ namespace OIC
         SceneCollectionResource::Ptr
         SceneCollectionResource::createSceneCollectionObject()
         {
-            SceneCollectionResource::Ptr newSceneCollectionObject(new SceneCollectionResource());
+            SceneCollectionResource::Ptr sceneCollectionResource(new SceneCollectionResource());
 
-            newSceneCollectionObject->m_uri
+            sceneCollectionResource->m_uri
                 = PREFIX_SCENE_COLLECTION_URI + "/" + std::to_string(numOfSceneCollection++);
 
-            newSceneCollectionObject->m_address = SceneUtils::getNetAddress();
+            sceneCollectionResource->createResourceObject();
 
-            newSceneCollectionObject->createResourceObject();
+            sceneCollectionResource->setDefaultAttributes();
 
-            newSceneCollectionObject->setDefaultAttributes();
+            sceneCollectionResource->initSetRequestHandler();
 
-            newSceneCollectionObject->initSetRequestHandler();
+            sceneCollectionResource->m_address = SceneUtils::getNetAddress();
 
-            return newSceneCollectionObject;
+            return sceneCollectionResource;
         }
 
         void SceneCollectionResource::createResourceObject()
         {
-            m_sceneCollectionResourceObj
+            m_sceneCollectionResourceObject
                 = RCSResourceObject::Builder(
                         m_uri, SCENE_COLLECTION_RT, OC_RSRVD_INTERFACE_DEFAULT).
                         addInterface(OC::BATCH_INTERFACE).
@@ -64,14 +64,14 @@ namespace OIC
 
         void SceneCollectionResource::setDefaultAttributes()
         {
-            m_sceneCollectionResourceObj->setAttribute(SCENE_KEY_LAST_SCENE, std::string());
-            m_sceneCollectionResourceObj->setAttribute(SCENE_KEY_NAME, std::string());
-            m_sceneCollectionResourceObj->setAttribute(
+            m_sceneCollectionResourceObject->setAttribute(SCENE_KEY_LAST_SCENE, std::string());
+            m_sceneCollectionResourceObject->setAttribute(SCENE_KEY_NAME, std::string());
+            m_sceneCollectionResourceObject->setAttribute(
                     SCENE_KEY_ID, SceneUtils::OICGenerateUUIDStr());
-            m_sceneCollectionResourceObj->setAttribute(SCENE_KEY_RTS, SCENE_MEMBER_RT);
-            m_sceneCollectionResourceObj->setAttribute(
+            m_sceneCollectionResourceObject->setAttribute(SCENE_KEY_RTS, SCENE_MEMBER_RT);
+            m_sceneCollectionResourceObject->setAttribute(
                     SCENE_KEY_SCENEVALUES, std::vector<std::string>());
-            m_sceneCollectionResourceObj->setAttribute(SCENE_KEY_URI, m_uri);
+            m_sceneCollectionResourceObject->setAttribute(SCENE_KEY_URI, m_uri);
         }
 
         void SceneCollectionResource::initSetRequestHandler()
@@ -79,7 +79,7 @@ namespace OIC
             m_requestHandler.m_owner
                 = std::weak_ptr<SceneCollectionResource>(shared_from_this());
 
-            m_sceneCollectionResourceObj->setSetRequestHandler(std::bind(
+            m_sceneCollectionResourceObject->setSetRequestHandler(std::bind(
                     &SceneCollectionResource::SceneCollectionRequestHandler::onSetRequest,
                     m_requestHandler, std::placeholders::_1, std::placeholders::_2));
         }
@@ -91,7 +91,7 @@ namespace OIC
 
         void SceneCollectionResource::addScene(std::string && newScene)
         {
-            auto sceneValues = m_sceneCollectionResourceObj->getAttributeValue(
+            auto sceneValues = m_sceneCollectionResourceObject->getAttributeValue(
                     SCENE_KEY_SCENEVALUES).get< std::vector< std::string > >();
 
             auto foundScene
@@ -100,7 +100,11 @@ namespace OIC
             {
                 sceneValues.push_back(std::move(newScene));
 
-                m_sceneCollectionResourceObj->setAttribute(SCENE_KEY_SCENEVALUES, sceneValues);
+                m_sceneCollectionResourceObject->setAttribute(SCENE_KEY_SCENEVALUES, sceneValues);
+            }
+            else
+            {
+                throw std::exception();
             }
         }
 
@@ -112,7 +116,7 @@ namespace OIC
             auto foundmember = std::find_if(m_sceneMembers.begin(), m_sceneMembers.end(),
                     [& newMember](const SceneMemberResource::Ptr & ptr) -> bool
                     {
-                        return ptr->getFullUri() == newMember->getFullUri();
+                        return ptr->getTargetUri() == newMember->getTargetUri();
                     });
 
             if (foundmember != m_sceneMembers.end())
@@ -121,7 +125,7 @@ namespace OIC
             }
 
             m_sceneMembers.push_back(newMember);
-            m_sceneCollectionResourceObj->bindResource(newMember->getRCSResourceObject());
+            m_sceneCollectionResourceObject->bindResource(newMember->getRCSResourceObject());
         }
 
         void SceneCollectionResource::execute(std::string && sceneName)
@@ -143,7 +147,7 @@ namespace OIC
         void SceneCollectionResource::execute(
                 std::string && sceneName, SceneExecuteCallback executeCB)
         {
-            auto sceneValues = m_sceneCollectionResourceObj->getAttributeValue(
+            auto sceneValues = m_sceneCollectionResourceObject->getAttributeValue(
                     SCENE_KEY_SCENEVALUES).get< std::vector< std::string > >();
 
             auto foundSceneValue
@@ -173,7 +177,7 @@ namespace OIC
                 }
             }
 
-            m_sceneCollectionResourceObj->setAttribute(SCENE_KEY_LAST_SCENE, sceneName);
+            m_sceneCollectionResourceObject->setAttribute(SCENE_KEY_LAST_SCENE, sceneName);
         }
 
         void SceneCollectionResource::onExecute(
@@ -189,7 +193,7 @@ namespace OIC
 
         std::string SceneCollectionResource::getId() const
         {
-            return m_sceneCollectionResourceObj->getAttributeValue(
+            return m_sceneCollectionResourceObject->getAttributeValue(
                     SCENE_KEY_ID).get<std::string>();
         }
 
@@ -205,7 +209,7 @@ namespace OIC
 
         std::vector<std::string> SceneCollectionResource::getSceneValues() const
         {
-            return m_sceneCollectionResourceObj->getAttributeValue(
+            return m_sceneCollectionResourceObject->getAttributeValue(
                     SCENE_KEY_SCENEVALUES).get<std::vector<std::string>>();
         }
 
@@ -216,12 +220,12 @@ namespace OIC
 
         RCSResourceObject::Ptr SceneCollectionResource::getRCSResourceObject() const
         {
-            return m_sceneCollectionResourceObj;
+            return m_sceneCollectionResourceObject;
         }
 
         void SceneCollectionResource::setName(std::string && sceneCollectionName)
         {
-            m_sceneCollectionResourceObj->setAttribute(
+            m_sceneCollectionResourceObject->setAttribute(
                     SCENE_KEY_NAME, std::move(sceneCollectionName));
         }
 
@@ -232,7 +236,7 @@ namespace OIC
 
         std::string SceneCollectionResource::getName() const
         {
-            return m_sceneCollectionResourceObj->getAttributeValue(
+            return m_sceneCollectionResourceObject->getAttributeValue(
                     SCENE_KEY_NAME).get<std::string>();
         }
 
@@ -274,13 +278,28 @@ namespace OIC
             }
 
             auto values = attributes.at(SCENE_KEY_SCENEVALUES).get<std::vector<std::string>>();
+
+            auto sizeofValues = values.size();
+            unsigned int sameSize = 0;
             std::for_each (values.begin(), values.end(),
-                    [& ptr](const std::string & value)
+                    [& ptr, & sizeofValues, & sameSize](const std::string & value)
                     {
-                        ptr->addScene(value);
+                        try
+                        {
+                            ptr->addScene(value);
+                        } catch (...)
+                        {
+                            sameSize++;
+                        }
                     });
 
-            return RCSSetResponse::create(attributes).
+            int eCode = SCENE_RESPONSE_SUCCESS;
+            if (sameSize == sizeofValues)
+            {
+                eCode = SCENE_CLIENT_BADREQUEST;
+            }
+
+            return RCSSetResponse::create(attributes, eCode).
                     setAcceptanceMethod(RCSSetResponse::AcceptanceMethod::IGNORE);
         }
 
@@ -435,4 +454,3 @@ namespace OIC
         }
     }
 }
-
index 55c396e..f4b610f 100644 (file)
@@ -118,7 +118,7 @@ namespace OIC
             std::string m_uri;
             std::string m_address;
 
-            RCSResourceObject::Ptr m_sceneCollectionResourceObj;
+            RCSResourceObject::Ptr m_sceneCollectionResourceObject;
             std::mutex m_sceneMemberLock;
             std::vector<SceneMemberResource::Ptr> m_sceneMembers;
 
@@ -145,6 +145,5 @@ namespace OIC
     }
 }
 
-
 #endif // SCENE_COLLECTION_RESOURCE_OBJECT_H
 
index d99691d..9aea585 100644 (file)
@@ -36,18 +36,18 @@ namespace OIC
         SceneMemberResource::createSceneMemberResource(
                 RCSRemoteResourceObject::Ptr remoteObject)
         {
-            SceneMemberResource::Ptr newSceneMemberObject(new SceneMemberResource());
+            SceneMemberResource::Ptr sceneMemberResource(new SceneMemberResource());
 
-            newSceneMemberObject->m_uri = PREFIX_SCENE_MEMBER_URI + "/" +
+            sceneMemberResource->m_uri = PREFIX_SCENE_MEMBER_URI + "/" +
                 std::to_string(numOfSceneMember++);
 
-            newSceneMemberObject->m_remoteMemberObj = remoteObject;
+            sceneMemberResource->m_remoteMemberObj = remoteObject;
 
-            newSceneMemberObject->createResourceObject();
-            newSceneMemberObject->initSetRequestHandler();
-            newSceneMemberObject->setDefaultAttributes();
+            sceneMemberResource->createResourceObject();
+            sceneMemberResource->initSetRequestHandler();
+            sceneMemberResource->setDefaultAttributes();
 
-            return newSceneMemberObject;
+            return sceneMemberResource;
         }
 
         SceneMemberResource::Ptr
@@ -173,6 +173,11 @@ namespace OIC
             return std::string(COAP_TAG + SceneUtils::getNetAddress() + m_uri);
         }
 
+        std::string SceneMemberResource::getTargetUri() const
+        {
+            return std::string(m_remoteMemberObj->getAddress() + m_remoteMemberObj->getUri());
+        }
+
         RCSRemoteResourceObject::Ptr SceneMemberResource::getRemoteResourceObject() const
         {
             return m_remoteMemberObj;
index 524920a..8883393 100644 (file)
@@ -125,6 +125,11 @@ namespace OIC
             std::string getFullUri() const;
 
             /**
+             * Returns Uri of a Target resource of scene member. (e.g. coap://192.168.0.2.1:12345/light)
+             */
+            std::string getTargetUri() const;
+
+            /**
              * Returns RCSRemoteResourceObject about Scene member resource
              */
             RCSRemoteResourceObject::Ptr getRemoteResourceObject() const;