示例#1
0
        private static ComparisonItem GetOrCreateComparisonItem(ComparisonItemForUser comparisonItemForUser,
                                                                long groupComparisonId,
                                                                int order,
                                                                StudyLanguageContext c)
        {
            ComparisonItem comparisonItem =
                c.ComparisonItem.FirstOrDefault(
                    e => e.GroupComparisonId == groupComparisonId && e.Title == comparisonItemForUser.Title);

            if (comparisonItem == null)
            {
                comparisonItem = new ComparisonItem {
                    GroupComparisonId = groupComparisonId,
                    Title             = comparisonItemForUser.Title
                };
                c.ComparisonItem.Add(comparisonItem);
            }

            comparisonItem.TitleTranslation = comparisonItemForUser.TitleTranslated;
            comparisonItem.Description      = comparisonItemForUser.Description;
            comparisonItem.Order            = order;
            c.SaveChanges();

            return(comparisonItem);
        }
示例#2
0
        public void Create(string fileName)
        {
            if (!_isLoaded)
            {
                _isLoaded = true;
                Load();
            }

            var       reader      = new StreamReader(fileName, Encoding.UTF8);
            XDocument xDocument   = XDocument.Load(reader);
            XElement  xComparison = xDocument.Element("comparison");
            string    title       = GetChildElementValue(xComparison, "title");
            string    description = GetChildElementValue(xComparison, "description");

            var comparisonForUser = new ComparisonForUser(TextFormatter.FirstUpperCharAndTrim(title),
                                                          TextFormatter.FirstUpperCharAndTrim(description));

            IEnumerable <XElement> info = GetChildElements(xComparison, "additionalInfo");

            foreach (XElement xElement in info.Elements())
            {
                var    type  = (AdditionalType)Enum.Parse(typeof(AdditionalType), xElement.Name.ToString());
                string value = TextFormatter.FirstUpperCharAndTrim(xElement.Value);
                comparisonForUser.AddAdditional(type, value);
            }

            XElement xItems = GetChildElement(xComparison, "items");

            foreach (XElement xItem in GetChildElements(xItems, "item"))
            {
                ComparisonItemForUser comparisonItem = GetComparisonItemForUser(xItem);
                comparisonForUser.AddItem(comparisonItem);
            }

            var comparisonsQuery = new ComparisonsQuery(_englishId);
            ComparisonForUser savedComparisonForUser = comparisonsQuery.GetOrCreate(comparisonForUser);

            if (savedComparisonForUser != null)
            {
                Console.WriteLine("Сохранена группа сравнений {0}", fileName);
            }
            else
            {
                Console.WriteLine("Не удалось сохранить группу сравнений {0}", fileName);
            }
        }
示例#3
0
        private ComparisonItemForUser GetComparisonItemForUser(XElement xItem)
        {
            string title           = GetChildElementValue(xItem, "title");
            string titleTranslated = GetChildElementValue(xItem, "titleTranslated");
            string description     = GetChildElementValue(xItem, "description");

            var comparisonItem = new ComparisonItemForUser(TextFormatter.ToLowerAndNotTouchFirstCharWords(title),
                                                           TextFormatter.ToLowerAndNotTouchFirstCharWords(
                                                               titleTranslated),
                                                           TextFormatter.FirstUpperCharAndTrim(description));
            XElement xRules = GetChildElement(xItem, "rules");

            foreach (XElement xRule in GetChildElements(xRules, "rule"))
            {
                ComparisonRuleForUser rule = GetComparisonRuleForUser(xRule);
                comparisonItem.AddRule(rule);
            }

            return(comparisonItem);
        }
示例#4
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);
        }
示例#5
0
        public ComparisonForUser GetOrCreate(ComparisonForUser comparisonForUser)
        {
            if (!comparisonForUser.IsValid())
            {
                return(null);
            }

            bool isSuccess           = true;
            ComparisonForUser result = null;

            Adapter.ActionByContext(c => {
                GroupComparison groupComparison = GetOrCreateGroupComparison(comparisonForUser, c);
                if (IdValidator.IsInvalid(groupComparison.Id))
                {
                    LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                        "ComparisonsQuery.GetOrCreate не удалось создать! Название: {0}, описание: {1}",
                        comparisonForUser.Title,
                        comparisonForUser.Description);
                    isSuccess = false;
                    return;
                }
                result = new ComparisonForUser(groupComparison);

                int orderItem = 1;
                foreach (ComparisonItemForUser comparisonItemForUser in comparisonForUser.Items)
                {
                    ComparisonItem comparisonItem = GetOrCreateComparisonItem(comparisonItemForUser, groupComparison.Id,
                                                                              orderItem++, c);
                    if (IdValidator.IsInvalid(comparisonItem.Id))
                    {
                        LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                            "ComparisonsQuery.GetOrCreate не удалось создать пункт для сравнения! " +
                            "Id сравнения: {0}, название {1}, перевод названия {2}, описание {3}",
                            groupComparison.Id, comparisonItemForUser.Title, comparisonItemForUser.TitleTranslated,
                            comparisonItemForUser.Description);
                        isSuccess = false;
                        continue;
                    }

                    var newComparisonItemForUser = new ComparisonItemForUser(comparisonItem);
                    result.AddItem(newComparisonItemForUser);

                    int orderRule = 1;
                    foreach (ComparisonRuleForUser comparisonRuleForUser in comparisonItemForUser.Rules)
                    {
                        ComparisonRule comparisonRule = GetOrCreateComparisonRule(comparisonRuleForUser,
                                                                                  comparisonItem.Id, orderRule++, c);
                        long ruleId = comparisonRule.Id;
                        if (IdValidator.IsInvalid(ruleId))
                        {
                            LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                                "ComparisonsQuery.GetOrCreate не удалось создать правило для сравнения! " +
                                "Id пункта сравнения: {0}, описание {1}",
                                comparisonItem.Id, comparisonRule.Description);
                            isSuccess = false;
                            continue;
                        }

                        var newComparisonRuleForUser = new ComparisonRuleForUser(comparisonRule);
                        newComparisonItemForUser.AddRule(newComparisonRuleForUser);

                        isSuccess = EnumerableValidator.IsNotEmpty(comparisonRuleForUser.Examples) &&
                                    CreateExamples(comparisonRuleForUser.Examples, newComparisonRuleForUser, c);
                    }
                }

                if (isSuccess)
                {
                    //удалить пункты, правила, примеры, которые не были переданы в этот раз
                    DeleteOldInfos(c, result);
                }
            });
            return(isSuccess && result != null && result.IsValid() ? result : null);
        }