public void cacheFunction(final FullQualifiedName functionName, final EdmFunction function) { final FunctionMapKey key = new FunctionMapKey(functionName, function.getBindingParameterTypeFqn(), function.isBindingParameterTypeCollection(), function.getParameterNames()); if (function.isBound()) { boundFunctions.put(key, function); } else { if (!unboundFunctionsByName.containsKey(functionName)) { unboundFunctionsByName.put(functionName, new ArrayList<EdmFunction>()); } unboundFunctionsByName.get(functionName).add(function); unboundFunctionsByKey.put(key, function); } }
public void cacheFunction(final FullQualifiedName functionName, final EdmFunction function) { final FunctionMapKey key = new FunctionMapKey(functionName, function.getBindingParameterTypeFqn(), function.isBindingParameterTypeCollection(), function.getParameterNames()); if (function.isBound()) { boundFunctions.put(key, function); } else { if (!unboundFunctionsByName.containsKey(functionName)) { unboundFunctionsByName.put(functionName, new ArrayList<EdmFunction>()); } unboundFunctionsByName.get(functionName).add(function); unboundFunctionsByKey.put(key, function); } }
params.append(fqn); nameFQN.append(fqn); if (!function.getParameterNames().isEmpty() && function.getParameterNames().size() > 1) { params.append("("); nameFQN.append("("); boolean first = true; for (int i = 1; i < function.getParameterNames().size(); i++) { String parameterName = function.getParameterNames().get(i); EdmParameter p = function.getParameter(parameterName); if (first) {
params.append(fqn); nameFQN.append(fqn); if (!function.getParameterNames().isEmpty() && function.getParameterNames().size() > 1) { params.append("("); nameFQN.append("("); boolean first = true; for (int i = 1; i < function.getParameterNames().size(); i++) { String parameterName = function.getParameterNames().get(i); EdmParameter p = function.getParameter(parameterName); if (first) {
@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; }
@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; } }
@Override public List<EdmFunction> getUnboundFunctions(final FullQualifiedName functionName) { final FullQualifiedName functionFqn = resolvePossibleAlias(functionName); List<EdmFunction> functions = unboundFunctionsByName.get(functionFqn); if (functions == null) { functions = createUnboundFunctions(functionFqn); if (functions != null) { unboundFunctionsByName.put(functionFqn, functions); for (EdmFunction unbound : functions) { final FunctionMapKey key = new FunctionMapKey( new FullQualifiedName(unbound.getNamespace(), unbound.getName()), unbound.getBindingParameterTypeFqn(), unbound.isBindingParameterTypeCollection(), unbound.getParameterNames()); unboundFunctionsByKey.put(key, unbound); } } } return functions; }
@Override public List<EdmFunction> getUnboundFunctions(final FullQualifiedName functionName) { final FullQualifiedName functionFqn = resolvePossibleAlias(functionName); List<EdmFunction> functions = unboundFunctionsByName.get(functionFqn); if (functions == null) { functions = createUnboundFunctions(functionFqn); if (functions != null) { unboundFunctionsByName.put(functionFqn, functions); for (EdmFunction unbound : functions) { final FunctionMapKey key = new FunctionMapKey( new FullQualifiedName(unbound.getNamespace(), unbound.getName()), unbound.getBindingParameterTypeFqn(), unbound.isBindingParameterTypeCollection(), unbound.getParameterNames()); unboundFunctionsByKey.put(key, unbound); } } } return functions; }
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 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); }