示例#1
0
        /// <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()));
            }
        }
示例#2
0
        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);
            }
        }