for (int i = 1; i < function.getParameterNames().size(); i++) { String parameterName = function.getParameterNames().get(i); EdmParameter p = function.getParameter(parameterName); if (first) { first = false;
private Object getValue(final EdmFunction edmFunction, final JPAParameter parameter, final String uriValue) throws ODataApplicationException { final String value = uriValue.replaceAll("'", ""); final EdmParameter edmParam = edmFunction.getParameter(parameter.getName()); try { return ((EdmPrimitiveType) edmParam.getType()).valueOfString(value, false, parameter.getMaxLength(), parameter.getPrecision(), parameter.getScale(), true, parameter.getType()); } catch (EdmPrimitiveTypeException e) { // Unable to convert value %1$s of parameter %2$s throw new ODataJPADBAdaptorException(ODataJPADBAdaptorException.MessageKeys.PARAMETER_CONVERSION_ERROR, HttpStatusCode.NOT_IMPLEMENTED, uriValue, parameter.getName()); } }
for (int i = 1; i < function.getParameterNames().size(); i++) { String parameterName = function.getParameterNames().get(i); EdmParameter p = function.getParameter(parameterName); if (first) { first = false;
private Object getValue(final EdmFunction edmFunction, final JPAParameter parameter, final String uriValue) throws ODataApplicationException { final String value = uriValue.replaceAll("'", ""); final EdmParameter edmParam = edmFunction.getParameter(parameter.getName()); try { return ((EdmPrimitiveType) edmParam.getType()).valueOfString(value, false, parameter.getMaxLength(), parameter.getPrecision(), parameter.getScale(), true, parameter.getType()); } catch (EdmPrimitiveTypeException e) { // Unable to convert value %1$s of parameter %2$s throw new ODataJPADBAdaptorException(ODataJPADBAdaptorException.MessageKeys.PARAMETER_CONVERSION_ERROR, HttpStatusCode.NOT_IMPLEMENTED, uriValue, parameter.getName()); } }
@Override public List<EdmFunction> getBoundFunctionsWithBindingType(FullQualifiedName bindingParameterTypeName, Boolean isBindingParameterCollection){ List<EdmFunction> functions = new ArrayList<EdmFunction>(); for (EdmSchema schema:getSchemas()) { for (EdmFunction function: schema.getFunctions()) { if (function.isBound()) { EdmParameter bindingParameter = function.getParameter(function.getParameterNames().get(0)); if (bindingParameter.getType().getFullQualifiedName().equals(bindingParameterTypeName) && bindingParameter.isCollection() == isBindingParameterCollection) { functions.add(function); } } } } return functions; }
private Object getValue(final EdmFunction edmFunction, final JPAParameter parameter, final String uriValue) throws ODataApplicationException { final String value = uriValue.replaceAll("'", ""); final EdmParameter edmParam = edmFunction.getParameter(parameter.getName()); try { return ((EdmPrimitiveType) edmParam.getType()).valueOfString(value, false, parameter.getMaxLength(), parameter.getPrecision(), parameter.getScale(), true, parameter.getType()); } catch (EdmPrimitiveTypeException e) { // Unable to convert value %1$s of parameter %2$s throw new ODataJPADBAdaptorException(ODataJPADBAdaptorException.MessageKeys.PARAMETER_CONVERSION_ERROR, HttpStatusCode.NOT_IMPLEMENTED, uriValue, parameter.getName()); } }
@Override public List<EdmFunction> getBoundFunctionsWithBindingType(FullQualifiedName bindingParameterTypeName, Boolean isBindingParameterCollection){ List<EdmFunction> functions = new ArrayList<EdmFunction>(); for (EdmSchema schema:getSchemas()) { for (EdmFunction function: schema.getFunctions()) { if (function.isBound()) { EdmParameter bindingParameter = function.getParameter(function.getParameterNames().get(0)); if (bindingParameter.getType().getFullQualifiedName().equals(bindingParameterTypeName) && bindingParameter.isCollection() == isBindingParameterCollection) { functions.add(function); } } } } return functions; } }
protected static void validateFunctionParameters(final EdmFunction function, final List<UriParameter> parameters, final Edm edm, final EdmType referringType, final Map<String, AliasQueryOption> aliases) throws UriParserException, UriValidationException { for (final UriParameter parameter : parameters) { final String parameterName = parameter.getName(); final EdmParameter edmParameter = function.getParameter(parameterName); final boolean isNullable = edmParameter.isNullable(); if (parameter.getText() == null && parameter.getExpression() == null && !isNullable) { if (parameter.getAlias() == null) { // No alias, value is explicitly null. throw new UriValidationException("Missing non-nullable parameter " + parameterName, UriValidationException.MessageKeys.MISSING_PARAMETER, parameterName); } else { final String valueForAlias = aliases.containsKey(parameter.getAlias()) ? parseAliasValue(parameter.getAlias(), edmParameter.getType(), edmParameter.isNullable(), edmParameter.isCollection(), edm, referringType, aliases).getText() : null; // Alias value is missing or explicitly null. if (valueForAlias == null) { throw new UriValidationException("Missing alias for " + parameterName, UriValidationException.MessageKeys.MISSING_ALIAS, parameter.getAlias()); } } } } }
private CustomFunction parseCustomFunction(final FullQualifiedName functionName, final EdmStructuredType referencedType) throws UriParserException, UriValidationException { final List<UriParameter> parameters = ParserHelper.parseFunctionParameters(tokenizer, edm, referencedType, true, aliases); final List<String> parameterNames = ParserHelper.getParameterNames(parameters); final EdmFunction function = edm.getBoundFunction(functionName, referencedType.getFullQualifiedName(), true, parameterNames); if (function == null) { throw new UriParserSemanticException("No function '" + functionName + "' found.", UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND, functionName.getFullQualifiedNameAsString()); } ParserHelper.validateFunctionParameters(function, parameters, edm, referencedType, aliases); // The binding parameter and the return type must be of type complex or entity collection. final EdmParameter bindingParameter = function.getParameter(function.getParameterNames().get(0)); final EdmReturnType returnType = function.getReturnType(); if (bindingParameter.getType().getKind() != EdmTypeKind.ENTITY && bindingParameter.getType().getKind() != EdmTypeKind.COMPLEX || !bindingParameter.isCollection() || returnType.getType().getKind() != EdmTypeKind.ENTITY && returnType.getType().getKind() != EdmTypeKind.COMPLEX || !returnType.isCollection()) { throw new UriParserSemanticException("Only entity- or complex-collection functions are allowed.", UriParserSemanticException.MessageKeys.FUNCTION_MUST_USE_COLLECTIONS, functionName.getFullQualifiedNameAsString()); } return new CustomFunctionImpl().setFunction(function).setParameters(parameters); }
protected static void validateFunctionParameters(final EdmFunction function, final List<UriParameter> parameters, final Edm edm, final EdmType referringType, final Map<String, AliasQueryOption> aliases) throws UriParserException, UriValidationException { for (final UriParameter parameter : parameters) { final String parameterName = parameter.getName(); final EdmParameter edmParameter = function.getParameter(parameterName); final boolean isNullable = edmParameter.isNullable(); if (parameter.getText() == null && parameter.getExpression() == null && !isNullable) { if (parameter.getAlias() == null) { // No alias, value is explicitly null. throw new UriValidationException("Missing non-nullable parameter " + parameterName, UriValidationException.MessageKeys.MISSING_PARAMETER, parameterName); } else { final String valueForAlias = aliases.containsKey(parameter.getAlias()) ? parseAliasValue(parameter.getAlias(), edmParameter.getType(), edmParameter.isNullable(), edmParameter.isCollection(), edm, referringType, aliases).getText() : null; // Alias value is missing or explicitly null. if (valueForAlias == null) { throw new UriValidationException("Missing alias for " + parameterName, UriValidationException.MessageKeys.MISSING_ALIAS, parameter.getAlias()); } } } } }
private CustomFunction parseCustomFunction(final FullQualifiedName functionName, final EdmStructuredType referencedType) throws UriParserException, UriValidationException { final List<UriParameter> parameters = ParserHelper.parseFunctionParameters(tokenizer, edm, referencedType, true, aliases); final List<String> parameterNames = ParserHelper.getParameterNames(parameters); final EdmFunction function = edm.getBoundFunction(functionName, referencedType.getFullQualifiedName(), true, parameterNames); if (function == null) { throw new UriParserSemanticException("No function '" + functionName + "' found.", UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND, functionName.getFullQualifiedNameAsString()); } ParserHelper.validateFunctionParameters(function, parameters, edm, referencedType, aliases); // The binding parameter and the return type must be of type complex or entity collection. final EdmParameter bindingParameter = function.getParameter(function.getParameterNames().get(0)); final EdmReturnType returnType = function.getReturnType(); if (bindingParameter.getType().getKind() != EdmTypeKind.ENTITY && bindingParameter.getType().getKind() != EdmTypeKind.COMPLEX || !bindingParameter.isCollection() || returnType.getType().getKind() != EdmTypeKind.ENTITY && returnType.getType().getKind() != EdmTypeKind.COMPLEX || !returnType.isCollection()) { throw new UriParserSemanticException("Only entity- or complex-collection functions are allowed.", UriParserSemanticException.MessageKeys.FUNCTION_MUST_USE_COLLECTIONS, functionName.getFullQualifiedNameAsString()); } return new CustomFunctionImpl().setFunction(function).setParameters(parameters); }
private Object getValue(final EdmFunction edmFunction, final JPAParameter parameter, final String uriValue) throws ODataApplicationException { final String value = uriValue.replaceAll("'", ""); final EdmParameter edmParam = edmFunction.getParameter(parameter.getName()); try { switch (edmParam.getType().getKind()) { case PRIMITIVE: return ((EdmPrimitiveType) edmParam.getType()).valueOfString(value, false, edmParam.getMaxLength(), edmParam.getPrecision(), edmParam.getScale(), true, parameter.getType()); case ENUM: final JPAEnumerationAttribute enumeration = sd.getEnumType(parameter.getTypeFQN() .getFullQualifiedNameAsString()); return enumeration.enumOf(value); default: throw new ODataJPADBAdaptorException(ODataJPADBAdaptorException.MessageKeys.PARAMETER_CONVERSION_ERROR, HttpStatusCode.NOT_IMPLEMENTED, uriValue, parameter.getName()); } } catch (EdmPrimitiveTypeException | ODataJPAModelException e) { // Unable to convert value %1$s of parameter %2$s throw new ODataJPADBAdaptorException(ODataJPADBAdaptorException.MessageKeys.PARAMETER_CONVERSION_ERROR, HttpStatusCode.NOT_IMPLEMENTED, uriValue, parameter.getName()); } }
throws UriParserException, UriValidationException { for (UriParameter parameter : parameters) { EdmParameter edmParameter = function.getParameter(parameter.getName()); final EdmType type = edmParameter.getType(); final EdmTypeKind kind = type.getKind();
throws UriParserException, UriValidationException { for (UriParameter parameter : parameters) { EdmParameter edmParameter = function.getParameter(parameter.getName()); final EdmType type = edmParameter.getType(); final EdmTypeKind kind = type.getKind();