Example #1
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);
            }
        }