private void appendFunctionImports(final XMLStreamWriter writer, final List<EdmFunctionImport> functionImports, final String containerNamespace) throws XMLStreamException { for (EdmFunctionImport functionImport : functionImports) { writer.writeStartElement(XML_FUNCTION_IMPORT); writer.writeAttribute(XML_NAME, functionImport.getName()); String functionFQNString; FullQualifiedName functionFqn = functionImport.getFunctionFqn(); if (namespaceToAlias.get(functionFqn.getNamespace()) != null) { functionFQNString = namespaceToAlias.get(functionFqn.getNamespace()) + "." + functionFqn.getName(); } else { functionFQNString = functionFqn.getFullQualifiedNameAsString(); } writer.writeAttribute(XML_FUNCTION, functionFQNString); EdmEntitySet returnedEntitySet = functionImport.getReturnedEntitySet(); if (returnedEntitySet != null) { writer.writeAttribute(XML_ENTITY_SET, containerNamespace + "." + returnedEntitySet.getName()); } // Default is false and we do not write the default if (functionImport.isIncludeInServiceDocument()) { writer.writeAttribute(XML_INCLUDE_IN_SERVICE_DOCUMENT, "" + functionImport.isIncludeInServiceDocument()); } appendAnnotations(writer, functionImport); writer.writeEndElement(); } }
private void writeFunctionImports(final JsonGenerator gen, final EdmEntityContainer container) throws IOException { for (EdmFunctionImport edmFI : container.getFunctionImports()) { if (edmFI.isIncludeInServiceDocument()) { writeElement(gen, FUNCTION_IMPORT, edmFI.getName(), edmFI.getName(), edmFI.getTitle()); } } }
private EdmBindingTarget getEntitySetFromFunctionImport(final UriResourceFunction uriResourceFunction) { EdmFunctionImport functionImport = uriResourceFunction.getFunctionImport(); if (functionImport != null && functionImport.getReturnedEntitySet() != null && !uriResourceFunction.isCollection()) { return functionImport.getReturnedEntitySet(); } return null; }
EdmFunction function = null; if (edmFunctionImport != null) { function = edmFunctionImport.getUnboundFunction(names); if (function == null) { throw new UriParserSemanticException( "Function of function import '" + edmFunctionImport.getName() + "' " + "with parameters " + names.toString() + " not found.", UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND, edmFunctionImport.getName(), names.toString());
/** * This methods validates edm function imports. * It checks if function imports are part of correct container and * functions defined for function imports are correct */ private void validateEdmFunctionImport() { for (Map.Entry<FullQualifiedName, EdmEntityContainer> container : edmContainersMap.entrySet()) { for (EdmFunctionImport functionImport : container.getValue().getFunctionImports()) { FullQualifiedName fqFunction = functionImport.getFunctionFqn(); if (!(edmFunctionsMap.containsKey(fqFunction))) { validateEdmFunctionsWithAlias(fqFunction); } } } }
private Map.Entry<URI, EdmOperation> getUnboundOperation( final Operation operation, final List<String> parameterNames) { final EdmEntityContainer container = getClient().getCachedEdm().getEntityContainer(targetFQN); final EdmOperation edmOperation; if (operation.type() == OperationType.FUNCTION) { edmOperation = container.getFunctionImport(operation.name()).getUnboundFunction(parameterNames); } else { edmOperation = container.getActionImport(operation.name()).getUnboundAction(); } final URIBuilder uriBuilder = getClient().newURIBuilder(). appendOperationCallSegment(edmOperation.getName()); return new AbstractMap.SimpleEntry<URI, EdmOperation>(uriBuilder.build(), edmOperation); }
@Override public String getSegmentValue() { return functionImport == null ? (function == null ? "" : function.getName()) : functionImport.getName(); } }
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 EdmBindingTarget getEntitySetFromFunctionImport(final UriResourceFunction uriResourceFunction) { EdmFunctionImport functionImport = uriResourceFunction.getFunctionImport(); if (functionImport != null && functionImport.getReturnedEntitySet() != null && !uriResourceFunction.isCollection()) { return functionImport.getReturnedEntitySet(); } return null; }
EdmFunction function = null; if (edmFunctionImport != null) { function = edmFunctionImport.getUnboundFunction(names); if (function == null) { throw new UriParserSemanticException( "Function of function import '" + edmFunctionImport.getName() + "' " + "with parameters " + names.toString() + " not found.", UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND, edmFunctionImport.getName(), names.toString());
/** * This methods validates edm function imports. * It checks if function imports are part of correct container and * functions defined for function imports are correct */ private void validateEdmFunctionImport() { for (Map.Entry<FullQualifiedName, EdmEntityContainer> container : edmContainersMap.entrySet()) { for (EdmFunctionImport functionImport : container.getValue().getFunctionImports()) { FullQualifiedName fqFunction = functionImport.getFunctionFqn(); if (!(edmFunctionsMap.containsKey(fqFunction))) { validateEdmFunctionsWithAlias(fqFunction); } } } }
private Map.Entry<URI, EdmOperation> getUnboundOperation( final Operation operation, final List<String> parameterNames) { final EdmEntityContainer container = getClient().getCachedEdm().getEntityContainer(targetFQN); final EdmOperation edmOperation; if (operation.type() == OperationType.FUNCTION) { edmOperation = container.getFunctionImport(operation.name()).getUnboundFunction(parameterNames); } else { edmOperation = container.getActionImport(operation.name()).getUnboundAction(); } final URIBuilder uriBuilder = getClient().newURIBuilder(). appendOperationCallSegment(edmOperation.getName()); return new AbstractMap.SimpleEntry<URI, EdmOperation>(uriBuilder.build(), edmOperation); }
@Override public String getSegmentValue() { return functionImport == null ? (function == null ? "" : function.getName()) : functionImport.getName(); } }
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 appendFunctionImports(final XMLStreamWriter writer, final List<EdmFunctionImport> functionImports, final String containerNamespace) throws XMLStreamException { for (EdmFunctionImport functionImport : functionImports) { writer.writeStartElement(XML_FUNCTION_IMPORT); writer.writeAttribute(XML_NAME, functionImport.getName()); String functionFQNString; FullQualifiedName functionFqn = functionImport.getFunctionFqn(); if (namespaceToAlias.get(functionFqn.getNamespace()) != null) { functionFQNString = namespaceToAlias.get(functionFqn.getNamespace()) + "." + functionFqn.getName(); } else { functionFQNString = functionFqn.getFullQualifiedNameAsString(); } writer.writeAttribute(XML_FUNCTION, functionFQNString); EdmEntitySet returnedEntitySet = functionImport.getReturnedEntitySet(); if (returnedEntitySet != null) { writer.writeAttribute(XML_ENTITY_SET, containerNamespace + "." + returnedEntitySet.getName()); } // Default is false and we do not write the default if (functionImport.isIncludeInServiceDocument()) { writer.writeAttribute(XML_INCLUDE_IN_SERVICE_DOCUMENT, "" + functionImport.isIncludeInServiceDocument()); } appendAnnotations(writer, functionImport); writer.writeEndElement(); } }
public static EdmEntitySet getStartingEdmEntitySet(final UriInfoResource uriInfo,Locale locale) throws ODataApplicationException { EdmEntitySet entitySet = null; final List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // First must be an entity, an entity collection, a function import, or an action import. blockTypeFilters(resourcePaths.get(0),locale); if (resourcePaths.get(0) instanceof UriResourceEntitySet) { entitySet = ((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet(); }else if (resourcePaths.get(0) instanceof UriResourceFunction) { entitySet = ((UriResourceFunction) resourcePaths.get(0)).getFunctionImport().getReturnedEntitySet(); } else if (resourcePaths.get(0) instanceof UriResourceAction) { entitySet = ((UriResourceAction) resourcePaths.get(0)).getActionImport().getReturnedEntitySet(); } else { getResourceLable(locale); throw new ODataApplicationException(labels.getString("INVALID_RESOURCE_TYPE"), HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), locale,labels.getString("INVALID_RESOURCE_TYPE_CODE")); } return entitySet; }
private void writeFunctionImports(final JsonGenerator gen, final EdmEntityContainer container) throws IOException { for (EdmFunctionImport edmFI : container.getFunctionImports()) { if (edmFI.isIncludeInServiceDocument()) { writeElement(gen, FUNCTION_IMPORT, edmFI.getName(), edmFI.getName(), edmFI.getTitle()); } } }
@Override @SuppressWarnings("unchecked") public <RES extends ClientInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest( final String functionImportName, final Map<String, ClientValue> parameters) { EdmFunctionImport efi = null; for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) { final EdmEntityContainer container = schema.getEntityContainer(); if (container != null) { efi = container.getFunctionImport(functionImportName); } } if (efi == null) { throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName); } final EdmFunction function = edmClient.getCachedEdm(). getUnboundFunction(efi.getFunctionFqn(), parameters == null ? null : new ArrayList<String>(parameters.keySet())); if (function == null) { throw new IllegalArgumentException("Could not find Function " + efi.getFunctionFqn()); } return (ODataInvokeRequest<RES>) getInvokeRequest(HttpMethod.GET, edmClient.newURIBuilder().appendOperationCallSegment(functionImportName).build(), getResultReference(function.getReturnType()), parameters); }
private void appendFunctionImports(final JsonGenerator json, final List<EdmFunctionImport> functionImports, final String containerNamespace) throws SerializerException, IOException { for (EdmFunctionImport functionImport : functionImports) { json.writeObjectFieldStart(functionImport.getName()); json.writeStringField(KIND, Kind.FunctionImport.name()); String functionFQNString; FullQualifiedName functionFqn = functionImport.getFunctionFqn(); if (namespaceToAlias.get(functionFqn.getNamespace()) != null) { functionFQNString = namespaceToAlias.get(functionFqn.getNamespace()) + "." + functionFqn.getName(); } else { functionFQNString = functionFqn.getFullQualifiedNameAsString(); } json.writeStringField(DOLLAR + Kind.Function.name(), functionFQNString); EdmEntitySet returnedEntitySet = functionImport.getReturnedEntitySet(); if (returnedEntitySet != null) { json.writeStringField(DOLLAR + Kind.EntitySet.name(), containerNamespace + "." + returnedEntitySet.getName()); } // Default is false and we do not write the default if (functionImport.isIncludeInServiceDocument()) { json.writeBooleanField(INCLUDE_IN_SERV_DOC, functionImport.isIncludeInServiceDocument()); } appendAnnotations(json, functionImport, null); json.writeEndObject(); } }
entitySet = ((UriResourceEntitySet) resourcePaths.get(0)).getEntitySet(); } else if (resourcePaths.get(0) instanceof UriResourceFunction) { entitySet = ((UriResourceFunction) resourcePaths.get(0)).getFunctionImport().getReturnedEntitySet(); } else if (resourcePaths.get(0) instanceof UriResourceAction) { entitySet = ((UriResourceAction) resourcePaths.get(0)).getActionImport().getReturnedEntitySet();