示例#1
0
        private void AppendOdi(CreateViewModelRequest <KanonasRule> req, KOdiRule defaultOdiRule, int odiNumber)
        {
            /*
             * Ищем KOdiRule для обработки:
             * Если есть с заданным номером, используем ее.
             * Иначе если есть defaultOdi, используем ее.
             * Иначе ничего не делаем. Также ничего не делаем, если нет канонов с таким номером у найденного KOdiRule.
             */

            var odiRuleToHandle = req.Element.Odes.FirstOrDefault(c => c.Number == odiNumber) ?? defaultOdiRule;

            if (odiRuleToHandle == null ||
                odiRuleToHandle.Kanones.FirstOrDefault(c => c.Odes.Exists(k => k.Number == odiNumber)) == null)
            {
                return;
            }

            AppenOdiHeader(req, odiNumber);

            //Проходим по всем канонам и добавляем песню, согласно индекса, если она имеется
            for (int i = 0; i < odiRuleToHandle.Kanones.Count; i++)
            {
                var kanonas = odiRuleToHandle.Kanones[i];
                //Признак того, последний ли канон (катавасию не считаем)
                bool isLastKanonas = odiRuleToHandle.Kanones.IsLastKanonasBeforeKatavasia(i);
                bool isOdi8        = req.Element.IsOrthros && odiNumber == 8;

                if (kanonas.Odes.FirstOrDefault(c => c.Number == odiNumber && c.Troparia.Count > 0) is Odi odi)
                {
                    //Проверяем, данная песнь не Катавасия ли - часть канона, который есть одна из катавасий по вся дни лета
                    bool isKatavasiaKanonas = odi.Troparia.TrueForAll(c => c.Kind == YmnosKind.Katavasia);
                    //bool isKatavasiaKanonas = (i == odiRuleToHandle.Kanones.Count - 1);

                    //Добавляем шапку канона
                    if (isKatavasiaKanonas)
                    {
                        AppendKatavasiaHeader(req, kanonas.Ihos);

                        if (isOdi8)
                        {
                            //добавляет после 8-й песни "Хвалим, благословим"
                            AppendStihosOdi8(req);
                        }
                    }
                    else
                    {
                        AppendKanonasHeader(req, kanonas);
                    }

                    odiView.AppendViewModel(new AppendViewModelOdiRequest()
                    {
                        Odi           = odi,
                        IsLastKanonas = isLastKanonas,
                        IsOdi8        = isOdi8,
                        DefaultChorus = kanonas.Stihos
                    });
                }
            }
        }
        public void IAsAdditionElement_IsMatchFail2()
        {
            // rule/worship/kanonasrule/odi
            var element = new KanonasRule("kanonasrule"
                                          , new KanonasRuleVMFactory(TestRuleSerializer.Create())
                                          , new WorshipRule("worship", new RootContainer("rule"), TestRuleSerializer.Create().QueryProcessor));

            var odi = new KOdiRule("odi", element);

            element.ChildElements.Add(odi);

            // rule/worship/kanonasrule/after
            var toMatch = new KanonasRule("kanonasrule"
                                          , new KanonasRuleVMFactory(TestRuleSerializer.Create())
                                          , new WorshipRule("worship", new RootContainer("rule"), TestRuleSerializer.Create().QueryProcessor));
            var after = new KAfterRule("after", element);

            element.ChildElements.Add(after);

            var result = odi.IsMatch(after);

            Assert.AreEqual(AsAdditionMatchingResult.Fail, result);
        }