using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DTS.Common.Utilities { public static class TestRenamer { private static IEnumerable GetAllDirectories(string dir) { return Directory.GetDirectories(dir, "*", SearchOption.AllDirectories); } //FB 29992 imported from rename tool , changed to have bothh rename ID and test setup name //in one method public static bool RenameTest(string origTestFolder, string newTestName, string oldTestName, string dtsFileFolder, string newTestId, string oldTestId, Action progressFunc) { try { if (newTestName == oldTestName && newTestId == oldTestId) { //No need to rename since it's same return true; } if (string.IsNullOrEmpty(origTestFolder) || string.IsNullOrEmpty(newTestName)) { return false; } var eventPath = Directory.GetParent(dtsFileFolder); var eventNumber = eventPath.FullName.Split('\\').LastOrDefault(); var path = Directory.GetParent(Directory.GetParent(origTestFolder).FullName).FullName; string newTestFolder = Path.Combine(path, newTestName, newTestId); if (Directory.Exists(newTestFolder)) { return false; } //Create directories foreach (var d in GetAllDirectories(origTestFolder)) { if (d.Contains("_Event Number") && !d.Contains(eventNumber)) { continue; } Directory.CreateDirectory(d.Replace(origTestFolder, newTestFolder)); } //Copy files var allFiles = Directory.GetFiles(origTestFolder, "*.*", SearchOption.AllDirectories); var currentFile = 0; foreach (var f in allFiles) { currentFile++; if (f.Contains("_Event Number") && !f.Contains(eventNumber)) { continue; } var fullPath = f.Replace(origTestFolder, newTestFolder); var originalFile = Path.GetFileName(fullPath); var updatedFile = originalFile.Replace(oldTestId, newTestId); fullPath = Path.Combine(fullPath.Remove(fullPath.LastIndexOf('\\')), updatedFile); File.Copy(f, fullPath, true); if (fullPath.EndsWith(".dts")) { FindandReplace(fullPath, string.Concat("", oldTestName), string.Concat("", newTestName)); var xmlFile = string.Concat(newTestId, ".xml"); if (originalFile != xmlFile) { var newFullPath = Path.Combine(fullPath.Remove(fullPath.LastIndexOf('\\')), xmlFile); File.Move(fullPath, newFullPath); } } var progress = currentFile * 100 / allFiles.Count(); if (progress < 0) { progress = 0; } else if (progress > 100) { progress = 100; } progressFunc?.Invoke(progress); } return true; } catch (Exception) { return false; } } private static void FindandReplace(string path, string oldText, string newText) { string text = File.ReadAllText(path); text = text.Replace(oldText, newText); File.WriteAllText(path, text); } } }