Example #1
0
        private ComparisonRuleForUser GetComparisonRuleForUser(XElement xRule)
        {
            string description = GetChildElementValue(xRule, "description");
            var    rule        = new ComparisonRuleForUser(TextFormatter.FirstUpperCharAndTrim(description));

            XElement xExamples = GetChildElement(xRule, "examples");

            foreach (XElement xExample in GetChildElements(xExamples, "example"))
            {
                ComparisonRuleExampleForUser example = GetComparisonExampleForUser(xExample);
                rule.AddExample(example);
            }

            return(rule);
        }
Example #2
0
        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);
        }
Example #3
0
        /// <summary>
        /// Получает группу сравнения по названию
        /// </summary>
        /// <param name="userLanguages">языковые настройки пользователя</param>
        /// <param name="title">название представления</param>
        /// <returns>представление или null если не найдено</returns>
        public ComparisonForUser GetWithFullInfo(UserLanguages userLanguages, string title)
        {
            long sourceLanguageId      = userLanguages.From.Id;
            long translationLanguageId = userLanguages.To.Id;

            ComparisonForUser result = Adapter.ReadByContext(c => {
                var comparisonsQuery = (from gc in c.GroupComparison
                                        join ci in c.ComparisonItem on gc.Id equals ci.GroupComparisonId
                                        join cr in c.ComparisonRule on ci.Id equals cr.ComparisonItemId
                                        join cre in c.ComparisonRuleExample on cr.Id equals cre.ComparisonRuleId
                                        join st in c.SentenceTranslation on cre.SentenceTranslationId equals st.Id
                                        join s1 in c.Sentence on st.SentenceId1 equals s1.Id
                                        join s2 in c.Sentence on st.SentenceId2 equals s2.Id
                                        where gc.Title == title && gc.LanguageId == _languageId &&
                                        ((s1.LanguageId == sourceLanguageId &&
                                          s2.LanguageId == translationLanguageId)
                                         ||
                                         (s1.LanguageId == translationLanguageId &&
                                          s2.LanguageId == sourceLanguageId))
                                        orderby ci.Order, cr.Order, cre.Order
                                        select new { gc, ci, cr, cre, st, s1, s2 });
                var comparisonsInfos = comparisonsQuery.AsEnumerable();
                var firstComparison  = comparisonsInfos.FirstOrDefault();
                if (firstComparison == null)
                {
                    return(null);
                }
                var innerResult           = new ComparisonForUser(firstComparison.gc);
                long prevComparisonItemId = IdValidator.INVALID_ID;
                long prevComparisonRuleId = IdValidator.INVALID_ID;
                ComparisonItemForUser comparisonItemForUser = null;
                ComparisonRuleForUser comparisonRuleForUser = null;
                foreach (var comparisonInfo in comparisonsInfos)
                {
                    ComparisonItem comparisonItem = comparisonInfo.ci;
                    if (prevComparisonItemId != comparisonItem.Id)
                    {
                        prevComparisonItemId = comparisonItem.Id;

                        if (comparisonItemForUser != null)
                        {
                            innerResult.AddItem(comparisonItemForUser);
                        }

                        comparisonItemForUser = new ComparisonItemForUser(comparisonItem);
                    }

                    ComparisonRule comparisonRule = comparisonInfo.cr;
                    if (comparisonRule.Id != prevComparisonRuleId)
                    {
                        prevComparisonRuleId = comparisonRule.Id;

                        comparisonRuleForUser = new ComparisonRuleForUser(comparisonRule);
                        comparisonItemForUser.AddRule(comparisonRuleForUser);
                    }

                    SourceWithTranslation sourceWithTranslation =
                        ConverterEntities.ConvertToSourceWithTranslation(comparisonInfo.st.Id,
                                                                         comparisonInfo.st.Image,
                                                                         comparisonInfo.s1.LanguageId,
                                                                         comparisonInfo.s1,
                                                                         comparisonInfo.s2);
                    sourceWithTranslation.IsCurrent = false;
                    var example = new ComparisonRuleExampleForUser(comparisonInfo.cre, sourceWithTranslation);
                    comparisonRuleForUser.AddExample(example);
                }

                if (comparisonItemForUser != null)
                {
                    innerResult.AddItem(comparisonItemForUser);
                }

                return(innerResult);
            });

            return(result);
        }