Java Code Examples for org.apache.olingo.server.api.serializer.ODataSerializer#entityCollection()
The following examples show how to use
org.apache.olingo.server.api.serializer.ODataSerializer#entityCollection() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: GenericEntityCollectionProcessor.java From spring-boot-Olingo-oData with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st we have retrieve the requested EntitySet from the uriInfo object // (representation of the parsed service URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths .get(0); // in our example, the first segment is the EntitySet EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // // it has to be delivered as EntitySet object EntitySet entitySet = getData(uriInfo); // 3rd: create a serializer based on the requested format (json) ODataFormat format = ODataFormat.fromContentType(responseFormat); ODataSerializer serializer = odata.createSerializer(format); // 4th: Now serialize the content: transform from the EntitySet object // to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet) .build(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions .with().contextURL(contextUrl).build(); InputStream serializedContent = serializer.entityCollection( edmEntityType, entitySet, opts); // Finally: configure the response object: set the body, headers and // status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 2
Source File: DemoEntityCollectionProcessor.java From cxf with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st we have retrieve the requested EntitySet from the uriInfo object // (representation of the parsed service URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // In our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object EntityCollection entitySet = getData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // 4th: Now serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializedContent = serializer.entityCollection(serviceMetadata, edmEntityType, entitySet, opts); // Finally: configure the response object: set the body, headers and status code response.setContent(serializedContent.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 3
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object EntityCollection entitySet = storage.readEntitySetData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializedContent = serializer.entityCollection(serviceMetadata, edmEntityType, entitySet, opts); // Finally: configure the response object: set the body, headers and status code response.setContent(serializedContent.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 4
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object EntityCollection entitySet = storage.readEntitySetData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializedContent = serializer.entityCollection(serviceMetadata, edmEntityType, entitySet, opts); // Finally: configure the response object: set the body, headers and status code response.setContent(serializedContent.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 5
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
private void readFunctionImportCollection(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo, final ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st step: Analyze the URI and fetch the entity collection returned by the function import // Function Imports are always the first segment of the resource path final UriResource firstSegment = uriInfo.getUriResourceParts().get(0); if(!(firstSegment instanceof UriResourceFunction)) { throw new ODataApplicationException("Not implemented", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ENGLISH); } final UriResourceFunction uriResourceFunction = (UriResourceFunction) firstSegment; final EntityCollection entityCol = storage.readFunctionImportCollection(uriResourceFunction, serviceMetadata); // 2nd step: Serialize the response entity final EdmEntityType edmEntityType = (EdmEntityType) uriResourceFunction.getFunction().getReturnType().getType(); final ContextURL contextURL = ContextURL.with().asCollection().type(edmEntityType).build(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().contextURL(contextURL).build(); final ODataSerializer serializer = odata.createSerializer(responseFormat); final SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCol, opts); // 3rd configure the response object response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 6
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st we have retrieve the requested EntitySet from the uriInfo object (representation of the parsed service URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); // in our example, the first segment is the EntitySet EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object EntityCollection entitySet = getData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // 4th: Now serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializedContent = serializer.entityCollection(serviceMetadata, edmEntityType, entitySet, opts); // Finally: configure the response object: set the body, headers and status code response.setContent(serializedContent.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 7
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
private void readFunctionImportCollection(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo, final ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st step: Analyze the URI and fetch the entity collection returned by the function import // Function Imports are always the first segment of the resource path final UriResource firstSegment = uriInfo.getUriResourceParts().get(0); if(!(firstSegment instanceof UriResourceFunction)) { throw new ODataApplicationException("Not implemented", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ENGLISH); } final UriResourceFunction uriResourceFunction = (UriResourceFunction) firstSegment; final EntityCollection entityCol = storage.readFunctionImportCollection(uriResourceFunction, serviceMetadata); // 2nd step: Serialize the response entity final EdmEntityType edmEntityType = (EdmEntityType) uriResourceFunction.getFunction().getReturnType().getType(); final ContextURL contextURL = ContextURL.with().asCollection().type(edmEntityType).build(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().contextURL(contextURL).build(); final ODataSerializer serializer = odata.createSerializer(responseFormat); final SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCol, opts); // 3rd configure the response object response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 8
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 5 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); // in our example, the first segment is the EntitySet EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 4th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 9
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { EdmEntitySet responseEdmEntitySet = null; // we'll need this to build the ContextURL EntityCollection responseEntityCollection = null; // we'll need this to set the response body // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourceParts = uriInfo.getUriResourceParts(); int segmentCount = resourceParts.size(); UriResource uriResource = resourceParts.get(0); // in our example, the first segment is the EntitySet if (!(uriResource instanceof UriResourceEntitySet)) { throw new ODataApplicationException("Only EntitySet is supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) uriResource; EdmEntitySet startEdmEntitySet = uriResourceEntitySet.getEntitySet(); if (segmentCount == 1) { // this is the case for: DemoService/DemoService.svc/Categories responseEdmEntitySet = startEdmEntitySet; // the response body is built from the first (and only) entitySet // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet responseEntityCollection = storage.readEntitySetData(startEdmEntitySet); } else if (segmentCount == 2) { // in case of navigation: DemoService.svc/Categories(3)/Products UriResource lastSegment = resourceParts.get(1); // in our example we don't support more complex URIs if (lastSegment instanceof UriResourceNavigation) { UriResourceNavigation uriResourceNavigation = (UriResourceNavigation) lastSegment; EdmNavigationProperty edmNavigationProperty = uriResourceNavigation.getProperty(); EdmEntityType targetEntityType = edmNavigationProperty.getType(); // from Categories(1) to Products responseEdmEntitySet = Util.getNavigationTargetEntitySet(startEdmEntitySet, edmNavigationProperty); // 2nd: fetch the data from backend // first fetch the entity where the first segment of the URI points to List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); // e.g. for Categories(3)/Products we have to find the single entity: Category with ID 3 Entity sourceEntity = storage.readEntityData(startEdmEntitySet, keyPredicates); // error handling for e.g. DemoService.svc/Categories(99)/Products if (sourceEntity == null) { throw new ODataApplicationException("Entity not found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // then fetch the entity collection where the entity navigates to // note: we don't need to check uriResourceNavigation.isCollection(), // because we are the EntityCollectionProcessor responseEntityCollection = storage.getRelatedEntityCollection(sourceEntity, targetEntityType); } } else { // this would be the case for e.g. Products(1)/Category/Products throw new ODataApplicationException("Not supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } // 3rd: create and configure a serializer ContextURL contextUrl = ContextURL.with().entitySet(responseEdmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + responseEdmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); EdmEntityType edmEntityType = responseEdmEntitySet.getEntityType(); ODataSerializer serializer = odata.createSerializer(responseFormat); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, responseEntityCollection, opts); // 4th: configure the response object: set the body, headers and status code response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 10
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { EdmEntitySet responseEdmEntitySet = null; // we'll need this to build the ContextURL EntityCollection responseEntityCollection = null; // we'll need this to set the response body // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourceParts = uriInfo.getUriResourceParts(); int segmentCount = resourceParts.size(); UriResource uriResource = resourceParts.get(0); // in our example, the first segment is the EntitySet if (!(uriResource instanceof UriResourceEntitySet)) { throw new ODataApplicationException("Only EntitySet is supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) uriResource; EdmEntitySet startEdmEntitySet = uriResourceEntitySet.getEntitySet(); if (segmentCount == 1) { // this is the case for: DemoService/DemoService.svc/Categories responseEdmEntitySet = startEdmEntitySet; // the response body is built from the first (and only) entitySet // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet responseEntityCollection = storage.readEntitySetData(startEdmEntitySet); } else if (segmentCount == 2) { // in case of navigation: DemoService.svc/Categories(3)/Products UriResource lastSegment = resourceParts.get(1); // in our example we don't support more complex URIs if (lastSegment instanceof UriResourceNavigation) { UriResourceNavigation uriResourceNavigation = (UriResourceNavigation) lastSegment; EdmNavigationProperty edmNavigationProperty = uriResourceNavigation.getProperty(); EdmEntityType targetEntityType = edmNavigationProperty.getType(); // from Categories(1) to Products responseEdmEntitySet = Util.getNavigationTargetEntitySet(startEdmEntitySet, edmNavigationProperty); // 2nd: fetch the data from backend // first fetch the entity where the first segment of the URI points to List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); // e.g. for Categories(3)/Products we have to find the single entity: Category with ID 3 Entity sourceEntity = storage.readEntityData(startEdmEntitySet, keyPredicates); // error handling for e.g. DemoService.svc/Categories(99)/Products if (sourceEntity == null) { throw new ODataApplicationException("Entity not found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // then fetch the entity collection where the entity navigates to // note: we don't need to check uriResourceNavigation.isCollection(), // because we are the EntityCollectionProcessor responseEntityCollection = storage.getRelatedEntityCollection(sourceEntity, targetEntityType); } } else { // this would be the case for e.g. Products(1)/Category/Products throw new ODataApplicationException("Not supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } // 3rd: create and configure a serializer ContextURL contextUrl = ContextURL.with().entitySet(responseEdmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + responseEdmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); EdmEntityType edmEntityType = responseEdmEntitySet.getEntityType(); ODataSerializer serializer = odata.createSerializer(responseFormat); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, responseEntityCollection, opts); // 4th: configure the response object: set the body, headers and status code response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 11
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); List<Entity> entityList = entityCollection.getEntities(); // 3rd apply $orderby OrderByOption orderByOption = uriInfo.getOrderByOption(); if (orderByOption != null) { List<OrderByItem> orderItemList = orderByOption.getOrders(); final OrderByItem orderByItem = orderItemList.get(0); // in our example we support only one Expression expression = orderByItem.getExpression(); if(expression instanceof Member){ UriInfoResource resourcePath = ((Member)expression).getResourcePath(); UriResource uriResource = resourcePath.getUriResourceParts().get(0); if (uriResource instanceof UriResourcePrimitiveProperty) { EdmProperty edmProperty = ((UriResourcePrimitiveProperty)uriResource).getProperty(); final String sortPropertyName = edmProperty.getName(); // do the sorting for the list of entities Collections.sort(entityList, new Comparator<Entity>() { // we delegate the sorting to the native sorter of Integer and String public int compare(Entity entity1, Entity entity2) { int compareResult = 0; if(sortPropertyName.equals("ID")){ Integer integer1 = (Integer) entity1.getProperty(sortPropertyName).getValue(); Integer integer2 = (Integer) entity2.getProperty(sortPropertyName).getValue(); compareResult = integer1.compareTo(integer2); }else{ String propertyValue1 = (String) entity1.getProperty(sortPropertyName).getValue(); String propertyValue2 = (String) entity2.getProperty(sortPropertyName).getValue(); compareResult = propertyValue1.compareTo(propertyValue2); } // if 'desc' is specified in the URI, change the order of the list if(orderByItem.isDescending()){ return - compareResult; // just convert the result to negative value to change the order } return compareResult; } }); } } } // 4th: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().id(id).contextURL(contextUrl).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 5th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 12
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { EdmEntitySet responseEdmEntitySet = null; // we'll need this to build the ContextURL EntityCollection responseEntityCollection = null; // we'll need this to set the response body // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourceParts = uriInfo.getUriResourceParts(); int segmentCount = resourceParts.size(); UriResource uriResource = resourceParts.get(0); // in our example, the first segment is the EntitySet if (!(uriResource instanceof UriResourceEntitySet)) { throw new ODataApplicationException("Only EntitySet is supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) uriResource; EdmEntitySet startEdmEntitySet = uriResourceEntitySet.getEntitySet(); if (segmentCount == 1) { // this is the case for: DemoService/DemoService.svc/Categories responseEdmEntitySet = startEdmEntitySet; // the response body is built from the first (and only) entitySet // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet responseEntityCollection = storage.readEntitySetData(startEdmEntitySet); } else if (segmentCount == 2) { // in case of navigation: DemoService.svc/Categories(3)/Products UriResource lastSegment = resourceParts.get(1); // in our example we don't support more complex URIs if (lastSegment instanceof UriResourceNavigation) { UriResourceNavigation uriResourceNavigation = (UriResourceNavigation) lastSegment; EdmNavigationProperty edmNavigationProperty = uriResourceNavigation.getProperty(); // from Categories(1) to Products responseEdmEntitySet = Util.getNavigationTargetEntitySet(startEdmEntitySet, edmNavigationProperty); // 2nd: fetch the data from backend // first fetch the entity where the first segment of the URI points to List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); // e.g. for Categories(3)/Products we have to find the single entity: Category with ID 3 Entity sourceEntity = storage.readEntityData(startEdmEntitySet, keyPredicates); // error handling for e.g. DemoService.svc/Categories(99)/Products if (sourceEntity == null) { throw new ODataApplicationException("Entity not found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // then fetch the entity collection where the entity navigates to // note: we don't need to check uriResourceNavigation.isCollection(), // because we are the EntityCollectionProcessor responseEntityCollection = storage.getRelatedEntityCollection(sourceEntity, uriResourceNavigation); } } else { // this would be the case for e.g. Products(1)/Category/Products throw new ODataApplicationException("Not supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } // 3rd: create and configure a serializer ContextURL contextUrl = ContextURL.with().entitySet(responseEdmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + responseEdmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); EdmEntityType edmEntityType = responseEdmEntitySet.getEntityType(); ODataSerializer serializer = odata.createSerializer(responseFormat); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, responseEntityCollection, opts); // 4th: configure the response object: set the body, headers and status code response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 13
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { EdmEntitySet responseEdmEntitySet = null; // we'll need this to build the ContextURL EntityCollection responseEntityCollection = null; // we'll need this to set the response body EdmEntityType responseEdmEntityType = null; // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourceParts = uriInfo.getUriResourceParts(); int segmentCount = resourceParts.size(); UriResource uriResource = resourceParts.get(0); // in our example, the first segment is the EntitySet if (!(uriResource instanceof UriResourceEntitySet)) { throw new ODataApplicationException("Only EntitySet is supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) uriResource; EdmEntitySet startEdmEntitySet = uriResourceEntitySet.getEntitySet(); if (segmentCount == 1) { // this is the case for: DemoService/DemoService.svc/Categories responseEdmEntitySet = startEdmEntitySet; // the response body is built from the first (and only) entitySet // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet responseEntityCollection = storage.readEntitySetData(startEdmEntitySet); } else if (segmentCount == 2) { // in case of navigation: DemoService.svc/Categories(3)/Products UriResource lastSegment = resourceParts.get(1); // in our example we don't support more complex URIs if (lastSegment instanceof UriResourceNavigation) { UriResourceNavigation uriResourceNavigation = (UriResourceNavigation) lastSegment; EdmNavigationProperty edmNavigationProperty = uriResourceNavigation.getProperty(); EdmEntityType targetEntityType = edmNavigationProperty.getType(); if (!edmNavigationProperty.containsTarget()) { // from Categories(1) to Products responseEdmEntitySet = Util.getNavigationTargetEntitySet(startEdmEntitySet, edmNavigationProperty); } else { responseEdmEntitySet = startEdmEntitySet; responseEdmEntityType = targetEntityType; } // 2nd: fetch the data from backend // first fetch the entity where the first segment of the URI points to List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); // e.g. for Categories(3)/Products we have to find the single entity: Category with ID 3 Entity sourceEntity = storage.readEntityData(startEdmEntitySet, keyPredicates); // error handling for e.g. DemoService.svc/Categories(99)/Products if (sourceEntity == null) { throw new ODataApplicationException("Entity not found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // then fetch the entity collection where the entity navigates to // note: we don't need to check uriResourceNavigation.isCollection(), // because we are the EntityCollectionProcessor responseEntityCollection = storage.getRelatedEntityCollection(sourceEntity, targetEntityType); } } else { // this would be the case for e.g. Products(1)/Category/Products throw new ODataApplicationException("Not supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } ContextURL contextUrl = null; EdmEntityType edmEntityType = null; // 3rd: create and configure a serializer if (isContNav(uriInfo)) { contextUrl = ContextURL.with().entitySetOrSingletonOrType(request.getRawODataPath()).build(); edmEntityType = responseEdmEntityType; } else { contextUrl = ContextURL.with().entitySet(responseEdmEntitySet).build(); edmEntityType = responseEdmEntitySet.getEntityType(); } final String id = request.getRawBaseUri() + "/" + responseEdmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); ODataSerializer serializer = odata.createSerializer(responseFormat); SerializerResult serializerResult = serializer.entityCollection(this.srvMetadata, edmEntityType, responseEntityCollection, opts); // 4th: configure the response object: set the body, headers and status code response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 14
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { EdmEntitySet responseEdmEntitySet = null; // we'll need this to build the ContextURL EntityCollection responseEntityCollection = null; // we'll need this to set the response body // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourceParts = uriInfo.getUriResourceParts(); int segmentCount = resourceParts.size(); UriResource uriResource = resourceParts.get(0); // in our example, the first segment is the EntitySet if (!(uriResource instanceof UriResourceEntitySet)) { throw new ODataApplicationException("Only EntitySet is supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) uriResource; EdmEntitySet startEdmEntitySet = uriResourceEntitySet.getEntitySet(); if (segmentCount == 1) { // this is the case for: DemoService/DemoService.svc/Categories responseEdmEntitySet = startEdmEntitySet; // the response body is built from the first (and only) entitySet // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet responseEntityCollection = storage.readEntitySetData(startEdmEntitySet); } else if (segmentCount == 2) { // in case of navigation: DemoService.svc/Categories(3)/Products UriResource lastSegment = resourceParts.get(1); // in our example we don't support more complex URIs if (lastSegment instanceof UriResourceNavigation) { UriResourceNavigation uriResourceNavigation = (UriResourceNavigation) lastSegment; EdmNavigationProperty edmNavigationProperty = uriResourceNavigation.getProperty(); // from Categories(1) to Products responseEdmEntitySet = Util.getNavigationTargetEntitySet(startEdmEntitySet, edmNavigationProperty); // 2nd: fetch the data from backend // first fetch the entity where the first segment of the URI points to List<UriParameter> keyPredicates = uriResourceEntitySet.getKeyPredicates(); // e.g. for Categories(3)/Products we have to find the single entity: Category with ID 3 Entity sourceEntity = storage.readEntityData(startEdmEntitySet, keyPredicates); // error handling for e.g. DemoService.svc/Categories(99)/Products if (sourceEntity == null) { throw new ODataApplicationException("Entity not found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // then fetch the entity collection where the entity navigates to // note: we don't need to check uriResourceNavigation.isCollection(), // because we are the EntityCollectionProcessor responseEntityCollection = storage.getRelatedEntityCollection(sourceEntity, uriResourceNavigation); } } else { // this would be the case for e.g. Products(1)/Category/Products throw new ODataApplicationException("Not supported", HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ROOT); } // 3rd: create and configure a serializer ContextURL contextUrl = ContextURL.with().entitySet(responseEdmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + responseEdmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); EdmEntityType edmEntityType = responseEdmEntitySet.getEntityType(); ODataSerializer serializer = odata.createSerializer(responseFormat); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, responseEntityCollection, opts); // 4th: configure the response object: set the body, headers and status code response.setContent(serializerResult.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 15
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: apply System Query Options // modify the result set according to the query options, specified by the end user List<Entity> entityList = entityCollection.getEntities(); EntityCollection returnEntityCollection = new EntityCollection(); // handle $count: always return the original number of entities, without considering $top and $skip CountOption countOption = uriInfo.getCountOption(); if (countOption != null) { boolean isCount = countOption.getValue(); if (isCount) { returnEntityCollection.setCount(entityList.size()); } } // handle $skip SkipOption skipOption = uriInfo.getSkipOption(); if (skipOption != null) { int skipNumber = skipOption.getValue(); if (skipNumber >= 0) { if(skipNumber <= entityList.size()) { entityList = entityList.subList(skipNumber, entityList.size()); } else { // The client skipped all entities entityList.clear(); } } else { throw new ODataApplicationException("Invalid value for $skip", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT); } } // handle $top TopOption topOption = uriInfo.getTopOption(); if (topOption != null) { int topNumber = topOption.getValue(); if (topNumber >= 0) { if(topNumber <= entityList.size()) { entityList = entityList.subList(0, topNumber); } // else the client has requested more entities than available => return what we have } else { throw new ODataApplicationException("Invalid value for $top", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT); } } // after applying the system query options, create the EntityCollection based on the reduced list for (Entity entity : entityList) { returnEntityCollection.getEntities().add(entity); } // 4th: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with().contextURL(contextUrl).id(id).count(countOption).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, returnEntityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 5th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 16
Source File: DemoEntityCollectionProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1st: retrieve the requested EntitySet from the uriInfo (representation of the parsed URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); // in our example, the first segment is the EntitySet UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet) resourcePaths.get(0); EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName and deliver as EntitySet EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: Check if filter system query option is provided and apply the expression if necessary FilterOption filterOption = uriInfo.getFilterOption(); if(filterOption != null) { // Apply $filter system query option try { List<Entity> entityList = entityCollection.getEntities(); Iterator<Entity> entityIterator = entityList.iterator(); // Evaluate the expression for each entity // If the expression is evaluated to "true", keep the entity otherwise remove it from the entityList while (entityIterator.hasNext()) { // To evaluate the the expression, create an instance of the Filter Expression Visitor and pass // the current entity to the constructor Entity currentEntity = entityIterator.next(); Expression filterExpression = filterOption.getExpression(); FilterExpressionVisitor expressionVisitor = new FilterExpressionVisitor(currentEntity); // Start evaluating the expression Object visitorResult = filterExpression.accept(expressionVisitor); // The result of the filter expression must be of type Edm.Boolean if(visitorResult instanceof Boolean) { if(!Boolean.TRUE.equals(visitorResult)) { // The expression evaluated to false (or null), so we have to remove the currentEntity from entityList entityIterator.remove(); } } else { throw new ODataApplicationException("A filter expression must evaulate to type Edm.Boolean", HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ENGLISH); } } } catch (ExpressionVisitException e) { throw new ODataApplicationException("Exception in filter evaluation", HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode(), Locale.ENGLISH); } } // 4th: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // and serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions.with() .contextURL(contextUrl).id(id).build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, entityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // 5th: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }
Example 17
Source File: ProductsEntityCollectionProcessor.java From syndesis with Apache License 2.0 | 4 votes |
@Override public void readEntityCollection(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, ODataLibraryException { // 1st we have retrieve the requested EntitySet from the uriInfo object (representation of the parsed service URI) List<UriResource> resourcePaths = uriInfo.getUriResourceParts(); UriResourceEntitySet uriResourceEntitySet = (UriResourceEntitySet)resourcePaths.get(0); // in our example, the first segment is the EntitySet EdmEntitySet edmEntitySet = uriResourceEntitySet.getEntitySet(); // 2nd: fetch the data from backend for this requested EntitySetName // it has to be delivered as EntitySet object EntityCollection entityCollection = storage.readEntitySetData(edmEntitySet); // 3rd: apply System Query Options // modify the result set according to the query options, specified by the end user List<Entity> entityList = entityCollection.getEntities(); EntityCollection returnEntityCollection = new EntityCollection(); // handle $count: always return the original number of entities, without considering $top and $skip CountOption countOption = uriInfo.getCountOption(); if (countOption != null) { boolean isCount = countOption.getValue(); if (isCount) { returnEntityCollection.setCount(entityList.size()); } } applyQueryOptions(uriInfo, entityList, returnEntityCollection); // 3rd: create a serializer based on the requested format (json) ODataSerializer serializer = odata.createSerializer(responseFormat); // 4th: Now serialize the content: transform from the EntitySet object to InputStream EdmEntityType edmEntityType = edmEntitySet.getEntityType(); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).build(); final String id = request.getRawBaseUri() + "/" + edmEntitySet.getName(); EntityCollectionSerializerOptions opts = EntityCollectionSerializerOptions .with().id(id) .count(countOption) .contextURL(contextUrl) .build(); SerializerResult serializerResult = serializer.entityCollection(serviceMetadata, edmEntityType, returnEntityCollection, opts); InputStream serializedContent = serializerResult.getContent(); // Finally: configure the response object: set the body, headers and status code response.setContent(serializedContent); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }