/// <summary> /// Parse a oslc.orderBy expression /// </summary> /// <param name="orderByExpression">contents of an oslc.orderBy HTTP query /// parameter</param> /// <param name="prefixMap">map between XML namespace prefixes and /// associated URLs</param> /// <returns></returns> public static OrderByClause ParseOrderBy(string orderByExpression, IReadOnlyDictionary <string, string> prefixMap) { try { var parser = new OslcOrderByParser(orderByExpression); if (parser.input.ToString() != orderByExpression) { return(new SortTermsImpl(isError: true, errorReason: "parse error")); } var rawTree = (CommonTree)parser.Result; var child = rawTree.GetChild(0); if (child is BaseTree baseTree) { if (baseTree.Children?.Any(item => item is CommonErrorNode) ?? false) { return(new SortTermsImpl(isError: true, errorReason: baseTree?.ToString())); } } if (child is CommonErrorNode) { return(new SortTermsImpl(isError: true, errorReason: child?.ToString())); } return((OrderByClause) new SortTermsImpl(rawTree, prefixMap)); } catch (RecognitionException e) { return(new SortTermsImpl(isError: true, errorReason: e.ToString())); } }
ParseOrderBy( string orderByExpression, IDictionary <string, string> prefixMap ) { try { OslcOrderByParser parser = new OslcOrderByParser(orderByExpression); CommonTree rawTree = (CommonTree)parser.Result; ITree child = rawTree.GetChild(0); if (child is CommonErrorNode) { throw new ParseException(child.ToString()); } return((OrderByClause) new SortTermsImpl(rawTree, prefixMap)); } catch (RecognitionException e) { throw new ParseException(e); } }