16#include <config-ng/ciiConfigApi.hpp>
18#include <boost/program_options.hpp>
19#include <boost/algorithm/string.hpp>
26namespace bpo = boost::program_options;
90 const std::string& log_level =
"ERROR");
122 inline const elt::configng::CiiConfigDocument&
GetConfigDoc()
const {
return *m_config_doc; }
147 m_oldb_prefix_appender_key = key;
175 virtual void LoadConfig(
const std::string& filename =
"");
227 void MergeConfig(
const elt::configng::CiiConfigDocument& cfg_doc);
245 void AddParam(
const std::string& key,
const T& value);
253 bool HasParam(
const std::string& key)
const;
262 T
GetParam(
const std::string& key)
const;
271 void SetParam(
const std::string& key,
const T& value);
297 std::string
PrintNode(
const elt::configng::CiiConfigInstanceNode& node,
298 const std::string& indentation)
const;
307 std::string
Print(
const elt::configng::CiiConfigInstanceNamespace& instances)
const;
314 std::string
Print()
const;
326 bool SplitKeyValue(
const std::string& keyval, std::string& key, std::string& value)
const;
337 void SplitVectorStr(
const std::string& vector_str, std::string& vector_name,
338 int& vector_index)
const;
340 bpo::options_description m_options_desc;
341 bpo::variables_map m_options_map;
357 std::string m_oldb_prefix_appender_key;
364 std::optional<elt::configng::CiiConfigDocument> m_config_doc;
372 std::vector<std::string> nodes;
374 boost::split(nodes, key, boost::is_any_of(delim));
375 if (nodes.size() < 2) {
377 " has no root/leaf node(s).");
388 elt::configng::CiiConfigMapBuilder builder;
390 auto curr_node = builder[nodes[0]];
392 while (index < nodes.size()) {
394 curr_node = curr_node[nodes[index]];
395 if (index + 1 == nodes.size()) {
397 curr_node = elt::configng::CiiConfigInstanceNode::From(value);
403 m_config_doc = elt::configng::CiiConfigDocument();
404 m_config_doc->SetInstancesFromMap(builder);
406 auto document = elt::configng::CiiConfigDocument();
407 document.SetInstancesFromMap(builder);
411 auto issues = m_config_doc->Check();
412 if (issues.HasErrors() || issues.HasWarnings()) {
413 for (
auto& issue : issues) {
414 LOG4CPLUS_ERROR(
GetLogger(),
"Config. issue: " << issue.GetMessage());
430 std::vector<std::string> nodes;
432 boost::split(nodes, key, boost::is_any_of(delim));
433 if (nodes.size() < 2) {
435 " has no root/leaf node(s).");
438 auto instance = m_config_doc->Instances();
439 auto parent_node = instance[nodes[0]];
440 auto child_node = parent_node;
442 while (index < nodes.size()) {
443 std::string child_node_name = nodes[index];
446 int vector_index = -1;
447 SplitVectorStr(nodes[index], child_node_name, vector_index);
451 if (parent_node.Has(child_node_name)) {
452 if (vector_index == -1) {
453 child_node = parent_node[child_node_name];
455 child_node = parent_node[child_node_name][vector_index];
457 if (index + 1 == nodes.size()) {
458 T val = child_node.As<T>();
461 parent_node = child_node;
464 key +
" does not exists.");
469 key +
" does not exists.");
470 }
catch (std::exception& e) {
472 key +
">: " + std::string(e.what()));
485 std::vector<std::string> nodes;
487 boost::split(nodes, key, boost::is_any_of(delim));
488 if (nodes.size() < 2) {
490 " has no root/leaf node(s).");
493 auto instance = m_config_doc->Instances();
494 auto parent_node = instance[nodes[0]];
495 auto child_node = parent_node;
497 while (index < nodes.size()) {
498 std::string child_node_name = nodes[index];
501 int vector_index = -1;
502 SplitVectorStr(nodes[index], child_node_name, vector_index);
505 if (parent_node.Has(child_node_name)) {
506 if (vector_index == -1) {
507 child_node = parent_node[child_node_name];
509 child_node = parent_node[child_node_name][vector_index];
511 if (index + 1 == nodes.size()) {
515 parent_node = child_node;
518 key +
" does not exists.");
523 key +
" does not exists.");
524 }
catch (std::exception& e) {
525 LOG4CPLUS_ERROR(
GetLogger(),
"Writing configuration parameter <"
526 << key <<
">: " << e.what());
538 const std::string& prefix,
539 std::vector<std::string>& keys);
void AddParam(const std::string &key, const T &value)
Definition config.hpp:369
bpo::variables_map & GetOptionsMap()
Definition config.hpp:132
void SetParam(const std::string &key, const T &value)
Definition config.hpp:477
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:137
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:127
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:422
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:146
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:122
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:23
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
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:52
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:54
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_DDS_QOS_PROFILE
Definition config.hpp:51