public static void FileRequestTest(KeyValuePair <SelectRequest, int[]> args) { Console.WriteLine("** Test begin **"); Console.WriteLine(args.Key); DBRep repository = DBRep.Instance(); repository.RepositoryPath = RootPath; var files = repository.GetFiles(args.Key); Console.WriteLine("Getting files:"); foreach (var item in files) { Console.WriteLine(item); } int[] ResultFilesIDs = files .Select(x => objs.First(z => z.Value.RepFilePath == x.RepFilePath).Key) .OrderBy(x => x) .ToArray(); Console.WriteLine($"ExceptedResults: {string.Join(", ", args.Value)}"); Console.WriteLine($"ActualResults: {string.Join(", ", ResultFilesIDs)}"); Assert.AreEqual(args.Value, ResultFilesIDs); }
/// <summary> /// Переносим начало позиции участка кода что бы захыватить первичный комментарий /// </summary> /// <param name="repositoryPackage"></param> private void UpdateBeginLine() { Action <ePackageElementDefinitionType, string> run = (definitionType, path) => { var ElementsInPart = elements.Where(x => x.Position.Keys.Contains(definitionType)).ToList(); var q = (new int[] { 2 }) .Concat(ElementsInPart.Select(x => x.Position[definitionType]) .SelectMany(x => new int[] { x.LineBeg, x.LineEnd }) .OrderBy(x => x) .ToArray()) .ToArray(); var NewLine = new Dictionary <int, int>(); for (int i = 1; i < q.Count(); i += 2) { NewLine.Add(q[i], DBRep.Instance().GetEmptyLine(path, q[i], q[i - 1])); } Seri.Log.Verbose(definitionType.ToString() + ": " + string.Join(",", NewLine.Select(x => $"({x.Key} - {x.Value})"))); foreach (var item in ElementsInPart) { var x = item.Position[definitionType]; var NewLineBeg = NewLine[x.LineBeg]; x.UpdateLiuneBeg(NewLineBeg); if (definitionType == ePackageElementDefinitionType.BodyFull && item.Position.Keys.Contains(ePackageElementDefinitionType.BodyDeclaration)) { item.Position[ePackageElementDefinitionType.BodyDeclaration].UpdateLiuneBeg(NewLineBeg); } } }; run(ePackageElementDefinitionType.Spec, repositoryPackage.SpecRepFullPath); run(ePackageElementDefinitionType.BodyFull, repositoryPackage.BodyRepFullPath); }
/// <summary> /// Сгенерировать текст нового объекта /// </summary> /// <param name="splitterObjectType"></param> /// <param name="param"></param> public void RunSplit(eSplitterObjectType splitterObjectType, eSplitParam param) { string FinalObjectText = string.Empty; // Получаем текст объекта switch (splitterObjectType) { case eSplitterObjectType.OldSpec: FinalObjectText = RunSplitOldSpec(); break; case eSplitterObjectType.OldBody: FinalObjectText = RunSplitOldBody(); break; case eSplitterObjectType.NewSpec: FinalObjectText = RunSplitNewSpec(param.HasFlag(eSplitParam.GenerateHeader)); break; case eSplitterObjectType.NewBody: FinalObjectText = RunSplitNewBody(param.HasFlag(eSplitParam.GenerateHeader)); break; default: break; } // Заменяем двойные пробелы - одинарными FinalObjectText = Regex.Replace(FinalObjectText, "\r\n\\s*\r\n\\s*\r\n", "\r\n\r\n"); // Копируем текст в буфер if (param.HasFlag(eSplitParam.CopyToClipBoard)) { Clipboard.SetText(FinalObjectText); } // Открываем текст в новом окне if (param.HasFlag(eSplitParam.OpenNewWindow)) { TextWindow tw = new TextWindow(FinalObjectText); tw.Show(); } // Обновляем репозиторий if (param.HasFlag(eSplitParam.DirectlyUpdateRep)) { RepositoryObject repositoryObject; if (splitterObjectType.IsNew()) { repositoryObject = new RepositoryObject(Config.Instanse().NewPackageName, Config.Instanse().NewPackageOwner, splitterObjectType.IsSpec() ? eRepositoryObjectType.Package_Spec : eRepositoryObjectType.Package_Body); } else { repositoryObject = splitterObjectType.IsSpec() ? _package.repositoryPackage.GetObjectSpec() : _package.repositoryPackage.GetObjectBody(); /* Мы должны одновременно обновить в репозитории и спеку и тело * Последовательно мы это сделать не можем, так как генерация текста зависит от обоих частей * Обновляем соседнюю часть: */ var SecondParttext = splitterObjectType.IsSpec() ? RunSplitOldBody() : RunSplitOldSpec(); var SecondPartObj = splitterObjectType.IsSpec() ? _package.repositoryPackage.GetObjectBody() : _package.repositoryPackage.GetObjectSpec(); DBRep.Instance().SaveTextToFile(SecondParttext, SecondPartObj); } DBRep.Instance().SaveTextToFile(FinalObjectText, repositoryObject); } }
public static void GetPackageTest2() { OraParser oracleParser = OraParser.Instance(); DBRep.Instance().RepositoryPath = "C:\\TestRep"; RepositoryPackage rep = new RepositoryPackage("c_package", "alpha"); var z = oracleParser.GetSavedPackage(rep); }
public static void ReadFileLines() { RepositoryObject obj = new RepositoryObject("text13k", "source", eRepositoryObjectType.Text); DBRep rep = DBRep.Instance(); rep.RepositoryPath = AppDomain.CurrentDomain.BaseDirectory; string s = DBRep.Instance().GetTextOfFile(obj, 10, 18); Console.WriteLine(s); Assert.Pass(); }
/// <summary> /// Получить текст из заданных участков кода. /// </summary> /// <param name="samples">Участки кода</param> /// <param name="repositoryObjectType">Откуда будем доставать код (спецификация/тело)</param> /// <param name="IsBodyDeclarationCopy">При копировании текста из участка BodyDeclaration в новую спецификацию, необходимо добавить точку с запятой</param> /// <returns></returns> private string GetTextPart(PieceOfCode[] samples, eRepositoryObjectType repositoryObjectType, bool IsBodyDeclarationCopy = false) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < samples.Length; i++) { sb.Append(DBRep.Instance().GetTextOfFile(_package.repositoryPackage.RepFullPath(repositoryObjectType), samples[i].LineBeg, samples[i].LineEnd, samples[i].ColumnEnd)); if (IsBodyDeclarationCopy) { sb.Append(";"); } sb.AppendLine(); sb.AppendLine(); } return(sb.ToString()); }
public void GetEmptyLineTest() { var str = "row1\r\n" + "row2\r\n" + "row3\r\n" + "row4\r\n" + "row5\r\n" + "row6\r\n" + "row7\r\n"; var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GetEmptyLineTest.tmp"); File.WriteAllText(path, str); var x = DBRep.Instance().GetEmptyLine(path, 7, 4); File.Delete(path); Assert.AreEqual(5, x); }
/// <summary> /// Получить текст ссылки на метод в новом пакете /// </summary> /// <param name="element"></param> /// <param name="repositoryPackage"></param> /// <returns></returns> private string[] GetLink(PackageElement element, RepositoryPackage repositoryPackage) { Func <int, string> GetSpaces = (n) => string.Join(string.Empty, Enumerable.Range(0, n).Select(x => " ")); // Получаем текст метода до ключевого слова IS/AS var position = element.Position[ePackageElementDefinitionType.BodyDeclaration]; var text = DBRep.Instance().GetTextOfFile(repositoryPackage.BodyRepFullPath, position.LineBeg, position.LineEnd, position.ColumnEnd); // Считаем количество пробелов до начала метода (до слова function/procedure) var SpaceBeforeTextBegin = 0; var ch = text[SpaceBeforeTextBegin]; while (ch == ' ') { ch = text[++SpaceBeforeTextBegin]; } var beginIndent = GetSpaces(SpaceBeforeTextBegin); // Текст ссылки на метод в новом пакете var NewPackageCallText = $"{Config.Instanse().NewPackageName.ToLower()}.{element.Name}"; // Добавляем схему если новая схема отличается от текущей if (repositoryPackage.Owner.ToUpper() != Config.Instanse().NewPackageOwner.ToUpper()) { NewPackageCallText = $"{Config.Instanse().NewPackageOwner.ToLower()}.{NewPackageCallText}"; } // Добавляем слово return для функции if (element.ElementType == ePackageElementType.Function) { NewPackageCallText = $"return {NewPackageCallText}"; } // Отступ длинною в текст ссылки (необходим для отступов параметров) var IndentName = GetSpaces(NewPackageCallText.Count()); // Добавляем параметры string parametersText = string.Empty; if (element.Parametres.Any()) { parametersText += "("; for (int i = 0; i < element.Parametres.Count; i++) { var paramName = element.Parametres[i].Name; // Первый параметр без отступов, остальные с отступами parametersText += $"{(i == 0 ? string.Empty : $"{beginIndent} {IndentName} ")}{paramName} => {paramName},\r\n";
private void Bind() { DBRep.DataSource = Business.ApplicationComponent.GetAll(Business.ApplicationComponentTypes.Database); DBRep.DataBind(); WSRep.DataSource = Business.ApplicationComponent.GetAll(Business.ApplicationComponentTypes.WebService); WSRep.DataBind(); string[] dlls = System.IO.Directory.GetFiles(System.IO.Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "bin"), "*.dll"); ArrayList externalDlls = new ArrayList(); ArrayList apiDlls = new ArrayList(); ArrayList componentDlls = new ArrayList(); ArrayList internalDlls = new ArrayList(); foreach (string dll in dlls) { System.IO.FileInfo dllInfo = new System.IO.FileInfo(dll); if (dllInfo.Name.ToUpper().StartsWith("PRISM") || dllInfo.Name.ToUpper().StartsWith("HYPERCATALOG") || dllInfo.Name.ToUpper().StartsWith("HYPERCOMPONENT")) { if (dllInfo.Name.ToUpper().StartsWith("PRISM.API") || dllInfo.Name.ToUpper().StartsWith("HYPERCATALOG.BUSINESS")) { apiDlls.Add(dll); } else if (dllInfo.Name.ToUpper().StartsWith("PRISM.COMPONENTS") || dllInfo.Name.ToUpper().StartsWith("HYPERCOMPONENT")) { componentDlls.Add(dll); } else { internalDlls.Add(dll); } } else { externalDlls.Add(dll); } } DLLRep.DataSource = new object[][] { new object[] { "API", apiDlls }, new object[] { "Components", componentDlls }, new object[] { "Others", internalDlls }, new object[] { "Externals", externalDlls } }; DLLRep.DataBind(); }
public static void GetOwnersTest() { string TempRep = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "source", "TempRep"); Directory.CreateDirectory(TempRep); Directory.CreateDirectory(Path.Combine(TempRep, "Alpha")); Directory.CreateDirectory(Path.Combine(TempRep, "Beta")); Directory.CreateDirectory(Path.Combine(TempRep, "Gamma")); Directory.CreateDirectory(Path.Combine(TempRep, "Gamma", "Delta")); File.WriteAllText(Path.Combine(TempRep, "Alpha", "temp1.txt"), "test"); File.WriteAllText(Path.Combine(TempRep, "Gamma", "temp2.txt"), "test"); File.WriteAllText(Path.Combine(TempRep, "Gamma", "Delta", "temp3.txt"), "test"); DBRep rep = DBRep.Instance(); rep.RepositoryPath = TempRep; string[] z = rep.GetOwners().ToArray(); Directory.Delete(TempRep, true); Assert.AreEqual(new string[] { "ALPHA", "BETA", "GAMMA" }, z); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { Seri.Log.Verbose($"RepPathToOwnersConverter begin value:{value.ToString()}"); if (!(value is string)) { throw new Exception("Wrong value in RepPathToOwnersConverter"); } string RepPath = (string)value; if (string.IsNullOrEmpty(RepPath) || !Directory.Exists(RepPath)) { return new string[] { } } ; DBRep.Instance().RepositoryPath = RepPath; var owners = DBRep.Instance().GetOwners().ToArray(); return(owners); }
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { if (values[0] == null || string.IsNullOrEmpty((string)values[0])) { return new RepositoryObject[] { } } ; string Owner = (string)values[0]; string Pattern = (string)values[1]; SelectRequest request = new SelectRequest() { Owner = Owner, Pattern = Pattern, FileTypes = new List <eRepositoryObjectType>() { eRepositoryObjectType.Package_Body } }; RepositoryObject[] objects = DBRep.Instance().GetFiles(request).ToArray(); return(objects); }
private void SetObject(ParsedPackagePart part, ePackageElementDefinitionType positionType, string filepath) { var objs = part.Objects; for (int i = 0; i < objs.Count; i++) { var obj = objs[i]; var NamePart = obj.NameIdentifierPart; var ObjName = DBRep.Instance().GetWordInFile(filepath, NamePart.LineBeg, NamePart.ColumnBeg, NamePart.ColumnEnd); var element = new PackageElement(ObjName, obj.GetType().GetCustomAttribute <PackageElementTypeAttribute>().ElementType); element.AddPosition(positionType, obj.Position()); if (obj is ParsedProcedure objMethod) { if (positionType == ePackageElementDefinitionType.BodyFull) { // Фиксируем часть спецификации в теле if (objMethod.DeclarationPart != null) { element.AddPosition(ePackageElementDefinitionType.BodyDeclaration, objMethod.DeclarationPart); } // Определяем FriendlyName для параметров и фиксируем их var baseParamList = objMethod.Parameters.ToList(); for (int j = 0; j < baseParamList.Count; j++) { var parameter = baseParamList[j]; parameter.Name = DBRep.Instance().GetWordInFile(repositoryPackage.BodyRepFullPath, parameter.NamePart.LineBeg, parameter.NamePart.ColumnBeg, parameter.NamePart.ColumnEnd); element.Parametres.Add(parameter); } element.Links.AddRange(objMethod.Elements); } else if (positionType == ePackageElementDefinitionType.Spec) { try { /* Метод в спецификации должен иметь пару в теле пакета. * Ищем уже добавленный метод в теле. Добавляем к нему позицию спецификации */ elements.First(x => x.Equals(objMethod)).AddPosition(ePackageElementDefinitionType.Spec, objMethod.Position()); } catch (InvalidOperationException ex) { // Sequence contains no matching element if (ex.HResult == -2146233079) { var ErrorMsg = $"В спецификации для метода {objMethod.Name} не найдена пара в теле пакета"; Func <IEnumerable <ParsedParameter>, string> printParam = (x) => string.Join(", ", x.Select(x => $"{x.Name} {x.plType}")); Seri.Log.Error(ErrorMsg); Seri.Log.Error($"Метод в спецификации: {objMethod.Name}, параметры: {printParam(objMethod.Parameters)}"); foreach (var item in elements.Where(x => x.Name.ToUpper() == objMethod.Name.ToUpper())) { Seri.Log.Error($"Метод в теле: {item.Name}, параметры: {printParam(item.Parametres)}"); } throw new Exception(ErrorMsg); } else { throw ex; } } continue; } } elements.Add(element); } }
public static void OraParserGetPackageTest() { DBRep.Instance().RepositoryPath = "C:\\TestRep\\"; var x = OraParser.Instance().GetSavedPackage(new RepositoryPackage("c_package", "alpha")); }