private void appendGetRequest( final BatchManager manager, final String segment, final Object key, final boolean isRelative) throws URISyntaxException { final URIBuilder targetURI = getClient().newURIBuilder(SERVICE_URI); targetURI.appendEntitySetSegment(segment).appendKeySegment(key); final URI uri = (isRelative) ? new URI(SERVICE_URI).relativize(targetURI.build()) : targetURI.build(); ODataEntityRequest<ClientEntity> queryReq = getClient().getRetrieveRequestFactory().getEntityRequest(uri); queryReq.setFormat(ContentType.JSON); manager.addRequest(queryReq); }
private void rawRequest(final ContentType contentType) { final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People"); final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build()); req.setFormat(contentType.toContentTypeString()); final ODataRawResponse res = req.execute(); assertNotNull(res); final ResWrap<ClientEntitySet> entitySet = res.getBodyAs(ClientEntitySet.class); assertNotNull(entitySet.getPayload()); assertTrue(entitySet.getContextURL().toASCIIString().endsWith("$metadata#People")); }
private void readWithNext(final ContentType format) { final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People"); final ODataEntitySetRequest<ClientEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build()); req.setFormat(format); req.setPrefer(client.newPreferences().maxPageSize(5)); final ODataRetrieveResponse<ClientEntitySet> res = req.execute(); final ClientEntitySet feed = res.getBody(); assertNotNull(feed); assertEquals(5, feed.getEntities().size()); assertNotNull(feed.getNext()); final URI expected = URI.create(testStaticServiceRootURL + "/People?$skiptoken=5"); final URI found = URIUtils.getURI(testStaticServiceRootURL, feed.getNext().toASCIIString()); assertEquals(expected, found); }
private void readODataEntitySetIterator(final ContentType contentType) { final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People"); final ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> req = client.getRetrieveRequestFactory().getEntitySetIteratorRequest(uriBuilder.build()); req.setFormat(contentType); final ODataRetrieveResponse<ClientEntitySetIterator<ClientEntitySet, ClientEntity>> res = req.execute(); final ClientEntitySetIterator<ClientEntitySet, ClientEntity> feedIterator = res.getBody(); assertNotNull(feedIterator); int count = 0; while (feedIterator.hasNext()) { assertNotNull(feedIterator.next()); count++; } assertEquals(5, count); assertTrue(feedIterator.getNext().toASCIIString().endsWith("People?$skiptoken=5")); }
private void readWithInlineCount(final ODataClient client, final ContentType contentType) { final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People").count(true); final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build()); req.setFormat(contentType.toContentTypeString()); final ODataRawResponse res = req.execute(); assertNotNull(res); final ResWrap<ClientEntitySet> entitySet = res.getBodyAs(ClientEntitySet.class); assertEquals(5, entitySet.getPayload().getEntities().size()); assertEquals( "Microsoft.Test.OData.Services.ODataWCFService.Address", entitySet .getPayload() .getEntities() .get(2) .getProperty("HomeAddress") .getComplexValue() .getTypeName()); }
@Test public void changesetBatchRequest() throws URISyntaxException { final ODataBatchRequest request = getClient().getBatchRequestFactory().getBatchRequest(SERVICE_URI); final BatchManager payload = request.payloadManager(); // ----------------------------- // - Append get request // ----------------------------- appendGetRequest(payload, "ESAllPrim", 32767, false); // Without error // ----------------------------- // - Append change set // ----------------------------- final ODataChangeset changeset = payload.addChangeset(); // ------------------------ // POST request (Insert) URIBuilder targetURI = getClient().newURIBuilder(SERVICE_URI).appendEntitySetSegment("ESAllPrim"); URI editLink = targetURI.build(); ClientObjectFactory factory = getFactory(); ClientEntity postEntity = factory.newEntity(new FullQualifiedName(SERVICE_NAMESPACE, "ESAllPrim")); postEntity.addLink( factory.newEntityNavigationLink( "NavPropertyETTwoPrimOne", getClient() .newURIBuilder(SERVICE_URI) .appendEntitySetSegment("ESTwoPrim") .appendKeySegment(32766) .build())); postEntity .getProperties() .add( factory.newPrimitiveProperty( "PropertyDouble", factory.newPrimitiveValueBuilder().buildDouble(3.1415))); final ODataEntityCreateRequest<ClientEntity> createRequest = getClient().getCUDRequestFactory().getEntityCreateRequest(editLink, postEntity); createRequest.setFormat(ContentType.JSON); changeset.addRequest(createRequest); // ------------------------ // Patch request (Update) targetURI = getClient() .newURIBuilder(SERVICE_URI) .appendEntitySetSegment("ESAllPrim") .appendKeySegment(0); editLink = targetURI.build(); ClientEntity patchEntity = factory.newEntity(new FullQualifiedName(SERVICE_NAMESPACE, "ESAllPrim")); patchEntity.setEditLink(editLink); patchEntity .getProperties() .add( factory.newPrimitiveProperty( "PropertyDouble", factory.newPrimitiveValueBuilder().buildDouble(3.1415))); ODataEntityUpdateRequest<ClientEntity> changeReq = getClient().getCUDRequestFactory().getEntityUpdateRequest(UpdateType.PATCH, patchEntity); changeReq.setFormat(ContentType.JSON); changeset.addRequest(changeReq); // ------------------------ // Patch request (Upsert) targetURI = getClient() .newURIBuilder(SERVICE_URI) .appendEntitySetSegment("ESAllPrim") .appendKeySegment(15); editLink = targetURI.build(); patchEntity = factory.newEntity(new FullQualifiedName(SERVICE_NAMESPACE, "ESAllPrim")); patchEntity.setEditLink(editLink); patchEntity .getProperties() .add( factory.newPrimitiveProperty( "PropertyDouble", factory.newPrimitiveValueBuilder().buildDouble(3.1415))); patchEntity.addLink( factory.newEntityNavigationLink( "NavPropertyETTwoPrimOne", getClient() .newURIBuilder(SERVICE_URI) .appendEntitySetSegment("ESTwoPrim") .appendKeySegment(32766) .build())); changeReq = getClient().getCUDRequestFactory().getEntityUpdateRequest(UpdateType.PATCH, patchEntity); changeReq.setFormat(ContentType.JSON); changeset.addRequest(changeReq); // ----------------------------- // - Append get request // ----------------------------- appendGetRequest(payload, "ESAllPrim", 0, false); // Without error // ----------------------------- // - Fetch result // ----------------------------- final ODataBatchResponse response = payload.getResponse(); assertEquals(HttpStatusCode.ACCEPTED.getStatusCode(), response.getStatusCode()); final Iterator<ODataBatchResponseItem> bodyIterator = response.getBody(); // Check first get request assertTrue(bodyIterator.hasNext()); ODataBatchResponseItem item = bodyIterator.next(); assertFalse(item.isChangeset()); assertTrue(item.hasNext()); final ODataResponse response0 = item.next(); assertTrue(response0 instanceof ODataRetrieveResponse); @SuppressWarnings("unchecked") ODataRetrieveResponse<ClientEntity> retrieveResponse = (ODataRetrieveResponse<ClientEntity>) response0; assertEquals( 34, retrieveResponse.getBody().getProperty("PropertyDecimal").getPrimitiveValue().toValue()); // Check change set assertTrue(bodyIterator.hasNext()); item = bodyIterator.next(); assertTrue(item.isChangeset()); // Insert assertTrue(item.hasNext()); final ODataResponse response1 = item.next(); assertEquals(HttpStatusCode.CREATED.getStatusCode(), response1.getStatusCode()); assertTrue(response1 instanceof ODataEntityCreateResponse); assertEquals( 3.1415, ((ODataEntityCreateResponse<?>) response1) .getBody() .getProperty("PropertyDouble") .getPrimitiveValue() .toValue()); // Update assertTrue(item.hasNext()); final ODataResponse response2 = item.next(); assertEquals(HttpStatusCode.OK.getStatusCode(), response2.getStatusCode()); assertTrue(response2 instanceof ODataEntityUpdateResponse); // Upsert assertTrue(item.hasNext()); final ODataResponse response3 = item.next(); assertEquals(HttpStatusCode.CREATED.getStatusCode(), response3.getStatusCode()); assertTrue(response3 instanceof ODataEntityUpdateResponse); assertEquals( 3.1415, ((ODataEntityUpdateResponse<?>) response3) .getBody() .getProperty("PropertyDouble") .getPrimitiveValue() .toValue()); // Check second get request assertTrue(bodyIterator.hasNext()); item = bodyIterator.next(); assertFalse(item.isChangeset()); assertTrue(item.hasNext()); final ODataResponse response4 = item.next(); assertTrue(response4 instanceof ODataRetrieveResponse); @SuppressWarnings("unchecked") final ODataRetrieveResponse<ClientEntity> retrieveResponse2 = (ODataRetrieveResponse<ClientEntity>) response4; assertEquals( 3.1415, retrieveResponse2.getBody().getProperty("PropertyDouble").getPrimitiveValue().toValue()); }
@Test public void changesetWithReferences() throws EdmPrimitiveTypeException, URISyntaxException { // create your request final ODataBatchRequest request = getClient().getBatchRequestFactory().getBatchRequest(SERVICE_URI); final BatchManager streamManager = request.payloadManager(); final ODataChangeset changeset = streamManager.addChangeset(); final ClientEntity entityESAllPrim = getFactory().newEntity(new FullQualifiedName(SERVICE_NAMESPACE, "ESAllPrim")); entityESAllPrim .getProperties() .add( getFactory() .newPrimitiveProperty( "PropertyDouble", getFactory().newPrimitiveValueBuilder().buildDouble(3.1415))); entityESAllPrim.addLink( getFactory() .newEntityNavigationLink( "NavPropertyETTwoPrimOne", getClient() .newURIBuilder(SERVICE_URI) .appendEntitySetSegment("ESTwoPrim") .appendKeySegment(-365) .build())); final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_URI).appendEntitySetSegment("ESAllPrim"); // add create request final ODataEntityCreateRequest<ClientEntity> createReq = getClient() .getCUDRequestFactory() .getEntityCreateRequest(uriBuilder.build(), entityESAllPrim); createReq.setFormat(ContentType.JSON); changeset.addRequest(createReq); // retrieve request reference int createRequestRef = changeset.getLastContentId(); // add update request final ClientEntity entityUpdate = getFactory().newEntity(entityESAllPrim.getTypeName()); entityUpdate.addLink( getFactory() .newEntitySetNavigationLink( "NavPropertyETTwoPrimMany", getClient() .newURIBuilder(SERVICE_URI) .appendEntitySetSegment("ESTwoPrim") .appendKeySegment(32767) .build())); final ODataEntityUpdateRequest<ClientEntity> updateReq = getClient() .getCUDRequestFactory() .getEntityUpdateRequest( URI.create("$" + createRequestRef), UpdateType.PATCH, entityUpdate); updateReq.setFormat(ContentType.JSON); changeset.addRequest(updateReq); final ODataBatchResponse response = streamManager.getResponse(); assertEquals(HttpStatusCode.ACCEPTED.getStatusCode(), response.getStatusCode()); final String cookie = response.getHeader(HttpHeader.SET_COOKIE).iterator().next(); // verify response payload ... final Iterator<ODataBatchResponseItem> bodyIterator = response.getBody(); final ODataBatchResponseItem item = bodyIterator.next(); assertTrue(item instanceof ODataChangesetResponseItem); final ODataChangesetResponseItem chgitem = (ODataChangesetResponseItem) item; assertTrue(chgitem.hasNext()); ODataResponse res = chgitem.next(); assertEquals(HttpStatusCode.CREATED.getStatusCode(), res.getStatusCode()); assertTrue(res instanceof ODataEntityCreateResponse); final ODataEntityCreateResponse<?> createResponse = ((ODataEntityCreateResponse<?>) res); res = chgitem.next(); assertEquals(HttpStatusCode.OK.getStatusCode(), res.getStatusCode()); assertTrue(res instanceof ODataEntityUpdateResponse); final ODataEntitySetRequest<ClientEntitySet> req = getClient() .getRetrieveRequestFactory() .getEntitySetRequest( new URI( createResponse.getHeader(HttpHeader.LOCATION).iterator().next() + "/NavPropertyETTwoPrimMany")); req.setFormat(ContentType.JSON); req.addCustomHeader(HttpHeader.COOKIE, cookie); final ODataRetrieveResponse<ClientEntitySet> getResponse = req.execute(); assertEquals( 32767, getResponse .getBody() .getEntities() .get(0) .getProperty("PropertyInt16") .getPrimitiveValue() .toValue()); }