16#include <config-ng/ciiConfigApi.hpp>
18#include <boost/program_options.hpp>
19#include <boost/algorithm/string.hpp>
26namespace bpo = boost::program_options;
96 const std::string& log_level =
"ERROR");
128 inline const elt::configng::CiiConfigDocument&
GetConfigDoc()
const {
return *m_config_doc; }
153 m_oldb_prefix_appender_key = key;
181 virtual void LoadConfig(
const std::string& filename =
"");
233 void MergeConfig(
const elt::configng::CiiConfigDocument& cfg_doc);
251 void AddParam(
const std::string& key,
const T& value);
259 bool HasParam(
const std::string& key)
const;
268 T
GetParam(
const std::string& key)
const;
277 void SetParam(
const std::string& key,
const T& value);
303 std::string
PrintNode(
const elt::configng::CiiConfigInstanceNode& node,
304 const std::string& indentation)
const;
313 std::string
Print(
const elt::configng::CiiConfigInstanceNamespace& instances)
const;
320 std::string
Print()
const;
332 bool SplitKeyValue(
const std::string& keyval, std::string& key, std::string& value)
const;
343 void SplitVectorStr(
const std::string& vector_str, std::string& vector_name,
344 int& vector_index)
const;
346 bpo::options_description m_options_desc;
347 bpo::variables_map m_options_map;
363 std::string m_oldb_prefix_appender_key;
370 std::optional<elt::configng::CiiConfigDocument> m_config_doc;
378 std::vector<std::string> nodes;
380 boost::split(nodes, key, boost::is_any_of(delim));
381 if (nodes.size() < 2) {
383 " has no root/leaf node(s).");
394 elt::configng::CiiConfigMapBuilder builder;
396 auto curr_node = builder[nodes[0]];
398 while (index < nodes.size()) {
400 curr_node = curr_node[nodes[index]];
401 if (index + 1 == nodes.size()) {
403 curr_node = elt::configng::CiiConfigInstanceNode::From(value);
409 m_config_doc = elt::configng::CiiConfigDocument();
410 m_config_doc->SetInstancesFromMap(builder);
412 auto document = elt::configng::CiiConfigDocument();
413 document.SetInstancesFromMap(builder);
417 auto issues = m_config_doc->Check();
418 if (issues.HasErrors() || issues.HasWarnings()) {
419 for (
auto& issue : issues) {
420 LOG4CPLUS_ERROR(
GetLogger(),
"Config. issue: " << issue.GetMessage());
436 std::vector<std::string> nodes;
438 boost::split(nodes, key, boost::is_any_of(delim));
439 if (nodes.size() < 2) {
441 " has no root/leaf node(s).");
444 auto instance = m_config_doc->Instances();
445 auto parent_node = instance[nodes[0]];
446 auto child_node = parent_node;
448 while (index < nodes.size()) {
449 std::string child_node_name = nodes[index];
452 int vector_index = -1;
453 SplitVectorStr(nodes[index], child_node_name, vector_index);
457 if (parent_node.Has(child_node_name)) {
458 if (vector_index == -1) {
459 child_node = parent_node[child_node_name];
461 child_node = parent_node[child_node_name][vector_index];
463 if (index + 1 == nodes.size()) {
464 T val = child_node.As<T>();
467 parent_node = child_node;
470 key +
" does not exists.");
475 key +
" does not exists.");
476 }
catch (std::exception& e) {
478 key +
">: " + std::string(e.what()));
491 std::vector<std::string> nodes;
493 boost::split(nodes, key, boost::is_any_of(delim));
494 if (nodes.size() < 2) {
496 " has no root/leaf node(s).");
499 auto instance = m_config_doc->Instances();
500 auto parent_node = instance[nodes[0]];
501 auto child_node = parent_node;
503 while (index < nodes.size()) {
504 std::string child_node_name = nodes[index];
507 int vector_index = -1;
508 SplitVectorStr(nodes[index], child_node_name, vector_index);
511 if (parent_node.Has(child_node_name)) {
512 if (vector_index == -1) {
513 child_node = parent_node[child_node_name];
515 child_node = parent_node[child_node_name][vector_index];
517 if (index + 1 == nodes.size()) {
521 parent_node = child_node;
524 key +
" does not exists.");
529 key +
" does not exists.");
530 }
catch (std::exception& e) {
531 LOG4CPLUS_ERROR(
GetLogger(),
"Writing configuration parameter <"
532 << key <<
">: " << e.what());
544 const std::string& prefix,
545 std::vector<std::string>& keys);
void AddParam(const std::string &key, const T &value)
Definition config.hpp:375
bpo::variables_map & GetOptionsMap()
Definition config.hpp:138
void SetParam(const std::string &key, const T &value)
Definition config.hpp:483
void CheckConfig() const
Definition config.cpp:304
Config(const std::string &name=LOGGER_NAME, const std::string &log_level="ERROR")
Definition config.cpp:23
const std::string & GetOldbPrefixAppenderKey()
Definition config.hpp:143
std::vector< std::string > SetConfigAsString(const std::string &config)
Definition config.cpp:471
std::string BuildOldbPrefix()
Definition config.cpp:640
bpo::options_description & GetOptionsDesc()
Definition config.hpp:133
Config & operator=(const Config &cfg)
Definition config.cpp:91
const std::string GetConfigAsString() const
Definition config.cpp:448
void CreateDefaultConfig(const std::string &default_cfg)
Definition config.cpp:389
T GetParam(const std::string &key) const
Definition config.hpp:428
virtual void ConfigureLogging(const std::string &filename="")
Definition config.cpp:240
virtual ~Config()
Definition config.cpp:86
void SetOldbPrefixAppenderKey(const std::string &key)
Definition config.hpp:152
virtual void LoadConfig(const std::string &filename="")
Definition config.cpp:195
std::string PrintNode(const elt::configng::CiiConfigInstanceNode &node, const std::string &indentation) const
Definition config.cpp:542
virtual bool ParseOptions(int argc, char *argv[])
Definition config.cpp:114
void MergeConfig(const elt::configng::CiiConfigDocument &cfg_doc)
Definition config.cpp:371
virtual void ApplyCmdLineOptions()
Definition config.cpp:272
bool HasParam(const std::string &key) const
Definition config.cpp:397
const elt::configng::CiiConfigDocument & GetConfigDoc() const
Definition config.hpp:128
std::string Print() const
Definition config.cpp:590
virtual void ValidateConfig(const std::vector< std::string > &keys, const Config &cfg) const
Definition config.cpp:324
Base class for the exceptions thrown by RAD and its users.
Definition exceptions.hpp:53
#define RAD_TRACE(logger)
Definition logger.hpp:21
Exception classes header file.
#define RAD_LOG_THROW(exceptionType_t, logger, msg)
Throw exception with information about the throw location.
Definition exceptions.hpp:356
Definition actionsApp.cpp:67
const std::string KEY_CONFIG_PROCNAME
Definition config.hpp:40
const std::string KEY_CONFIG_VERSION
Definition config.hpp:38
const std::string LOGGER_NAME
Definition logger.hpp:76
const std::string KEY_CONFIG_TRS_PROTOCOL
Definition config.hpp:51
void GetListOfKeysFromConfig(const elt::configng::CiiConfigInstanceNode &node, const std::string &prefix, std::vector< std::string > &keys)
Definition config.cpp:650
const std::string KEY_CONFIG_SM_APPEND
Definition config.hpp:45
const std::string KEY_CONFIG_FILENAME
Definition config.hpp:41
log4cplus::Logger & GetLogger()
Definition logger.cpp:72
const char CONFIG_KEY_SEPARATOR_OLDB
Definition config.hpp:30
const std::string KEY_CONFIG_SM_SCXML
Definition config.hpp:44
const std::string KEY_CONFIG_DDS_QOS_PARTICIPANT
Definition config.hpp:54
const std::string KEY_CONFIG_OLDB_ASYNC_PERIOD
Definition config.hpp:49
const std::string KEY_CONFIG_TRS_HEALTH_ENABLED
Definition config.hpp:50
const std::string KEY_CONFIG_LOG_LEVEL
Definition config.hpp:42
const std::vector< std::string > KEYS_CONFIG
Definition config.hpp:57
const std::string KEY_CONFIG_OLDB_CONN_TIMEOUT
Definition config.hpp:48
const std::string KEY_CONFIG
Definition config.hpp:37
const std::string KEY_CONFIG_MODNAME
Definition config.hpp:39
const std::string KEY_CONFIG_LOG_PROPERTIES
Definition config.hpp:43
const std::string KEY_CONFIG_OLDB_URI_PREFIX
Definition config.hpp:47
const std::string KEY_CONFIG_REQ_ENDPOINT
Definition config.hpp:46
const std::string KEY_CONFIG_TRS_SOCKET_PATH
Definition config.hpp:52
const std::string KEY_CONFIG_DDS_QOS_PROFILE
Definition config.hpp:53
const std::string KEY_CONFIG_DDS_QOS_INTERFACES
Definition config.hpp:55