+#include <creaImageIOSettings.h>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/algorithm/string/replace.hpp>
+#include <iostream>
+#include <fstream>
+
+using namespace boost;
+namespace po = boost::program_options;
+
+namespace creaImageIO
+{
+ Settings::Settings(const std::string i_path)
+ {
+ //need to position path in user directory first.
+ m_SettingsFileName = i_path + "\\.gimmick\\app.config";
+ //Test if Settings File exist
+ if(!boost::filesystem::exists(m_SettingsFileName) )
+ {
+ createFile();
+ }
+ std::ifstream ifs(m_SettingsFileName.c_str());
+ std::string line;
+ std::string sets;
+ if (ifs.is_open())
+ {
+ while (! ifs.eof() )
+ {
+ getline(ifs,line);
+ sets += line;
+ }
+ ifs.close();
+ }
+ std::vector<std::string> Keys;
+ Keys.push_back(SETTINGS_SYNC_EVENT);
+ Keys.push_back(SETTINGS_DBPATH);
+ Keys.push_back(SETTINGS_SYNC_FREQ);
+ readSettings(Keys, sets);
+
+ }
+
+ Settings::~Settings()
+ {
+
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // create the config file //
+ //@param : - //
+ // return : - //
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ void Settings::createFile()
+ {
+ m_SettingsMap[SETTINGS_SYNC_FREQ] = "12";
+ m_SettingsMap[SETTINGS_SYNC_EVENT] = "end";
+ m_SettingsMap[SETTINGS_DBPATH] = "";
+ m_SettingsMap[SETTINGS_DICOM_LIBRARY] = "gdcm";
+ writeSettingsFile();
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // read Settings from config file //
+ // @param i_keys : list of keys //
+ // @param i_file : text from config file //
+ // return : -
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ void Settings::readSettings(std::vector<std::string> &i_Keys, const std::string &i_file)
+ {
+ std::vector<std::string>::iterator it_key = i_Keys.begin();
+ for(; it_key< i_Keys.end(); ++it_key)
+ {
+ size_t fpos = i_file.find(it_key->c_str());
+ size_t lpos = i_file.rfind(it_key->c_str());
+ if(fpos != std::string::npos && lpos != std::string::npos)
+ {
+ m_SettingsMap[it_key->c_str()] = i_file.substr(fpos + it_key->size(),lpos-fpos - it_key->size());
+ }
+ }
+ }
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // add a path to a DB //
+ // @param i_path : DB path to add //
+ // return : - //
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ void Settings::addDB(const std::string &i_path)
+ {
+ if(m_SettingsMap[SETTINGS_DBPATH].find(i_path) == std::string::npos)
+ {
+ m_SettingsMap[SETTINGS_DBPATH] += i_path + ";";
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // remove a path to a DB //
+ // @param i_path : DB path to delete (don't exist anymore) //
+ // return : -
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+
+ void Settings::removeDB(const std::string &i_path)
+ {
+ boost::algorithm::replace_all(m_SettingsMap[SETTINGS_DBPATH],i_path + ";","");
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ // write Settings buffer from //
+ // @param o_file : settings buffer //
+ // //
+ // return : - //
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ void Settings::writeSettings(std::ofstream &o_file)
+ {
+ std::map<std::string, std::string>::iterator it_map = m_SettingsMap.begin();
+ std::stringstream st;
+ for(; it_map != m_SettingsMap.end(); ++it_map)
+ {
+ o_file << it_map->first.c_str();
+ o_file << it_map->second.c_str();
+ o_file << it_map->first.c_str();
+ o_file << std::endl;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ // write Settings file //
+ // @param : - //
+ // return : -
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ void Settings::writeSettingsFile()
+ {
+ std::ofstream ofs(m_SettingsFileName.c_str());
+ ofs.clear();
+ writeSettings(ofs);
+ ofs.close();
+ }
+
+}
\ No newline at end of file