Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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();
        }
Пример #6
0
        /// <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());
        }
Пример #7
0
        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);
        }
Пример #8
0
        /// <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";
Пример #9
0
        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();
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
 public static void OraParserGetPackageTest()
 {
     DBRep.Instance().RepositoryPath = "C:\\TestRep\\";
     var x = OraParser.Instance().GetSavedPackage(new RepositoryPackage("c_package", "alpha"));
 }