22 #include "clips-rest-api.h" 24 #include <clips/clips.h> 25 #include <core/threading/mutex_locker.h> 26 #include <webview/rest_api_manager.h> 51 std::bind(&ClipsRestApi::cb_get_facts,
53 std::placeholders::_1));
55 WebRequest::METHOD_GET,
"/", std::bind(&ClipsRestApi::cb_list_environments,
this));
128 CLIPS::Fact::pointer & fact,
135 CLIPS::Template::pointer fact_template = fact->get_template();
145 OpenStringDestination(clips->cobj(), (
char *)
"ProcPPForm", tmp, 16383);
146 PrintFact(clips->cobj(), (
char *)
"ProcPPForm", (
struct fact *)fact->cobj(), FALSE, FALSE);
147 CloseStringDestination(clips->cobj(), (
char *)
"ProcPPForm");
150 std::vector<std::string> slots = fact->slot_names();
151 for (
const auto &s : slots) {
152 CLIPS::Values fval = fact->slot_value(s);
156 : (fval.size() > 1));
157 for (
const auto &v : fval) {
159 case CLIPS::TYPE_FLOAT: sval.
addto_values(std::to_string(v.as_float()));
break;
160 case CLIPS::TYPE_INTEGER: sval.
addto_values(std::to_string(v.as_integer()));
break;
161 case CLIPS::TYPE_SYMBOL:
162 case CLIPS::TYPE_STRING:
163 case CLIPS::TYPE_INSTANCE_NAME: sval.
addto_values(v.as_string());
break;
177 bool formatted = (params.
query_arg(
"formatted") ==
"true");
182 std::map<std::string, LockPtr<CLIPS::Environment>> envs =
clips_env_mgr->environments();
183 if (envs.find(params.
path_arg(
"env")) == envs.end()) {
185 "Environment '%s' is unknown",
189 auto clips = envs[params.
path_arg(
"env")];
192 CLIPS::Fact::pointer fact = clips->get_facts();
194 CLIPS::Template::pointer tmpl = fact->get_template();
195 rv.
push_back(std::move(gen_fact(clips, fact, formatted)));
203 ClipsRestApi::cb_list_environments()
208 std::map<std::string, LockPtr<CLIPS::Environment>> envs =
clips_env_mgr->environments();
210 for (
const auto &e : envs) {
212 env.set_kind(
"Environment");
214 env.set_name(e.first);
virtual void init()
Initialize the thread.
void set_apiVersion(const std::string &apiVersion)
Set apiVersion value.
Webview REST API component.
REST processing exception.
Fawkes library namespace.
void addto_values(const std::string &&values)
Add element to values array.
static std::string api_version()
Get version of implemented API.
std::string query_arg(const std::string &what)
Get a query argument.
static std::string api_version()
Get version of implemented API.
virtual void loop()
Code to execute in the thread.
Thread class encapsulation of pthreads.
void unregister_api(WebviewRestApi *api)
Remove a request processor.
Logger * logger
This is the Logger member used to access the logger.
void set_is_multifield(const bool &is_multifield)
Set is-multifield value.
~ClipsRestApi()
Destructor.
void register_api(WebviewRestApi *api)
Add a REST API.
virtual void finalize()
Finalize the thread.
void set_name(const std::string &name)
Set name value.
void set_formatted(const std::string &formatted)
Set formatted value.
void add_handler(WebRequest::Method method, std::string path, Handler handler)
Add handler function.
REST parameters to pass to handlers.
void set_kind(const std::string &kind)
Set kind value.
void set_template_name(const std::string &template_name)
Set template_name value.
Fact representation for JSON transfer.
Mutex * objmutex_ptr() const
Get object mutex.
void push_back(M &m)
Add item at the back of the container.
void addto_slots(const std::shared_ptr< SlotValue > &&slots)
Add element to slots array.
LockPtr< CLIPSEnvManager > clips_env_mgr
CLIPS environment manager.
Container to return array via REST.
WebviewRestApiManager * webview_rest_api_manager
Webview REST API manager.
std::string path_arg(const std::string &what)
Get a path argument.
ClipsRestApi()
Constructor.
SlotValue representation for JSON transfer.
void set_index(const int64_t &index)
Set index value.