Search in sources :

Example 6 with ODataApplicationException

use of org.apache.olingo.odata2.api.exception.ODataApplicationException in project camel by apache.

the class Olingo2AppImpl method createBatchChangeSetPart.

private BatchChangeSetPart createBatchChangeSetPart(Edm edm, Map<String, String> contentIdMap, Olingo2BatchChangeRequest batchRequest) throws EdmException, URISyntaxException, EntityProviderException, IOException, ODataApplicationException {
    // build body string
    String resourcePath = batchRequest.getResourcePath();
    // is it a referenced entity?
    if (resourcePath.startsWith("$")) {
        resourcePath = replaceContentId(edm, resourcePath, contentIdMap);
    }
    final UriInfoWithType uriInfo = parseUri(edm, resourcePath, null);
    // serialize data into ODataResponse object, if set in request and this is not a DELETE request
    final Map<String, String> headers = new HashMap<String, String>();
    byte[] body = null;
    if (batchRequest.getBody() != null && !Operation.DELETE.equals(batchRequest.getOperation())) {
        final ODataResponse response = writeContent(edm, uriInfo, batchRequest.getBody());
        // copy response headers
        for (String header : response.getHeaderNames()) {
            headers.put(header, response.getHeader(header));
        }
        // get (http) entity which is for default Olingo2 implementation an InputStream
        body = response.getEntity() instanceof InputStream ? EntityProvider.readBinary((InputStream) response.getEntity()) : null;
        if (body != null) {
            headers.put(HttpHeaders.CONTENT_LENGTH, String.valueOf(body.length));
        }
    }
    // Olingo is sensitive to batch part charset case!!
    headers.put(HttpHeaders.ACCEPT, getResourceContentType(uriInfo).toString().toLowerCase());
    if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) {
        headers.put(HttpHeaders.CONTENT_TYPE, getContentType());
    }
    // add request headers
    headers.putAll(batchRequest.getHeaders());
    final String contentId = batchRequest.getContentId();
    if (contentId != null) {
        contentIdMap.put("$" + contentId, resourcePath);
    }
    return BatchChangeSetPart.uri(createBatchUri(batchRequest)).method(batchRequest.getOperation().getHttpMethod()).contentId(contentId).headers(headers).body(body == null ? null : new String(body, Consts.UTF_8)).build();
}
Also used : HashMap(java.util.HashMap) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ODataResponse(org.apache.olingo.odata2.api.processor.ODataResponse)

Example 7 with ODataApplicationException

use of org.apache.olingo.odata2.api.exception.ODataApplicationException in project camel by apache.

the class Olingo2AppImpl method writeContent.

private ODataResponse writeContent(Edm edm, UriInfoWithType uriInfo, Object content) throws ODataApplicationException, EdmException, EntityProviderException, URISyntaxException, IOException {
    String responseContentType = getContentType();
    ODataResponse response;
    switch(uriInfo.getUriType()) {
        case URI4:
        case URI5:
            // simple property
            final List<EdmProperty> simplePropertyPath = uriInfo.getPropertyPath();
            final EdmProperty simpleProperty = simplePropertyPath.get(simplePropertyPath.size() - 1);
            responseContentType = simpleProperty.getMimeType();
            if (uriInfo.isValue()) {
                response = EntityProvider.writePropertyValue(simpleProperty, content);
                responseContentType = TEXT_PLAIN_WITH_CS_UTF_8.toString();
            } else {
                response = EntityProvider.writeProperty(getContentType(), simpleProperty, content);
            }
            break;
        case URI3:
            // complex property
            final List<EdmProperty> complexPropertyPath = uriInfo.getPropertyPath();
            final EdmProperty complexProperty = complexPropertyPath.get(complexPropertyPath.size() - 1);
            response = EntityProvider.writeProperty(responseContentType, complexProperty, content);
            break;
        case URI7A:
            // $links with 0..1 cardinality property
            final EdmEntitySet targetLinkEntitySet = uriInfo.getTargetEntitySet();
            EntityProviderWriteProperties linkProperties = EntityProviderWriteProperties.serviceRoot(new URI(serviceUri + SEPARATOR)).build();
            @SuppressWarnings("unchecked") final Map<String, Object> linkMap = (Map<String, Object>) content;
            response = EntityProvider.writeLink(responseContentType, targetLinkEntitySet, linkMap, linkProperties);
            break;
        case URI7B:
            // $links with * cardinality property
            final EdmEntitySet targetLinksEntitySet = uriInfo.getTargetEntitySet();
            EntityProviderWriteProperties linksProperties = EntityProviderWriteProperties.serviceRoot(new URI(serviceUri + SEPARATOR)).build();
            @SuppressWarnings("unchecked") final List<Map<String, Object>> linksMap = (List<Map<String, Object>>) content;
            response = EntityProvider.writeLinks(responseContentType, targetLinksEntitySet, linksMap, linksProperties);
            break;
        case URI1:
        case URI2:
        case URI6A:
        case URI6B:
            // Entity
            final EdmEntitySet targetEntitySet = uriInfo.getTargetEntitySet();
            EntityProviderWriteProperties properties = EntityProviderWriteProperties.serviceRoot(new URI(serviceUri + SEPARATOR)).build();
            @SuppressWarnings("unchecked") final Map<String, Object> objectMap = (Map<String, Object>) content;
            response = EntityProvider.writeEntry(responseContentType, targetEntitySet, objectMap, properties);
            break;
        case URI9:
            // $batch
            @SuppressWarnings("unchecked") final List<Olingo2BatchRequest> batchParts = (List<Olingo2BatchRequest>) content;
            response = parseBatchRequest(edm, batchParts);
            break;
        default:
            // notify exception and return!!!
            throw new ODataApplicationException("Unsupported resource type " + uriInfo.getTargetType(), Locale.ENGLISH);
    }
    return response.getContentHeader() != null ? response : ODataResponse.fromResponse(response).contentHeader(responseContentType).build();
}
Also used : Olingo2BatchRequest(org.apache.camel.component.olingo2.api.batch.Olingo2BatchRequest) EntityProviderWriteProperties(org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties) URI(java.net.URI) ODataApplicationException(org.apache.olingo.odata2.api.exception.ODataApplicationException) ODataResponse(org.apache.olingo.odata2.api.processor.ODataResponse) List(java.util.List) ArrayList(java.util.ArrayList) EdmEntitySet(org.apache.olingo.odata2.api.edm.EdmEntitySet) EdmProperty(org.apache.olingo.odata2.api.edm.EdmProperty) Map(java.util.Map) HashMap(java.util.HashMap)

Aggregations

HashMap (java.util.HashMap)5 ODataApplicationException (org.apache.olingo.odata2.api.exception.ODataApplicationException)5 ByteArrayInputStream (java.io.ByteArrayInputStream)4 InputStream (java.io.InputStream)3 ArrayList (java.util.ArrayList)3 Map (java.util.Map)3 Olingo2BatchRequest (org.apache.camel.component.olingo2.api.batch.Olingo2BatchRequest)3 ContentType (org.apache.http.entity.ContentType)3 EdmProperty (org.apache.olingo.odata2.api.edm.EdmProperty)3 ODataResponse (org.apache.olingo.odata2.api.processor.ODataResponse)3 IOException (java.io.IOException)2 UnsupportedEncodingException (java.io.UnsupportedEncodingException)2 List (java.util.List)2 Olingo2BatchQueryRequest (org.apache.camel.component.olingo2.api.batch.Olingo2BatchQueryRequest)2 Olingo2BatchResponse (org.apache.camel.component.olingo2.api.batch.Olingo2BatchResponse)2 BasicHttpResponse (org.apache.http.message.BasicHttpResponse)2 HttpStatusCodes (org.apache.olingo.odata2.api.commons.HttpStatusCodes)2 EdmEntitySet (org.apache.olingo.odata2.api.edm.EdmEntitySet)2 EntityProviderException (org.apache.olingo.odata2.api.ep.EntityProviderException)2 URI (java.net.URI)1