]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOSynchron.cpp
Added functionality of timestamp and maintenance databases when using multiple sources
[creaImageIO.git] / src2 / creaImageIOSynchron.cpp
index 9ec4bae4d3fcf4b7b68469d0f88debe0158c16ec..136c29e7fcd190756e4edb5eeb226b132c50d355 100644 (file)
@@ -72,7 +72,7 @@ namespace creaImageIO
                }
                }
                // get the ADD operations List 
-               UpdateAddList();
+               //UpdateAddList(pathDB);
        }
 
        //=====================================================================
@@ -87,6 +87,7 @@ namespace creaImageIO
            command += ",\nPATH text";
                command += ",\nRECURSIVE boolean";
                command += ",\nFILES_ADDED int";
+               command += ",\nREFERENCEDDB text";
            command += "\n)";
                UPDATESYNCDB(command);
 
@@ -117,9 +118,9 @@ namespace creaImageIO
        }
 
        //=====================================================================
-       void Synchronizer::GetFileList(std::vector<AddList> & list)
+       void Synchronizer::GetFileList(std::vector<AddList> & list, const std::string& refdb)
     {
-       CleanList();
+       CleanList(refdb);
           list=mAddList;
     }
 
@@ -130,9 +131,9 @@ namespace creaImageIO
        }
 
        //=====================================================================
-    void Synchronizer::UpdateAddList()
+       void Synchronizer::UpdateAddList(const std::string& refdb)
     {
-        std::string query = "SELECT * FROM ADD_OPS";
+        std::string query = "SELECT * FROM ADD_OPS WHERE REFERENCEDDB = '"+refdb+"';";
         CppSQLite3Query res;
         QUERYSYNCDB(query, res);
                while (!res.eof())
@@ -157,12 +158,13 @@ namespace creaImageIO
 
     /////////////////////////////////////////////////////////////////////////////////////////////////
     // clean DataBase if an operation has no child anymore
+       // @param refdb: the database segement to clean
     // @result : -
     /////////////////////////////////////////////////////////////////////////////////////////////////
-    void Synchronizer::CleanList()
+    void Synchronizer::CleanList(const std::string& refdb)
     {
                mAddList.clear();
-               UpdateAddList();
+               UpdateAddList(refdb);
         std::vector<AddList>::iterator it_add = mAddList.begin();
         for(;it_add <mAddList.end(); ++it_add)
         {
@@ -174,7 +176,7 @@ namespace creaImageIO
                 }
         }
                mAddList.clear();
-               UpdateAddList();
+               UpdateAddList(refdb);
     }
 
        /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -182,17 +184,19 @@ namespace creaImageIO
     // @param path: the path of the directory that was added
        // @param recursive: shows if the action was called recursively or not
        // @param nChildren: the number of files affected by the operation
+       // @param refdb: the referenced database
     // @result : The operation has been added
     /////////////////////////////////////////////////////////////////////////////////////////////////
-       void Synchronizer::InsertAddOp(const std::string& path, const std::string& recursive,   const std::string& nChildren)
+       void Synchronizer::InsertAddOp(const std::string& path, const std::string& recursive,   const std::string& nChildren, const std::string& refdb)
        {
                std::string insert;
                std::string pat=path.c_str();
                CleanName(pat);
-               insert="INSERT INTO ADD_OPS (PATH,RECURSIVE,FILES_ADDED) VALUES('";
+               insert="INSERT INTO ADD_OPS (PATH,RECURSIVE,FILES_ADDED,REFERENCEDDB) VALUES('";
                insert+=pat+"','";
                insert+=recursive+"',";
-       insert+=nChildren+");";
+       insert+=nChildren+",'";
+               insert+=refdb+"');";
                UPDATESYNCDB(insert);
        }
 
@@ -205,11 +209,11 @@ namespace creaImageIO
     // @result : The file has been inserted
     /////////////////////////////////////////////////////////////////////////////////////////////////
 
-       void Synchronizer::InsertIgnoreFile(const std::string& addKey, const std::string& path, const std::string& remove, const std::string& time)
+       void Synchronizer::InsertIgnoreFile(const std::string& addKey, const std::string& path, const std::string& remove, const std::string& time, const std::string& refdb )
        {
                std::string pat=path.c_str();
                CleanName(pat);
-               std::string id=GetAttribute("ID","IGNORED_FILES","PATH",pat);
+               std::string id=GetAttribute("ID","IGNORED_FILES","PATH",pat,refdb);
                if(id.compare("")==0)
                {
                        std::string insert;
@@ -223,13 +227,29 @@ namespace creaImageIO
                else            
                {
                        //Gets the add key
-                       std::string ak=GetAttribute("ADD_KEY","IGNORED_FILES","ID",id);
-                       //Sets the new add key attribute for the file
-            SetAttribute("ADD_KEY","IGNORED_FILES",addKey,"ID", id);
-                       //Sets the new remove attribute for the file
-                       SetAttribute("REMOVE","IGNORED_FILES",remove,"ID", id);
-                       //Sets the new time attribute for the file
-                       SetAttribute("TIME","IGNORED_FILES",time,"ID", id);
+                       std::string ak=GetAttribute("ADD_KEY","IGNORED_FILES","ID",id,refdb);
+                       //gets the parent database to check if the file has been added to the current database
+                       std::string parentDB=GetAttribute("*","ADD_OPS","ADD_KEY",ak,refdb);
+                       //If there is no such entry, add it
+                       if(parentDB.compare("")==0)
+                       {
+                               std::string insert;
+                               insert="INSERT INTO IGNORED_FILES (ADD_KEY,PATH,REMOVE,TIME) VALUES('";
+                               insert+=addKey+"','";
+                               insert+=pat+"','";
+                               insert+=remove+"',";
+                       insert+=time+");";
+                               UPDATESYNCDB(insert);
+                       }
+                       else
+                       {
+                               //Sets the new add key attribute for the file
+                               SetAttribute("ADD_KEY","IGNORED_FILES",addKey,"ID", id,refdb);
+                               //Sets the new remove attribute for the file
+                               SetAttribute("REMOVE","IGNORED_FILES",remove,"ID", id,refdb);
+                               //Sets the new time attribute for the file
+                               SetAttribute("TIME","IGNORED_FILES",time,"ID", id,refdb);
+                       }
                }
        }
 
@@ -275,13 +295,22 @@ namespace creaImageIO
     std::string Synchronizer::GetAttribute(const std::string& attribute, 
                                                                                const std::string& table, 
                                                                                const std::string& searchParam,
-                                                                               const std::string& searchValue)
+                                                                               const std::string& searchValue, 
+                                                                               const std::string& refdb)
     {
         std::stringstream query;
                std::string result;
                std::string sVal=searchValue.c_str();
                CleanName(sVal);
-               query<<"SELECT "<<attribute<<" FROM "<<table<<" WHERE "<<searchParam<<" = '"<<sVal<<"';";
+               query<<"SELECT "<<attribute<<" FROM "<<table<<" WHERE "<<searchParam<<" = '"<<sVal;
+               if(table.compare("ADD_OPS")==0)
+               {
+                       query<<"' AND REFERENCEDDB = '"<<refdb<<"';";
+               }
+               else
+               {
+                       query<<"';";
+               }
         CppSQLite3Query res;
         QUERYSYNCDB(query.str(), res);
                while (!res.eof())
@@ -305,7 +334,8 @@ namespace creaImageIO
                                                                                const std::string& table, 
                                                                                const std::string& value,
                                                                                const std::string& searchParam,
-                                                                               const std::string& searchValue)
+                                                                               const std::string& searchValue,
+                                                                               const std::string& refdb)
     {
                std::string val=value.c_str();
                std::string sVal=searchValue.c_str();
@@ -321,7 +351,12 @@ namespace creaImageIO
                sql += searchParam;
                sql += " = '";
                sql += sVal;
-               sql += "'";
+               if(table.compare("ADD_OPS")==0)
+               {
+                       sql += "' AND REFERENCEDDB = '";
+                       sql += refdb;
+               }
+               sql += "';";
                UPDATESYNCDB(sql);
     }
 } 
\ No newline at end of file