Exemple #1
0
        /// <summary>
        /// Делает опции с реальными сущностями.
        /// </summary>
        protected SearchOptions LoadFromDTO(SearchOptionsDTO dto, ISession session)
        {
            Contract.Requires(dto != null);
            Contract.Ensures(dto.GetAllChildrenCount() == Contract.Result <SearchOptions>().GetAllChildrenCount());

            var result = new SearchOptions();

            // some options
            bool sscopeNotParsed = false;
            bool grOpNotParsed   = false;
            QueryGroupOperator groupOperator;

            if (!Enum.TryParse <QueryGroupOperator>(dto.GroupOperator, out groupOperator))
            {
                groupOperator = QueryGroupOperator.All;
                grOpNotParsed = true;
            }
            SearchScope sscope;

            if (!Enum.TryParse <SearchScope>(dto.SearchScope, out sscope))
            {
                sscope          = SearchScope.HealthRecord;
                sscopeNotParsed = true;
            }

            result.GroupOperator = groupOperator;
            result.SearchScope   = sscope;
            result.MinAny        = dto.MinAny;
            result.WithConf      = dto.WithConf;

            // words
            var allWordsTitles = dto.CWordsAll.Union(dto.CWordsAny).Union(dto.CWordsNot).Select(x => x.Title);
            var words          = WordQuery.ByTitles(session)(allWordsTitles);

            bool confNotParsedAll;
            bool confNotParsedAny;
            bool confNotParsedNot;

            result.CWordsAll = new List <Confindencable <Word> >(SelectConfWords(dto.CWordsAll, words, out confNotParsedAll));
            result.CWordsAny = new List <Confindencable <Word> >(SelectConfWords(dto.CWordsAny, words, out confNotParsedAny));
            result.CWordsNot = new List <Confindencable <Word> >(SelectConfWords(dto.CWordsNot, words, out confNotParsedNot));

            // measures
            bool mWordsMissed;
            bool uomsMissed;
            var  mWords = LoadMeasureWords(dto, session, out mWordsMissed);
            var  uoms   = LoadUoms(dto, session, out uomsMissed);

            bool mopNotParsed;
            var  mAll = SelectMeasures(dto.MeasuresAll, mWords, uoms, out mopNotParsed);
            var  mAny = SelectMeasures(dto.MeasuresAny, mWords, uoms, out mopNotParsed);

            result.MeasuresAll = new List <MeasureOp>(mAll);
            result.MeasuresAny = new List <MeasureOp>(mAny);

            // cats
            var cats = CategoryQuery.ByTitles(session)(dto.Categories.Select(x => x.Title));

            result.Categories = new List <HrCategory>(cats);

            // childs
            dto.Children.ForAll(x =>
            {
                var child = this.LoadFromDTO(x, session);
                result.Children.Add(child);
            });

            var smthMissed =
                result.CWordsAll.Count != dto.CWordsAll.Count ||
                result.CWordsAny.Count != dto.CWordsAny.Count ||
                result.CWordsNot.Count != dto.CWordsNot.Count ||
                result.MeasuresAll.Count != dto.MeasuresAll.Count ||
                result.MeasuresAny.Count != dto.MeasuresAny.Count ||
                result.Categories.Count != dto.Categories.Count ||
                mWordsMissed ||
                uomsMissed;

            var notParsed = confNotParsedAll || confNotParsedAny || confNotParsedNot || sscopeNotParsed || grOpNotParsed || mopNotParsed;

            if (smthMissed || notParsed || result.Children.Any(x => x.PartialLoaded))
            {
                result.SetPartialLoaded();
            }

            return(result);
        }