Imports DigitalData.Modules.Base Imports DigitalData.Modules.Logging Public Class ConfigUtils Private _Logger As Logger Private _File As FilesystemEx Private Const MIGRATE_DIRECTORY As String = "Migrate" Public Sub New(LogConfig As LogConfig) _Logger = LogConfig.GetLogger() _File = New FilesystemEx(LogConfig) End Sub Public Function TestMigrationNeeded(TargetDirectory As String) As Boolean If IO.Directory.Exists(TargetDirectory) Then Return False Else Return True End If End Function Public Sub MigrateConfig(SourceDirectory As String, TargetDirectory As String, Optional FilePattern As String = "*.*") If IO.Directory.Exists(TargetDirectory) Then _Logger.Warn("Config Migration aborted because new config directory [{0}] already exists!", TargetDirectory) Exit Sub End If _Logger.Debug("Creating TargetDirectory [{0}]", TargetDirectory) ' Create target directory Try IO.Directory.CreateDirectory(TargetDirectory) Catch ex As Exception _Logger.Warn("Config Migration aborted because new config directory [{0}] could not be created!", TargetDirectory) _Logger.Error(ex) Exit Sub End Try ' Create Migration directory Dim oMigrationDirectory = IO.Path.Combine(SourceDirectory, MIGRATE_DIRECTORY) _Logger.Debug("Creating MigrationDirectory [{0}]", oMigrationDirectory) Try IO.Directory.CreateDirectory(oMigrationDirectory) Catch ex As Exception _Logger.Warn("Config Migration aborted because migration directory [{0}] could not be created!", oMigrationDirectory) _Logger.Error(ex) Exit Sub End Try ' Copy individual files from top level directory For Each oPath In IO.Directory.EnumerateFiles(SourceDirectory, FilePattern) Dim oFileInfo = New IO.FileInfo(oPath) _Logger.Debug("Processing file [{0}]", oFileInfo.Name) _Logger.Debug("Copying [{0}] to TargetDirectory..", oFileInfo.Name) ' Copy to target directory Try IO.File.Copy(oPath, IO.Path.Combine(TargetDirectory, oFileInfo.Name)) Catch ex As Exception _Logger.Warn("Could not move old config file {0} to new config location {1}", oFileInfo.Name, TargetDirectory) _Logger.Error(ex) End Try _Logger.Debug("Moving [{0}] to MigrationDirectory..", oFileInfo.Name) ' Move to migration directory Try IO.File.Move(oPath, IO.Path.Combine(oMigrationDirectory, oFileInfo.Name)) Catch ex As Exception _Logger.Warn("Could not move old config file {0} to migration directory {1}", oFileInfo.Name, oMigrationDirectory) _Logger.Error(ex) End Try Next For Each oDirectoryPath In IO.Directory.EnumerateDirectories(SourceDirectory, "*", IO.SearchOption.TopDirectoryOnly) Dim oDirInfo As New IO.DirectoryInfo(oDirectoryPath) _Logger.Debug("Processing directory [{0}]", oDirInfo.Name) ' Don't copy TargetDirectory if subpath of SourceDirectory or if MigrationDirectory If oDirInfo.FullName = TargetDirectory Or oDirInfo.FullName = oMigrationDirectory Then _Logger.Debug("Directory [{0}] should not be copied. Skipping.", oDirInfo.Name) Continue For End If ' Copy directory to TargetDirectory Dim oNewDirectoryPath = IO.Path.Combine(TargetDirectory, oDirInfo.Name) _Logger.Debug("Copying [{0}] to TargetDirectory..", oDirInfo.Name) Try _File.CopyDirectory(oDirInfo.FullName, oNewDirectoryPath, True) Catch ex As Exception _Logger.Warn("Could not move directory [{0}] to new path [{1}]", oDirInfo.FullName, oNewDirectoryPath) _Logger.Error(ex) End Try _Logger.Debug("Copying [{0}] to MigrationDirectory..", oDirInfo.Name) ' Copy directory to MigrationDirectory Dim oMigrationDirectoryPath = IO.Path.Combine(oMigrationDirectory, oDirInfo.Name) Try _File.CopyDirectory(oDirInfo.FullName, oMigrationDirectoryPath, True) Catch ex As Exception _Logger.Error(ex) _Logger.Warn("Could not move directory [{0}] to migration directory [{1}]", oDirInfo.FullName, oMigrationDirectoryPath) End Try _Logger.Debug("Deleting [{0}]..", oDirInfo.Name) ' Delete directory Try IO.Directory.Delete(oDirInfo.FullName, True) Catch ex As Exception _Logger.Error(ex) _Logger.Warn("Could not delete directory [{0}]", oDirInfo.FullName) End Try Next End Sub End Class