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)); }
/// <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[] { }); } }
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(); } }
/// <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); } }
public static bool IsSpec(this eSplitterObjectType source) { return(source == eSplitterObjectType.OldSpec || source == eSplitterObjectType.NewSpec); }
public static bool IsNew(this eSplitterObjectType source) { return(source == eSplitterObjectType.NewBody || source == eSplitterObjectType.NewSpec); }