Handling search of config file in multiple directories, additional debug messages
[vlp.git] / src / global / vlp / ConfigurationFinder.cpp
diff --git a/src/global/vlp/ConfigurationFinder.cpp b/src/global/vlp/ConfigurationFinder.cpp
new file mode 100644 (file)
index 0000000..236b1db
--- /dev/null
@@ -0,0 +1,61 @@
+#include <string>
+#include <fstream>
+
+#include <stdio.h>
+
+#include "ConfigurationFinder.h"
+#include "config.h"
+#include "exception/ConfigFileNotFound.h"
+
+namespace loglan {
+namespace vlp {
+
+ConfigurationFinder::ConfigurationFinder()
+{
+}
+
+std::string ConfigurationFinder::findConfig(std::string filename)
+{
+       for (std::string dir : searchDirs) {
+               std::ifstream infile(dir + filename);
+               if (infile.good()) {
+                       return dir + filename;
+               }
+       }
+
+       throw exception::ConfigFileNotFound();
+}
+
+/**
+ * Gets path to system-wide settings directory
+ *
+ * @return directory of user settings
+ */
+std::string ConfigurationFinder::getSystemConfigurationDir()
+{
+       std::string dir(SYSCONFDIR);
+
+       dir += VLP_CONFIG_PATH_SEPARATOR;
+       dir += "loglan";
+       dir += VLP_CONFIG_PATH_SEPARATOR;
+
+       return dir;
+}
+
+
+void ConfigurationFinder::addSearchDir(std::string dir)
+{
+       searchDirs.push_back(dir);
+}
+
+void ConfigurationFinder::initSearchDirs()
+{
+       searchDirs.clear();
+
+       addSearchDir("./");
+       addSearchDir(getUserConfigurationDir());
+       addSearchDir(getSystemConfigurationDir());
+}
+
+}
+}
\ No newline at end of file