public static void Overwrite(string zipFilePath, IProcessingCallback callback) { // check existence of zip archive if (!System.IO.File.Exists(zipFilePath)) { throw new FileNotFoundException(string.Format("File {0} not found", zipFilePath), zipFilePath); } // extract zip archive to temp DBDescriptor dbDescFrom = DBDescriptor.CreateTempFromArchive(zipFilePath, callback); PPDataContext dbFrom = new PPDataContext(dbDescFrom); TreeNode nodeFrom = TreeNode.GetRootNodes(dbFrom)[0]; PPDataContext dbTo = new PPDataContext(); TreeNode nodeTo = TreeNode.GetRootNodes(dbTo)[0]; // merge format table OverwriteCardboardFormats(dbFrom, dbTo, callback); // merge cardboard profiles OverwriteCardboardProfiles(dbFrom, dbTo, callback); // merge document types OverwriteDocumentTypes(dbFrom, dbTo, callback); // first clear existing documents ClearExistingDocumentsRecursively(dbFrom, nodeFrom, nodeTo, callback); // then merge using (PPDataContext dbTo1 = new PPDataContext()) { MergeTreeNodesRecursively(dbFrom, dbTo, nodeFrom, nodeTo, callback); } }
/// <summary> /// restores a backup database : callback version /// </summary> public static bool Restore(string zipFilePath, IProcessingCallback callback) { try { // clear existing directories DBDescriptor dbDescTo = DBDescriptor.Current; if (!dbDescTo.Clear()) { if (null != callback) { callback.Error("Failed to clear current database!"); } return(false); } // extract new database DBDescriptor dbDescFrom = DBDescriptor.CreateTempFromArchive(zipFilePath, callback); // build data contexts PPDataContext dbFrom = new PPDataContext(dbDescFrom); PPDataContext dbTo = new PPDataContext(dbDescTo); // copy format table CopyCardboardFormats(dbFrom, dbTo); // copy cardboard profiles CopyCardboardProfiles(dbFrom, dbTo); // copy document types CopyDocumentTypes(dbFrom, dbTo); // copy branch nodes recursively TreeNode nodeFrom = TreeNode.GetRootNodes(dbFrom)[0]; TreeNode nodeTo = TreeNode.GetRootNodes(dbTo)[0];; CopyTreeNodesRecursively(dbFrom, dbTo, nodeFrom, nodeTo, callback); GC.Collect(); } catch (Exception ex) { if (null != callback) { callback.Error(ex.Message); } _log.Error(ex.ToString()); return(false); } return(true); }