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); } }
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); } }
public static string GetVersionedFieldIndexColumnName(this QueryPartRecord queryPartRecord) { return(queryPartRecord == null? QueryVersionScopeOptions.Published.ToVersionedFieldIndexColumnName() : queryPartRecord.VersionScope.ToVersionedFieldIndexColumnName()); }
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); }