public EdmFunction getFunction() { return this.uriResourceFunction.getFunction(); }
@Override public boolean isBound() { return this.uriResourceFunction.getFunctionImport() != null; }
@SuppressWarnings("unchecked") @Override public <T> List<T> executeFunctionQuery(final List<UriResource> uriResourceParts, final JPADataBaseFunction jpaFunction, final Class<T> resultClass, final EntityManager em) throws ODataApplicationException { final UriResourceFunction uriResourceFunction = (UriResourceFunction) uriResourceParts.get(uriResourceParts.size() - 1); final String queryString = generateQueryString(jpaFunction); final Query functionQuery = em.createNativeQuery(queryString, resultClass); int count = 1; try { for (final JPAParameter parameter : jpaFunction.getParameter()) { final UriParameter uriParameter = findParameterByExternalName(parameter, uriResourceFunction.getParameters()); final Object value = getValue(uriResourceFunction.getFunction(), parameter, uriParameter.getText()); functionQuery.setParameter(count, value); count += 1; } } catch (ODataJPAModelException e) { throw new ODataJPAProcessorException(e, HttpStatusCode.INTERNAL_SERVER_ERROR); } return functionQuery.getResultList(); }
private EdmBindingTarget getEntitySetFromFunctionImport(final UriResourceFunction uriResourceFunction) { EdmFunctionImport functionImport = uriResourceFunction.getFunctionImport(); if (functionImport != null && functionImport.getReturnedEntitySet() != null && !uriResourceFunction.isCollection()) { return functionImport.getReturnedEntitySet(); } return null; }
appendType(gen, "typeFilterOnEntry", ((UriResourceNavigation) resource).getTypeFilterOnEntry()); } else if (resource instanceof UriResourceFunction) { appendParameters(gen, "parameters", ((UriResourceFunction) resource).getParameters()); appendParameters(gen, "keys", ((UriResourceFunction) resource).getKeyPredicates()); appendType(gen, "typeFilterOnCollection", ((UriResourceFunction) resource).getTypeFilterOnCollection()); appendType(gen, "typeFilterOnEntry", ((UriResourceFunction) resource).getTypeFilterOnEntry()); } else if (resource instanceof UriResourceSingleton) { appendType(gen, "typeFilter", ((UriResourceSingleton) resource).getEntityTypeFilter());
private void handleFunctionDispatching(final ODataRequest request, final ODataResponse response, final UriResourceFunction uriResourceFunction) throws ODataApplicationException, ODataLibraryException { EdmFunction function = uriResourceFunction.getFunction(); if (function == null) { function = uriResourceFunction.getFunctionImport().getUnboundFunctions().get(0); } final EdmReturnType returnType = function.getReturnType(); switch (returnType.getType().getKind()) { case ENTITY: handleEntityDispatching(request, response, returnType.isCollection() && uriResourceFunction.getKeyPredicates().isEmpty(), false); break; case PRIMITIVE: handlePrimitiveDispatching(request, response, returnType.isCollection()); break; case COMPLEX: handleComplexDispatching(request, response, returnType.isCollection()); break; default: throw new ODataHandlerException(NOT_IMPLEMENTED_MESSAGE, ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED); } }
private static void blockTypeFilters(final UriResource uriResource,Locale locale) throws ODataApplicationException { if (uriResource instanceof UriResourceEntitySet && (((UriResourceEntitySet) uriResource).getTypeFilterOnCollection() != null || ((UriResourceEntitySet) uriResource).getTypeFilterOnEntry() != null) || uriResource instanceof UriResourceFunction && (((UriResourceFunction) uriResource).getTypeFilterOnCollection() != null || ((UriResourceFunction) uriResource).getTypeFilterOnEntry() != null) || uriResource instanceof UriResourceNavigation && (((UriResourceNavigation) uriResource).getTypeFilterOnCollection() != null || ((UriResourceNavigation) uriResource).getTypeFilterOnEntry() != null)) { getResourceLable(locale); throw new ODataApplicationException(labels.getString("TYPE_FILTERS_NOT_SUPPORTED"), HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), locale,labels.getString("TYPE_FILTERS_NOT_SUPPORTED_CODE")); } }
private UriType getUriTypeForFunction(final UriResource lastPathSegment) throws UriValidationException { final UriResourceFunction uriFunction = (UriResourceFunction) lastPathSegment; final boolean isCollection = uriFunction.isCollection(); final EdmTypeKind typeKind = uriFunction.getFunction().getReturnType().getType().getKind(); UriType uriType; switch (typeKind) { case ENTITY: uriType = isCollection ? UriType.entitySet : UriType.entity; break; case PRIMITIVE: case ENUM: case DEFINITION: uriType = isCollection ? UriType.propertyPrimitiveCollection : UriType.propertyPrimitive; break; case COMPLEX: uriType = isCollection ? UriType.propertyComplexCollection : UriType.propertyComplex; break; default: throw new UriValidationException("Unsupported function return type: " + typeKind, UriValidationException.MessageKeys.UNSUPPORTED_FUNCTION_RETURN_TYPE, typeKind.toString()); } return uriType; }
public List<UriParameter> getParameters() { return this.uriResourceFunction.getParameters(); }
private void handleValueDispatching(final ODataRequest request, final ODataResponse response, final int lastPathSegmentIndex) throws ODataApplicationException, ODataLibraryException { // The URI Parser already checked if $value is allowed here so we only have to dispatch to the correct processor final UriResource resource = uriInfo.getUriResourceParts().get(lastPathSegmentIndex - 1); if (resource instanceof UriResourceProperty || resource instanceof UriResourceFunction && ((UriResourceFunction) resource).getType().getKind() == EdmTypeKind.PRIMITIVE) { handlePrimitiveValueDispatching(request, response, resource); } else { handleMediaValueDispatching(request, response, resource); } }
appendType(gen, "typeFilterOnEntry", ((UriResourceNavigation) resource).getTypeFilterOnEntry()); } else if (resource instanceof UriResourceFunction) { appendParameters(gen, "parameters", ((UriResourceFunction) resource).getParameters()); appendParameters(gen, "keys", ((UriResourceFunction) resource).getKeyPredicates()); appendType(gen, "typeFilterOnCollection", ((UriResourceFunction) resource).getTypeFilterOnCollection()); appendType(gen, "typeFilterOnEntry", ((UriResourceFunction) resource).getTypeFilterOnEntry()); } else if (resource instanceof UriResourceSingleton) { appendType(gen, "typeFilter", ((UriResourceSingleton) resource).getEntityTypeFilter());
private void handleFunctionDispatching(final ODataRequest request, final ODataResponse response, final UriResourceFunction uriResourceFunction) throws ODataApplicationException, ODataLibraryException { EdmFunction function = uriResourceFunction.getFunction(); if (function == null) { function = uriResourceFunction.getFunctionImport().getUnboundFunctions().get(0); } final EdmReturnType returnType = function.getReturnType(); switch (returnType.getType().getKind()) { case ENTITY: handleEntityDispatching(request, response, returnType.isCollection() && uriResourceFunction.getKeyPredicates().isEmpty(), false); break; case PRIMITIVE: handlePrimitiveDispatching(request, response, returnType.isCollection()); break; case COMPLEX: handleComplexDispatching(request, response, returnType.isCollection()); break; default: throw new ODataHandlerException(NOT_IMPLEMENTED_MESSAGE, ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED); } }
private void blockTypeFilters(final UriResource uriResource) throws ODataApplicationException { if (uriResource instanceof UriResourceEntitySet && (((UriResourceEntitySet) uriResource).getTypeFilterOnCollection() != null || ((UriResourceEntitySet) uriResource).getTypeFilterOnEntry() != null) || uriResource instanceof UriResourceFunction && (((UriResourceFunction) uriResource).getTypeFilterOnCollection() != null || ((UriResourceFunction) uriResource).getTypeFilterOnEntry() != null) || uriResource instanceof UriResourceNavigation && (((UriResourceNavigation) uriResource).getTypeFilterOnCollection() != null || ((UriResourceNavigation) uriResource).getTypeFilterOnEntry() != null)) { throw new ODataApplicationException("Type filters are not supported.", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } }
private EdmBindingTarget getEntitySetFromFunctionImport(final UriResourceFunction uriResourceFunction) { EdmFunctionImport functionImport = uriResourceFunction.getFunctionImport(); if (functionImport != null && functionImport.getReturnedEntitySet() != null && !uriResourceFunction.isCollection()) { return functionImport.getReturnedEntitySet(); } return null; }
private UriType getUriTypeForFunction(final UriResource lastPathSegment) throws UriValidationException { final UriResourceFunction uriFunction = (UriResourceFunction) lastPathSegment; final boolean isCollection = uriFunction.isCollection(); final EdmTypeKind typeKind = uriFunction.getFunction().getReturnType().getType().getKind(); UriType uriType; switch (typeKind) { case ENTITY: uriType = isCollection ? UriType.entitySet : UriType.entity; break; case PRIMITIVE: case ENUM: case DEFINITION: uriType = isCollection ? UriType.propertyPrimitiveCollection : UriType.propertyPrimitive; break; case COMPLEX: uriType = isCollection ? UriType.propertyComplexCollection : UriType.propertyComplex; break; default: throw new UriValidationException("Unsupported function return type: " + typeKind, UriValidationException.MessageKeys.UNSUPPORTED_FUNCTION_RETURN_TYPE, typeKind.toString()); } return uriType; }
public List<UriParameter> getParameters() { return this.uriResourceFunction.getParameters(); }
private void handleValueDispatching(final ODataRequest request, final ODataResponse response, final int lastPathSegmentIndex) throws ODataApplicationException, ODataLibraryException { // The URI Parser already checked if $value is allowed here so we only have to dispatch to the correct processor final UriResource resource = uriInfo.getUriResourceParts().get(lastPathSegmentIndex - 1); if (resource instanceof UriResourceProperty || resource instanceof UriResourceFunction && ((UriResourceFunction) resource).getType().getKind() == EdmTypeKind.PRIMITIVE) { handlePrimitiveValueDispatching(request, response, resource); } else { handleMediaValueDispatching(request, response, resource); } }
putType(node, TYPE_FILTER_ON_ENTRY_NAME, ((UriResourceNavigation) segment).getTypeFilterOnEntry()); } else if (segment instanceof UriResourceFunction) { putParameters(node, PARAMETERS_NAME, ((UriResourceFunction) segment).getParameters()); putParameters(node, KEYS_NAME, ((UriResourceFunction) segment).getKeyPredicates()); putType(node, TYPE_FILTER_ON_COLLECTION_NAME, ((UriResourceFunction) segment).getTypeFilterOnCollection()); putType(node, TYPE_FILTER_ON_ENTRY_NAME, ((UriResourceFunction) segment).getTypeFilterOnEntry()); } else if (segment instanceof UriResourceIt) { putType(node, TYPE_FILTER_ON_COLLECTION_NAME, ((UriResourceIt) segment).getTypeFilterOnCollection());
public EdmFunction getFunction() { return this.uriResourceFunction.getFunction(); }
@SuppressWarnings("unchecked") @Override public <T> java.util.List<T> executeFunctionQuery(final List<UriResource> uriResourceParts, final JPADataBaseFunction jpaFunction, final Class<T> resultClass, final EntityManager em) throws ODataApplicationException { final UriResourceFunction uriResourceFunction = (UriResourceFunction) uriResourceParts.get(uriResourceParts.size() - 1); final String queryString = generateQueryString(jpaFunction); final Query functionQuery = em.createNativeQuery(queryString, resultClass); int count = 1; try { for (final JPAParameter parameter : jpaFunction.getParameter()) { final UriParameter uriParameter = findParameterByExternalName(parameter, uriResourceFunction.getParameters()); final Object value = getValue(uriResourceFunction.getFunction(), parameter, uriParameter.getText()); functionQuery.setParameter(count, value); count += 1; } } catch (ODataJPAModelException e) { throw new ODataJPAProcessorException(e, HttpStatusCode.INTERNAL_SERVER_ERROR); } return functionQuery.getResultList(); }