Esempio n. 1
0
 public FilterParser([CanBeNull] FilterParams filterParams)
 {
     _params = filterParams ?? FilterParams.Defaults;
 }
Esempio n. 2
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.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));
        }