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)); }
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)); }