private void RestoreFilesystem()
{
if (!RequiresRollback || !_initialized || _backupDir == null)
return;
if (NewStudyPath == _oldStudyPath)
{
// Study folder was not changed. Files were overwritten.
// restore header
Platform.Log(LogLevel.Info, "Restoring old study header...");
FileUtils.Copy(Path.Combine(_backupDir, _study.StudyInstanceUid + ".xml"), _oldStudyLocation.GetStudyXmlPath(), true);
FileUtils.Copy(Path.Combine(_backupDir, _study.StudyInstanceUid + ".xml.gz"),
_oldStudyLocation.GetCompressedStudyXmlPath(), true);
// restore updated SOPs
Platform.Log(LogLevel.Info, "Restoring old study folder... {0} sop need to be restored", _updatedSopList.Count);
int restoredCount = 0;
foreach (InstanceInfo sop in _updatedSopList)
{
string backupSopPath = Path.Combine(_backupDir, sop.SopInstanceUid + ServerPlatform.DicomFileExtension);
FileUtils.Copy(backupSopPath,_oldStudyLocation.GetSopInstancePath(sop.SeriesInstanceUid, sop.SopInstanceUid), true);
restoredCount++;
Platform.Log(ServerPlatform.InstanceLogLevel, "Restored SOP {0} [{1} of {2}]", sop.SopInstanceUid, restoredCount,
_updatedSopList.Count);
SimulateErrors();
}
if (restoredCount > 0)
Platform.Log(LogLevel.Info, "{0} SOP(s) have been restored.", restoredCount);
}
else
{
// Different study folder was used. Original folder must be kept around
// because we are rolling back.
_deleteOriginalFolder = false;
}
}