Exemple #1
0
        private bool SaveSentence(string sentenceText, List <Word> words)
        {
            //TODO: в случае неудачи - убирать за собой
            foreach (ParsedWord word in words)
            {
                string wordText = word.GetAppropriateWordText();
                long   wordId   = SaveWords(word, wordText);
                if (IdValidator.IsInvalid(wordId))
                {
                    //не сохранять предложение, т.к. не все слова сохранены
                    return(false);
                }
            }
            //TODO: поискать предложение с такими же словами, если есть, то не добавлять

            //сохранить предложение
            long sentenceId = _sentencesQuery.GetOrCreate(_languageId, sentenceText);

            if (IdValidator.IsInvalid(sentenceId))
            {
                return(false);
            }

            bool result          = true;
            int  orderInSentence = 1;

            foreach (ParsedWord word in words)
            {
                long   wordId;
                string wordText = word.GetAppropriateWordText();
                if (!_wordsIdsByText.TryGetValue(wordText, out wordId))
                {
                    LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                        "TextProcessor.SaveSentence не удалось найти идентификатор для слова {0}, предложение {1}(идентификатор {2})!",
                        wordText, sentenceId, sentenceText);
                    result = false;
                    break;
                }

                string originalText = word.Text;
                if (!_sentenceWordsQuery.CreateOrUpdate(sentenceId, wordId, originalText, orderInSentence, word.Type))
                {
                    LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                        "TextProcessor.SaveSentence не удалось сохранить слово {0}(идентификатор {1}) для предложения {2}(идентификатор {3})!",
                        originalText, wordId, sentenceText, sentenceId);
                }
                orderInSentence++;
            }

            if (!_sentenceWordsQuery.DeleteGreaterOrEqualsOrderWords(sentenceId, orderInSentence))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "TextProcessor.SaveSentence не удалось удалить слова для предложения {0}(идентификатор {1}), у которых порядковый номер больше или равен {2}!",
                    sentenceText, sentenceId, orderInSentence);
            }
            return(result);
        }
        private bool CreateExamples(IEnumerable <ComparisonRuleExampleForUser> ruleExamples,
                                    ComparisonRuleForUser newComparisonRuleForUser,
                                    StudyLanguageContext c)
        {
            bool result           = true;
            int  orderRuleExample = 1;

            foreach (ComparisonRuleExampleForUser ruleExample in ruleExamples)
            {
                SourceWithTranslation example = ruleExample.Example;
                SourceWithTranslation sentenceWithTranslation =
                    _sentencesQuery.GetOrCreate(SentenceType.ComparisonExample,
                                                example.Source,
                                                example.Translation,
                                                null);
                long sentenceTranslationId = sentenceWithTranslation.Id;
                if (IdValidator.IsInvalid(sentenceTranslationId))
                {
                    LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                        "ComparisonsQuery.GetOrCreate не удалось создать предложения примера! " +
                        "Предложение: {0}, перевод предложения {1}",
                        sentenceWithTranslation.Source.Text, sentenceWithTranslation.Translation.Text);
                    result = false;
                    continue;
                }

                long ruleId = newComparisonRuleForUser.Id;
                ComparisonRuleExample comparisonRuleExample = GetOrCreateComparisonRuleExample(ruleId,
                                                                                               sentenceTranslationId,
                                                                                               ruleExample.Description,
                                                                                               orderRuleExample++, c);

                if (IdValidator.IsInvalid(comparisonRuleExample.Id))
                {
                    LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                        "ComparisonsQuery.GetOrCreate не удалось создать пример для правила сравнения! " +
                        "Id примера: {0}, sentenceWithTranslationId {1}",
                        ruleId, sentenceTranslationId);
                    result = false;
                    continue;
                }

                var exampleForUser = new ComparisonRuleExampleForUser(comparisonRuleExample, sentenceWithTranslation);
                newComparisonRuleForUser.AddExample(exampleForUser);
            }
            return(result);
        }