/// <summary> /// Добавляет в конец коллекции вычисляемых канонов катавасию /// </summary> /// <param name="date"></param> /// <param name="handler"></param> /// <param name="container"></param> private void CalculateKatavasiaStructure(IRuleHandler handler, ExecContainer container) { if (container?.ChildElements.FirstOrDefault() is KKatavasiaRule item) { _kanonesCalc.Add(item.Calculate(handler.Settings) as Kanonas); } }
/// <summary> /// /// </summary> /// <param name="element">Существует ограничение на то, чтобы элемент был наследником класса RuleElement</param> /// <returns></returns> public override bool Execute(ICustomInterpreted element) { if (element is T && element is RuleElement r) { if (_executingResult == null) { _executingResult = new ExecContainer(); } _executingResult.ChildElements.Add(r); return(true); } return(false); }
protected override void InnerInterpret(IRuleHandler handler) { if (handler.IsAuthorized <YmnosStructureRule>()) { //используем специальный обработчик для YmnosStructureRule, //чтобы создать список источников стихир на обработку ExecContainer container = GetChildElements <ICalcStructureElement>(handler); if (container != null) { CalculateYmnosStructure(handler.Settings, container); } handler.Execute(this); } }
public void Rules_Executables_ExecContainer_Add() { string xmlString = @"<rule> <switch> <condition> <int>-08</int> </condition> <case> <values> <date>--11-04</date> </values> <action> <modifyday servicesign=""12"" iscustomname=""true""> <getclosestday dayofweek=""суббота"" weekcount=""-2""><date>--11-08</date></getclosestday> </modifyday> </action> </case> <default> <modifyday servicesign=""12"" iscustomname=""true""> <getclosestday dayofweek=""суббота"" weekcount=""-1""><date>--11-08</date></getclosestday> </modifyday> </default> </switch> </rule>"; ExecContainer container = TestRuleSerializer.Deserialize <ExecContainer>(xmlString); xmlString = @"<case> <values> <date>--11-04</date> </values> <action> <modifyday servicesign=""12"" iscustomname=""true""> <getclosestday dayofweek=""суббота"" weekcount=""-2""><date>--11-08</date></getclosestday> </modifyday> </action> </case>" ; ModifyDay dayModification = TestRuleSerializer.Deserialize <ModifyDay>(xmlString); container.ChildElements.Add(dayModification); Assert.AreEqual(container.ChildElements.Count, 2); }
private void CalculateYmnosStructure(RuleHandlerSettings settings, ExecContainer container) { Structure = new YmnosStructure(); foreach (ICalcStructureElement element in container.ChildElements) { if (element.Calculate(settings) is YmnosStructure s) { switch (element) { case YmnosRule r: AsYmnosRule(r, s); break; case KSedalenRule r: AsKanonasSedalenRule(r, s); break; } } } }
private void CalculateOdesStructure(IRuleHandler handler, ExecContainer container, bool katavasiaExists) { for (int i = 0; i < container.ChildElements.Count; i++) { KKanonasItemRule item = container.ChildElements[i] as KKanonasItemRule; if (item.Calculate(handler.Settings) is Kanonas k) { _kanonesCalc.Add(k); } //определение катавасии отсутствует и канон последний if (!katavasiaExists && i == container.ChildElements.Count - 1) { //добавляем еще один канон, который будет состоять ТОЛЬКО из катавасий после 3, 6, 8, 9-х песен if (item.CalculateEveryDayKatavasia(handler.Settings) is Kanonas k1) { _kanonesCalc.Add(k1); } } } }
public override void ClearResult() { _executingResult = null; }