revise piAction life cycle and returng undo()
authorYoungjae Shin <yj99.shin@samsung.com>
Wed, 13 Nov 2019 01:29:08 +0000 (10:29 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Wed, 18 Mar 2020 08:53:50 +0000 (17:53 +0900)
include/Plugin.h
include/PluginAction.h
plugin/TestPlugin.cpp
plugin/TestPluginAction.cpp
plugin/TestPluginAction.h
supervisor/Action.cpp
supervisor/Action.h
supervisor/TAction.h

index d5490a372afdfd673a90c00b7339cc64efc49476..e5948abdcb00a0d1248722fc75de7fe9c8ca587b 100644 (file)
@@ -56,14 +56,12 @@ namespace ModeSupervisorNamespace {
                {
                        return MODES_ERROR_NOT_SUPPORTED;
                }
-               virtual int undo(PluginAction *piAction)
+               virtual void undo(PluginAction *piAction)
                {
-                       if (NULL == piAction)
-                               return MODES_ERROR_INVALID_PARAMETER;
-                       int ret = piAction->undo();
-                       delete piAction;
-
-                       return ret;
+                       if (piAction) {
+                               piAction->undo();
+                               delete piAction;
+                       }
                }
                virtual PluginAction* getUndoAction(const std::string &key, const std::string &info)
                {
index fd2ab45273697ea9e32a3d06fdd9359f7ae88972..e79df0ad0090019c924f30d0936499363a54a044 100644 (file)
@@ -34,9 +34,8 @@ namespace ModeSupervisorNamespace {
                {
                        return name;
                }
-               virtual int undo()
+               virtual void undo()
                {
-                       return MODES_ERROR_NOT_SUPPORTED;
                }
                virtual std::string serialize()
                {
@@ -50,9 +49,8 @@ namespace ModeSupervisorNamespace {
                {
                        return MODES_ERROR_NOT_SUPPORTED;
                }
-               virtual int unSetChangedCallback(valueChangedCB callback, void *userData)
+               virtual void unSetChangedCallback(valueChangedCB callback, void *userData)
                {
-                       return MODES_ERROR_NOT_SUPPORTED;
                }
        private:
                const std::string name;
index 7c47378864f2e95397275bc288db06623e61dce0..9abb10130041011c0825bdbcd8f03b81b397726d 100644 (file)
@@ -34,7 +34,7 @@ public:
        int set(const std::string &key, bool val, PluginAction **piAction) override;
        int set(const std::string &key, const std::string &val, PluginAction **piAction) override;
 
-       int undo(PluginAction *piAction) override;
+       void undo(PluginAction *piAction) override;
        PluginAction* getUndoAction(const std::string &key, const std::string &info) override;
 
        int getInt(const std::string &key) override;
@@ -107,15 +107,12 @@ int TestPlugin::set(const std::string &key, const std::string &val, PluginAction
        return MODES_ERROR_NONE;
 }
 
-int TestPlugin::undo(PluginAction *piAction)
+void TestPlugin::undo(PluginAction *piAction)
 {
        if (piAction) {
                DBG("TestPlugin::undo(Action:%s)", piAction->getName().c_str());
-
                delete piAction;
        }
-
-       return MODES_ERROR_NONE;
 }
 
 PluginAction* TestPlugin::getUndoAction(const std::string &key, const std::string &info)
index 218a42b29af2ff923234e36c17d0e1d85d4cc3c1..8bf46c01604313966afd21d8715f23003543766b 100644 (file)
@@ -30,10 +30,9 @@ TestPluginAction::~TestPluginAction()
 {
 }
 
-int TestPluginAction::undo()
+void TestPluginAction::undo()
 {
        DBG("TestPluginAction::undo() is Called");
-       return MODES_ERROR_NONE;
 }
 
 std::string TestPluginAction::serialize()
@@ -52,7 +51,6 @@ int TestPluginAction::setChangedCallback(valueChangedCB callback, void *userData
        return MODES_ERROR_NONE;
 }
 
-int TestPluginAction::unSetChangedCallback(valueChangedCB callback, void *userData)
+void TestPluginAction::unSetChangedCallback(valueChangedCB callback, void *userData)
 {
-       return MODES_ERROR_NONE;
 }
index fe373dab1b8b7c6abf22424c903d18acd9d38f65..4d64fa07aff2695497160486f334fe9d5d41729a 100644 (file)
@@ -26,11 +26,11 @@ public:
        TestPluginAction();
        ~TestPluginAction() override;
 
-       int undo() override;
+       void undo() override;
        std::string serialize() override;
        int parse(const std::string &data) override;
        int setChangedCallback(valueChangedCB callback, void *userData) override;
-       int unSetChangedCallback(valueChangedCB callback, void *userData) override;
+       void unSetChangedCallback(valueChangedCB callback, void *userData) override;
 };
 
 MODES_NAMESPACE_END
index dcac35c2203d08b5ff6f777c6d130fbc1b3107dc..fbfaa7c713434f79a6a89d96609e2361ec745b96 100644 (file)
 
 MODES_NAMESPACE_USE;
 
-void Action::valueChangedCallback(void *userData)
-{
-       Action *action = (Action*)userData;
-       RET_IF(NULL == action);
-
-       action->setIsChanged();
-       DBG("Action(%s) Changed", action->ruleName.c_str());
-}
-
 Action::Action()
-       :plugin(nullptr), piAction(nullptr), stopOnErr(false), isChanged(false), restriction(REQ_NONE)
+       :isChanged(false), plugin(nullptr), piAction(nullptr), stopOnErr(false), restriction(REQ_NONE)
 {
 }
 
 Action::Action(const std::string &name)
-       :ruleName(name), plugin(nullptr), piAction(nullptr), stopOnErr(false), isChanged(false), restriction(REQ_NONE)
+       :ruleName(name), isChanged(false), plugin(nullptr), piAction(nullptr), stopOnErr(false), restriction(REQ_NONE)
 {
 }
 
@@ -95,15 +86,12 @@ void Action::setPlugin(Plugin *pi)
        plugin = pi;
 }
 
-void Action::setIsChanged()
+void Action::valueChangedCallback(void *userData)
 {
-       isChanged = true;
-       plugin->freeAction(piAction);
-       piAction = nullptr;
-}
+       Action *action = (Action*)userData;
+       RET_IF(NULL == action);
 
-bool Action::getIsChanged()
-{
-       return isChanged;
+       action->isChanged = true;
+       action->piAction->unSetChangedCallback(valueChangedCallback, userData);
+       DBG("Action(%s) Changed", action->ruleName.c_str());
 }
-
index 12141b4d0ee2933035720d02dac5430bc7a73a5b..15cb0905f0ca74ddcf8586e5f705c8456723cbbf 100644 (file)
@@ -42,8 +42,6 @@ public:
        ActionRestrict getRestrict();
        void setStopOnErr(bool val);
        bool getStopOnErr();
-       void setIsChanged();
-       bool getIsChanged();
        void setPlugin(Plugin *pi);
        virtual int setValue(const std::string &val) = 0;
        virtual std::string getStringOfValue() = 0;
@@ -53,15 +51,14 @@ public:
        virtual int restoreUndoInfo(const std::string &info) = 0;
        virtual std::string backupUndoInfo() = 0;
 protected:
+       static void valueChangedCallback(void *userData);
        std::string ruleName;
+       bool isChanged;
        Plugin *plugin;
        PluginAction *piAction;
-       static void valueChangedCallback(void *userData);
-
 private:
        std::string id;
        bool stopOnErr;
-       bool isChanged;
        ActionRestrict restriction;
 };
 
index 41f73c9b72719fe5a973b9e2d5a6e425dcb57eb6..1287d7dcaf36f1666446d052125b22d4a67cb235 100644 (file)
@@ -135,14 +135,16 @@ public:
        void undo() override
        {
                RETM_IF(NULL == plugin, "Action(%s) : No plugin", ruleName.c_str());
+               RETM_IF(NULL == piAction, "Plugin(%s) : No piAction(%s)", plugin->getName().c_str(), ruleName.c_str());
 
-               if (nullptr != piAction) {
+               if (isChanged) {
+                       INFO("Action(%s) : value changed", ruleName.c_str());
+                       plugin->freeAction(piAction);
+               } else {
                        piAction->unSetChangedCallback(valueChangedCallback, this);
                        plugin->undo(piAction); // piAction is deleted in undo()
-                       piAction = nullptr;
-               } else {
-                       ERR("Action(%s) : value changed or no Action", ruleName.c_str());
                }
+               piAction = nullptr;
        }
 
 private: