Ejemplo n.º 1
0
        private static string GetText(eSplitterObjectType splitterObjectType, RepositoryPackage oldRepositoryPackage, RepositoryPackage newRepositoryPackage)
        {
            var repositoryPackage = splitterObjectType.IsNew() ? newRepositoryPackage : oldRepositoryPackage;
            var path = splitterObjectType.IsSpec() ? repositoryPackage.SpecRepFullPath : repositoryPackage.BodyRepFullPath;

            return(File.ReadAllText(path));
        }
Ejemplo n.º 2
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);
            }
        }
        public void RunSplit(eSplitterObjectType splitterOvjectType, eSplitParam splitterParam)
        {
            // Убираем параметр "Открыть в новом окне" (при его наличии)
            if (splitterParam.HasFlag(eSplitParam.OpenNewWindow))
            {
                splitterParam &= ~eSplitParam.OpenNewWindow;
            }

            _SplitManager.RunSplit(splitterOvjectType, splitterParam);
        }
        public SplitterCellButton[] GetButtons(eSplitterObjectType splitterObject, ePackageElementType elementType)
        {
            switch (elementType)
            {
            case ePackageElementType.Procedure:
            case ePackageElementType.Function: return(GetButtonsForMethod(splitterObject));

            case ePackageElementType.Type:
            case ePackageElementType.Cursor:
            case ePackageElementType.Variable: return(GetButtonsForVariables(splitterObject));

            default: return(new SplitterCellButton[] { });
            }
        }
Ejemplo n.º 5
0
        public static eRepositoryObjectType GetRepositoryType(this eSplitterObjectType source)
        {
            switch (source)
            {
            case eSplitterObjectType.OldSpec:
            case eSplitterObjectType.NewSpec:
                return(eRepositoryObjectType.Package_Spec);

            case eSplitterObjectType.OldBody:
            case eSplitterObjectType.NewBody:
                return(eRepositoryObjectType.Package_Body);

            case eSplitterObjectType.None:
                return(eRepositoryObjectType.None);

            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Получить имена элементов в зависимости от объекта, типа эемента и состояния элемента
        /// </summary>
        /// <param name="splitterObjectType">Тип объекта</param>
        /// <param name="elementStates">Состояние элемента (можно несколько)</param>
        /// <param name="packageElementType">Тип элемента  (можно несколько)</param>
        /// <returns></returns>
        private IEnumerable <string> GetNames(eSplitterObjectType splitterObjectType, eElementStateType elementStates, ePackageElementType packageElementType = ePackageElementType.Procedure | ePackageElementType.Function)
        {
            var x             = Expr.Expression.Parameter(typeof(SplitterElement), "x");
            var HasFlagMethod = typeof(Enum).GetMethod("HasFlag", new[] { typeof(Enum) });

            var xPackageElementType = Expr.Expression.Convert(Expr.Expression.PropertyOrField(x, "PackageElementType"), typeof(Enum));
            var xPackageElementTypeHasFlagExpression = Expr.Expression.Call(Expr.Expression.Constant(packageElementType, typeof(Enum)), HasFlagMethod, xPackageElementType);

            var xObjectType = Expr.Expression.Convert(Expr.Expression.PropertyOrField(x, splitterObjectType.ToString()), typeof(Enum));
            var xObjectTypeHasFlagExpression = Expr.Expression.Call(Expr.Expression.Constant(elementStates, typeof(Enum)), HasFlagMethod, xObjectType);

            var FinalExpression = Expr.Expression.AndAlso(xPackageElementTypeHasFlagExpression, xObjectTypeHasFlagExpression);
            var Filter          = (Func <SplitterElement, bool>)Expr.Expression.Lambda(FinalExpression, x).Compile();

            Seri.Log.Verbose($"GetName Filter: {FinalExpression}");

            /* Пример результата отбора
             * _splitter.Elements.Where(x => packageElementType.HasFlag(x.PackageElementType) && elementStates.HasFlag(x.NewSpec));
             * где вместо x.NewSpec подставится поле в зависимости от splitterObjectType
             */
            return(_splitter.Elements.Where(Filter).Select(x => x.PackageElementName));
        }
        private SplitterCellButton[] GetButtonsForVariables(eSplitterObjectType splitterObject)
        {
            switch (splitterObject)
            {
            case eSplitterObjectType.OldSpec:
                return(new SplitterCellButton[]
                {
                    new SplitterCellButton(eSplitterCellButtonType.AddButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { AddOldSpec, DelOldBody })),
                    new SplitterCellButton(eSplitterCellButtonType.RemoveButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { DelOldSpec })),
                    //new SplitterCellButton(eSplitterCellButtonType.CopyButton, new Dictionary<eSplitterObjectType, eElementStateType>(new[] { AddNewSpec }))
                });

            case eSplitterObjectType.OldBody:
                return(new SplitterCellButton[]
                {
                    new SplitterCellButton(eSplitterCellButtonType.AddButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { AddOldBody, DelOldSpec })),
                    new SplitterCellButton(eSplitterCellButtonType.RemoveButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { DelOldBody })),
                    //new SplitterCellButton(eSplitterCellButtonType.CopyButton, new Dictionary<eSplitterObjectType, eElementStateType>(new[] { AddNewBody }))
                });

            case eSplitterObjectType.NewSpec:
                return(new SplitterCellButton[]
                {
                    new SplitterCellButton(eSplitterCellButtonType.AddButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { AddNewSpec, DelNewBody })),
                    new SplitterCellButton(eSplitterCellButtonType.RemoveButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { DelNewSpec }))
                });

            case eSplitterObjectType.NewBody:
                return(new SplitterCellButton[]
                {
                    new SplitterCellButton(eSplitterCellButtonType.AddButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { AddNewBody, DelNewSpec })),
                    new SplitterCellButton(eSplitterCellButtonType.RemoveButton, new Dictionary <eSplitterObjectType, eElementStateType>(new[] { DelNewBody }))
                });

            default:
                return(null);
            }
        }
Ejemplo n.º 8
0
 public static bool IsSpec(this eSplitterObjectType source)
 {
     return(source == eSplitterObjectType.OldSpec || source == eSplitterObjectType.NewSpec);
 }
Ejemplo n.º 9
0
 public static bool IsNew(this eSplitterObjectType source)
 {
     return(source == eSplitterObjectType.NewBody || source == eSplitterObjectType.NewSpec);
 }