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; } } }
/// <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); } }