Example #1
0
 /// <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);
            }
        }
Example #4
0
        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;
                    }
                }
            }
        }
Example #6
0
        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;
 }