public static bool CreateFPScenarioByFiles(DirectoryInfo patchDirectory) { SortedList <ScenarioKey, string> priorityLinePair = new SortedList <ScenarioKey, string>(new DuplicateKeyComparer <ScenarioKey>()); string startWFDir = Path.Combine(patchDirectory.FullName, "start_wf"); DirectoryInfo dir = new DirectoryInfo(startWFDir); if (Directory.Exists(startWFDir)) { OSUtils.SetAttributesNormal(dir); OSUtils.DeleteDir(dir); } foreach (FileInfo fileInfo in patchDirectory.EnumerateFiles("*.xml", SearchOption.AllDirectories)) { if (!fileInfo.Attributes.HasFlag(FileAttributes.Hidden)) { if (fileInfo.Directory.Name.Equals(Properties.Settings.Default.STWFFolder, StringComparison.InvariantCultureIgnoreCase) || fileInfo.Directory.Parent != null && fileInfo.Directory.Parent.Name.Equals(Properties.Settings.Default.STWFFolder, StringComparison.InvariantCultureIgnoreCase) && fileInfo.Directory.Name.Equals("WORKFLOWS", StringComparison.InvariantCultureIgnoreCase)) { if (Regex.IsMatch(fileInfo.Name, Properties.Settings.Default.CreateSTWFRegex)) { Directory.CreateDirectory(startWFDir); string wfName = Path.GetFileNameWithoutExtension(fileInfo.FullName); string startWFFile = Path.Combine(startWFDir, $"start_{wfName}.txt"); using (File.Create(startWFFile)) { } using (StreamWriter tw = new StreamWriter(startWFFile, false, Encoding.GetEncoding("Windows-1251"))) { tw.Write($" -f FLOW_CONTROL -wait {wfName}"); } } } } } foreach (FileInfo fileInfo in patchDirectory.EnumerateFiles("*.*", SearchOption.AllDirectories)) { if (!fileInfo.Attributes.HasFlag(FileAttributes.Hidden)) { string fromFPPath = fileInfo.FullName.Substring(patchDirectory.FullName.Length + 1); if (!WrongFiles.IsMatch(fromFPPath)) { if (CreateScenarioLineByFromFPDirPath(fromFPPath, out string scenarioLine)) { priorityLinePair.Add(new ScenarioKey(Priority(scenarioLine), scenarioLine), scenarioLine); } } } } SaveFileSc(patchDirectory, priorityLinePair.Values); return(true); }
public static bool CreateFPScenarioByFiles(DirectoryInfo fixpackDirectory, List <DirectoryInfo> selectedPatches, List <DirectoryInfo> beforeInstructionPatches) { List <string> newScenarioLines = new List <string>(); DirectoryInfo fixpackDir = new DirectoryInfo(Properties.Settings.Default.fixpackPath); List <DirectoryInfo> patchDirectories = fixpackDir.GetDirectories("*", SearchOption.TopDirectoryOnly).ToList(); patchDirectories.Sort((x, y) => x.Name.CompareTo(y.Name)); foreach (DirectoryInfo patchDirectory in patchDirectories) { if (selectedPatches.Where(x => x.FullName.Equals(patchDirectory.FullName, StringComparison.InvariantCultureIgnoreCase)).Count() > 0) { SortedList <int, string> priorityLinePair = new SortedList <int, string>(new DuplicateKeyComparer <int>()); if (beforeInstructionPatches.Where(x => x.FullName.Equals(patchDirectory.FullName, StringComparison.InvariantCultureIgnoreCase)).Count() > 0) { newScenarioLines.Add($"WAIT||Выполнить инструкцию №{patchDirectory.Name}"); } foreach (FileInfo fileInfo in patchDirectory.EnumerateFiles("*.*", SearchOption.AllDirectories)) { string fromFPPath = fileInfo.FullName.Substring(fixpackDirectory.FullName.Length + 1); if (!WrongFiles.IsMatch(fromFPPath)) { if (CreateScenarioLineByFromFPDirPath(fromFPPath, out string scenarioLine)) { priorityLinePair.Add(Priority(scenarioLine), scenarioLine); } } } newScenarioLines.AddRange(priorityLinePair.Values); } } SaveFileSc(fixpackDirectory, newScenarioLines); return(true); }
public static void CheckFilesAndPatchScenario(DirectoryInfo fixpackDirectory, List <DirectoryInfo> selectedPatches, out List <string> scenarioNotFound, out List <string> filesNotFound, out List <string> linesNotFound, out List <string> objectDuplications) { scenarioNotFound = new List <string>(); filesNotFound = new List <string>(); linesNotFound = new List <string>(); objectDuplications = new List <string>(); Dictionary <string, List <string> > objectDict = new Dictionary <string, List <string> >(); foreach (DirectoryInfo patchDirectory in fixpackDirectory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)) { if (selectedPatches.Where(x => x.FullName.Equals(patchDirectory.FullName, StringComparison.InvariantCultureIgnoreCase)).Count() > 0) { List <string> scenarioFilePathes = new List <string>(); var fileScs = patchDirectory.GetFiles("file_sc.txt", SearchOption.TopDirectoryOnly); if (fileScs.Length == 0) { scenarioNotFound.Add(patchDirectory.FullName); } else { using (var reader = fileScs[0].OpenText()) { string currScenario = reader.ReadToEnd(); string[] currScenarioLines = currScenario.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); foreach (string oldScenarioLine in currScenarioLines) { MatchCollection ORAMatches = ORAPathFromScenarioLine.Matches(oldScenarioLine); MatchCollection IPCMatches = IPCPathFromScenarioLine.Matches(oldScenarioLine); MatchCollection STWFMatches = STWFPathFromScenarioLine.Matches(oldScenarioLine); MatchCollection mainMatchCollection = ORAMatches.Count > 0 ? ORAMatches : IPCMatches.Count > 0 ? IPCMatches : STWFMatches.Count > 0 ? STWFMatches : null; if (mainMatchCollection != null) { string fullPath = Path.Combine(patchDirectory.FullName, mainMatchCollection[0].Groups[1].Value); string fileName = new FileInfo(fullPath).Name.ToUpper(); if (objectDict.ContainsKey(fileName)) { objectDict[fileName].Add(fullPath); } else { List <string> list = new List <string>(); list.Add(fullPath); objectDict.Add(fileName, list); } scenarioFilePathes.Add(fullPath.Trim()); if (!File.Exists(fullPath)) { int insertIndex = mainMatchCollection[0].Groups[1].Index; filesNotFound.Add(FPScenarioLineByPatchScenarioLine(oldScenarioLine, patchDirectory, insertIndex)); } } } } } foreach (FileInfo fileInfo in patchDirectory.EnumerateFiles("*.*", SearchOption.AllDirectories)) { if (scenarioFilePathes.Where(x => x.Equals(fileInfo.FullName, StringComparison.InvariantCultureIgnoreCase)).Count() == 0) { if (!WrongFiles.IsMatch(fileInfo.Name)) { string fromFPDirPath = fileInfo.FullName.Substring(fixpackDirectory.FullName.Length + 1); if (CreateScenarioLineByFromFPDirPath(fromFPDirPath, out string scenarioLine)) { linesNotFound.Add(scenarioLine); } else { linesNotFound.Add(fromFPDirPath); } } } } } } foreach (var list in objectDict.Values) { if (list.Count > 1) { foreach (var item in list) { objectDuplications.Add(item); } } } }