コード例 #1
0
        private static Result InnerSyncVariables <T>(T entity, CollectorSerializerRoot serializerRoot, string definition, DefinitionType definitionType)
            where T : RuleEntity//, new()
        {
            //получаем все переменные Устава
            var globalVariables = entity.TypiconVersion.TypiconVariables;

            //очищаем все ссылки на используемые ранее Переменные данного типа
            globalVariables.ForEach(c => c.ClearLinks(entity, definitionType));

            //получаем локальные переменные
            var localVariables = GetLocalVariables(serializerRoot, definition);

            var errors = new List <string>();

            foreach (var v in localVariables)
            {
                var found = globalVariables.FirstOrDefault(c => c.Name == v.Name);

                if (found != null)
                {
                    //type mismatch?
                    if (found.Type == v.Type)
                    {
                        found.AddLink(entity, definitionType);
                    }
                    else
                    {
                        errors.Add($"Ошибка: Переменная {found.Name} уже зарегистрирована в Уставе с типом переменной {found.Type}.");
                    }
                }
                else
                {
                    //нет такой переменной еще - значит добавляем
                    var variable = new TypiconVariable()
                    {
                        TypiconVersion = entity.TypiconVersion,
                        Name           = v.Name,
                        Type           = v.Type
                    };
                    variable.AddLink(entity, definitionType);

                    entity.TypiconVersion.TypiconVariables.Add(variable);
                }
            }

            //удаляем Переменные Устава, у которых нет ссылок
            entity.TypiconVersion.TypiconVariables
            .RemoveAll(c =>
                       c.CommonRuleLinks.Count == 0 &&
                       c.ExplicitAddRuleLinks.Count == 0 &&
                       c.MenologyRuleLinks.Count == 0 &&
                       c.TriodionRuleLinks.Count == 0 &&
                       c.SignLinks.Count == 0);

            return((errors.Count > 0) ? Result.Fail(string.Join('\n', errors)) : Result.Ok());
        }
コード例 #2
0
        private static IEnumerable <int> GetLocalPrintTemplates(CollectorSerializerRoot serializerRoot, string definition)
        {
            serializerRoot.ClearElements();
            serializerRoot.Container <RootContainer>().Deserialize(definition);

            return(serializerRoot.GetElements <ModifyDay>()
                   .Where(c => c.SignNumber.HasValue)
                   .Select(c => c.SignNumber.Value)
                   .Distinct());
        }
コード例 #3
0
 public CreatePrintWeekTemplateCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot)
 {
 }
コード例 #4
0
 public EditTriodionRuleCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot)
 {
 }
コード例 #5
0
 public ModRuleChangedPrintEventHandler(/*TypiconDBContext dbContext
                                         * , */CollectorSerializerRoot serializerRoot)
 {
     //DbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
     SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot));
 }
コード例 #6
0
 protected EditRuleCommandHandlerBase(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext)
 {
     SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot));
 }
コード例 #7
0
 public EditTypiconTimeVariableCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot)
 {
 }
コード例 #8
0
 public EditExplicitAddRuleCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot)
 {
 }
コード例 #9
0
 public ModRuleChangedVariablesEventHandler(CollectorSerializerRoot serializerRoot)
 {
     SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot));
 }
コード例 #10
0
 public RuleDefinitionChangedEventHandler(CollectorSerializerRoot serializerRoot)
 {
     SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot));
 }
コード例 #11
0
 public CreateMenologyRuleCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot)
 {
 }
コード例 #12
0
 public TypiconImportProjector(CollectorSerializerRoot serializerRoot)
 {
     _serializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot));
 }
コード例 #13
0
        private static IEnumerable <(string Name, VariableType Type)> GetLocalVariables(CollectorSerializerRoot serializerRoot, string definition)
        {
            serializerRoot.ClearElements();
            serializerRoot.Container <RootContainer>().Deserialize(definition);

            var result = serializerRoot.GetElements <IHavingVariables>();

            var localVariables = new List <(string Name, VariableType Type)>();

            foreach (var r in result)
            {
                localVariables.AddRange(r.GetVariableNames());
            }

            //получили все переменные в этом Правиле
            return(localVariables.Distinct());
        }
コード例 #14
0
 public static Result SyncModRuleVariables <T>(this T entity, CollectorSerializerRoot serializerRoot)
     where T : ModRuleEntity//, new()
 {
     return(InnerSyncVariables(entity, serializerRoot, entity.ModRuleDefinition, DefinitionType.ModRule));
 }
コード例 #15
0
 public EditPrintDayTemplateCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot)
 {
 }