Пример #1
0
        public void MigratePsalms(IPsalterReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("IPsalterReader in MigratePsalms");
            }

            Psalm currentPsalm = null;

            //IPsalterElement currentElement = null;

            while (reader.Read())
            {
                switch (reader.ElementType)
                {
                case PsalterElementKind.Kathisma:
                    //не нужна- ничего не делаем
                    break;

                case PsalterElementKind.Psalm:
                    //если до этого читали Псалом, то добавляем его в базу
                    if (currentPsalm != null)
                    {
                        InsertOrUpdatePsalm(currentPsalm);
                    }
                    currentPsalm = GetPsalm(reader.Element as Psalm);
                    break;

                case PsalterElementKind.PsalmAnnotation:
                    currentPsalm.GetElement(Serializer).Annotation.Merge(reader.Element as BookStihos);
                    break;

                case PsalterElementKind.PsalmText:
                    currentPsalm.GetElement(Serializer).Text.Merge(reader.Element as BookStihos);
                    break;

                case PsalterElementKind.Slava:
                    //не нужна- ничего не делаем
                    if (currentPsalm != null)
                    {
                        InsertOrUpdatePsalm(currentPsalm);
                    }
                    break;
                }
            }
        }
Пример #2
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;
                }
            }
        }
        /// <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);
            }
        }