Esempio n. 1
0
        /// <summary>
        /// Execute filter on items of given JSON array using evaluator
        /// </summary>
        /// <param name="target">JSON array</param>
        /// <param name="filter">Filter to apply</param>
        /// <param name="filterEvaluator">Evaluation function which contains the logic of how given filter is applied</param>
        /// <returns>Matching results in array format</returns>
        public SimpleJson.JsonArray ApplyFilter(SimpleJson.JsonArray target, Elements.JAttributeFilter filter, Func <object, object, bool> filterEvaluator)
        {
            bool isArrayItemsTypeOfDictionaryObject = false;

            var resultsToReturn = new SimpleJson.JsonArray();

            foreach (var targetItem in target)
            {
                if (targetItem is IDictionary <string, object> )
                {
                    var targetItemSource = targetItem as IDictionary <string, object>;
                    if (EvaluateFilter(targetItemSource, filter, filterEvaluator))
                    {
                        resultsToReturn.Add(targetItemSource);
                    }

                    isArrayItemsTypeOfDictionaryObject = true;
                }
            }

            if (isArrayItemsTypeOfDictionaryObject)
            {
                return(resultsToReturn);
            }
            else
            {
                // Right we do not support filtering on array with primitive values, so in that case, return target back
                return(target);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Execute filter on given JSON object using evaluator
        /// </summary>
        /// <param name="target">JSON object</param>
        /// <param name="filter">Filter to apply</param>
        /// <param name="filterEvaluator">Evaluation function which contains the logic of how given filter is applied</param>
        /// <returns>If given object is matched by filter, returns true. Otherwise, returns false.</returns>
        public bool EvaluateFilter(IDictionary <string, object> target, Elements.JAttributeFilter filter, Func <object, object, bool> filterEvaluator)
        {
            if (target.ContainsKey(filter.Attribute.Name))
            {
                if (filterEvaluator(target[filter.Attribute.Name], filter.Filter.Value))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 3
0
        /// <summary>
        /// Apply given filter on JSON data and return matching results
        /// </summary>
        /// <param name="dataToFilter">JSON data to which given filter is applied</param>
        /// <param name="filter">Filter to apply</param>
        /// <returns>Matching results</returns>
        private object FilterByAttributes(object dataToFilter, Elements.JAttributeFilter filter)
        {
            if (dataToFilter == null || filter == null || !(dataToFilter is SimpleJson.JsonArray || dataToFilter is IDictionary <string, object>))
            {
                return(dataToFilter);
            }

            Func <object, object, bool> filterEvaluator = null;

            if (filter.Filter.FilterType == Elements.JFilter.FilterTypes.Equal)
            {
                filterEvaluator = (itemValue, filterValue) =>
                {
                    return(Utils.Comparison.CompareValues(itemValue, filterValue,
                                                          (i, f) =>
                    {
                        return i == f;
                    },
                                                          (i, f) =>
                    {
                        return i.ToValueString() == f.ToValueString();
                    }));
                };
            }
            else if (filter.Filter.FilterType == Elements.JFilter.FilterTypes.GreaterThan)
            {
                filterEvaluator = (itemValue, filterValue) =>
                {
                    return(Utils.Comparison.CompareValues(itemValue, filterValue,
                                                          (i, f) =>
                    {
                        return i > f;
                    },
                                                          (i, f) =>
                    {
                        return i > f;
                    },
                                                          (i, f) =>
                    {
                        return i > f;
                    }));
                };
            }
            else if (filter.Filter.FilterType == Elements.JFilter.FilterTypes.GreaterThanOrEqual)
            {
                filterEvaluator = (itemValue, filterValue) =>
                {
                    return(Utils.Comparison.CompareValues(itemValue, filterValue,
                                                          (i, f) =>
                    {
                        return i >= f;
                    },
                                                          (i, f) =>
                    {
                        return i >= f;
                    },
                                                          (i, f) =>
                    {
                        return i >= f;
                    }));
                };
            }
            else if (filter.Filter.FilterType == Elements.JFilter.FilterTypes.LessThanOrEqual)
            {
                filterEvaluator = (itemValue, filterValue) =>
                {
                    return(Utils.Comparison.CompareValues(itemValue, filterValue,
                                                          (i, f) =>
                    {
                        return i <= f;
                    },
                                                          (i, f) =>
                    {
                        return i <= f;
                    },
                                                          (i, f) =>
                    {
                        return i <= f;
                    }));
                };
            }
            else if (filter.Filter.FilterType == Elements.JFilter.FilterTypes.LessThan)
            {
                filterEvaluator = (itemValue, filterValue) =>
                {
                    return(Utils.Comparison.CompareValues(itemValue, filterValue,
                                                          (i, f) =>
                    {
                        return i < f;
                    },
                                                          (i, f) =>
                    {
                        return i < f;
                    },
                                                          (i, f) =>
                    {
                        return i < f;
                    }));
                };
            }

            if (dataToFilter is SimpleJson.JsonArray)
            {
                return(ApplyFilter((SimpleJson.JsonArray)dataToFilter, filter, filterEvaluator));
            }
            else if (dataToFilter is IDictionary <string, object> )
            {
                if (EvaluateFilter((IDictionary <string, object>)dataToFilter, filter, filterEvaluator))
                {
                    return(dataToFilter);
                }
            }

            return(null);
        }