#include <creaImageIOSystem.h>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
-
+//#include "io.h"
#ifndef PATH_MAX // If not defined yet : do it
# define PATH_MAX 2048
#endif
namespace creaImageIO
{
-
-
//==============================================================
Gimmick::Gimmick()
: mImageAdder(0)
//==============================================================
-
//==============================================================
Gimmick::~Gimmick()
{
}
//==============================================================
+ //==============================================================
+ void Gimmick::Initialize(const std::string& path)
+ {
+ Initialize();
+ }
//==============================================================
void Gimmick::Initialize()
CreateUserSettingsDirectory();
// Sets the current directory to the home dir
mCurrentDirectory = GetHomeDirectory();
- mSynchronizer= new Synchronizer(GetUserSettingsDirectory());
+ mSynchronizer= new Synchronizer(GetUserSettingsDirectory()+"Shared/gimmick/");
- mSettings = new Settings(mCurrentDirectory);
+ mSettings = new Settings(mCurrentDirectory);
-
- std::string dbpath = GetLocalDatabasePath();
+ std::string dbpath = GetLocalDatabasePath();
// Create or open local database
- mLocalDatabase = createDB(i_nameDB, mCurrentDirectory + "\\.gimmick\\localdatabase_Descriptor.txt", dbpath);
+ std::string dpath= mCurrentDirectory + "/.gimmick/Shared/gimmick/localdatabase_Descriptor.dscp";
+ boost::algorithm::replace_all( dpath,
+ INVALID_FILE_SEPARATOR ,
+ VALID_FILE_SEPARATOR);
+ mLocalDatabase = createDB(i_nameDB, dpath, dbpath);
// Add it to the TreeHandlerMap
mTreeHandlerMap[i_nameDB] = mLocalDatabase;
- //Add additional DB from user Settings
- addDBSettings();
-
- // Creates files and directories database
- mTimestampDatabase = new TimestampDatabaseHandler(GetTimestampDatabasePath());
- // Create or open local database
- if (! boost::filesystem::exists( GetTimestampDatabasePath() ) )
- {
- std::string mess = "Timestamp database '";
- mess += GetTimestampDatabasePath();
- mess += "' does not exist : creating it";
- GimmickMessage(1,mess<<std::endl);
-
- if ( ! mTimestampDatabase->Create() )
- {
- GimmickError("ERROR CREATING '"<<GetTimestampDatabasePath()<<"'");
- }
-
- }
- else
- {
- /// Open and test it
- GimmickMessage(1,"Opening Timestamp database '"
- <<GetTimestampDatabasePath()<<"' "
- <<std::endl);
- if ( ! mTimestampDatabase->Open() )
- {
- GimmickError("ERROR OPENING '"<<GetTimestampDatabasePath()<<"'");
- }
-
- }
-
+ //Add additional DB from user Settings
+ addDBSettings();
}
///////////////////////////////////////////////////////////////////////
- // add DB to TreeHandler Map //
- // @param i_name : DB name //
- // @param i_location : DB location //
- // return : - //
- ///////////////////////////////////////////////////////////////////////
+ // add DB to TreeHandler Map //
+ // @param i_name : DB name //
+ // @param i_location : DB location //
+ // return : - //
+ ////////////////////////////////////////////////////////////////////////
void Gimmick::addDB(const std::string &i_name,
const std::string &i_location)
{
}
}
-
- ///////////////////////////////////////////////////////////////////////////
- // 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 //
- /////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////
+ // 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)
// CREATING DB STRUCTURE
sqlTreeH->GetTree().GetDescriptor().createDescriptorfromFile(i_locDesc);
if ( ! sqlTreeH->Create(true) )
- {
- GimmickError("ERROR CREATING '"<<i_locDB<<"'");
+ {
+ GimmickError("ERROR CREATING '"<<i_locDB<<"'");
}
sqlTreeH->SetAttribute(0,"Name",i_name);
}
{
/// Open and test it
GimmickMessage(1,"Opening local database '" <<i_locDB<< "' " << std::endl);
- if ( !sqlTreeH->Open(true) )
+ if ( !sqlTreeH->Open(true) )
{
GimmickError("ERROR OPENING '"<<i_locDB<<"'");
}
- }
- return sqlTreeH;
+ }
+ return sqlTreeH;
}
-
//==============================================================
void Gimmick::Finalize()
{
{
delete it->second;
}
- delete mTimestampDatabase;
}
//==============================================================
}
//================================================================
- //================================================================
- int Gimmick::GetBinaryDirectory(char *pname, size_t pathsize)
- {
-
- #ifdef LINUX
- /* Oddly, the readlink(2) man page says no NULL is appended. */
- /* So you have to do it yourself, based on the return value: */
- pathsize --; /* Preserve a space to add the trailing NULL */
- long result = readlink("/proc/self/exe", pname, pathsize);
- if (result > 0)
- {
- pname[result] = 0; /* add the #@!%ing NULL */
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL (falls
- through) */
- }
- #endif /* LINUX */
-
- #ifdef WIN32
- long result = GetModuleFileName(NULL, pname, pathsize);
- if (result > 0)
- {
- /* fix up the dir slashes... */
- int len = strlen(pname);
- int idx;
- for (idx = 0; idx < len; idx++)
- {
- if (pname[idx] == '\\') pname[idx] = '/';
- }
-
- for (idx = len-1; idx >=0 ; idx--)
- {
- if (pname[idx] == '/')
- {
- pname[idx+1] = '\0';
- idx = -1;
- }
- }
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL (falls
- through) */
- }
- #endif /* WIN32 */
-
- #ifdef SOLARIS
- char *p = getexecname();
- if (p)
- {
- /* According to the Sun manpages, getexecname will
- "normally" return an */
- /* absolute path - BUT might not... AND that IF it is not,
- pre-pending */
- /* getcwd() will "usually" be the correct thing... Urgh!
- */
-
- /* check pathname is absolute (begins with a / ???) */
- if (p[0] == '/') /* assume this means we have an
- absolute path */
- {
- strncpy(pname, p, pathsize);
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- }
- else /* if not, prepend getcwd() then check if file
- exists */
- {
- getcwd(pname, pathsize);
- long result = strlen(pname);
- strncat(pname, "/", (pathsize - result));
- result ++;
- strncat(pname, p, (pathsize - result));
-
- if ((access(pname, 0) == 0))
- return 0; /* file exists, return OK */
- /*else name doesn't seem to exist, return FAIL
- (falls through) */
- }
- }
- #endif /* SOLARIS */
-
- #ifdef MACOSX /* assume this is OSX */
- /*
- from http://www.hmug.org/man/3/NSModule.html
-
- extern int _NSGetExecutablePath(char *buf, unsigned long
- *bufsize);
-
- _NSGetExecutablePath copies the path of the executable
- into the buffer and returns 0 if the path was successfully
- copied in the provided buffer. If the buffer is not large
- enough, -1 is returned and the expected buffer size is
- copied in *bufsize. Note that _NSGetExecutablePath will
- return "a path" to the executable not a "real path" to the
- executable. That is the path may be a symbolic link and
- not the real file. And with deep directories the total
- bufsize needed could be more than MAXPATHLEN.
- */
-
- int status = -1;
- char *given_path = (char*)malloc(MAXPATHLEN * 2);
- if (!given_path) return status;
-
- uint32_t npathsize = MAXPATHLEN * 2;
- long result = _NSGetExecutablePath(given_path, &npathsize);
- if (result == 0)
- { /* OK, we got something - now try and resolve the real path...
- */
- if (realpath(given_path, pname) != NULL)
- {
- if ((access(pname, 0) == 0))
- status = 0; /* file exists, return OK */
- }
- }
- free (given_path);
- return status;
- #endif /* MACOSX */
-
- return -1; /* Path Lookup Failed */
- }
//================================================================
const std::string& Gimmick::GetLocalDatabasePath()
if (mLocalDatabasePath.size()==0)
{
mLocalDatabasePath = GetUserSettingsDirectory();
- mLocalDatabasePath += "local_database.sqlite3";
+ mLocalDatabasePath += "Shared/gimmick/local_database.sqlite3";
boost::algorithm::replace_all( mLocalDatabasePath,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
return mLocalDatabasePath;
}
- //================================================================
-
- //================================================================
- const std::string& Gimmick::GetTimestampDatabasePath()
- {
- if (mTimestampDatabasePath.size()==0)
- {
- mTimestampDatabasePath = GetUserSettingsDirectory();
- mTimestampDatabasePath += "timestamp_database.sqlite3";
- boost::algorithm::replace_all( mTimestampDatabasePath,
- INVALID_FILE_SEPARATOR ,
- VALID_FILE_SEPARATOR);
- }
- return mTimestampDatabasePath;
- }
//========================================================================
//========================================================================
boost::algorithm::replace_all( setDir,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
- setDir+="localdatabase_Descriptor.txt";
- //if(!boost::filesystem::is_regular_file(setDir)) //JPRX
+ setDir+="Shared/";
+ boost::filesystem::create_directory( setDir );
+ setDir+="gimmick/";
+ boost::filesystem::create_directory( setDir );
+ setDir+="localdatabase_Descriptor.dscp";
+
if(!boost::filesystem::is_regular(setDir))
{
char name[PATH_MAX];
- int err = GetBinaryDirectory(name, PATH_MAX);
+//EED int err = GetBinaryDirectory(name, PATH_MAX);
+ crea::System::GetAppPath(name,PATH_MAX);
+ std::cout<<name<<std::endl;
+
std::string path=name;
path=path.substr(0,path.size()-1);
path=path.substr(0,path.find_last_of("/"));
- path+="/data/localdatabase_Descriptor.txt";
- boost::algorithm::replace_all( path,
+ //Creating directories
+
+// 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
+ std::cout <<"From: " << path <<std::endl;
+ std::cout <<"To: " << setDir <<std::endl;
+ boost::algorithm::replace_all( path,
INVALID_FILE_SEPARATOR ,
VALID_FILE_SEPARATOR);
boost::filesystem::copy_file(path,setDir);
return i->second;
}
- //========================================================================
- ///Returns the timestamp database handler
- TimestampDatabaseHandler* Gimmick::GetTimestampDatabase() const
- {
- return mTimestampDatabase;
- }
-
-
//========================================================================
/// Add the files to the tree handler
void Gimmick::AddFiles(const std::string& d,
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(GetTreeHandler(d));
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
- mImageAdder.AddFiles(filenames);
+ mImageAdder.AddFiles(filenames);
}
//========================================================================
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.AddDirectory(f,recurse);
}
{
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetSynchronizer(mSynchronizer);
- mTimestampDatabase->RemoveNode("PATH",node,d);
mImageAdder.RemoveFile(node);
}
//========================================================================
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.CopyFiles(filenames, mSettings->getValue(SETTINGS_COPY_PATH));
}
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
return mImageAdder.Synchronize(repair, checkAttributes);
}
TreeHandler * handler=GetTreeHandler(d);
mImageAdder.SetCurrentDatabase(d);
mImageAdder.SetTreeHandler(handler);
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.GetAttributes(params, filename, results);
}
mImageAdder.SetTreeHandler(it->second);
mImageAdder.DeleteDriveFromMainDB(drive);
}
- mImageAdder.SetTimestampHandler(mTimestampDatabase);
mImageAdder.SetSynchronizer(mSynchronizer);
mImageAdder.DeleteDriveFromOtherDB(drive);
}
}
//========================================================================
-
- /////////////////////////////////////////////////////////////////////////
- // add DB from Settings file //
- // @param : - //
- // return : - //
- /////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////
+ // add DB from Settings file //
+ // @param : - //
+ // return : - //
+ ////////////////////////////////////////////////////////////////////////
void Gimmick::addDBSettings()
{
std::string name = it_path->substr(pos +1, last_pos -pos-1 );
addDB(name, it_path->c_str());
}
-
- }
-
+ }
}