]> Creatis software - creaImageIO.git/blob - src2/creaImageIOSettings.cpp
99cc4c526fb8ab4df14bdd3c77ad01a380bdda5e
[creaImageIO.git] / src2 / creaImageIOSettings.cpp
1 #include <creaImageIOSettings.h>
2 #include <boost/filesystem/fstream.hpp>
3 #include <boost/algorithm/string/replace.hpp>
4 #include <iostream>
5 #include <fstream>
6
7 using namespace boost;
8 namespace po = boost::program_options;
9
10 namespace creaImageIO
11 {
12     Settings::Settings(const std::string i_path)
13     {
14         //need to position path in user directory first.
15         m_SettingsFileName = i_path + "\\.gimmick\\app.config";
16         //Test if Settings File exist
17         if(!boost::filesystem::exists(m_SettingsFileName) )
18         {
19             createFile();
20         }
21         std::ifstream ifs(m_SettingsFileName.c_str());
22                 std::string line;
23                 std::string sets;
24             if (ifs.is_open())
25                 {
26                         while (! ifs.eof() )
27                         {
28                                 getline(ifs,line);
29                                 sets += line;
30                         }
31                         ifs.close();
32                 }
33         std::vector<std::string> Keys;
34                 Keys.push_back(SETTINGS_SYNC_EVENT);
35                 Keys.push_back(SETTINGS_DBPATH);
36                 Keys.push_back(SETTINGS_SYNC_FREQ);
37                 Keys.push_back(SETTINGS_COPY_PATH);
38                 readSettings(Keys, sets);
39
40     }
41
42     Settings::~Settings()
43     {
44         
45     }
46
47
48    ////////////////////////////////////////////////////////////////////////////////////////////////
49     // create the config file                                                                                 //
50     //@param : -                                                                                               //
51     // return  : -                                                                                                // 
52     ///////////////////////////////////////////////////////////////////////////////////////////////
53    void Settings::createFile()
54    {
55        m_SettingsMap[SETTINGS_SYNC_FREQ] = "12";
56        m_SettingsMap[SETTINGS_SYNC_EVENT] = "end";
57        m_SettingsMap[SETTINGS_DBPATH] = "";
58        m_SettingsMap[SETTINGS_DICOM_LIBRARY] = "gdcm";
59            m_SettingsMap[SETTINGS_COPY_PATH] = m_SettingsFileName.substr(0,m_SettingsFileName.find_last_of('\\')+1)+"Copied files";
60        writeSettingsFile();
61    }
62
63         ////////////////////////////////////////////////////////////////////////////////////////////////
64     // read Settings from config file                                                             //
65     // @param i_keys : list of keys                                                               //
66     // @param  i_file : text from config file                                                     //
67         // return : -
68     ///////////////////////////////////////////////////////////////////////////////////////////////
69         void Settings::readSettings(std::vector<std::string> &i_Keys, const std::string &i_file)
70         {
71                 std::vector<std::string>::iterator it_key = i_Keys.begin();
72                 for(;  it_key< i_Keys.end(); ++it_key)
73                 {
74                         size_t fpos = i_file.find(it_key->c_str());
75                         size_t lpos = i_file.rfind(it_key->c_str());
76                         if(fpos != std::string::npos && lpos != std::string::npos)
77                         {
78                                 m_SettingsMap[it_key->c_str()] = i_file.substr(fpos + it_key->size(),lpos-fpos - it_key->size());
79                         }
80                 }
81         }
82         ////////////////////////////////////////////////////////////////////////////////////////////////
83     // add a path to a DB                                                                                     //
84     // @param i_path : DB path to add                                                             //
85     // return : -                                                                                                                                                                 //
86     ///////////////////////////////////////////////////////////////////////////////////////////////
87         void Settings::addDB(const std::string &i_path)
88         {
89                 if(m_SettingsMap[SETTINGS_DBPATH].find(i_path) == std::string::npos)
90                 {
91                         m_SettingsMap[SETTINGS_DBPATH] += i_path + ";";
92                 }
93         }
94
95         ////////////////////////////////////////////////////////////////////////////////////////////////
96     // remove a path to a DB                                                                              //
97     // @param i_path : DB path to delete (don't exist anymore)                                    //
98     // return : -
99         ///////////////////////////////////////////////////////////////////////////////////////////////
100         
101         void Settings::removeDB(const std::string &i_path)
102         {
103                 boost::algorithm::replace_all(m_SettingsMap[SETTINGS_DBPATH],i_path + ";","");
104         }
105
106         ///////////////////////////////////////////////////////////////////////////////////////////////
107     // write Settings buffer from                                                                //
108     // @param o_file : settings buffer                                                           //
109     //                                                                                                                                                                                   //
110         // return : -                                                                                                                                                            //
111     ///////////////////////////////////////////////////////////////////////////////////////////////
112         void Settings::writeSettings(std::ofstream &o_file)
113         {
114                 std::map<std::string, std::string>::iterator it_map = m_SettingsMap.begin();
115                 std::stringstream st;
116                 for(; it_map != m_SettingsMap.end(); ++it_map)
117                 {
118                         o_file << it_map->first.c_str();
119                         o_file <<  it_map->second.c_str();
120                         o_file << it_map->first.c_str();
121                         o_file << std::endl;
122                 }
123         }
124
125         ////////////////////////////////////////////////////////////////////////////////////////////////
126     // write Settings file                                                             //
127     // @param : -                                                               //
128     // return : -
129     ///////////////////////////////////////////////////////////////////////////////////////////////
130         void Settings::writeSettingsFile()
131         {       
132             std::ofstream ofs(m_SettingsFileName.c_str());
133                 ofs.clear();
134                 writeSettings(ofs);
135                 ofs.close();
136         }  
137 }
138