Example #1
0
        public static FilterTreeNode Create(string value, FilterParams filterParams, out string keyName)
        {
            ITestEntry testEntry;

            if (filterParams.ValueConversion != null)
            {
                value = filterParams.ValueConversion(value);
                if (value == null)
                {
                    keyName = null;
                    return(new FilterTreeNodeEmpty());
                }
            }

            var splitted = filterParams.ValueSplitFunc(value);

            if (splitted != null)
            {
                keyName = splitted.PropertyKey;

                if (splitted.ChildKey != null)
                {
                    var      fakeFilter = $"{splitted.PropertyKey}{splitted.ComparingOperation}{splitted.PropertyValue}";
                    var      parser     = new FilterParser(filterParams);
                    string[] properties;
                    return(new FilterTreeNodeChild(splitted.ChildKey, parser.Parse(fakeFilter, out properties), filterParams));
                }

                switch (splitted.ComparingOperation)
                {
                case FilterComparingOperation.IsSame:
                    testEntry = CreateTestEntry(splitted.PropertyValue, true, false);
                    break;

                case FilterComparingOperation.IsTrue:
                    testEntry = filterParams.BooleanTestFactory(true);
                    break;

                case FilterComparingOperation.IsFalse:
                    testEntry = filterParams.BooleanTestFactory(false);
                    break;

                case FilterComparingOperation.LessThan:
                case FilterComparingOperation.MoreThan:
                case FilterComparingOperation.LessThanOrEqualTo:
                case FilterComparingOperation.MoreThanOrEqualTo:
                case FilterComparingOperation.EqualTo:
                    testEntry = CreateNumericTestEntry((Operator)splitted.ComparingOperation, keyName, splitted.PropertyValue);
                    break;

                default:
                    testEntry = new ConstTestEntry(false);
                    break;
                }
            }
            else
            {
                keyName   = null;
                testEntry = CreateTestEntry(value, false, filterParams.StrictMode);
            }

            return(new FilterTreeNodeValue(keyName, testEntry));
        }
Example #2
0
        public static FilterTreeNode Create(string value, [NotNull] FilterParams filterParams, out string keyName)
        {
            var testEntry = filterParams.CustomTestEntryFactory?.Invoke(value);

            if (testEntry != null)
            {
                keyName = null;
                return(new FilterTreeNodeValue("<custom>", testEntry));
            }

            if (filterParams.ValueConversion != null)
            {
                value = filterParams.ValueConversion(value);
                if (value == null)
                {
                    keyName = null;
                    return(new FilterTreeNodeEmpty());
                }
            }

            var splitted = filterParams.ValueSplitter.ValueSplitFunc(value);

            if (splitted != null)
            {
                keyName = splitted.PropertyKey;

                if (splitted.ChildKey != null)
                {
                    var fakeFilter = $"{splitted.PropertyKey}{(char)splitted.ComparingOperation}{splitted.PropertyValue}";
                    var parser     = new FilterParser(filterParams);
                    return(new FilterTreeNodeChild(splitted.ChildKey, parser.Parse(fakeFilter, out _), filterParams));
                }

                switch (splitted.ComparingOperation)
                {
                case FilterComparingOperation.IsSame:
                    testEntry = CreateTestEntry(splitted.PropertyValue, filterParams.RegexFactory, filterParams.StringMatchMode);
                    break;

                case FilterComparingOperation.IsTrue:
                    testEntry = filterParams.BooleanTestFactory(true);
                    break;

                case FilterComparingOperation.IsFalse:
                    testEntry = filterParams.BooleanTestFactory(false);
                    break;

                case FilterComparingOperation.LessThan:
                case FilterComparingOperation.MoreThan:
                case FilterComparingOperation.LessThanOrEqualTo:
                case FilterComparingOperation.MoreThanOrEqualTo:
                case FilterComparingOperation.EqualTo:
                    testEntry = new NumberTestEntry((Operator)splitted.ComparingOperation, splitted.PropertyValue);
                    break;

                default:
                    testEntry = new ConstTestEntry(false);
                    break;
                }
            }
            else
            {
                keyName   = null;
                testEntry = CreateTestEntry(value, filterParams.RegexFactory, filterParams.StringMatchMode);
            }

            return(new FilterTreeNodeValue(keyName, testEntry));
        }