5 #ifndef CCF_COMMON_SETUP_HPP_H_
6 #define CCF_COMMON_SETUP_HPP_H_
8 #include <yaml-cpp/yaml.h>
10 #include <config-ng/ciiConfigApi.hpp>
36 elt::configng::CiiConfigInstanceNode&
GetNode(
const std::vector<std::string>& names);
39 elt::configng::CiiConfigInstanceNode&
GetStagingNode(
const std::vector<std::string>& names);
42 elt::configng::CiiConfigInstanceNode&
GetNode(
const elt::configng::CiiConfigDocument* doc,
43 const std::vector<std::string>& names);
51 bool HasPar(
const std::vector<std::string>& names, TYPE& value) {
52 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
53 auto tmp_names = _CheckNodeNames(names);
58 auto tmp_node =
GetNode(tmp_names);
59 value = tmp_node.As<TYPE>();
70 bool HasStagingPar(
const std::vector<std::string>& names, TYPE& value) {
71 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
72 auto tmp_names = _CheckNodeNames(names);
76 auto it = s_staging_setup_map.find(tmp_name);
77 if (it != s_staging_setup_map.end()) {
78 core::utils::conversion::Convert(it->second, value);
84 value = tmp_node.As<TYPE>();
98 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
99 auto tmp_name = _CheckNodeName(name);
100 auto it = s_staging_setup_map.find(tmp_name);
101 if (it != s_staging_setup_map.end()) {
102 core::utils::conversion::Convert(it->second, value);
107 value = tmp_node.As<TYPE>();
121 template <
class TYPE>
123 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
124 std::string tmp_name = _CheckNodeName(name);
125 CCFINFO(
Logger(), fmt::format(
"Handling Staging Setup Parameter: |{}|=|{}|...",
128 if (m_ref_setup_doc.get() ==
nullptr) {
129 CCFTHROW(
"Must load an Init Setup as reference before submitting setup parameters");
135 CCFTHROW(fmt::format(
"Parameter: |{}| not defined for this instance", name));
140 std::stringstream tmp_val;
143 node = tmp_val.str();
144 m_ref_setup_doc.get()->Check();
145 auto issues = m_ref_setup_doc.get()->Check();
148 m_ref_setup_doc = std::make_unique<elt::configng::CiiConfigDocument>
149 (elt::configng::CiiConfigClient::Load(m_staging_setup_file));
150 for (
auto issue : issues) {
151 auto err = fmt::format(
"Value: {} provided with parameter: {} not valid: {}", name,
152 tmp_val.str(), issue.GetMessageWithOrigin());
158 s_staging_setup_map[tmp_name] = tmp_val.str();
159 CCFINFO(
Logger(), fmt::format(
"Added Staging Setup Parameter: |{}|=|{}|", tmp_name,
167 template <
class TYPE>
168 TYPE
GetValue(
const std::vector<std::string>& names) {
169 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
170 auto tmp_names = _CheckNodeNames(names);
172 if (
HasPar(tmp_names, tmp_value)) {
180 template <
class TYPE>
182 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
183 auto tmp_name = _CheckNodeName(name);
188 CCFTHROW(
"Setup parameter requested not defined: " + tmp_name);
204 std::string m_root_node_name;
205 std::string m_staging_setup_file;
207 std::vector<std::string> _CheckNodeNames(
const std::vector<std::string>& names)
const;
208 std::string _CheckNodeName(
const std::string& name)
const;
212 std::unique_ptr<elt::configng::CiiConfigDocument> m_staging_setup_doc;
216 std::unique_ptr<elt::configng::CiiConfigDocument> m_ref_setup_doc;
222 static std::map<std::string, std::string> s_staging_setup_map;
225 std::unique_ptr<elt::configng::CiiConfigDocument> m_setup_doc;
234 #endif // CCF_COMMON_SETUP_HPP_H_