revise change cb architecture
authorYoungjae Shin <yj99.shin@samsung.com>
Tue, 5 Nov 2019 07:28:18 +0000 (16:28 +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 f7f1a22d07d5d313bf2d7840c694af39760bcdac..d5490a372afdfd673a90c00b7339cc64efc49476 100644 (file)
@@ -21,8 +21,6 @@
 
 namespace ModeSupervisorNamespace {
 
-       typedef void valueChangedCb(const std::string &key, void *userData);
-
        class Plugin {
        public:
                Plugin()
@@ -98,15 +96,6 @@ namespace ModeSupervisorNamespace {
                {
                        return std::string();
                }
-               virtual int setChangedCallback(valueChangedCb callback, const std::string &key, void *userData)
-               {
-                       return MODES_ERROR_NOT_SUPPORTED;
-               }
-
-               virtual int unSetChangedCallback(valueChangedCb callback, const std::string &key, void *userData)
-               {
-                       return MODES_ERROR_NOT_SUPPORTED;
-               }
        private:
                std::string name;     /* plugin key */
        };
index 6a440ff8b65001196805ff03c320450db0edeb1e..fd2ab45273697ea9e32a3d06fdd9359f7ae88972 100644 (file)
@@ -20,6 +20,8 @@
 
 namespace ModeSupervisorNamespace {
 
+       typedef void (*valueChangedCB)(void *userData);
+
        class PluginAction {
        public:
                PluginAction(const std::string &actionName)
@@ -44,6 +46,14 @@ namespace ModeSupervisorNamespace {
                {
                        return MODES_ERROR_NOT_SUPPORTED;
                }
+               virtual int setChangedCallback(valueChangedCB callback, void *userData)
+               {
+                       return MODES_ERROR_NOT_SUPPORTED;
+               }
+               virtual int unSetChangedCallback(valueChangedCB callback, void *userData)
+               {
+                       return MODES_ERROR_NOT_SUPPORTED;
+               }
        private:
                const std::string name;
        };
index 52ccb23c968e22e6a16d7abd7369c430a4767367..7c47378864f2e95397275bc288db06623e61dce0 100644 (file)
@@ -41,9 +41,6 @@ public:
        double getDouble(const std::string &key) override;
        bool getBool(const std::string &key) override;
        std::string getString(const std::string &key) override;
-
-       int setChagnedCallback(valueChangedCb callback, const std::string &key, void *userData);
-       int unSetChagnedCallback(valueChangedCb callback, const std::string &key, void *userData);
 };
 
 extern "C" API Plugin *objectCreate(void)
@@ -153,13 +150,3 @@ std::string TestPlugin::getString(const std::string &key)
        DBG("TestPlugin::getString(%s)", key.c_str());
        return std::string("test");
 }
-
-int TestPlugin::setChagnedCallback(valueChangedCb callback, const std::string &key, void *userData)
-{
-       return MODES_ERROR_NONE;
-}
-
-int TestPlugin::unSetChagnedCallback(valueChangedCb callback, const std::string &key, void *userData)
-{
-       return MODES_ERROR_NONE;
-}
index 90f042cc02e96c041704d55fa8cf5e11d1e76999..218a42b29af2ff923234e36c17d0e1d85d4cc3c1 100644 (file)
@@ -46,3 +46,13 @@ int TestPluginAction::parse(const std::string &info)
        DBG("serialized info(%s)", info.c_str());
        return MODES_ERROR_NONE;
 }
+
+int TestPluginAction::setChangedCallback(valueChangedCB callback, void *userData)
+{
+       return MODES_ERROR_NONE;
+}
+
+int TestPluginAction::unSetChangedCallback(valueChangedCB callback, void *userData)
+{
+       return MODES_ERROR_NONE;
+}
index c8dffbd6149513a5568976bcdd3feda8b546ef63..fe373dab1b8b7c6abf22424c903d18acd9d38f65 100644 (file)
@@ -29,6 +29,8 @@ public:
        int 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;
 };
 
 MODES_NAMESPACE_END
index c4e6d6d3c93057ba08e659031ebc818f324ba55c..dcac35c2203d08b5ff6f777c6d130fbc1b3107dc 100644 (file)
 
 MODES_NAMESPACE_USE;
 
-void Action::valueChangedCallback(const std::string &key, void *userData)
+void Action::valueChangedCallback(void *userData)
 {
        Action *action = (Action*)userData;
        RET_IF(NULL == action);
 
        action->setIsChanged();
-       DBG("Action(%s) Changed", key.c_str());
+       DBG("Action(%s) Changed", action->ruleName.c_str());
 }
 
 Action::Action()
index a44e3ad99d983d79250197f1f126090a065bf734..12141b4d0ee2933035720d02dac5430bc7a73a5b 100644 (file)
@@ -56,7 +56,7 @@ protected:
        std::string ruleName;
        Plugin *plugin;
        PluginAction *piAction;
-       static void valueChangedCallback(const std::string &key, void *userData);
+       static void valueChangedCallback(void *userData);
 
 private:
        std::string id;
index a2cda93da2a57ee702168f56471735f6b58ac736..41f73c9b72719fe5a973b9e2d5a6e425dcb57eb6 100644 (file)
@@ -80,7 +80,7 @@ public:
                        ERR("plugin(%s) getUndoAction() Fail", plugin->getName().c_str());
                        return MODES_ERROR_NOT_SUPPORTED;
                }
-               plugin->setChangedCallback(valueChangedCallback, ruleName.substr(pos + 1), this);
+               tmpAction->setChangedCallback(valueChangedCallback, this);
 
                piAction = tmpAction;
                return MODES_ERROR_NONE;
@@ -109,7 +109,8 @@ public:
                        ERR("plugin(%s) set() Fail(%d)", plugin->getName().c_str(), ret);
                        return ret;
                }
-               plugin->setChangedCallback(valueChangedCallback, ruleName.substr(pos + 1), this);
+               if (tmpAction)
+                       tmpAction->setChangedCallback(valueChangedCallback, this);
 
                piAction = tmpAction;
                return MODES_ERROR_NONE;
@@ -135,10 +136,9 @@ public:
        {
                RETM_IF(NULL == plugin, "Action(%s) : No plugin", ruleName.c_str());
 
-               int pos = ruleName.find_first_of(".");
-               plugin->unSetChangedCallback(valueChangedCallback, ruleName.substr(pos + 1), this);
                if (nullptr != piAction) {
-                       plugin->undo(piAction);
+                       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());