Ejemplo n.º 1
0
        private void ImportKathismas(TypiconVersion version, List <KathismaProjection> kathismas)
        {
            kathismas.ForEach(c =>
            {
                var kathisma = new Kathisma()
                {
                    Number         = c.Number,
                    NumberName     = new ItemText(c.NumberName),
                    TypiconVersion = version
                };

                c.SlavaElements.ForEach(s =>
                {
                    var slavaElement = new SlavaElement();

                    s.PsalmLinks.ForEach(p =>
                    {
                        var psalmLink = new PsalmLink()
                        {
                            PsalmId     = p.PsalmId,
                            StartStihos = p.StartStihos,
                            EndStihos   = p.EndStihos
                        };
                        slavaElement.PsalmLinks.Add(psalmLink);
                    });

                    kathisma.SlavaElements.Add(slavaElement);
                });

                version.Kathismas.Add(kathisma);
            });
        }
Ejemplo n.º 2
0
        public static void AppendPsalmLink(this Kathisma kathisma, PsalmLink psalmLink)
        {
            var lastSlava = kathisma.SlavaElements.LastOrDefault();

            if (lastSlava == null)
            {
                lastSlava = new SlavaElement();
                kathisma.SlavaElements.Add(lastSlava);
            }
            lastSlava.PsalmLinks.Add(psalmLink);
        }
Ejemplo n.º 3
0
 public static void AppendNewSlava(this Kathisma kathisma)
 {
     if (kathisma.SlavaElements.Count < 3)
     {
         var slava = new SlavaElement();
         kathisma.SlavaElements.Add(slava);
     }
     else
     {
         //пошла 4-ая Слава - выдавать исключение?
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Добавляет новый элемент Славы к Кафизме
        /// </summary>
        /// <param name="kathisma"></param>
        /// <returns>Добавленную Славу</returns>
        public static SlavaElement AppendNewSlava(this Kathisma kathisma)
        {
            SlavaElement result = null;

            if (kathisma.SlavaElements.Count < 3)
            {
                result = new SlavaElement();
                kathisma.SlavaElements.Add(result);
            }
            else
            {
                //пошла 4-ая Слава - выдавать исключение?
            }
            return(result);
        }
Ejemplo n.º 5
0
        public static void AppendOrUpdatePsalmLink(this Kathisma kathisma, PsalmLink psalmLink)
        {
            var lastSlava = kathisma.SlavaElements.LastOrDefault();

            if (lastSlava == null)
            {
                lastSlava = kathisma.AppendNewSlava();
            }

            //ищем существующую PsalmLink
            var found = lastSlava.PsalmLinks.FirstOrDefault(c => c.Psalm.Number == psalmLink.Psalm.Number);

            if (found != null)
            {
                //обновляем
                found.StartStihos = psalmLink.StartStihos;
                found.EndStihos   = psalmLink.EndStihos;
            }
            else
            {
                //добавялем
                lastSlava.PsalmLinks.Add(psalmLink);
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Добавляет Кафизму или обновляет существующую, возвращая ее
 /// </summary>
 /// <param name="typiconEntity"></param>
 /// <param name="kathisma"></param>
 /// <returns></returns>
 public static Kathisma AppendKathisma(this TypiconEntity typiconEntity, Kathisma kathisma)
 {
     typiconEntity.Kathismas.Add(kathisma);
     return(kathisma);
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Осуществляет миграцию Кафизм на основании текстовых документов, а также существующих в БД псалмов
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="typiconEntity"></param>
        /// <exception cref="ResourceNotFoundException">В случае отсутствия Псалмов в БД</exception>
        public void MigrateKathismas(IPsalterReader reader, TypiconEntity typiconEntity)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("IPsalterReader in MigrateKathismas");
            }
            if (typiconEntity == null)
            {
                throw new ArgumentNullException("TypiconEntity in MigrateKathismas");
            }

            DeleteAllKathismas(typiconEntity);

            Kathisma  kathisma  = null;
            PsalmLink psalmLink = null;

            IPsalterElement currentElement = null;

            while (reader.Read())
            {
                switch (reader.ElementType)
                {
                case PsalterElementKind.Kathisma:
                    currentElement = reader.Element;
                    kathisma       = typiconEntity.AppendKathisma(reader.Element as Kathisma);
                    break;

                case PsalterElementKind.Psalm:
                    //если до этого читали Псалом, то добавляем его, очищая ссылки на стихи
                    if (currentElement is PsalmLink p)
                    {
                        ClearStihosIndexes(p);
                        kathisma?.AppendPsalmLink(p);
                    }
                    currentElement = reader.Element;
                    psalmLink      = CreatePsalmLink((reader.Element as Psalm).Number);
                    break;

                case PsalterElementKind.PsalmAnnotation:
                    //не нужна- ничего не делаем
                    break;

                case PsalterElementKind.PsalmText:
                    if (currentElement == null)
                    {
                        //значит пришли сюда после чтения "Славы"
                        //создаем новую ссылку на Псалом (17 кафизма)
                        psalmLink = CreatePsalmLink(psalmLink);
                    }
                    psalmLink?.AppendStihos(reader.Element as BookStihos);
                    currentElement = psalmLink;
                    break;

                case PsalterElementKind.Slava:
                    kathisma?.AppendNewSlava();
                    if (currentElement is PsalmLink pl)
                    {
                        kathisma?.AppendPsalmLink(pl);
                    }
                    currentElement = null;
                    break;
                }
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Добавляет Кафизму или обновляет существующую, возвращая ее
        /// </summary>
        /// <param name="typiconEntity"></param>
        /// <param name="kathisma"></param>
        /// <returns></returns>
        public static Kathisma AppendOrUpdateKathisma(this TypiconVersion typiconEntity, Kathisma kathisma)
        {
            var found = typiconEntity.Kathismas.FirstOrDefault(c => c.Number == kathisma.Number);

            if (found != null)
            {
                found.NumberName.Merge(kathisma.NumberName);

                return(found);
            }
            else
            {
                typiconEntity.Kathismas.Add(kathisma);

                return(kathisma);
            }
        }
        /// <summary>
        /// Осуществляет миграцию Кафизм на основании текстовых документов, а также существующих в БД псалмов
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="typiconEntity"></param>
        /// <param name="migrateOnlyKathismaName">Только лишь обновляет/добавляет имена у кафизм для заданного языка</param>
        /// <exception cref="ResourceNotFoundException">В случае отсутствия Псалмов в БД</exception>
        public void MigrateKathismas(IPsalterReader reader, TypiconVersion typiconEntity, bool migrateOnlyKathismaName = false)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("IPsalterReader in MigrateKathismas");
            }
            if (typiconEntity == null)
            {
                throw new ArgumentNullException("TypiconVersion in MigrateKathismas");
            }

            //Удаляем все кафизмы, если установлен флаг
            //if (clearBeforeMigration)
            //{
            //    DeleteAllKathismas(typiconEntity);
            //}

            Kathisma  kathisma  = null;
            PsalmLink psalmLink = null;

            IPsalterElement currentElement = null;

            while (reader.Read())
            {
                switch (reader.ElementType)
                {
                case PsalterElementKind.Kathisma:
                {
                    currentElement = reader.Element;
                    kathisma       = typiconEntity.AppendOrUpdateKathisma(reader.Element as Kathisma);
                    psalmLink      = null;
                }
                break;

                case PsalterElementKind.Psalm:
                {
                    if (!migrateOnlyKathismaName)
                    {
                        //если до этого читали Псалом, то добавляем его, очищая ссылки на стихи
                        if (psalmLink != null)
                        {
                            AppendAndClearPsalmLink(kathisma, psalmLink);
                        }
                        currentElement = reader.Element;
                        psalmLink      = CreatePsalmLink((reader.Element as Psalm).Number);
                    }
                }
                break;

                case PsalterElementKind.PsalmAnnotation:
                    //не нужна- ничего не делаем
                    break;

                case PsalterElementKind.PsalmText:
                {
                    if (!migrateOnlyKathismaName)
                    {
                        if (currentElement == null)
                        {
                            //значит пришли сюда после чтения "Славы"
                            //добавляем сформированную Ссылку
                            //и создаем новую ссылку на Псалом (17 кафизма)
                            if (psalmLink != null)
                            {
                                kathisma.AppendOrUpdatePsalmLink(psalmLink);
                            }
                            psalmLink = CreatePsalmLink(psalmLink);
                        }
                        psalmLink.AppendStihos(reader.Element as BookStihos);
                        currentElement = psalmLink;
                    }
                }
                break;

                case PsalterElementKind.Slava:
                {
                    if (!migrateOnlyKathismaName)
                    {
                        //Добавляем новую Славу
                        kathisma.AppendNewSlava();

                        //добавляем Ссылку
                        if (currentElement is PsalmLink p)
                        {
                            if (kathisma.SlavaElements.Count >= 3)
                            {
                                kathisma.AppendOrUpdatePsalmLink(p);
                            }
                        }

                        currentElement = null;
                    }
                }
                break;
                }
            }

            void AppendAndClearPsalmLink(Kathisma k, PsalmLink p)
            {
                //Пока убираем, потому как в текст Псалма будут входить и аннотации
                //ClearStihosIndexes(p);
                k.AppendOrUpdatePsalmLink(p);
            }
        }