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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
                    }
                }
            }
        }