Ejemplo n.º 1
0
        public void WithTwoBall_ReturnOrderedListWithTwoBall()
        {
            Sort actual = new Sort();

            actual.Add(20);
            actual.Add(10);

            List <int> expected = new List <int>();

            expected.Add(10);
            expected.Add(20);

            Assert.AreEqual(expected, actual.rack);
        }
Ejemplo n.º 2
0
 public Query <TBase, TFilter> AddSort(Expression <Func <TBase, object> > property, SortOrder order = SortOrder.Ascending)
 {
     Sort.Add(new SortItem <TBase> {
         Order = order, Property = property
     });
     return(this);
 }
Ejemplo n.º 3
0
 private void addNonEmptySort(string value, SortOrder sortOrder)
 {
     if (String.IsNullOrEmpty(value))
     {
         throw Error.Format("Invalid {0} value: it cannot be empty".FormatWith(SEARCH_PARAM_SORT), null);
     }
     Sort.Add(Tuple.Create(value, sortOrder));
 }
Ejemplo n.º 4
0
 private void addNonEmptySort(string[] elements)
 {
     foreach (var e in elements)
     {
         var newTuple = e[0] == '-' ? Tuple.Create(e.Substring(1), SortOrder.Descending) :
                        Tuple.Create(e, SortOrder.Ascending);
         Sort.Add(newTuple);
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Add a parameter with a given name and value.
        /// </summary>
        /// <param name="name">The name of the parameter</param>
        /// <param name="value">The value of the parameter as a FHIR datatype or Resource</param>
        /// <returns>this (Parameters), so you can chain AddParameter calls</returns>
        public SearchParams Add(string name, string value)
        {
            if (name == null)
            {
                throw Error.ArgumentNull("name");
            }
            if (value == null)
            {
                throw Error.ArgumentNull("value");
            }
            if (String.IsNullOrEmpty(value))
            {
                throw Error.Argument("value", "value cannot be empty");
            }

            if (name == SEARCH_PARAM_QUERY)
            {
                Query = value;
            }
            else if (name == SEARCH_PARAM_TEXT)
            {
                Text = value;
            }
            else if (name == SEARCH_PARAM_CONTENT)
            {
                Content = value;
            }
            else if (name == SEARCH_PARAM_COUNT)
            {
                Count = Int32.Parse(value);
            }
            else if (name == SEARCH_PARAM_INCLUDE)
            {
                Include.Add(value);
            }
            else if (name == SEARCH_PARAM_REVINCLUDE)
            {
                RevInclude.Add(value);
            }
            else if (name.StartsWith(SEARCH_PARAM_SORT + SEARCH_MODIFIERSEPARATOR))
            {
                var order = name.Substring(SEARCH_PARAM_SORT.Length + 1).ToLower();

                if (order.StartsWith("asc"))
                {
                    Sort.Add(Tuple.Create(value, SortOrder.Ascending));
                }
                else if (order.StartsWith("desc"))
                {
                    Sort.Add(Tuple.Create(value, SortOrder.Descending));
                }
                else
                {
                    throw Error.Format("Cannot parse sort order '{0}'", null, order);
                }
            }
            else if (name == SEARCH_PARAM_SUMMARY)
            {
                SummaryType st = SummaryType.False;
                if (Enum.TryParse <SummaryType>(value, ignoreCase: true, result: out st))
                {
                    Summary = st;
                }
                else
                {
                    throw Error.Format("Cannot parse summary value '{0}'", null, value);
                }
            }
            else if (name == SEARCH_PARAM_FILTER)
            {
                Filter = value;
            }
            else if (name == SEARCH_PARAM_CONTAINED)
            {
                if (SEARCH_CONTAINED_TRUE.Equals(value))
                {
                    Contained = ContainedSearch.True;
                }
                else if (SEARCH_CONTAINED_FALSE.Equals(value))
                {
                    Contained = ContainedSearch.False;
                }
                else if (SEARCH_CONTAINED_BOTH.Equals(value))
                {
                    Contained = ContainedSearch.Both;
                }
                else
                {
                    throw Error.Format("Cannot parse contained value '{0}'", null, value);
                }
            }
            else if (name == SEARCH_PARAM_CONTAINEDTYPE)
            {
                if (SEARCH_CONTAINED_TYPE_CONTAINED.Equals(value))
                {
                    ContainedType = ContainedResult.Contained;
                }
                else if (SEARCH_CONTAINED_TYPE_CONTAINER.Equals(value))
                {
                    ContainedType = ContainedResult.Container;
                }
                else
                {
                    throw Error.Format("Cannot parse containedType value '{0}'", null, value);
                }
            }
            else if (name == SEARCH_PARAM_ELEMENTS)
            {
                Elements.AddRange(value.Split(','));
            }
            else
            {
                Parameters.Add(Tuple.Create(name, value));
            }

            return(this);
        }
Ejemplo n.º 6
0
 internal void AddSort(Sort orderBy, SortDirection so)
 {
     orderBy.Add(_col, so);
 }
        private void BindSortListBox()
        {
            Sort s = new Sort();
            Binding sortBinding = new Binding();

            foreach (Item item in _query.Sort)
            {
                foreach (string value in _query.GetFriendlyMetricsAndDimensions)
                {
                    if (item.Value.Contains(value))
                    {
                        s.Add(item);
                        break;
                    }
                }
            }
            _query.Sort = s;
            sortBinding.Source = s;
            sortingBox.SetBinding(ListBox.ItemsSourceProperty, sortBinding);
        }
Ejemplo n.º 8
0
        protected override Expression VisitMethodCall(MethodCallExpression node)
        {
            Trace(MethodBase.GetCurrentMethod(), node);
            Expression visited = null;

            try
            {
                visited = base.VisitMethodCall(node);
            }
            catch (SnNotSupportedException e)
            {
                throw SnExpression.CallingAsEnunerableExpectedError(node.Method.Name, e);
            }

            if (!(visited is MethodCallExpression methodCallExpr))
            {
                throw new NotSupportedException("#VisitMethodCall if visited is not null");
            }

            var methodName = methodCallExpr.Method.Name;

            switch (methodName)
            {
            case "OfType":
            // Do nothing. Type of expression has been changed so a TypeIs predicate will be created.
            case "Where":
                // do nothing
                break;

            case "Take":
                var topExpr = GetArgumentAsConstant(methodCallExpr, 1);
                this.Top = (int)topExpr.Value;
                break;

            case "Skip":
                var skipExpr = GetArgumentAsConstant(methodCallExpr, 1);
                this.Skip = (int)skipExpr.Value;
                break;

            case "LongCount":
            case "Count":
                if (methodCallExpr.Arguments.Count == 2)
                {
                    if (_predicates.Count > 1)     // There is Where in the main expression
                    {
                        CombineTwoPredicatesOnStack();
                    }
                }
                this.CountOnly = true;
                break;

            case "ThenBy":
            case "OrderBy":
                Sort.Add(CreateSortInfoFromExpr(node, false));
                break;

            case "ThenByDescending":
            case "OrderByDescending":
                Sort.Add(CreateSortInfoFromExpr(node, true));
                break;

            case "StartsWith":
                var startsWithExpr = GetArgumentAsConstant(methodCallExpr, 0);
                var startsWithArg  = (string)startsWithExpr.Value;
                BuildWildcardPredicate(GetPropertyName(methodCallExpr.Object), WildcardPosition.AtEnd, startsWithArg);
                break;

            case "EndsWith":
                var endsWithExpr = GetArgumentAsConstant(methodCallExpr, 0);
                var endsWithArg  = (string)endsWithExpr.Value;
                BuildWildcardPredicate(GetPropertyName(methodCallExpr.Object), WildcardPosition.AtStart, endsWithArg);
                break;

            case "Contains":
                var arg0 = methodCallExpr.Arguments[0];
                if (arg0 is ConstantExpression constantExpr)
                {
                    if (constantExpr.Type != typeof(string))
                    {
                        throw new NotSupportedException(
                                  $"Calling Contains on an instance of type {constantExpr.Type} is not supported. Allowed types: string, IEnumerable<Node>.");
                    }
                    var containsArg = (string)constantExpr.Value;
                    BuildWildcardPredicate(GetPropertyName(methodCallExpr.Object), WildcardPosition.AtStartAndEnd, containsArg);
                    break;
                }
                if (arg0 is MemberExpression memberExpr)
                {
                    if (memberExpr.Type != typeof(IEnumerable <Node>))
                    {
                        throw NotSupportedException(node, "#2");
                    }
                    if (!(methodCallExpr.Arguments[1] is ConstantExpression rightConstant))
                    {
                        throw NotSupportedException(node, "#1");
                    }
                    var nodeValue = (Node)rightConstant.Value;
                    BuildTextPredicate(memberExpr.Member.Name, nodeValue);
                    break;
                }
                throw NotSupportedException(node, "#3");

            case "FirstOrDefault":
            case "First":
                ElementSelection  = "first";
                this.Top          = 1;
                this.ThrowIfEmpty = methodName == "First";
                if (methodCallExpr.Arguments.Count == 2)
                {
                    if (_predicates.Count > 1)
                    {
                        CombineTwoPredicatesOnStack();
                    }
                }
                break;

            case "SingleOrDefault":
            case "Single":
                ElementSelection  = "single";
                this.ThrowIfEmpty = methodName == "Single";
                if (methodCallExpr.Arguments.Count == 2)
                {
                    if (_predicates.Count > 1)
                    {
                        CombineTwoPredicatesOnStack();
                    }
                }
                break;

            case "LastOrDefault":
            case "Last":
                ElementSelection  = "last";
                this.ThrowIfEmpty = methodName == "Last";
                if (methodCallExpr.Arguments.Count == 2)
                {
                    if (_predicates.Count > 1)
                    {
                        CombineTwoPredicatesOnStack();
                    }
                }
                break;

            case "ElementAtOrDefault":
            case "ElementAt":
                ElementSelection  = "elementat";
                this.ThrowIfEmpty = methodName == "ElementAt";
                var constExpr = GetArgumentAsConstant(methodCallExpr, 1);
                var index     = Convert.ToInt32(constExpr.Value);
                this.Skip = index;
                this.Top  = 1;
                break;

            case "Any":
                ElementSelection   = "first";
                this.CountOnly     = true;
                this.ExistenceOnly = true;
                this.Top           = 1;
                if (methodCallExpr.Arguments.Count == 2)
                {
                    if (_predicates.Count > 1)
                    {
                        CombineTwoPredicatesOnStack();
                    }
                }
                break;

            case "Type":
                var typeExpr = GetArgumentAsConstant(methodCallExpr, 0);
                BuildTextPredicate("Type", (string)typeExpr.Value);
                break;

            case "TypeIs":
                var typeIsExpr = GetArgumentAsConstant(methodCallExpr, 0);
                BuildTextPredicate("TypeIs", (string)(typeIsExpr).Value);
                break;

            case "get_Item":
                if (!(methodCallExpr.Object is ParameterExpression))
                {
                    throw new NotSupportedException("#get_Item");
                }
                break;

            case "startswith":
            {
                var fieldName      = GetPropertyName(methodCallExpr.Arguments[0]);
                var startswithExpr = GetArgumentAsConstant(methodCallExpr, 1);
                var arg            = (string)startswithExpr.Value;
                BuildWildcardPredicate(fieldName, WildcardPosition.AtEnd, arg);
                break;
            }

            case "endswith":
            {
                var fieldName    = GetPropertyName(methodCallExpr.Arguments[0]);
                var endswithExpr = GetArgumentAsConstant(methodCallExpr, 1);
                var arg          = (string)endswithExpr.Value;
                BuildWildcardPredicate(fieldName, WildcardPosition.AtStart, arg);
                break;
            }

            case "substringof":
            {
                var fieldName       = GetPropertyName(methodCallExpr.Arguments[1]);
                var substringofExpr = GetArgumentAsConstant(methodCallExpr, 0);
                var arg             = (string)substringofExpr.Value;
                BuildWildcardPredicate(fieldName, WildcardPosition.AtStartAndEnd, arg);
                break;
            }

            case "isof":
            {
                var isofExpr = GetArgumentAsConstant(methodCallExpr, 1);
                BuildTextPredicate("TypeIs", (string)(isofExpr).Value);
                break;
            }

            case "InFolder":
            {
                var infolderexpr = GetArgumentAsConstant(methodCallExpr, 0);
                var folder       = infolderexpr.Value;
                BuildTextPredicate("InFolder", GetPath(folder, "InFolder"));
                break;
            }

            case "InTree":
            {
                var intreeexpr = GetArgumentAsConstant(methodCallExpr, 0);
                var folder     = intreeexpr.Value;
                BuildTextPredicate("InTree", GetPath(folder, "InTree"));
                break;
            }

            case "GetType":
            {
                if (methodCallExpr.Object is MemberExpression member && member.Member == typeof(Content).GetProperty("ContentHandler"))
                {
                    _predicates.Push(new ContentHandlerGetTypePredicate());
                }