Modified Scene Manager Interface
[platform/upstream/iotivity.git] / service / scene-manager / include / Scene.h
index 1179cab..f295a54 100755 (executable)
 #ifndef SM_SCENE_H_
 #define SM_SCENE_H_
 
-#include "RCSRemoteResourceObject.h"
-#include "RCSResourceObject.h"
 #include "SceneAction.h"
 
 #include <vector>
-#include <memory>
 
 namespace OIC
 {
     namespace Service
     {
+        class SceneCollectionResourceObject;
         class Scene
         {
         public:
+//            class InvalidRemoteResourceObjectException: public RCSException
+//            {
+//            public:
+//                InvalidRemoteResourceObjectException(std::string&& what) :
+//                    RCSException{ std::move(what) } {}
+//            };
+
+            class InvalidExecuteCallbackException: public RCSException
+            {
+            public:
+                InvalidExecuteCallbackException(std::string&& what) :
+                    RCSException{ std::move(what) } {}
+            };
+
             typedef std::shared_ptr< Scene > Ptr;
-            typedef std::function< void(const RCSResourceAttributes&, int) > ExecuteCallback;
-        public:
-            Scene (const std::string&);
-            Scene(const std::string&, ExecuteCallback);
-            ~Scene();
+            typedef std::function< void(int) >  ExecuteCallback;
 
-            bool addSceneAction(const std::shared_ptr< SceneAction >&);
-            bool removeSceneAction(const std::shared_ptr< SceneAction >&);
+        private:
+            Scene(const Scene&) = default;
+            Scene(const std::string&, std::shared_ptr<SceneCollectionResourceObject>);
+            friend class SceneCollection;
 
-            bool execute();
+        public:
+            SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr&,
+                    const RCSResourceAttributes&);
+            SceneAction::Ptr addNewSceneAction(const RCSRemoteResourceObject::Ptr&, const std::string&,
+                    const RCSResourceAttributes::Value&);
 
-            void setCallback(ExecuteCallback);
+            std::vector<SceneAction::Ptr> getSceneAction(const RCSRemoteResourceObject::Ptr&) const;
+            std::vector<SceneAction::Ptr> getSceneActions() const ;
 
             std::string getName() const;
-            void setName(const std::string);
 
-        private:
-            void onSceneActionExecuteResult(const RCSResourceAttributes& attributes, int);
+            void removeSceneAction(const SceneAction::Ptr&);
+            void removeSceneAction(const RCSRemoteResourceObject::Ptr&);
+
+            void execute(ExecuteCallback);
 
         private:
-            std::string m_sceneName;
-            std::vector< std::shared_ptr< SceneAction > > m_sceneActionList;
-            ExecuteCallback m_callback;
-        };
+            std::string m_name;
+            std::shared_ptr< SceneCollectionResourceObject > m_sceneCollectionResourceObj;
 
+        };
     } /* namespace Service */
 } /* namespace OIC */
-
-#endif /* RH_HOSTINGOBJECT_H_ */
+#endif /* SM_SCENE_H_ */