Implement GetList method
authorSangyoon Jang <jeremy.jang@samsung.com>
Thu, 13 Mar 2025 06:50:05 +0000 (15:50 +0900)
committer장상윤/Tizen Platform Lab(SR)/삼성전자 <jeremy.jang@samsung.com>
Thu, 13 Mar 2025 07:58:46 +0000 (16:58 +0900)
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/action/action_loader.hh
src/action/action_request_handler.cc
src/action/action_request_handler.hh
src/action/request_handler.hh
src/action/service.cc
src/action/sqlite_db.cc
src/action/sqlite_db.hh
src/common/action_model.cc

index 79860bdf1d35b7c372832d2b2c5fc559ec4f463a..78a53a2033174bb10b964cb0d1598f0c2bbdf95d 100644 (file)
 #ifndef ACTION_ACTION_LOADER_HH_
 #define ACTION_ACTION_LOADER_HH_
 
+#include <string>
+#include <vector>
+
 namespace action {
 
 class IActionLoader {
  public:
   virtual ~IActionLoader() = default;
-  virtual void ListActions() = 0;
+  virtual std::vector<std::string> ListActions() = 0;
   virtual std::string GetAction(const std::string& name) = 0;
 };
 
index 768409b7bf8a0fe2f8c596877ec01d9b94d8b99f..6a26867ca54018578fbbdf96f0957a58d5229db2 100644 (file)
@@ -53,10 +53,23 @@ void ActionRequestHandler::Init() {
   service_.Listen(std::make_shared<action::Service::Factory>(*this));
 }
 
-void ActionRequestHandler::OnListActions() {
+std::vector<rpc::Action> ActionRequestHandler::OnListActions() {
   // TODO: db as member variable?
   auto db = std::make_unique<action::SqliteDb>();
-  db->ListActions();
+  std::vector<std::string> list = db->ListActions();
+  std::vector<rpc::Action> actions;
+  for (const auto& item : list) {
+    common::ActionModel model(item);
+    rpc::Action action;
+    action.Setaction_id(model.GetActionId());
+    action.Setapp_id(model.GetAppId());
+    action.Setdescription(model.GetDescription());
+    action.Settype("app_control");  // TODO
+    // action.Setparameters();
+    // action.Setprivileges();
+    actions.push_back(action);
+  }
+  return actions;
 }
 
 rpc::Action ActionRequestHandler::OnGetAction(const std::string& id) {
index f6d0d8cc4aa960dcca6dbc1c1902b78d1eea1434..023c1108cf641a20edaf87ce056879afc8409c3b 100644 (file)
@@ -34,7 +34,7 @@ class ActionRequestHandler : public IRequestHandler, common::IResultHandler {
   ~ActionRequestHandler();
   void Init();
 
-  void OnListActions() override;
+  std::vector<rpc::Action> OnListActions() override;
   rpc::Action OnGetAction(const std::string& id) override;
   void OnGetActionId(const std::string& user_description,
                      int top_k,
index 3eccbf926a1060ac1fb75d941729e47f25eeccb3..7311fdf7ecf2f5fb55986321343e62a1e5fa6f40 100644 (file)
@@ -30,7 +30,7 @@ namespace action {
 class IRequestHandler {
  public:
   virtual ~IRequestHandler() = default;
-  virtual void OnListActions() = 0;
+  virtual std::vector<rpc::Action> OnListActions() = 0;
   virtual rpc::Action OnGetAction(const std::string& id) = 0;
   virtual void OnGetActionId(const std::string& user_description, int top_k,
       float search_threshold) = 0;
index f87270ff11cb8c9930e6ab4c4a3a0fa9f9c23933..77f8334a7635b9451b27e3e4ce863fe5eccb2bd4 100644 (file)
@@ -35,9 +35,7 @@ Service::~Service() {
 }
 
 std::vector<rpc::Action> Service::ListActions() {
-  // return list of actions from db
-  // handler_->ListActions();
-  return {};
+  return handler_.OnListActions();
 }
 
 rpc::Action Service::GetAction(std::string action_id) {
index 93af200a54a1334e6d6f6413def2f2cf2b34ed34..f55f9e374defa8d70fd42d4b43fbaa9f99f8fbcc 100644 (file)
@@ -36,9 +36,9 @@ namespace action {
 SqliteDb::SqliteDb() : conn_(kDbPath, SQLITE_OPEN_READONLY) {
 }
 
-void SqliteDb::ListActions() {
+std::vector<std::string> SqliteDb::ListActions() {
   // TODO
-  Select();
+  return Select();
 }
 
 std::string SqliteDb::GetAction(const std::string& name) {
@@ -71,22 +71,20 @@ std::string SqliteDb::Select(const std::string& name) {
   return static_cast<std::string>(json_str);
 }
 
-void SqliteDb::Select() {
+std::vector<std::string> SqliteDb::Select() {
   auto q = tizen_base::Database::Sql(kListActionQuery);
   auto r = conn_.Exec(q);
   if (!static_cast<bool>(r)) {
     LOG(ERROR) << "Failed to execute select query: "
         << static_cast<const char*>(r);
-    return;
+    return {};
   }
 
-  for (const auto& i : r) {
-    auto [pkgid, action_name, json_str] =
-        i.Get<tizen_base::_, tizen_base::_, tizen_base::_>();
-    LOG(DEBUG) << "pkgid: " << static_cast<std::string>(pkgid)
-        << ", name: " << static_cast<std::string>(action_name)
-        << ", json_str: " << static_cast<std::string>(json_str);
-  }
+  std::vector<std::string> list;
+  for (const auto& i : r)
+    list.emplace_back(static_cast<std::string>(i.Get(0)));
+
+  return list;
 }
 
 }  // namespace action
index eb04ec684cac7c53f24c2c4e723d4c9d6b1f3d12..c11c95376313bace4264e1421523afae1b9b3dfb 100644 (file)
@@ -20,6 +20,7 @@
 #include <database.hpp>
 
 #include <string>
+#include <vector>
 
 #include "action/action_loader.hh"
 
@@ -30,10 +31,10 @@ class SqliteDb : public IActionLoader {
   SqliteDb();
   ~SqliteDb() = default;
 
-  void ListActions() override;
+  std::vector<std::string> ListActions() override;
   std::string GetAction(const std::string& name) override;
 
-  void Select();
+  std::vector<std::string> Select();
   std::string Select(const std::string& name);
 
  private:
index 3be9b11409536ecad3c8d6c344705f9da136c39d..f46c3b69c672fca9bec6effd8dd12fe79a54b269 100644 (file)
@@ -39,7 +39,7 @@ Json::Value ParseJsonFromString(const std::string& json_str) {
 }
 
 std::map<std::string, common::ParameterType> kTypeMap = {
-  {"int", common::ParameterType::IntType},
+  {"integer", common::ParameterType::IntType},
   {"string", common::ParameterType::StringType},
   {"double", common::ParameterType::DoubleType},
   {"bool", common::ParameterType::BoolType},
@@ -69,31 +69,36 @@ namespace common {
 ActionModel::ActionModel() {}
 
 ActionModel::ActionModel(const std::string& json_str) {
-  Json::Value root = ParseJsonFromString(json_str);
-
-  action_id_ = root["name"].asString();
-  app_id_ = root["appId"].asString();
-  type_ = GetActionTypeFromString(root["type"].asString());
-  description_ = root["desc"].asString();
-
-  // params
-  for (auto const& it : root["params"].getMemberNames()) {
-    std::string name = it;
-    common::ParameterType type =
-        ConvertStringToParameterType(root["params"][it]["type"].asString());
-    std::string description = root["params"][it]["desc"].asString();
-    bool is_required = root["params"][it]["isRequired"].asBool();
-    parameters_.emplace_back(name, type, "", description, is_required);
-  }
-
-  // returns
-  for (auto const& it : root["returns"].getMemberNames()) {
-    std::string name = it;
-    common::ParameterType type =
-        ConvertStringToParameterType(root["returns"][it]["type"].asString());
-    std::string description = root["returns"][it]["desc"].asString();
-    // ActionParameterType -> another class???
-    returns_.emplace_back(name, type, "", description, false);
+  try {
+    Json::Value root = ParseJsonFromString(json_str);
+
+    action_id_ = root["name"].asString();
+    app_id_ = root["appId"].asString();
+    type_ = GetActionTypeFromString(root["type"].asString());
+    description_ = root["desc"].asString();
+
+    // params
+    for (auto const& it : root["params"].getMemberNames()) {
+      std::string name = it;
+      common::ParameterType type =
+          ConvertStringToParameterType(root["params"][it]["type"].asString());
+      std::string description = root["params"][it]["desc"].asString();
+      bool is_required = root["params"][it]["isRequired"].asBool();
+      parameters_.emplace_back(name, type, "", description, is_required);
+    }
+
+    // returns
+    for (auto const& it : root["returns"].getMemberNames()) {
+      std::string name = it;
+      common::ParameterType type =
+          ConvertStringToParameterType(root["returns"][it]["type"].asString());
+      std::string description = root["returns"][it]["desc"].asString();
+      // ActionParameterType -> another class???
+      returns_.emplace_back(name, type, "", description, false);
+    }
+  } catch (const Json::Exception& e) {
+    // TODO: how to handle invalid json case?
+    LOG(ERROR) << "Failed to parse json string: " << e.what();
   }
 }