Implement saving of configuration files in its own class
[vlp.git] / src / global / vlp / config.cpp
index 2191cd879bab3a16c51ecc3643b442fdded6868e..701b3e43ca65fac784a97b25f67dad4598171186 100644 (file)
@@ -45,7 +45,15 @@ bool Config::load(const char * configFilePath)
 
 bool Config::save(const char * configFilePath)
 {
-       return false;
+       if(!config_write_file(&cfg, configFilePath)) {
+               fprintf(stderr,
+                       "Error: Cannot save configuration file: %s!\n",
+                       configFilePath
+               );
+               return false;
+       }
+
+       return true;
 }
 
 int Config::getNodeNumber()
@@ -67,6 +75,19 @@ int Config::getNodeNumber()
 }
 void Config::setNodeNumber(int nodeNumber)
 {
+       config_setting_t *setting;
+       config_setting_t *root = config_root_setting(&cfg);
+
+       setting = config_setting_get_member(root, "node_number");
+
+       if(!setting) {
+               setting = config_setting_add(
+                       root,
+                       "node_number",
+                       CONFIG_TYPE_INT
+               );
+       }
+       config_setting_set_int(setting, nodeNumber);
 }
 
 std::vector<std::string> Config::getHosts()
@@ -113,6 +134,21 @@ std::vector<std::string> Config::getHosts()
        return hosts;
 }
 
+void Config::setHosts(std::vector<std::string> hosts)
+{
+       config_setting_t *root = config_root_setting(&cfg);
+       config_setting_t *setting = NULL;
+
+       setting = config_setting_add(root, "host", CONFIG_TYPE_ARRAY);
+
+       for (auto host : hosts) {
+               config_setting_set_string(
+                       config_setting_add(setting, NULL, CONFIG_TYPE_STRING),
+                       host.c_str()
+               );
+       }
+}
+
 ConnectionType Config::getConnectionType()
 {
        config_setting_t *setting = config_lookup(&cfg, "type");
@@ -137,6 +173,25 @@ ConnectionType Config::getConnectionType()
 }
 void Config::setConnectionType(ConnectionType type)
 {
+       config_setting_t *setting;
+       config_setting_t *root = config_root_setting(&cfg);
+
+       setting = config_setting_get_member(root, "type");
+
+       if(!setting) {
+               setting = config_setting_add(
+                       root,
+                       "type",
+                       CONFIG_TYPE_STRING
+               );
+       }
+
+       if (type == EXPLICIT) {
+               config_setting_set_string(setting, "explicit");
+       }
+       else if (type == REGISTER) {
+               config_setting_set_string(setting, "register");
+       }
 }
 
 const char * Config::getProgramDir()
@@ -156,6 +211,19 @@ const char * Config::getProgramDir()
 }
 void Config::setProgramDir(const char * programDir)
 {
+       config_setting_t *setting;
+       config_setting_t *root = config_root_setting(&cfg);
+
+       setting = config_setting_get_member(root, "progdir");
+
+       if(!setting) {
+               setting = config_setting_add(
+                       root,
+                       "progdir",
+                       CONFIG_TYPE_STRING
+               );
+       }
+       config_setting_set_string(setting, programDir);
 }
 
 }