Exemplo n.º 1
0
        public NSPredicateEditorRowTemplate(
            IEnumerable<string> leftExpressionsFromKeyPaths,
            IEnumerable<string> rightExpressionsFromConstants,
            IEnumerable<NSPredicateOperatorType> operators,
            NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
            NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None)
            : this(leftExpressionsFromKeyPaths.Select (k => NSExpression.FromKeyPath (k)),
				rightExpressionsFromConstants.Select (k => NSExpression.FromConstant (new NSString (k))),
				operators,
				modifier,
				options)
        {
        }
Exemplo n.º 2
0
        public NSPredicateEditorRowTemplate(
            string leftExpressionFromKeyPath,
            IEnumerable<string> rightExpressionsFromConstants,
            IEnumerable<NSPredicateOperatorType> operators,
            NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
            NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None)
            : this(new [] { leftExpressionFromKeyPath },
				rightExpressionsFromConstants,
				operators,
				modifier,
				options)
        {
        }
Exemplo n.º 3
0
        public NSPredicateEditorRowTemplate(
            IEnumerable<NSExpression> leftExpressions,
            IEnumerable<NSExpression> rightExpressions,
            IEnumerable<NSPredicateOperatorType> operators,
            NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
            NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None)
            : this(leftExpressions.ToArray (),
				rightExpressions.ToArray (),
				modifier,
				operators.Select (o => NSNumber.FromUInt32 ((uint)o)).ToArray (),
				options)
        {
        }
 public NSPredicateEditorRowTemplate(
     IEnumerable <NSExpression> leftExpressions,
     NSAttributeType attributeType,
     IEnumerable <NSPredicateOperatorType> operators,
     NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
     NSComparisonPredicateOptions options   = NSComparisonPredicateOptions.None)
     : this(
         leftExpressions.ToArray(),
         attributeType,
         modifier,
         operators.Select(o => NSNumber.FromUInt32((uint)o)).ToArray(),
         options)
 {
 }
 public NSPredicateEditorRowTemplate(
     string leftExpressionFromKeyPath,
     IEnumerable <string> rightExpressionsFromConstants,
     IEnumerable <NSPredicateOperatorType> operators,
     NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
     NSComparisonPredicateOptions options   = NSComparisonPredicateOptions.None)
     : this(
         new [] { leftExpressionFromKeyPath },
         rightExpressionsFromConstants,
         operators,
         modifier,
         options)
 {
 }
 public NSPredicateEditorRowTemplate(
     IEnumerable <string> leftExpressionsFromKeyPaths,
     IEnumerable <string> rightExpressionsFromConstants,
     IEnumerable <NSPredicateOperatorType> operators,
     NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
     NSComparisonPredicateOptions options   = NSComparisonPredicateOptions.None)
     : this(
         leftExpressionsFromKeyPaths.Select(k => NSExpression.FromKeyPath(k)),
         rightExpressionsFromConstants.Select(k => NSExpression.FromConstant(new NSString(k))),
         operators,
         modifier,
         options)
 {
 }
 public NSPredicateEditorRowTemplate(
     string leftExpressionFromKeyPath,
     NSAttributeType attributeType,
     IEnumerable <NSPredicateOperatorType> operators,
     NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
     NSComparisonPredicateOptions options   = NSComparisonPredicateOptions.None)
     : this(
         new [] { leftExpressionFromKeyPath },
         attributeType,
         operators,
         modifier,
         options)
 {
 }
 public NSPredicateEditorRowTemplate(
     IEnumerable <string> leftExpressionsFromKeyPaths,
     NSAttributeType attributeType,
     IEnumerable <NSPredicateOperatorType> operators,
     NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
     NSComparisonPredicateOptions options   = NSComparisonPredicateOptions.None)
     : this(
         leftExpressionsFromKeyPaths.Select(k => NSExpression.FromKeyPath(k)),
         attributeType,
         operators,
         modifier,
         options)
 {
 }
Exemplo n.º 9
0
        public NSPredicateEditorRowTemplate(
            string leftExpressionFromKeyPath,
            NSAttributeType attributeType,
            IEnumerable<NSPredicateOperatorType> operators,
            NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
            NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None)
            : this(new [] { leftExpressionFromKeyPath },
				attributeType,
				operators,
				modifier,
				options)
        {
        }
Exemplo n.º 10
0
        public NSPredicateEditorRowTemplate(
            IEnumerable<string> leftExpressionsFromKeyPaths,
            NSAttributeType attributeType,
            IEnumerable<NSPredicateOperatorType> operators,
            NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct,
            NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None)
            : this(leftExpressionsFromKeyPaths.Select (k => NSExpression.FromKeyPath (k)),
				attributeType,
				operators,
				modifier,
				options)
        {
        }
Exemplo n.º 11
0
        static NSPredicate ToPredicate(NSObject @object)
        {
            if (@object == NSNumber.FromBoolean(true))
            {
                return(NSPredicate.FromValue(true));
            }

            if (@object == NSNumber.FromBoolean(false))
            {
                return(NSPredicate.FromValue(false));
            }

            if (@object is NSArray == false)
            {
                return(null);
            }

            var array   = (NSArray)@object;
            var objects = SubArray(array);
            var op      = objects[0].ToString();

            if (MGLPredicateOperatorTypesByJSONOperator.TryGetValue(op, out var operatorType))
            {
                NSComparisonPredicateOptions options = 0;

                if (objects.Count > 3)
                {
                    var collatorExpression = SubArray((NSArray)objects[3]);

                    if (collatorExpression.Count != 2)
                    {
                        return(null);
                    }

                    var collator = (NSDictionary)collatorExpression[1];

                    if (false == collator.ContainsKey((NSString)"locale"))
                    {
                        if (collator.ValueForKey((NSString)"case-sensitive") == NSNumber.FromBoolean(false))
                        {
                            options |= NSComparisonPredicateOptions.CaseInsensitive;
                        }

                        if (collator.ValueForKey((NSString)"diacritic-sensitive") == NSNumber.FromBoolean(false))
                        {
                            options |= NSComparisonPredicateOptions.DiacriticInsensitive;
                        }
                    }
                }

                var subexpressions = ToSubexpressions(SubArray(objects, 1));

                return(new NSComparisonPredicate(
                           subexpressions[0],
                           subexpressions[1],
                           NSComparisonPredicateModifier.Direct,
                           operatorType,
                           options
                           ));
            }

            switch (op)
            {
            case "!": {
                var subpredicates = ToSubpredicates(SubArray(objects, 1));
                if (subpredicates.Count > 1)
                {
                    var predicate = NSCompoundPredicate.CreateOrPredicate(subpredicates.ToArray());

                    return(NSCompoundPredicate.CreateNotPredicate(predicate));
                }

                return(NSPredicate.FromValue(true));
            }

            case "all": {
                var subpredicates = ToSubpredicates(SubArray(objects, 1));

                if (subpredicates.Count == 2)
                {
                    if (subpredicates[0] is NSComparisonPredicate leftCondition &&
                        subpredicates[1] is NSComparisonPredicate rightCondition
                        )
                    {
                        NSExpression[] limits = null;
                        NSExpression   leftConditionExpression = null;

                        if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.GreaterThanOrEqualTo &&
                            rightCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo
                            )
                        {
                            limits = new NSExpression[]
                            {
                                leftCondition.RightExpression,
                                rightCondition.RightExpression
                            };
                            leftConditionExpression = leftCondition.LeftExpression;
                        }
                        else if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo &&
                                 rightCondition.PredicateOperatorType ==
                                 NSPredicateOperatorType.LessThanOrEqualTo
                                 )
                        {
                            limits = new NSExpression[]
                            {
                                leftCondition.LeftExpression,
                                rightCondition.RightExpression
                            };
                            leftConditionExpression = leftCondition.RightExpression;
                        }
                        else if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo &&
                                 rightCondition.PredicateOperatorType ==
                                 NSPredicateOperatorType.GreaterThanOrEqualTo
                                 )
                        {
                            limits = new NSExpression[]
                            {
                                leftCondition.LeftExpression,
                                rightCondition.LeftExpression
                            };
                            leftConditionExpression = leftCondition.RightExpression;
                        }
                        else if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.GreaterThanOrEqualTo &&
                                 rightCondition.PredicateOperatorType ==
                                 NSPredicateOperatorType.GreaterThanOrEqualTo
                                 )
                        {
                            limits = new NSExpression[]
                            {
                                leftCondition.RightExpression,
                                rightCondition.LeftExpression
                            };
                            leftConditionExpression = leftCondition.LeftExpression;
                        }

                        if (limits != null && leftConditionExpression != null)
                        {
                            return(NSPredicate.FromFormat("%@ BETWEEN %@", leftConditionExpression,
                                                          NSExpression.FromAggregate(limits)));
                        }
                    }
                }

                return(new NSCompoundPredicate(NSCompoundPredicateType.And, subpredicates.ToArray()));
            }

            case "any": {
                var subpredicates = ToSubpredicates(SubArray(objects, 1));

                return(new NSCompoundPredicate(NSCompoundPredicateType.Or, subpredicates.ToArray()));
            }

            default: {
                var expression = ToExpression(array);

                return(new NSComparisonPredicate(
                           expression,
                           NSExpression.FromConstant(NSNumber.FromBoolean(true)),
                           NSComparisonPredicateModifier.Direct,
                           NSPredicateOperatorType.EqualTo,
                           0
                           ));
            }
            }
        }
Exemplo n.º 12
0
 public NSComparisonPredicate(NSExpression leftExpression, NSExpression rightExpression, NSComparisonPredicateModifier modifier, NSPredicateOperatorType type, NSComparisonPredicateOptions options)
 {
 }