private Expression parseIsOfOrCastMethod(final MethodKind kind) throws UriParserException, UriValidationException { // The TokenKind 'IsOfMethod' consumes also the opening parenthesis. // The first parameter could be an expression or a type literal. List<Expression> parameters = new ArrayList<Expression>(); ParserHelper.bws(tokenizer); parameters.add(parseExpression()); if (!(parameters.get(0) instanceof TypeLiteral)) { // The first parameter is not a type literal, so there must be a second parameter. ParserHelper.bws(tokenizer); ParserHelper.requireNext(tokenizer, TokenKind.COMMA); ParserHelper.bws(tokenizer); parameters.add(parseExpression()); ParserHelper.bws(tokenizer); // The second parameter must be a type literal. if (!(parameters.get(1) instanceof TypeLiteral)) { throw new UriParserSemanticException("Type literal expected.", UriParserSemanticException.MessageKeys.INCOMPATIBLE_TYPE_FILTER); } } ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); return new MethodImpl(kind, parameters); }
for (final EdmKeyPropertyRef candidate : keyPropertyRefs) { if (referencedNames.get(candidate.getName()) == null) { final UriParameter simpleKey = simpleKey(tokenizer, candidate, edm, referringType, aliases); if (simpleKey != null) { keys.add(simpleKey); keys.addAll(compoundKey(tokenizer, edmEntityType, edm, referringType, aliases)); } else { throw new UriParserSemanticException("The key value is not valid.",
private static UriParameter simpleKey(UriTokenizer tokenizer, final EdmKeyPropertyRef edmKeyPropertyRef, final Edm edm, final EdmType referringType, final Map<String, AliasQueryOption> aliases) throws UriParserException, UriValidationException { final EdmProperty edmProperty = edmKeyPropertyRef == null ? null : edmKeyPropertyRef.getProperty(); if (nextPrimitiveTypeValue(tokenizer, edmProperty == null ? null : (EdmPrimitiveType) edmProperty.getType(), edmProperty == null ? false : edmProperty.isNullable())) { final String literalValue = tokenizer.getText(); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); return createUriParameter(edmProperty, edmKeyPropertyRef.getName(), literalValue, edm, referringType, aliases); } else { return null; } }
UriValidationException.MessageKeys.INVALID_KEY_PROPERTY, keyPredicateName); parameters.add(keyValuePair(tokenizer, keyPredicateName, edmEntityType, edm, referringType, aliases)); parameterNames.add(keyPredicateName); hasComma = tokenizer.next(TokenKind.COMMA); if (hasComma) { ParserHelper.requireNext(tokenizer, TokenKind.ODataIdentifier); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE);
private UriResource functionCall(final EdmFunctionImport edmFunctionImport, final FullQualifiedName boundFunctionName, final FullQualifiedName bindingParameterTypeName, final boolean isBindingParameterCollection) throws UriParserException, UriValidationException { final List<UriParameter> parameters = ParserHelper.parseFunctionParameters(tokenizer, edm, null, false, aliases); final List<String> names = ParserHelper.getParameterNames(parameters); EdmFunction function = null; if (edmFunctionImport != null) { ParserHelper.validateFunctionParameters(function, parameters, edm, null, aliases); ParserHelper.validateFunctionParameterFacets(function, parameters, edm, aliases); UriResourceFunctionImpl resource = new UriResourceFunctionImpl(edmFunctionImport, function, parameters); if (tokenizer.next(TokenKind.OPEN)) { && function.getReturnType().isCollection()) { resource.setKeyPredicates( ParserHelper.parseKeyPredicate(tokenizer, (EdmEntityType) function.getReturnType().getType(), null, edm, null, aliases)); } else { ParserHelper.requireTokenEnd(tokenizer); return resource;
private void parseFunction(final FullQualifiedName fullQualifiedName, UriInfoImpl uriInfo, final EdmType lastType, final boolean lastIsCollection) throws UriParserException, UriValidationException { final List<UriParameter> parameters = ParserHelper.parseFunctionParameters(tokenizer, edm, referringType, true, aliases); final List<String> parameterNames = ParserHelper.getParameterNames(parameters); final EdmFunction boundFunction = edm.getBoundFunction(fullQualifiedName, lastType.getFullQualifiedName(), lastIsCollection, parameterNames); if (boundFunction != null) { ParserHelper.validateFunctionParameters(boundFunction, parameters, edm, referringType, aliases); parseFunctionRest(uriInfo, boundFunction, parameters); return; } final EdmFunction unboundFunction = edm.getUnboundFunction(fullQualifiedName, parameterNames); if (unboundFunction != null) { ParserHelper.validateFunctionParameters(unboundFunction, parameters, edm, referringType, aliases); parseFunctionRest(uriInfo, unboundFunction, parameters); return; } throw new UriParserSemanticException("No function '" + fullQualifiedName + "' found.", UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND, fullQualifiedName.getFullQualifiedNameAsString()); }
private Expression parseExprValue() throws UriParserException, UriValidationException { if (tokenizer.next(TokenKind.OPEN)) { ParserHelper.bws(tokenizer); final Expression expression = parseExpression(); ParserHelper.bws(tokenizer); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); return expression; if (aliases.containsKey(name)) { return new AliasImpl(name, ParserHelper.parseAliasValue(name, null, true, true, edm, referringType, aliases)); } else { return new AliasImpl(name, null); final TokenKind nextPrimitive = ParserHelper.nextPrimitiveValue(tokenizer); if (nextPrimitive != null) { return parsePrimitive(nextPrimitive); ParserHelper.next(tokenizer, tokenToMethod.keySet().toArray(new TokenKind[tokenToMethod.size()])); if (nextMethod != null) { return parseMethod(nextMethod);
protected static TokenKind nextPrimitiveValue(UriTokenizer tokenizer) { return next(tokenizer, TokenKind.NULL, TokenKind.BooleanValue,
final EdmStructuredType typeCast = ParserHelper.parseTypeCast(tokenizer, edm, referencedType); if (typeCast != null) { uriInfo.addResourcePart(new UriResourceStartingTypeFilterImpl(typeCast, true)); ParserHelper.requireNext(tokenizer, TokenKind.SLASH); uriInfo.addResourcePart(segment); type = (EdmStructuredType) ParserHelper.getTypeInformation((UriResourcePartTyped) segment);
SystemQueryOption systemQueryOption; if (!forCount && tokenizer.next(TokenKind.COUNT)) { ParserHelper.requireNext(tokenizer, TokenKind.EQ); ParserHelper.requireNext(tokenizer, TokenKind.BooleanValue); CountOptionImpl countOption = new CountOptionImpl(); countOption.setText(tokenizer.getText()); ParserHelper.requireNext(tokenizer, TokenKind.EQ); systemQueryOption = new ExpandParser(edm, odata, aliases, null).parse(tokenizer, referencedType); ParserHelper.requireNext(tokenizer, TokenKind.EQ); systemQueryOption = new FilterParser(edm, odata).parse(tokenizer, referencedType, null, aliases); ParserHelper.requireNext(tokenizer, TokenKind.EQ); systemQueryOption = (SystemQueryOption) parseLevels(tokenizer); ParserHelper.requireNext(tokenizer, TokenKind.EQ); systemQueryOption = new OrderByParser(edm, odata).parse(tokenizer, referencedType, null, aliases); ParserHelper.requireNext(tokenizer, TokenKind.EQ); ParserHelper.bws(tokenizer); systemQueryOption = new SearchParser().parse(tokenizer); ParserHelper.requireNext(tokenizer, TokenKind.EQ); systemQueryOption = new SelectParser(edm).parse(tokenizer, referencedType, referencedIsCollection); ParserHelper.requireNext(tokenizer, TokenKind.EQ); ParserHelper.requireNext(tokenizer, TokenKind.IntegerValue); final int value = ParserHelper.parseNonNegativeInteger(SystemQueryOptionKind.SKIP.toString(),
ExpandItemImpl item = new ExpandItemImpl(); item.setResourcePath(ExpandParser.parseExpandPath(tokenizer, edm, referencedType, item)); final EdmType type = ParserHelper.getTypeInformation((UriResourcePartTyped) ((UriInfoImpl) item.getResourcePath()).getLastResourcePart()); if (tokenizer.next(TokenKind.COMMA)) { item.setSystemQueryOption( new FilterParser(edm, odata).parse(tokenizer,type, crossjoinEntitySetNames, aliases)); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); } else { ParserHelper.requireNext(tokenizer, TokenKind.ExpandTrafo); item.setSystemQueryOption(parseExpandTrafo((EdmStructuredType) type)); ParserHelper.requireNext(tokenizer, TokenKind.ExpandTrafo); final ExpandOption nestedExpand = parseExpandTrafo((EdmStructuredType) type); if (item.getExpandOption() == null) { ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); ExpandOptionImpl expand = new ExpandOptionImpl(); expand.addExpandItem(item);
final FilterOption filterOption = new FilterParser(edm, odata) .parse(tokenizer, referencedType, crossjoinEntitySetNames, aliases); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); return new FilterImpl().setFilterOption(filterOption); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); return new SearchImpl().setSearchOption(searchOption); final TokenKind kind = ParserHelper.next(tokenizer, TokenKind.BottomCountTrafo, TokenKind.BottomPercentTrafo, TokenKind.BottomSumTrafo, TokenKind.TopCountTrafo, TokenKind.TopPercentTrafo, TokenKind.TopSumTrafo);
List<UriParameter> parameters = new ArrayList<UriParameter>(); Set<String> parameterNames = new HashSet<String>(); ParserHelper.requireNext(tokenizer, TokenKind.OPEN); if (tokenizer.next(TokenKind.CLOSE)) { return parameters; ParserHelper.requireNext(tokenizer, TokenKind.ODataIdentifier); final String name = tokenizer.getText(); if (parameterNames.contains(name)) { ParserHelper.requireNext(tokenizer, TokenKind.EQ); if (tokenizer.next(TokenKind.COMMA) || tokenizer.next(TokenKind.CLOSE) || tokenizer.next(TokenKind.EOF)) { throw new UriParserSyntaxException("Parameter value expected.", UriParserSyntaxException.MessageKeys.SYNTAX); null) .setExpression(expression instanceof Literal ? null : expression); } else if (nextPrimitiveValue(tokenizer) == null) { throw new UriParserSemanticException("Wrong parameter value.", UriParserSemanticException.MessageKeys.INVALID_KEY_VALUE, ""); ParserHelper.requireNext(tokenizer, TokenKind.CLOSE); return parameters;
final EdmType lastType = lastResource == null ? referringType : ParserHelper.getTypeInformation(lastResource); if (!(lastType instanceof EdmStructuredType)) { throw new UriParserSemanticException("Property paths must follow a structured type.", new UriResourceNavigationPropertyImpl((EdmNavigationProperty) property); navigationResource.setKeyPredicates( ParserHelper.parseNavigationKeyPredicate(tokenizer, (EdmNavigationProperty) property, edm, referringType, aliases)); uriInfo.addResourcePart(navigationResource);
private SearchExpression processTerm(UriTokenizer tokenizer) throws SearchParserException { if (tokenizer.next(TokenKind.OPEN)) { ParserHelper.bws(tokenizer); final SearchExpression expr = processExprOr(tokenizer); ParserHelper.bws(tokenizer); if (!tokenizer.next(TokenKind.CLOSE)) { throw new SearchParserException("Missing close parenthesis after open parenthesis.", SearchParserException.MessageKeys.MISSING_CLOSE); } return expr; } else if (tokenizer.next(TokenKind.NotOperatorSearch)) { return processNot(tokenizer); } else if (tokenizer.next(TokenKind.Word)) { return new SearchTermImpl(tokenizer.getText()); } else if (tokenizer.next(TokenKind.Phrase)) { return processPhrase(tokenizer); } else { throw new SearchParserException("Expected PHRASE or WORD not found.", SearchParserException.MessageKeys.EXPECTED_DIFFERENT_TOKEN, "PHRASE, WORD", ""); } }
private static UriParameter createUriParameter(final EdmProperty edmProperty, final String parameterName, final String literalValue, final Edm edm, final EdmType referringType, final Map<String, AliasQueryOption> aliases) throws UriParserException, UriValidationException { final AliasQueryOption alias = literalValue.startsWith("@") ? getKeyAlias(literalValue, edmProperty, edm, referringType, aliases) : null; final String value = alias == null ? literalValue : alias.getText(); final EdmPrimitiveType primitiveType = (EdmPrimitiveType) edmProperty.getType(); try { if (!(primitiveType.validate(primitiveType.fromUriLiteral(value), edmProperty.isNullable(), edmProperty.getMaxLength(), edmProperty.getPrecision(), edmProperty.getScale(), edmProperty.isUnicode()))) { throw new UriValidationException("Invalid key property", UriValidationException.MessageKeys.INVALID_KEY_PROPERTY, parameterName); } } catch (final EdmPrimitiveTypeException e) { throw new UriValidationException("Invalid key property", e, UriValidationException.MessageKeys.INVALID_KEY_PROPERTY, parameterName); } return new UriParameterImpl() .setName(parameterName) .setText("null".equals(literalValue) ? null : literalValue) .setAlias(alias == null ? null : literalValue) .setExpression(alias == null ? null : alias.getValue() == null ? new LiteralImpl(value, primitiveType) : alias.getValue()); }
|| !((isCollection || kind == EdmTypeKind.COMPLEX || kind == EdmTypeKind.ENTITY ? aliasTokenizer.next(TokenKind.jsonArrayOrObject) : nextPrimitiveTypeValue(aliasTokenizer, (EdmPrimitiveType) type, isNullable)) && aliasTokenizer.next(TokenKind.EOF))) {
contextType = ParserHelper.getTypeInformation(typed); if (contextType != null && ((lastSegment instanceof UriResourceEntitySet && (((UriResourceEntitySet) lastSegment).getTypeFilterOnCollection() != null
private UriResource functionCall(final EdmFunctionImport edmFunctionImport, final FullQualifiedName boundFunctionName, final FullQualifiedName bindingParameterTypeName, final boolean isBindingParameterCollection) throws UriParserException, UriValidationException { final List<UriParameter> parameters = ParserHelper.parseFunctionParameters(tokenizer, edm, null, false, aliases); final List<String> names = ParserHelper.getParameterNames(parameters); EdmFunction function = null; if (edmFunctionImport != null) { ParserHelper.validateFunctionParameters(function, parameters, edm, null, aliases); ParserHelper.validateFunctionParameterFacets(function, parameters, edm, aliases); UriResourceFunctionImpl resource = new UriResourceFunctionImpl(edmFunctionImport, function, parameters); if (tokenizer.next(TokenKind.OPEN)) { && function.getReturnType().isCollection()) { resource.setKeyPredicates( ParserHelper.parseKeyPredicate(tokenizer, (EdmEntityType) function.getReturnType().getType(), null, edm, null, aliases)); } else { ParserHelper.requireTokenEnd(tokenizer); return resource;
private void parseFunction(final FullQualifiedName fullQualifiedName, UriInfoImpl uriInfo, final EdmType lastType, final boolean lastIsCollection) throws UriParserException, UriValidationException { final List<UriParameter> parameters = ParserHelper.parseFunctionParameters(tokenizer, edm, referringType, true, aliases); final List<String> parameterNames = ParserHelper.getParameterNames(parameters); final EdmFunction boundFunction = edm.getBoundFunction(fullQualifiedName, lastType.getFullQualifiedName(), lastIsCollection, parameterNames); if (boundFunction != null) { ParserHelper.validateFunctionParameters(boundFunction, parameters, edm, referringType, aliases); parseFunctionRest(uriInfo, boundFunction, parameters); return; } final EdmFunction unboundFunction = edm.getUnboundFunction(fullQualifiedName, parameterNames); if (unboundFunction != null) { ParserHelper.validateFunctionParameters(unboundFunction, parameters, edm, referringType, aliases); parseFunctionRest(uriInfo, unboundFunction, parameters); return; } throw new UriParserSemanticException("No function '" + fullQualifiedName + "' found.", UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND, fullQualifiedName.getFullQualifiedNameAsString()); }