private LibraryFilter(LibraryFilter parent, String searchString) { _parent = parent; _searchString = searchString; Initialize(); }
private void Initialize() { String s = _searchString; s = s.ToLowerInvariant(); s = s.Replace(" and ", "&"); s = s.Replace(" or ", "|"); s = s.Replace(" like ", "~"); s = s.Replace(" equals ", "="); s = s.Replace(" not ", "-"); var substrings = RemoveParentheses(ref s); // AND operation var array = s.Split('&'); int i; for (i = 0; i < array.Length; i++) { array[i] = array[i].Trim(); } if (array.Length > 1) { _operation = Operation.And; RestoreParentheses(ref array, substrings); foreach (var ss in array) { var child = new LibraryFilter(this, ss); _children.Add(child); } return; } // OR operation array = s.Split('|'); for (i = 0; i < array.Length; i++) { array[i] = array[i].Trim(); } if (array.Length > 1) { _operation = Operation.Or; RestoreParentheses(ref array, substrings); foreach (var ss in array) { var child = new LibraryFilter(this, ss); _children.Add(child); } return; } RestoreParentheses(ref array, substrings); s = array[0]; //eliminate outward parentheses if any int par = s.IndexOf('('); if (par >= 0) { _sign = GetSign(ref s); if (!_sign) { par = s.IndexOf('('); } s = s.Remove(par, 1); int lpar = s.LastIndexOf(')'); if (lpar < 0) { return; //mismatched parentheses } s = s.Remove(lpar, 1); s = s.Trim(); _operation = Operation.Sign; var child = new LibraryFilter(this, s); _children.Add(child); return; } _sign = GetSign(ref s); // Equals Evaluation array = s.Split('='); if (array.Length > 2) { return; // bad request } if (array.Length == 2) { _operation = Operation.TestEquals; _field = array[0].Trim(); _value = array[1].Trim(); return; } // Contains Evaluation _operation = Operation.TestContains; array = s.Split('~'); if (array.Length > 2) { return; // bad request } if (array.Length == 2) { _field = array[0].Trim(); _value = array[1].Trim(); return; } _field = "path"; _value = s.Trim(); }
public LibraryFilter(String searchString) { _parent = null; _searchString = searchString; Initialize(); }