Example #1
0
        public void CreateARangeQueryWithUsingSolrMinMaxValues()
        {
            var rangeQuery = new RangeQuery("500", "1000");

            Assert.AreEqual("500", rangeQuery.SolrMin);
            Assert.AreEqual("1000", rangeQuery.SolrMax);
            Assert.AreEqual(500m, rangeQuery.Min);
            Assert.AreEqual(1000m, rangeQuery.Max);
            Assert.AreEqual("500-1000", rangeQuery.Label);
            Assert.AreEqual("[500 TO 1000]", rangeQuery.Query);
        }
Example #2
0
        public void CreateARangeQueryWithUsingMinMaxValuesWithMinBeingAWildCard()
        {
            var rangeQuery = new RangeQuery(decimal.MinValue, 500m);

            Assert.AreEqual("*", rangeQuery.SolrMin);
            Assert.AreEqual("500", rangeQuery.SolrMax);
            Assert.AreEqual(decimal.MinValue, rangeQuery.Min);
            Assert.AreEqual(500m, rangeQuery.Max);
            Assert.AreEqual("*-500", rangeQuery.Label);
            Assert.AreEqual("[* TO 500]", rangeQuery.Query);
        }
Example #3
0
        public void CreateARangeQueryWithUsingMinMaxValuesWithMaxBeingAWildCard()
        {
            var rangeQuery = new RangeQuery(500m, decimal.MaxValue);

            Assert.AreEqual("500", rangeQuery.SolrMin);
            Assert.AreEqual("*", rangeQuery.SolrMax);
            Assert.AreEqual(500m, rangeQuery.Min);
            Assert.AreEqual(decimal.MaxValue, rangeQuery.Max);
            Assert.AreEqual("500-*", rangeQuery.Label);
            Assert.AreEqual("[500 TO *]", rangeQuery.Query);
        }
Example #4
0
        public Constraint(string name,
            RangeQuery range,
            RangeQuery[] appliedRanges,
            NameValueCollection queryStringBuilder,
            string smallRangeQuerystringKey,
            string largeRangeQuerystringKey,
            KeyValuePair<string, int> facetQueryResult,
            bool isRuledOut = false)
        {
            Name = name;
            Count = facetQueryResult.Value;
            IsApplied = appliedRanges.Contains(range);
            IsDisabled = isRuledOut || facetQueryResult.Value == 0;

            if (IsDisabled)
            {
                Url = string.Empty;
            }
            else
            {
                var constraintsQueryStringBuilder = HttpUtility.ParseQueryString(string.Empty);
                constraintsQueryStringBuilder.Add(queryStringBuilder);

                if (IsApplied)
                {
                    foreach (var appliedRange in appliedRanges.Where(appliedRange => appliedRange != range))
                    {
                        constraintsQueryStringBuilder.Add(smallRangeQuerystringKey, appliedRange.SolrMin);
                        constraintsQueryStringBuilder.Add(largeRangeQuerystringKey, appliedRange.SolrMax);
                    }
                }
                else
                {
                    constraintsQueryStringBuilder.Add(smallRangeQuerystringKey, range.SolrMin);
                    constraintsQueryStringBuilder.Add(largeRangeQuerystringKey, range.SolrMax);

                    foreach (var appliedRange in appliedRanges)
                    {
                        constraintsQueryStringBuilder.Add(smallRangeQuerystringKey, appliedRange.SolrMin);
                        constraintsQueryStringBuilder.Add(largeRangeQuerystringKey, appliedRange.SolrMax);
                    }
                }

                Url = constraintsQueryStringBuilder.Count == 0
                    ? "/"
                    : string.Format("/?{0}", constraintsQueryStringBuilder);
            }
        }
Example #5
0
 public FacetViewModel(RangeQuery appliedRange, params Constraint[] constraints)
 {
     IsFreeFormSearch = true;
     Constraints = constraints;
     FreeSearchMinimumValue = appliedRange.SolrMin == "*" ? string.Empty : appliedRange.Min.ToString(CultureInfo.InvariantCulture);
     FreeSearchMaximumValue = appliedRange.SolrMax == "*" ? string.Empty : appliedRange.Max.ToString(CultureInfo.InvariantCulture);
 }
Example #6
0
 public bool Equals(RangeQuery url)
 {
     return (object)url != null && Label.Equals(url.Label, StringComparison.OrdinalIgnoreCase);
 }
Example #7
0
 public static bool IsRuledOutConstraint(KeyValuePair<string, int> query, RangeQuery range)
 {
     return GetLabel(query) == BuildRuledOutLabel(range.Label);
 }
Example #8
0
 public static bool IsRuledInConstraint(KeyValuePair<string, int> query, RangeQuery range)
 {
     return GetLabel(query) == range.Label;
 }
Example #9
0
        public void CreateATwoRangeQueryThatAreNotEqual()
        {
            var rangeQueryOne = new RangeQuery(500m, 1000m);
            var rangeQueryTwo = new RangeQuery(501m, 1000m);

            Assert.IsFalse(rangeQueryOne.Equals(rangeQueryTwo));
            Assert.IsFalse(rangeQueryOne == rangeQueryTwo);
        }
Example #10
0
        protected RangeFacetBuilder(NameValueCollection querystring,
            string solrField,
            string constraintKey,
            string smallRangeQuerystringKey,
            string largeRangeQuerystringKey,
            string smallFreeRangeQuerystringKey,
            string largeFreeRangeQuerystringKey,
            bool singleSelection = false,
            params RangeQuery[] ranges)
        {
            _solrField = solrField;
            _singleSelection = singleSelection;
            _smallRangeQuerystringKey = smallRangeQuerystringKey;
            _largeRangeQuerystringKey = largeRangeQuerystringKey;
            _filterQueryTag = string.Format("{0}filter", constraintKey);

            _ranges = ranges
                .OrderBy(range => range.Min)
                .ToArray();

            string[] mins;
            string[] maxs;

            if (AttemptingToPeformASelectionRangeSearch(querystring, _smallRangeQuerystringKey,
                _largeRangeQuerystringKey, out mins, out maxs))
            {
                _appliedRanges = mins
                    .Zip(maxs, (min, max) => new RangeQuery(min, max))
                    .Where(ranges.Contains)
                    .OrderBy(range => range.Min)
                    .ToArray();

                if (_singleSelection)
                {
                    _appliedRanges = _appliedRanges
                        .Take(1)
                        .ToArray();
                }

                if (FacetIsApplied())
                {
                    return;
                }
            }

            string minimumFreeRangeSearch;
            string maximumFreeRangeSearch;

            if (!AttemptingToPerformAFreeRangeSearch(querystring, smallFreeRangeQuerystringKey,
                largeFreeRangeQuerystringKey, out minimumFreeRangeSearch, out maximumFreeRangeSearch))
            {
                return;
            }

            _freeFormSearch = true;

            var rangeQuery = new RangeQuery(minimumFreeRangeSearch, maximumFreeRangeSearch);

            _ranges = new[] { rangeQuery };
            _appliedRanges = new[] { rangeQuery };
        }