protected Kanonas GetKanonas(RuleHandlerSettings settings)
        {
            Kanonas result = null;

            //разбираемся с source
            DayStructureBase dayWorship = null;

            switch (Source)
            {
            case KanonasSource.Item1:
                dayWorship = (settings.DayWorships.Count > 0) ? settings.DayWorships[0] : null;
                break;

            case KanonasSource.Item2:
                dayWorship = (settings.DayWorships.Count > 1) ? settings.DayWorships[1] : null;
                break;

            case KanonasSource.Item3:
                dayWorship = (settings.DayWorships.Count > 2) ? settings.DayWorships[2] : null;
                break;

            case KanonasSource.Oktoikh:
                dayWorship = settings.OktoikhDay;
                break;
            }

            if (dayWorship != null)
            {
                switch (Kanonas)
                {
                case KanonasKind.Apodipno:
                    //TODO: добавить реализацию
                    break;

                case KanonasKind.Mesoniktiko:
                    //TODO: добавить реализацию
                    break;

                case KanonasKind.Orthros1:
                    result = GetOrthrosKanonas(dayWorship, 0);
                    break;

                case KanonasKind.Orthros2:
                    result = GetOrthrosKanonas(dayWorship, 1);
                    break;

                case KanonasKind.Orthros3:
                    result = GetOrthrosKanonas(dayWorship, 2);
                    break;
                }
            }

            return(result);

            Kanonas GetOrthrosKanonas(DayStructureBase day, int index)
            {
                return((day.GetElement().Orthros?.Kanones?.Count > index) ? day.GetElement().Orthros.Kanones[index] : null);
            }
        }
Esempio n. 2
0
        protected DayContainer GetDayContainer(RuleHandlerSettings settings)
        {
            //разбираемся с source
            DayStructureBase dayContainer = null;

            switch (Source)
            {
            case YmnosSource.Menology1:
                dayContainer = (settings.Menologies.Count > 0) ? settings.Menologies[0] : null;
                break;

            case YmnosSource.Menology2:
                dayContainer = (settings.Menologies.Count > 1) ? settings.Menologies[1] : null;
                break;

            case YmnosSource.Menology3:
                dayContainer = (settings.Menologies.Count > 2) ? settings.Menologies[2] : null;
                break;

            case YmnosSource.Triodion1:
                dayContainer = (settings.Triodions.Count > 0) ? settings.Triodions[0] : null;
                break;

            case YmnosSource.Oktoikh:
                dayContainer = settings.OktoikhDay;
                break;

            case YmnosSource.WeekDay:
            {
                dayContainer = queryProcessor.Process(new WeekDayAppQuery(settings.Date.DayOfWeek));
            }
            break;
            }

            //if (dayContainer == null)
            //{
            //    throw new KeyNotFoundException("YmnosStructureRule source not found: " + Source.ToString());
            //}

            return(dayContainer?.GetElement(serializer));
        }
        protected Kanonas GetKanonas(RuleHandlerSettings settings)
        {
            Kanonas result = null;

            //разбираемся с source
            DayStructureBase dayWorship = null;

            switch (Source)
            {
            case KanonasSource.Menology1:
                dayWorship = (settings.Menologies.Count > 0) ? settings.Menologies[0] : null;
                break;

            case KanonasSource.Menology2:
                dayWorship = (settings.Menologies.Count > 1) ? settings.Menologies[1] : null;
                break;

            case KanonasSource.Menology3:
                dayWorship = (settings.Menologies.Count > 2) ? settings.Menologies[2] : null;
                break;

            case KanonasSource.Triodion1:
                dayWorship = (settings.Triodions.Count > 0) ? settings.Triodions[0] : null;
                break;

            case KanonasSource.Oktoikh:
                dayWorship = settings.OktoikhDay;
                break;
            }

            if (dayWorship != null)
            {
                switch (Kanonas)
                {
                case KanonasKind.Apodipno:
                    //TODO: добавить реализацию
                    break;

                case KanonasKind.Mesoniktiko:
                    //TODO: добавить реализацию
                    break;

                case KanonasKind.Orthros1:
                    result = GetOrthrosKanonas(dayWorship, 0);
                    break;

                case KanonasKind.Orthros2:
                    result = GetOrthrosKanonas(dayWorship, 1);
                    break;

                case KanonasKind.Orthros3:
                    result = GetOrthrosKanonas(dayWorship, 2);
                    break;
                }
            }

            return(result);

            Kanonas GetOrthrosKanonas(DayStructureBase day, int index)
            {
                var element = day.GetElement(Serializer);

                return((element.Orthros?.Kanones?.Count > index) ? element.Orthros.Kanones[index] : default(Kanonas));
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Возвращает указанные в правиле богослужебные тексты.
        /// </summary>
        /// <param name="date"></param>
        /// <param name="handler"></param>
        /// <returns>Если таковые не объявлены в DayService, возвращает NULL.</returns>
        public virtual DayElementBase Calculate(RuleHandlerSettings settings)
        {
            if (!IsValid)
            {
                return(null);
            }

            YmnosStructure result = null;

            //разбираемся с source
            DayStructureBase dayWorship = null;

            switch (Source)
            {
            case YmnosSource.Item1:
                dayWorship = (settings.DayWorships.Count > 0) ? settings.DayWorships[0] : null;
                break;

            case YmnosSource.Item2:
                dayWorship = (settings.DayWorships.Count > 1) ? settings.DayWorships[1] : null;
                break;

            case YmnosSource.Item3:
                dayWorship = (settings.DayWorships.Count > 2) ? settings.DayWorships[2] : null;
                break;

            case YmnosSource.Oktoikh:
                dayWorship = settings.OktoikhDay;
                break;
            }

            //if (dayWorship == null)
            //{
            //    throw new KeyNotFoundException("YmnosStructureRule source not found: " + Source.ToString());
            //}

            //не выдаем ошибки, если день не найден
            if (dayWorship != null)
            {
                //теперь разбираемся с place И kind

                YmnosGroup        group  = null;
                List <YmnosGroup> groups = null;

                switch (Kind)
                {
                case YmnosRuleKind.YmnosRule:
                    groups = dayWorship.GetElement().GetYmnosStructure(Place.Value, Count, StartFrom)?.Groups;
                    if (groups != null)
                    {
                        result = new YmnosStructure();
                        result.Groups.AddRange(groups);
                    }

                    break;

                case YmnosRuleKind.DoxastichonRule:
                    group = dayWorship.GetElement().GetYmnosStructure(Place.Value, Count, StartFrom)?.Doxastichon;
                    if (group != null)
                    {
                        result = new YmnosStructure
                        {
                            Doxastichon = group
                        };
                    }

                    break;

                case YmnosRuleKind.TheotokionRule:
                    groups = dayWorship.GetElement().GetYmnosStructure(Place.Value, Count, StartFrom)?.Theotokion;
                    if (groups != null)
                    {
                        result = new YmnosStructure();
                        result.Theotokion.AddRange(groups);
                    }

                    break;
                }
            }

            return(result);
        }