]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOGimmick.cpp
path correction for MAC OS
[creaImageIO.git] / src2 / creaImageIOGimmick.cpp
index a13809b7a8a1c885ff35590e88c6074976b4f386..aa05e4cf7520ad3845992144c9b63efdcfc9b020 100644 (file)
@@ -1,3 +1,4 @@
+
 #include <creaImageIOGimmick.h>
 
 #include <creaImageIOSystem.h>
@@ -7,6 +8,11 @@
 #ifndef PATH_MAX // If not defined yet : do it 
 #  define PATH_MAX 2048
 #endif
+#include <creaImageIOGimmick.h>
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
 
 namespace creaImageIO
 {
@@ -14,9 +20,11 @@ namespace creaImageIO
   Gimmick::Gimmick()
     : mImageAdder(0)
   {    
-    RegisterGimmickMessageTypes();
+  RegisterGimmickMessageTypes();
        mSettings=0;
        mSynchronizer=0;
+       mLocalDescpName = "localdatabase_Descriptor.dscp";
+       mLocalDBName = "Local database";
   }
   //==============================================================
 
@@ -24,6 +32,7 @@ namespace creaImageIO
   //==============================================================
   Gimmick::~Gimmick()
   {
+
         if(mSettings!=0)
          {
                mSettings->writeSettingsFile();
@@ -37,15 +46,17 @@ namespace creaImageIO
   //==============================================================
   
   //==============================================================
-  void Gimmick::Initialize(const std::string& path)
+  void Gimmick::Initialize(const std::string i_namedescp, const std::string i_namedb)
   {
+         mLocalDescpName = i_namedescp;
+         mLocalDBName = i_namedb;
          Initialize();
   }
 
   //==============================================================
   void Gimmick::Initialize()
   {
-       std::string i_nameDB = "Local database";
+       std::string i_nameDB = mLocalDBName;
     // Create the UserSettings dir if does not exist
     CreateUserSettingsDirectory();
     // Sets the current directory to the home dir
@@ -55,8 +66,10 @@ namespace creaImageIO
     mSettings  = new Settings(mCurrentDirectory);
        
     std::string dbpath = GetLocalDatabasePath();
+
     // Create or open local database
-    std::string dpath= mCurrentDirectory + "/.gimmick/Shared/gimmick/localdatabase_Descriptor.dscp";
+    std::string dpath= mCurrentDirectory + "/.gimmick/Shared/gimmick/" + mLocalDescpName;
+       
     boost::algorithm::replace_all( dpath,
                                   INVALID_FILE_SEPARATOR , 
                                   VALID_FILE_SEPARATOR);
@@ -85,18 +98,18 @@ namespace creaImageIO
                }
        }
 
-  ////////////////////////////////////////////////////////////////////////
-  // create a DB from a attributes descriptor file for medical images   //
-  // @param i_name : DB name                                           //
-  // @param i_locDesc : location of descriptor file                    //
-  // @param i_locDB : location of DB                                   //
-  // return : the SQLiteTreeHandler object on DB                       //
-       //////////////////////////////////////////////////////////////////
SQLiteTreeHandler *Gimmick::createDB(const std::string &i_name,
-                                     const std::string &i_locDesc,
-                                     const std::string &i_locDB)
+  ///////////////////////////////////////////////////////////////////////////
+  // create a DB from a attributes descriptor file for medical images      //
+  // @param i_name : DB name                                                                                      //
+  // @param i_locDesc : location of descriptor file                                               //
+  // @param i_locDB : location of DB                                                                      //
+  // return : the SQLiteTreeHandler object on DB                                                  //
+       /////////////////////////////////////////////////////////////////////////
      SQLiteTreeHandler* Gimmick::createDB(const std::string &i_name,
+                                            const std::string &i_locDesc,
+                                            const std::string &i_locDB)
   {
-      SQLiteTreeHandler *sqlTreeH = new SQLiteTreeHandler(i_locDB);
+     SQLiteTreeHandler* sqlTreeH( new SQLiteTreeHandler(i_locDB) );
     // Create or open local database
     if (! boost::filesystem::exists(i_locDB) )
      {
@@ -116,7 +129,8 @@ namespace creaImageIO
         else 
         {
                /// Open and test it
-               GimmickMessage(1,"Opening local database '" <<i_locDB<< "' " << std::endl);
+               
+               GimmickDebugMessage(1,"Opening local database '" <<i_locDB<< "' " << std::endl);
                if ( !sqlTreeH->Open(true) )
                {
                        GimmickError("ERROR OPENING '"<<i_locDB<<"'");
@@ -128,14 +142,16 @@ namespace creaImageIO
   //==============================================================
   void Gimmick::Finalize()
   {
-        
-         // delete SQLiteTreeHandler Object
-          for( TreeHandlerMapType::const_iterator it = mTreeHandlerMap.begin();
-                                                   it!= mTreeHandlerMap.end(); 
-                                                  ++it)
-          {
-                  delete it->second;
-          }
+         if(mTreeHandlerMap.size() >0)
+         {
+               // delete SQLiteTreeHandler Object
+               for( TreeHandlerMapType::const_iterator it = mTreeHandlerMap.begin();
+                                                                                                       it!= mTreeHandlerMap.end(); 
+                                                       ++it)
+               {
+                       delete it->second;
+               }
+         }
   }
   //==============================================================
 
@@ -185,7 +201,9 @@ namespace creaImageIO
     if (mLocalDatabasePath.size()==0) 
       {
        mLocalDatabasePath = GetUserSettingsDirectory();
-       mLocalDatabasePath += "Shared/gimmick/local_database.sqlite3";
+       mLocalDatabasePath += "Shared/gimmick/";
+       mLocalDatabasePath += mLocalDBName;
+       mLocalDatabasePath +=".sqlite3";
        boost::algorithm::replace_all( mLocalDatabasePath,
                                       INVALID_FILE_SEPARATOR , 
                                       VALID_FILE_SEPARATOR);
@@ -198,10 +216,34 @@ namespace creaImageIO
   //========================================================================
   void Gimmick::CreateUserSettingsDirectory()
   {
-    if (! boost::filesystem::is_directory( GetUserSettingsDirectory() ) )
+        // std::string st("C:/Documents and Settings/cervenansky/.gimmick/");
+        //     boost::algorithm::replace_all( st, 
+               //                     INVALID_FILE_SEPARATOR , 
+               //                     VALID_FILE_SEPARATOR);
+               //const boost::filesystem::path mpath(st);
+//C:\Documents and Settings\cervenansky\.gimmick");
+         //if ( !boost::filesystem::exists( path ) )             return ;
+        //  boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end
+        //  for ( boost::filesystem::directory_iterator itr( path );  itr != end_itr;  ++itr )
+        // {
+               //// If is directory & recurse : do recurse
+               //      if ( boost::filesystem::is_directory(itr->status()) )
+               //      return;
+        //  }
+
+         //JCP settings dir 02/10/2009
+         const std::string settingsdirectory = GetUserSettingsDirectory();
+               //boost::algorithm::replace_all( mUserSettingsDirectory, 
+                               //       INVALID_FILE_SEPARATOR , 
+                               //       VALID_FILE_SEPARATOR);
+;//("E:\frederic");
+                 //("C:\\Documents and Settings\\cervenansky\\.gimmick\\"); // settingsdirectory );
+               bool isdir = false;
+          isdir = boost::filesystem::is_directory(settingsdirectory); // settingsdirectory );
+    if (! isdir )
       {
        GimmickMessage(1,"Directory '"<<GetUserSettingsDirectory()<<"' "
-                      << "does not exist : creating it"<<std::endl);
+                      << "does not exist : creating it"<<std::endl);
        
        if ( ! boost::filesystem::create_directory( GetUserSettingsDirectory() ) )
          {
@@ -217,7 +259,7 @@ namespace creaImageIO
        boost::filesystem::create_directory( setDir );
        setDir+="gimmick/";
        boost::filesystem::create_directory( setDir );
-       setDir+="localdatabase_Descriptor.dscp";
+       setDir+=mLocalDescpName;
 
        if(!boost::filesystem::is_regular(setDir))
        {
@@ -234,10 +276,17 @@ namespace creaImageIO
 // The following stuff works on Linux, NOT CHECKED on Windows // JPR
                
 #if defined(_WIN32)            
-               path+="/bin/Shared/gimmick/localdatabase_Descriptor.dscp";
-#else          
-               path+="/Shared/gimmick/localdatabase_Descriptor.dscp";
-#endif         
+               path+="/bin/shared/gimmick/";
+#endif
+
+#if defined(__APPLE__)
+               path+="../../../../shared/gimmick/";
+#endif 
+
+#if defined (LINUX)
+               path+="../shared/gimmick/";
+#endif 
+               path+= mLocalDescpName;
                std::cout <<"From: " << path   <<std::endl;
                std::cout <<"To: "   << setDir <<std::endl;
                boost::algorithm::replace_all(  path,