]> Creatis software - creaImageIO.git/blob - src2/creaImageIOGimmick.cpp
Starting version 2
[creaImageIO.git] / src2 / creaImageIOGimmick.cpp
1 #include <creaImageIOGimmick.h>
2
3 #include <creaMessageManager.h>
4
5 #include <boost/filesystem.hpp>
6 #include <boost/algorithm/string.hpp>
7
8 namespace creaImageIO
9 {
10   
11   //==============================================================
12   Gimmick::Gimmick()
13   {    
14     crea::MessageManager::RegisterMessageType("Gimmick!",
15                                               "Gimmick",1);
16   }
17   //==============================================================
18
19
20
21   //==============================================================
22   Gimmick::~Gimmick()
23   {
24     
25   }
26   //==============================================================
27   
28
29   //==============================================================
30   bool Gimmick::Initialize()
31   {
32     // Create the UserSettings dir if does not exist
33     if (!CreateUserSettingsDirectory()) return false;
34     // Sets the current directory to the home dir
35     mCurrentDirectory =  GetHomeDirectory();
36
37     // Create local database handler
38     mLocalDatabase = new SQLiteTreeHandler(GetLocalDatabasePath());
39     // Create or open local database
40     if (! boost::filesystem::exists( GetLocalDatabasePath() ) )
41       {
42         creaMessage("Gimmick!",1,
43                     "[Gimmick!] Local database '"<<GetLocalDatabasePath()<<"' "
44                     << "does not exist : creating it"<<std::endl);
45
46         // CREATING DEFAULT DB STRUCTURE
47         mLocalDatabase->GetTree().GetDescriptor().CreateDefault();
48         
49         if ( ! mLocalDatabase->Create(true) )
50           {
51             creaMessage("Gimmick!",1,
52                         "[Gimmick!] !! ERROR CREATING '"<<GetLocalDatabasePath()<<"'");
53             return false;
54           }
55       }
56     else 
57       {
58         /// Open and test it
59         creaMessage("Gimmick!",1,
60                     "[Gimmick!] Opening local database '"
61                     <<GetLocalDatabasePath()<<"' "
62                     <<std::endl);
63         if ( ! mLocalDatabase->Open(true) )
64           {
65             creaMessage("Gimmick!",1,
66                         "[Gimmick!] !! ERROR OPENING '"<<GetLocalDatabasePath()<<"'");
67             return false;
68           }
69         
70       }
71     return true;
72
73   }
74   //================================================================
75
76
77   //==============================================================
78   bool Gimmick::Finalize()
79   {
80     delete mLocalDatabase;
81   }
82   //==============================================================
83
84   //================================================================
85   // file separator
86 #if defined(_WIN32)
87 #define VALID_FILE_SEPARATOR "\\"
88 #define INVALID_FILE_SEPARATOR "/"
89 #else
90 #define INVALID_FILE_SEPARATOR "\\"
91 #define VALID_FILE_SEPARATOR "/"
92 #endif
93   //================================================================
94
95   //================================================================
96   const std::string& Gimmick::GetHomeDirectory()
97   {
98     if (mHomeDirectory.size()==0) 
99       {
100 #if defined(__GNUC__)
101         mHomeDirectory = getenv("HOME");
102 #elif defined(_WIN32)
103         mHomeDirectory = getenv("USERPROFILE");
104 #endif
105       }
106     return mHomeDirectory;
107   }
108   //================================================================
109   const std::string& Gimmick::GetUserSettingsDirectory()
110   {
111     if (mUserSettingsDirectory.size()==0) 
112       {
113         mUserSettingsDirectory = GetHomeDirectory();
114         mUserSettingsDirectory += "/.gimmick/";
115         boost::algorithm::replace_all( mUserSettingsDirectory, 
116                                        INVALID_FILE_SEPARATOR , 
117                                        VALID_FILE_SEPARATOR);
118       }
119     return mUserSettingsDirectory;
120   }
121   //================================================================
122
123   //================================================================
124   const std::string& Gimmick::GetLocalDatabasePath()
125   {
126     if (mLocalDatabasePath.size()==0) 
127       {
128         mLocalDatabasePath = GetUserSettingsDirectory();
129         mLocalDatabasePath += "local_database.sqlite3";
130         boost::algorithm::replace_all( mLocalDatabasePath,
131                                        INVALID_FILE_SEPARATOR , 
132                                        VALID_FILE_SEPARATOR);
133       }
134     return mLocalDatabasePath;    
135   }
136   //========================================================================
137
138   //========================================================================
139   bool Gimmick::CreateUserSettingsDirectory()
140   {
141     if (! boost::filesystem::is_directory( GetUserSettingsDirectory() ) )
142       {
143         creaMessage("Gimmick!",1,
144                     "[Gimmick!] Directory '"<<GetUserSettingsDirectory()<<"' "
145                     << "does not exist : creating it"<<std::endl);
146         
147         if ( ! boost::filesystem::create_directory( GetUserSettingsDirectory() ) )
148           {
149             creaMessage("Gimmick!",1,
150                         "[Gimmick!] !! ERROR CREATING '"<<GetUserSettingsDirectory()<<"'");
151             return false;
152           }
153       }
154     return true;
155   }
156   //========================================================================
157
158 }