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()); }
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()); }
public CreatePrintWeekTemplateCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot) { }
public EditTriodionRuleCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot) { }
public ModRuleChangedPrintEventHandler(/*TypiconDBContext dbContext * , */CollectorSerializerRoot serializerRoot) { //DbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext)); SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot)); }
protected EditRuleCommandHandlerBase(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext) { SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot)); }
public EditTypiconTimeVariableCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot) { }
public EditExplicitAddRuleCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot) { }
public ModRuleChangedVariablesEventHandler(CollectorSerializerRoot serializerRoot) { SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot)); }
public RuleDefinitionChangedEventHandler(CollectorSerializerRoot serializerRoot) { SerializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot)); }
public CreateMenologyRuleCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot) { }
public TypiconImportProjector(CollectorSerializerRoot serializerRoot) { _serializerRoot = serializerRoot ?? throw new ArgumentNullException(nameof(serializerRoot)); }
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()); }
public static Result SyncModRuleVariables <T>(this T entity, CollectorSerializerRoot serializerRoot) where T : ModRuleEntity//, new() { return(InnerSyncVariables(entity, serializerRoot, entity.ModRuleDefinition, DefinitionType.ModRule)); }
public EditPrintDayTemplateCommandHandler(TypiconDBContext dbContext, CollectorSerializerRoot serializerRoot) : base(dbContext, serializerRoot) { }