Skip to content
Commits on Source (4)
Subproject commit 8a0ea2d0e699863df5fe1c91caf2d7b0855957be Subproject commit a00f9a27afbf5f75dab7db2368b9b9b6fcb395e1
...@@ -6,6 +6,10 @@ ...@@ -6,6 +6,10 @@
namespace inaf::oasbo::Configurators { namespace inaf::oasbo::Configurators {
/**
* @brief The YamlConfigurator class is a subclass of BaseConfigurator that provides functionality for reading and writing YAML configuration files.
* It inherits from the BaseConfigurator class. Check Base_Configurator.h for more information.
*/
class YamlConfigurator: public BaseConfigurator { class YamlConfigurator: public BaseConfigurator {
protected: protected:
YAML::Node file; YAML::Node file;
...@@ -13,13 +17,22 @@ protected: ...@@ -13,13 +17,22 @@ protected:
public: public:
std::string path; std::string path;
/**
* @brief Constructs a YamlConfigurator object with the specified path to the YAML configuration file.
* @param path The path to the YAML configuration file.
*/
YamlConfigurator(std::string path); YamlConfigurator(std::string path);
int readConfigFromSource() override; int readConfigFromSource() override;
int readConfigFromSource(std::string target) override; int readConfigFromSource(std::string target) override;
int pushConfigToSource() override; int pushConfigToSource() override;
int pushConfigToSource(std::string target) override; int pushConfigToSource(std::string target) override;
int insert(std::map<std::string, std::string>, std::string target) override;
int insert(std::map<std::string, std::string>, std::string target) override;
}; };
} }
...@@ -39,8 +39,7 @@ void YamlConfigurator::load(std::string path) { ...@@ -39,8 +39,7 @@ void YamlConfigurator::load(std::string path) {
} }
/** /**
@brief Updates the YAML configuration file by adding new configuration entries for the target key.
Updates the YAML configuration file by adding new configuration entries for the target key.
It also removes old configurations corresponding to the target key. It also removes old configurations corresponding to the target key.
@param target The target key for which to add and remove configuration entries. @param target The target key for which to add and remove configuration entries.
*/ */
...@@ -84,11 +83,11 @@ int YamlConfigurator::pushConfigToSource(std::string target) { ...@@ -84,11 +83,11 @@ int YamlConfigurator::pushConfigToSource(std::string target) {
for (; pos < file_content.size(); pos++) { for (; pos < file_content.size(); pos++) {
if (file_content[pos][0] != '-') { if (file_content[pos][0] != '-') {
line = file_content[pos]; line = file_content[pos];
// Elimina gli spazi vuoti all'inizio della stringa e Ferma l'analisi al carattere ":" escluso // Remove leading whitespace from the string and stop analysis at the ":" character (excluding it)
line = line.erase(0, line.find_first_not_of(' ')).substr(0, line = line.erase(0, line.find_first_not_of(' ')).substr(0,
line.find(':')); line.find(':'));
boost::to_lower(line); boost::to_lower(line);
bool found = false; // Controlla se la riga è stata sostituita dalla nuova conf bool found = false; // Checks if the line has been replaced by the new configuration
for (auto key : filteredMap) { for (auto key : filteredMap) {
if (key.first.compare(line) == 0) { if (key.first.compare(line) == 0) {
found = true; found = true;
...@@ -164,12 +163,27 @@ int YamlConfigurator::readConfigFromSource() { ...@@ -164,12 +163,27 @@ int YamlConfigurator::readConfigFromSource() {
if (file.IsNull()) if (file.IsNull())
return -1; return -1;
try { try {
// Itera sugli elementi del documento YAML // Iterate over the elements of the YAML document
for (const auto &element : file) {
for (const auto &pair : element) {
std::string elementName = element.first.as<std::string>();
boost::to_lower(elementName);
// If the element is a map, extract the keys and values
if (pair.second.IsMap()) {
for (const auto &subPair : pair.second) {
std::string key = elementName + "_"
+ subPair.first.as<std::string>();
std::string value = subPair.second.as<std::string>();
config[key] = value;
}
}
}
}
for (const auto &element : file) { for (const auto &element : file) {
for (const auto &pair : element) { for (const auto &pair : element) {
std::string elementName = element.first.as<std::string>(); std::string elementName = element.first.as<std::string>();
boost::to_lower(elementName); boost::to_lower(elementName);
// Se l'elemento è una mappa, estrai le chiavi e i valori // If the element is a map, extract the keys and values
if (pair.second.IsMap()) { if (pair.second.IsMap()) {
for (const auto &subPair : pair.second) { for (const auto &subPair : pair.second) {
std::string key = elementName + "_" std::string key = elementName + "_"
......