#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;
};
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) {
~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,
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;
}
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) {
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) {
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
#include <database.hpp>
#include <string>
+#include <vector>
#include "action/action_loader.hh"
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:
}
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},
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();
}
}