revise modes_register_mode()
authorYoungjae Shin <yj99.shin@samsung.com>
Tue, 23 Jul 2019 08:33:46 +0000 (17:33 +0900)
committerYoungjae Shin <yj99.shin@samsung.com>
Wed, 18 Mar 2020 08:53:50 +0000 (17:53 +0900)
client/mdsc_register_mode.c
common/dbus.xml
common/dbus_def.h
example/tizen_mode.xsd
include/modes.h
include/modes_constants.h
supervisor/Mode.cpp
supervisor/Mode.h
supervisor/RequestHandler.cpp
supervisor/RequestHandler.h
unittest/modes_test_client.cpp

index 55d40f0..9c053b6 100644 (file)
 #include "mdsc.h"
 #include "mdsc_dbus.h"
 #include "common/dbus.h"
+#include "common/dbus_def.h"
 
 struct mds_action_handle {
        char *id;
        char *action;
        char *value;
-       int restriction;
 };
 
 struct mds_handle {
        char *name;
-       char *type;
+       modes_type_mode_e type;
        GList *action_list;
 };
 
@@ -67,35 +67,34 @@ GVariant* _mdsc_create_mode_data(modes_h mode)
 {
        RETV_IF(NULL == mode, NULL);
 
-       GVariantBuilder *action_builder = g_variant_builder_new(G_VARIANT_TYPE("a(sssi)"));
+       GVariantBuilder *action_builder = g_variant_builder_new(G_VARIANT_TYPE(MODES_DBUS_ACTION_LIST_SIG));
        GList *it = g_list_first(mode->action_list);
 
        while (NULL != it) {
                struct mds_action_handle *action_data = (struct mds_action_handle *)it->data;
-               g_variant_builder_add(action_builder, "(sssi)", action_data->id,
-                               action_data->action, action_data->value, action_data->restriction);
+               g_variant_builder_add(action_builder, MODES_DBUS_ACTION_SIG, action_data->id,
+                               action_data->action, action_data->value);
                it = g_list_next(it);
        }
 
-       GVariant *action = g_variant_new("a(sssi)", action_builder);
-       GVariant *mode_data = g_variant_new("(ssv)", mode->name, mode->type, action);
+       GVariant *action = g_variant_new(MODES_DBUS_ACTION_LIST_SIG, action_builder);
+       GVariant *mode_data = g_variant_new(MODES_DBUS_MODE_SIG, mode->name, mode->type, action);
        g_variant_builder_unref(action_builder);
 
        return mode_data;
 }
 
-API modes_h modes_create_mode(const char *name, const char *type)
+API modes_h modes_create_mode(const char *name, modes_type_mode_e type)
 {
        struct mds_handle *mode;
 
        RETV_IF(NULL == name, NULL);
-       RETV_IF(NULL == type, NULL);
 
        mode = malloc(sizeof(struct mds_handle));
        RETV_IF(NULL == mode, NULL);
 
        mode->name = strdup(name);
-       mode->type = strdup(type);
+       mode->type = type;
        mode->action_list = NULL;
 
        return mode;
@@ -114,7 +113,6 @@ API action_h modes_create_action(const char *name, const char *value)
        action->action = strdup(name);
        action->value = strdup(value);
        action->id = NULL;
-       action->restriction = MODES_RESTRICTION_NONE;
 
        return action;
 }
@@ -170,7 +168,6 @@ API void modes_destroy_mode(modes_h mode)
        RET_IF(NULL == mode);
 
        free(mode->name);
-       free(mode->type);
 
        g_list_free_full(mode->action_list, _mdsc_free_action);
 
index 94b85f8..dadf185 100644 (file)
@@ -9,7 +9,7 @@
                        <arg type="i" name="ret" direction="out"/>
                </method>
                <method name="registerMode">
-                       <arg type="(ssv)" name="modeData" direction="in"/>
+                       <arg type="(siv)" name="modeData" direction="in"/>
                        <arg type="i" name="ret" direction="out"/>
                </method>
        </interface>
index 2f2b3ac..16c8a60 100644 (file)
@@ -21,3 +21,7 @@
 #endif
 
 #define MODES_DBUS_OBJPATH "/org/tizen/modes/dbus"
+
+#define MODES_DBUS_MODE_SIG "(siv)"
+#define MODES_DBUS_ACTION_SIG "(sss)"
+#define MODES_DBUS_ACTION_LIST_SIG "a" MODES_DBUS_ACTION_SIG
index 0c27cd8..fc78dae 100644 (file)
@@ -42,8 +42,8 @@
               <xs:simpleType>
                 <xs:restriction base="xs:string">
                   <xs:enumeration value="normal"/>
-                  <xs:enumeration value="exclusive"/>
                   <xs:enumeration value="oneshot"/>
+                  <xs:enumeration value="exclusive"/>
                 </xs:restriction>
               </xs:simpleType>
             </xs:attribute>
index 73c93c8..05547c8 100644 (file)
@@ -82,7 +82,7 @@ int modes_undo_mode(const char *name);
  *         otherwise NULL value
  * @retval NULL Failed to create the mode handler
  */
-modes_h modes_create_mode(const char *name, const char *type);
+modes_h modes_create_mode(const char *name, modes_type_mode_e type);
 
 /**
  * @brief Create Action.
index 3d6a3c6..beeedd3 100644 (file)
 
 
 /**
- * @brief Enumeration for type of observation.
+ * @brief Enumeration for mode type.
  * @since_tizen 5.5
  */
 typedef enum {
-       MODES_TEMP_0 = 0, /**< Indicates no option */
-       MODES_TEMP_1 = 1, /**< Indicates 1*/
-} modes_temp_e;
-
-
-/**
- * @brief Enumeration for policy.
- * @since_tizen 5.5
- */
-typedef enum {
-       MODES_POLICY_NO = 0, /**< Indicates resource uninitialized */
-       MODES_POLICY_1 = (1 << 0), /**< Indicates resource that is allowed to be discovered */
-       MODES_POLICY_2 = (1 << 1), /**< Indicates resource that is allowed to be observed */
-       MODES_POLICY_3 = (1 << 2), /**< Indicates resource initialized and activated */
-       MODES_POLICY_4 = (1 << 3), /**< Indicates resource which takes some delay to respond */
-} modes_policy_e;
+       MODES_TYPE_MODE_NORMAL = 0, /**< Indicates normal mode that is allowed to undo and apply other mode  */
+       MODES_TYPE_MODE_ONESHOT = (1 << 0), /**< Indicates one-shot mode that has no management(undo) */
+       // Exclusive is not valide type on making by user.
+       //MODES_TYPE_MODE_EXCLUSIVE = (1 << 1), /**< Indicates exclusive mode that is only allowed to undo */
+} modes_type_mode_e;
 
 
 /**
index 80f4b12..44d875a 100644 (file)
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 #include "Mode.h"
+#include "modes_constants.h"
 #include "ModesEx.h"
 
 MODES_NAMESPACE_USE;
@@ -37,7 +38,7 @@ void Mode::setName(const std::string &data)
        name = data;
 }
 
-std::string Mode::getName() const
+const std::string Mode::getName() const
 {
        return name;
 }
@@ -52,7 +53,23 @@ void Mode::setModeType(const std::string &val)
                type = MODE_ONESHOT;
 }
 
-Mode::ModeType Mode::getModeType() const
+void Mode::setModeType(int val)
+{
+       switch (val) {
+       case MODES_TYPE_MODE_NORMAL:
+               type = MODE_NORMAL;
+               break;
+       // Exclusive mode is not allowed on making by user.
+       //case MODES_TYPE_MODE_EXCLUSIVE:
+       //      type = MODE_EXCLUSIVE;
+       //      break;
+       case MODES_TYPE_MODE_ONESHOT:
+       default:
+               type = MODE_ONESHOT;
+       }
+}
+
+const Mode::ModeType Mode::getModeType() const
 {
        return type;
 }
@@ -62,7 +79,7 @@ void Mode::setCustomized(bool data)
        customized = data;
 }
 
-bool Mode::getCustomized() const
+const bool Mode::getCustomized() const
 {
        return customized;
 }
index 8bb49db..5f14595 100644 (file)
@@ -27,20 +27,21 @@ class Mode {
 public:
        typedef enum {
                MODE_NORMAL,
-               MODE_EXCLUSIVE,
-               MODE_ONESHOT
+               MODE_ONESHOT,
+               MODE_EXCLUSIVE
        }ModeType;
 
        Mode();
        ~Mode();
        void setName(const std::string &data);
-       std::string getName() const;
+       const std::string getName() const;
 
        void setModeType(const std::string &data);
-       ModeType getModeType() const;
+       void setModeType(int val);
+       const ModeType getModeType() const;
 
        void setCustomized(bool data);
-       bool getCustomized() const;
+       const bool getCustomized() const;
 
        void addAction(Action *action);
        std::list<std::shared_ptr<Action>> getActionList() const;
index b9f036e..0fb5f29 100644 (file)
@@ -16,6 +16,7 @@
 #include "RequestHandler.h"
 #include "mdss.h"
 #include "ModesEx.h"
+#include "common/dbus_def.h"
 
 MODES_NAMESPACE_USE;
 
@@ -84,34 +85,32 @@ gboolean RequestHandler::registerModeHandler(mdsDbus *object, GDBusMethodInvocat
 Mode RequestHandler::getModefromData(GVariant *inData)
 {
        GVariant *actionList;
-       gchar *name, *type;
-       gchar *id, *act_name, *value;
-       gint32 restriction;
+       gchar *modeName;
+       gchar *id, *actName, *value;
+       gint32 type;
        GVariantIter *iter;
        Mode mode;
 
-       g_variant_get(inData, "(ssv)", &name, &type, &actionList);
-       DBG("mode_name : %s // type : %s", name, type);
+       g_variant_get(inData, MODES_DBUS_MODE_SIG, &modeName, &type, &actionList);
+       DBG("mode_name : %s // type : %d", modeName, type);
 
-       mode.setName(name);
+       mode.setName(modeName);
        mode.setModeType(type);
        mode.setCustomized(true);
-       g_free(name);
-       g_free(type);
+       g_free(modeName);
 
-       g_variant_get(actionList, "a(sssi)", &iter);
+       g_variant_get(actionList, MODES_DBUS_ACTION_LIST_SIG, &iter);
 
        try {
-               while (g_variant_iter_loop(iter, "(sssi)", &id, &act_name, &value, &restriction)) {
-                       DBG("id : %s action_name : %s value : %s restiction : %d",
-                                       id[0] != '\0' ? id : "NULL", act_name, value, restriction);
+               while (g_variant_iter_loop(iter, MODES_DBUS_ACTION_SIG, &id, &actName, &value)) {
+                       DBG("id(%s) action_name(%s) value(%s)", id[0] != '\0' ? id : "NULL", actName, value);
 
-                       Action *action = createAction(id, act_name, value, restriction);
+                       Action *action = createAction(id, actName, value);
 
                        mode.addAction(action);
                }
        } catch (ModesEx &e) {
-               ERR("createAction(%s, %s, %s, %d) Fail(%s)", id, act_name, value, restriction, e.what());
+               ERR("createAction(%s, %s, %s) Fail(%s)", id, actName, value, e.what());
                g_variant_iter_free(iter);
                g_variant_unref(actionList);
                throw ModesEx(ModesEx::INVALID_ARG, "Action is null!");
@@ -122,7 +121,7 @@ Mode RequestHandler::getModefromData(GVariant *inData)
        return mode;
 }
 
-Action* RequestHandler::createAction(char *id, char *ruleName, char *contents, int restriction)
+Action* RequestHandler::createAction(char *id, char *ruleName, char *val)
 {
        std::string pluginName;
 
@@ -132,13 +131,11 @@ Action* RequestHandler::createAction(char *id, char *ruleName, char *contents, i
                throw ModesEx(ModesEx::PARSER_ERROR, "Action is null!");
        }
 
-       if (restriction)
-               action->setRestrict(Action::REQ_LOCK);
-       else
-               action->setRestrict(Action::REQ_NONE);
+       if (id)
+               action->setID(id);
+       action->setRestrict(Action::REQ_NONE); //It is not allowed to set Restrict of Action by API.
+       action->setValue(val);
 
-       action->setID(id);
-       action->setValue(contents);
        action->printInfo();
 
        return action;
index 17f4b93..e899421 100644 (file)
@@ -36,7 +36,7 @@ public:
 
 private:
        static Mode getModefromData(GVariant *inData);
-       static Action* createAction(char *id, char *act_name, char *contents, int restriction);
+       static Action* createAction(char *id, char *act_name, char *contents);
 
        static ModeManager *modeMgr;
        static RuleManager *ruleMgr;
index 53a9b99..e6fd076 100644 (file)
@@ -51,7 +51,7 @@ protected:
 
        static gboolean request_register_mode_idler(gpointer data)
        {
-               modes_h mode_handle = modes_create_mode("created", "normal");
+               modes_h mode_handle = modes_create_mode("created", MODES_TYPE_MODE_NORMAL);
                action_h action_handle[2];
                action_handle[0] = modes_create_action("wifi.power", "on");
                modes_action_set_id(action_handle[0], "WiFiOn");