7#ifndef CCF_COMMON_SETUP_HPP_H_
8#define CCF_COMMON_SETUP_HPP_H_
10#include <boost/exception/diagnostic_information.hpp>
12#include <yaml-cpp/yaml.h>
14#include <config-ng/ciiConfigApi.hpp>
42 elt::configng::CiiConfigInstanceNode&
GetStagingNode(
const std::vector<std::string>& names);
45 elt::configng::CiiConfigInstanceNode&
GetNode(
const elt::configng::CiiConfigDocument* doc,
46 const std::vector<std::string>& names);
53 bool HasCurrentPar(
const std::vector<std::string>& names, TYPE& value) {
54 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
69 bool HasPar(
const std::vector<std::string>& names, TYPE& value) {
70 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
93 bool HasStagingPar(
const std::vector<std::string>& names, TYPE& value) {
94 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
98 std::lock_guard<std::recursive_mutex> lock(m_staging_setup_mtx);
100 auto it = s_staging_setup_map.find(tmp_name);
101 if (it != s_staging_setup_map.end()) {
102 ifw::core::utils::conversion::Convert(it->second, value);
106 if (m_staging_setup_doc.get() ==
nullptr) {
110 if (m_staging_setup_doc.get() ==
nullptr) {
114 value = tmp_node.As<TYPE>();
123 template <
class TYPE>
125 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
127 std::lock_guard<std::recursive_mutex> lock(m_staging_setup_mtx);
128 auto it = s_staging_setup_map.find(tmp_name);
129 if (it != s_staging_setup_map.end()) {
130 ifw::core::utils::conversion::Convert(it->second, value);
134 if (m_staging_setup_doc.get() ==
nullptr) {
138 value = tmp_node.As<TYPE>();
152 template <
class TYPE>
154 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
156 LOG4CPLUS_INFO(
Logger(), fmt::format(
"{}: Handling Staging Setup Parameter: |{}|=|{}|...",
157 IFWLOC, tmp_name, value));
159 if (m_ref_setup_doc.get() ==
nullptr) {
160 CCFTHROW(
"Must load an Init Setup as reference before submitting setup parameters");
166 auto err = boost::current_exception_diagnostic_information();
167 CCFTHROW(fmt::format(
"{}: Issue handling parameter: |{}|: {}", IFWLOC, name, err));
172 std::stringstream tmp_val;
175 node = tmp_val.str();
176 m_ref_setup_doc.get()->Check();
177 auto issues = m_ref_setup_doc.get()->Check();
180 m_ref_setup_doc = std::make_unique<elt::configng::CiiConfigDocument>
181 (elt::configng::CiiConfigClient::Load(m_staging_setup_file));
182 for (
auto issue : issues) {
183 auto err = fmt::format(
"Value: {} provided with parameter: {} not valid",
184 tmp_val.str(), name);
186 LOG4CPLUS_WARN(
Logger(), err);
192 std::lock_guard<std::recursive_mutex> lock(m_staging_setup_mtx);
195 LOG4CPLUS_INFO(
Logger(), fmt::format(
"Added Staging Setup Parameter: |{}|=|{}|", tmp_name,
203 void GetPars(std::map<std::string, std::string>& pars,
204 const std::string& pattern =
"*");
206 template <
class TYPE>
208 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
209 std::lock_guard<std::recursive_mutex> lock(m_current_setup_mtx);
210 auto it = m_current_setup_map.find(name);
211 if (it != m_current_setup_map.end()) {
213 ifw::core::utils::conversion::Convert(it->second, tmp_value);
216 CCFTHROW(fmt::format(
"{}: Parameter: |{}| not defined among Current Setup Parameters",
222 template <
class TYPE>
224 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
229 template <
class TYPE>
230 TYPE
GetValue(
const std::vector<std::string>& names) {
231 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
234 if (
HasPar(tmp_names, tmp_value)) {
242 template <
class TYPE>
244 LOG4CPLUS_TRACE_METHOD(
Logger(), __PRETTY_FUNCTION__);
250 CCFTHROW(
"Setup parameter requested not defined: " + tmp_name);
266 std::vector<std::string>
CheckNodeNames(
const std::vector<std::string>& names)
const;
269 const elt::configng::CiiConfigDocument&
GetRefSetup()
const;
272 void StoreStagingPar(
const std::string& name,
const std::string& value);
275 std::string m_root_node_name;
276 std::string m_staging_setup_file;
280 std::unique_ptr<elt::configng::CiiConfigDocument> m_ref_setup_doc;
287 std::unique_ptr<elt::configng::CiiConfigDocument> m_staging_setup_doc;
293 std::recursive_mutex m_staging_setup_mtx;
294 static std::map<std::string, std::string> s_staging_setup_map;
296 std::vector<std::string> m_staging_setup_sequence;
300 std::recursive_mutex m_current_setup_mtx;
301 std::map<std::string, std::string> m_current_setup_map;
#define CCFTHROW(msg)
Definition base.hpp:399
Base()
Definition base.cpp:121
Global setup class for CCF applications. An Initialisation Setup, containing all the parameters shall...
Definition setup.hpp:24
TYPE GetValue(const std::vector< std::string > &names)
Get value from either the 1) Staging Setup, or 2) Installed Setup.
Definition setup.hpp:230
static Setup & Instance()
Return reference to unique instance of the application class.
Definition setup.cpp:14
bool HasCurrentPar(const std::vector< std::string > &names, TYPE &value)
Probe if a given parameter has been processed and accepted already.
Definition setup.hpp:53
elt::configng::CiiConfigInstanceNode & GetNode(const elt::configng::CiiConfigDocument *doc, const std::vector< std::string > &names)
Get the reference to a specific node in the referenced CII Cfg Service doc object.
Definition setup.cpp:61
std::string CheckNodeName(const std::string &name) const
Definition setup.cpp:269
void StoreStagingPar(const std::string &name, const std::string &value)
Definition setup.cpp:159
elt::configng::CiiConfigInstanceNode & GetStagingNode(const std::vector< std::string > &names)
Get the reference to a specific node in the Installed Setup.
Definition setup.cpp:56
bool ParDefined(const std::string &name)
Check if the given parameter is defined in the Reference Setup.
Definition setup.cpp:278
Setup()
Definition setup.cpp:23
bool HasStagingPar(const std::vector< std::string > &names, TYPE &value)
Definition setup.hpp:93
void AddStagingPar(const std::string &name, const TYPE value)
Definition setup.hpp:153
void LoadStagingSetup(const std::string &filename)
Load a Setup File into the Staging Setup object.
Definition setup.cpp:90
std::vector< std::string > GetSetupCmdStagingPars()
Return list of Staging Setup Pars, normally provided via a Setup Command.
Definition setup.cpp:221
TYPE GetValueKey(const std::string &name)
Get value from either the 1) Staging Setup, or 2) Installed Setup from the SPF key.
Definition setup.hpp:243
TYPE GetCurrentValue(const std::string &name)
Definition setup.hpp:207
TYPE GetCurrentValue(const std::vector< std::string > &names)
Get value from the Installed Setup.
Definition setup.hpp:223
const elt::configng::CiiConfigDocument & GetRefSetup() const
Definition setup.cpp:318
void ResetStagingSetup()
Reset the internal Staging Setup.
Definition setup.cpp:82
void GetPars(std::map< std::string, std::string > &pars, const std::string &pattern="*")
Return map with all parameters in the object. Staging pars take precedence.
Definition setup.cpp:191
bool HasStagingParKey(const std::string &name, TYPE &value)
Definition setup.hpp:124
bool HasPar(const std::vector< std::string > &names, TYPE &value)
Definition setup.hpp:69
std::string SetupToString() const
Return string representation of the Setup loaded.
Definition setup.cpp:299
void AcceptStagingSetup()
Merge the parameters in the Staging Setup into the Installed Setup set of parameters.
Definition setup.cpp:228
const std::string & GetRootNodeName() const
Return the name of the setup document root node name.
Definition setup.cpp:313
std::vector< std::string > CheckNodeNames(const std::vector< std::string > &names) const
Definition setup.cpp:255
std::string StagingSetupToString() const
Return string representation of the Staging Setup loaded.
Definition setup.cpp:290
~Setup()
Definition setup.cpp:29
static Setup * s_instance
Singleton instance.
Definition setup.hpp:28
Definition appBase.cpp:10
Definition appBase.cpp:10
log4cplus::Logger & Logger()
Definition base.cpp:24
ifw::ccf::common::Setup & GetSetup()
Return the reference to the CCF DB Singleton instance.
Definition setup.hpp:308
std::vector< std::string > SplitKey(const std::string &key)
Split up a concatenated key.
Definition base.cpp:245
std::string BuildKey(const std::vector< std::string > &elements)
Build a concatenated key from a number of elements (<el1>.<el2.>...).
Definition base.cpp:241