public IEnumerable <IHqlQuery> GetContentQueries(QueryPartRecord queryRecord, IEnumerable <SortCriterionRecord> sortCriteria, IContent container)
        {
            Dictionary <string, object> filtersDictionary = new Dictionary <string, object>();

            if (container != null)
            {
                filtersDictionary.Add("Content", container);
            }

            // pre-executing all groups
            foreach (var group in queryRecord.FilterGroups)
            {
                var contentQuery = this.contentManager.HqlQuery().ForVersion(VersionOptions.Published);

                // iterate over each filter to apply the alterations to the query object
                foreach (var filter in group.Filters)
                {
                    var     tokenizedState = _tokenizer.Replace(filter.State, filtersDictionary);
                    dynamic state          = FormParametersHelper.ToDynamic(tokenizedState);
                    contentQuery = this.ApplyFilter(queryRecord, contentQuery, filter.Category, filter.Type, state);
                }

                yield return(contentQuery);
            }
        }
        public IHqlQuery ApplyFilter(QueryPartRecord queryRecord, IHqlQuery contentQuery, string category, string type, dynamic state)
        {
            var availableFilters = projectionManager.DescribeFilters().ToList();

            // look for the specific filter component
            var descriptor = availableFilters
                             .SelectMany(x => x.Descriptors)
                             .FirstOrDefault(x => x.Category == category && x.Type == type);

            // ignore unfound descriptors
            if (descriptor == null)
            {
                return(contentQuery);
            }

            var filterContext = new FilterContext
            {
                Query           = contentQuery,
                State           = state,
                QueryPartRecord = queryRecord
            };

            // apply alteration
            descriptor.Filter(filterContext);

            return(filterContext.Query);
        }
        public IEnumerable <IHqlQuery> GetContentQueries(QueryPartRecord queryRecord, IEnumerable <SortCriterionRecord> sortCriteria, IContent container)
        {
            var availableSortCriteria = DescribeSortCriteria().ToList();

            Dictionary <string, object> filtersDictionary = new Dictionary <string, object>();

            if (container != null)
            {
                filtersDictionary.Add("Content", container);
            }

            // pre-executing all groups
            foreach (var group in queryRecord.FilterGroups)
            {
                var contentQuery = _contentManager.HqlQuery().ForVersion(VersionOptions.Published);

                // iterate over each filter to apply the alterations to the query object
                foreach (var filter in group.Filters)
                {
                    var     tokenizedState = _tokenizer.Replace(filter.State, filtersDictionary);
                    dynamic state          = FormParametersHelper.ToDynamic(tokenizedState);
                    contentQuery = this.ApplyFilter(contentQuery, filter.Category, filter.Type, state);
                }

                var sortModel = GetSortModelFromRequest(this.requestContext);

                if (sortModel != null)
                {
                    dynamic state = new Composite();
                    state.Sort   = sortModel.Direction;
                    contentQuery = this.AddSortCriterion(sortModel.Category, sortModel.Type, state, contentQuery);
                }
                else if (sortCriteria != null)
                {
                    // iterate over each sort criteria to apply the alternatives to the query object
                    foreach (var sortCriterion in sortCriteria)
                    {
                        var state = FormParametersHelper.ToDynamic(sortCriterion.State);
                        contentQuery = this.AddSortCriterion(sortCriterion.Category, sortCriterion.Type, state, contentQuery);
                    }
                }

                yield return(contentQuery);
            }
        }
Example #4
0
        public IEnumerable <IHqlQuery> GetContentQueries(QueryPartRecord queryRecord, IEnumerable <SortCriterionRecord> sortCriteria, Dictionary <string, object> tokens)
        {
            var availableFilters      = DescribeFilters().ToList();
            var availableSortCriteria = DescribeSortCriteria().ToList();

            if (tokens == null)
            {
                tokens = new Dictionary <string, object>();
            }

            // pre-executing all groups
            var versionScope = queryRecord.VersionScope;

            foreach (var group in queryRecord.FilterGroups)
            {
                IHqlQuery contentQuery;
                if (versionScope == QueryVersionScopeOptions.Latest)
                {
                    contentQuery = _contentManager.HqlQuery().ForVersion(VersionOptions.Latest);
                }
                else
                {
                    contentQuery = _contentManager.HqlQuery().ForVersion(VersionOptions.Published);
                }

                // iterate over each filter to apply the alterations to the query object
                foreach (var filter in group.Filters)
                {
                    var tokenizedState = _tokenizer.Replace(filter.State, tokens);
                    var filterContext  = new FilterContext {
                        Query           = contentQuery,
                        State           = FormParametersHelper.ToDynamic(tokenizedState),
                        QueryPartRecord = queryRecord
                    };

                    string category = filter.Category;
                    string type     = filter.Type;

                    // look for the specific filter component
                    var descriptor = availableFilters
                                     .SelectMany(x => x.Descriptors)
                                     .FirstOrDefault(x => x.Category == category && x.Type == type);

                    // ignore unfound descriptors
                    if (descriptor == null)
                    {
                        continue;
                    }

                    // apply alteration
                    descriptor.Filter(filterContext);

                    contentQuery = filterContext.Query;
                }

                // iterate over each sort criteria to apply the alterations to the query object
                foreach (var sortCriterion in sortCriteria.OrderBy(s => s.Position))
                {
                    var sortCriterionContext = new SortCriterionContext {
                        Query           = contentQuery,
                        State           = FormParametersHelper.ToDynamic(sortCriterion.State),
                        QueryPartRecord = queryRecord
                    };

                    string category = sortCriterion.Category;
                    string type     = sortCriterion.Type;

                    // look for the specific filter component
                    var descriptor = availableSortCriteria
                                     .SelectMany(x => x.Descriptors)
                                     .FirstOrDefault(x => x.Category == category && x.Type == type);

                    // ignore unfound descriptors
                    if (descriptor == null)
                    {
                        continue;
                    }

                    // apply alteration
                    descriptor.Sort(sortCriterionContext);

                    contentQuery = sortCriterionContext.Query;
                }


                yield return(contentQuery);
            }
        }
Example #5
0
 public static string GetVersionedFieldIndexColumnName(this QueryPartRecord queryPartRecord)
 {
     return(queryPartRecord == null?
            QueryVersionScopeOptions.Published.ToVersionedFieldIndexColumnName() :
                queryPartRecord.VersionScope.ToVersionedFieldIndexColumnName());
 }
Example #6
0
        protected SortCriterionRecord CreateSortRecord(string category, string type, string state, QueryPartRecord queryPartRecord)
        {
            SortCriterionRecord sortRecord = new SortCriterionRecord();

            sortRecord.Category        = category;
            sortRecord.Type            = type;
            sortRecord.State           = state;
            sortRecord.QueryPartRecord = queryPartRecord;
            queryPartRecord.SortCriteria.Add(sortRecord);
            sortRecord.Position = 0;
            this.sortRepository.Create(sortRecord);

            return(sortRecord);
        }