/** retrieve album */ private void getAlbumSummary(PrintWriter respWriter, long newAlbumId) throws RemoteInvocationException { final Request<Album> getReq = _albumBuilders.get().id(newAlbumId).build(); final ResponseFuture<Album> getFuture = _restClient.sendRequest(getReq); final Response<Album> getResp = getFuture.getResponse(); respWriter.println("Album: " + getResp.getEntity().toString()); }
private void testGetMain( RootBuilderWrapper.MethodBuilderWrapper< ComplexResourceKey<TyperefRecord, TwoPartKey>, TyperefRecord, TyperefRecord> requestBuilder) throws RemoteInvocationException { final ByteString byteData = ByteString.copy(new byte[] {0, 32, -95}); Request<TyperefRecord> request = requestBuilder.id(getComplexKey(byteData)).build(); ResponseFuture<TyperefRecord> future = getClient().sendRequest(request); Response<TyperefRecord> response = future.getResponse(); Assert.assertEquals(response.getEntity().getBytes(), byteData); }
private void partialUpdatePhoto(PrintWriter respWriter, long photoId) throws RemoteInvocationException { final Request<Photo> getReq = _photoBuilders.get().id(photoId).build(); final ResponseFuture<Photo> getFuture = _restClient.sendRequest(getReq); final Response<Photo> getResp = getFuture.getResponse(); final Photo originalPhoto = getResp.getEntity(); final Photo updatedPhoto = new Photo().setTitle("Partially Updated Photo"); final PatchRequest<Photo> patch = PatchGenerator.diff(originalPhoto, updatedPhoto); final Request<EmptyRecord> partialUpdateRequest = _photoBuilders.partialUpdate().id(photoId).input(patch).build(); final int status = _restClient.sendRequest(partialUpdateRequest).getResponse().getStatus(); respWriter.println("Partial update photo is successful: " + (status == 202)); }
private long createPhoto(PrintWriter respWriter) throws RemoteInvocationException { // make create photo request and send with the rest client synchronously // response of create request does not have body, therefore use EmptyRecord as template // create an instance of photo pragmatically // this resembles to photo-create.json final LatLong newLatLong = new LatLong().setLatitude(37.42394f).setLongitude(-122.0708f); final EXIF newExif = new EXIF().setLocation(newLatLong); final Photo newPhoto = new Photo().setTitle("New Photo").setFormat(PhotoFormats.PNG).setExif(newExif); final Request<EmptyRecord> createReq1 = _photoBuilders.create().input(newPhoto).build(); final ResponseFuture<EmptyRecord> createFuture1 = _restClient.sendRequest(createReq1); // Future.getResource() blocks until server responds final Response<EmptyRecord> createResp1 = createFuture1.getResponse(); // HTTP header Location also shows the relative URI of the created resource final long newPhotoId = Long.parseLong(createResp1.getId()); respWriter.println("New photo ID: " + newPhotoId); return newPhotoId; }
/** use Finder to find the photo with some criteria */ private void findPhoto(PrintWriter respWriter) throws RemoteInvocationException { final long newPhotoId = createPhoto(respWriter); createPhoto(respWriter); createPhoto(respWriter); final Request<Photo> getReq = _photoBuilders.get().id(newPhotoId).build(); final ResponseFuture<Photo> getFuture = _restClient.sendRequest(getReq); final Response<Photo> getResp = getFuture.getResponse(); final Photo photo = getResp.getEntity(); final FindRequest<Photo> findReq = _photoBuilders .findByTitleAndOrFormat() .titleParam(photo.getTitle()) .formatParam(photo.getFormat()) .build(); final CollectionResponse<Photo> crPhotos = _restClient.sendRequest(findReq).getResponse().getEntity(); final List<Photo> photos = crPhotos.getElements(); respWriter.println("Found " + photos.size() + " photos with title " + photo.getTitle()); }
/** failed request that try to access non-existing photo and throw RestException */ private void getNonPhoto() throws RemoteInvocationException { final Request<Photo> failReq = _photoBuilders.get().id(-1L).build(); final ResponseFuture<Photo> failFuture = _restClient.sendRequest(failReq); final Response<Photo> failResponse = failFuture.getResponse(); }
/** call action purge to delete all photos on server */ private void purgeAllPhotos(PrintWriter respWriter) throws RemoteInvocationException { final Request<Integer> purgeReq = _photoBuilders.actionPurge().build(); final ResponseFuture<Integer> purgeFuture = _restClient.sendRequest(purgeReq); final Response<Integer> purgeResp = purgeFuture.getResponse(); respWriter.println("Purged " + purgeResp.getEntity() + " photos"); }
/** send request to retrieve created photo */ private void getPhoto(PrintWriter respWriter, long newPhotoId) throws RemoteInvocationException { final Request<Photo> getReq = _photoBuilders.get().id(newPhotoId).build(); final ResponseFuture<Photo> getFuture = _restClient.sendRequest(getReq); final Response<Photo> getResp = getFuture.getResponse(); respWriter.println("Photo: " + getResp.getEntity().toString()); }
/** * Retrieve the album information and each photo in the album. The photos are retrieved in * parallel. */ private void getAlbum(PrintWriter respWriter, long albumId) throws RemoteInvocationException { // get the specific album final Request<Album> getAlbumReq = _albumBuilders.get().id(albumId).build(); final ResponseFuture<Album> getAlbumFuture = _restClient.sendRequest(getAlbumReq); final Response<Album> getResp = getAlbumFuture.getResponse(); final Album album = getResp.getEntity(); respWriter.println(album.getTitle()); respWriter.println("Created on " + new Date(album.getCreationTime())); // get the album's entries final FindRequest<AlbumEntry> searchReq = _albumEntryBuilders.findBySearch().albumIdParam(albumId).build(); final ResponseFuture<CollectionResponse<AlbumEntry>> responseFuture = _restClient.sendRequest(searchReq); final Response<CollectionResponse<AlbumEntry>> response = responseFuture.getResponse(); final List<AlbumEntry> entries = new ArrayList<AlbumEntry>(response.getEntity().getElements()); entries.add(new AlbumEntry().setAlbumId(-1).setPhotoId(9999)); // don't return until all photo requests done final CountDownLatch latch = new CountDownLatch(entries.size()); // fetch every photo asynchronously // store either a photo or an exception final Object[] photos = new Object[entries.size()]; for (int i = 0; i < entries.size(); i++) { final int finalI = i; // need final version for callback final AlbumEntry entry = entries.get(i); final long photoId = entry.getPhotoId(); final Request<Photo> getPhotoReq = _photoBuilders.get().id(photoId).build(); _restClient.sendRequest( getPhotoReq, new Callback<Response<Photo>>() { @Override public void onSuccess(Response<Photo> result) { photos[finalI] = result.getEntity(); latch.countDown(); } @Override public void onError(Throwable e) { photos[finalI] = e; } }); } try { // wait for all requests to finish latch.await(2, TimeUnit.SECONDS); if (latch.getCount() > 0) { respWriter.println("Failed to retrieve some photo(s)"); } } catch (InterruptedException e) { e.printStackTrace(respWriter); } // print photo data for (int i = 0; i < entries.size(); i++) { final Object val = photos[i]; final AlbumEntry entry = entries.get(i); if (val instanceof Throwable) { respWriter.println("Failed to load photo " + entry.getPhotoId()); respWriter.println("Stack trace:"); ((Throwable) val).printStackTrace(respWriter); respWriter.println(); } else if (val instanceof Photo) { final Photo photo = (Photo) val; respWriter.println("Photo " + photo.getTitle() + ":"); respWriter.println(photo); respWriter.println("Added on " + new Date(entry.getAddTime())); } else { throw new AssertionError("expected photo or exception"); } } }
@Test( dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "requestOptionsDataProvider") public void testCollectionCreateGetUpdateDeleteId(RestliRequestOptions requestOptions) throws RemoteInvocationException { // find with optional params Group group = new Group(); String name = "test"; int memberID = 1; group.setName(name); group.setOwner(buildGroupMembership(memberID, "[email protected]", "f", "l")); GroupMembershipParam param = new GroupMembershipParam(); param.setIntParameter(1); param.setStringParameter("String"); final GroupsRequestBuilders groupBuilders = new GroupsRequestBuilders(requestOptions); final GroupMembershipsRequestBuilders membershipBuilders = new GroupMembershipsRequestBuilders(requestOptions); // Create Response<IdResponse<Integer>> response = getClient().sendRequest(groupBuilders.create().input(group).build()).getResponse(); Assert.assertEquals(response.getStatus(), 201); Integer createdId = response.getEntity().getId(); Assert.assertNotNull(createdId); @SuppressWarnings("deprecation") String stringId = response.getId(); Assert.assertEquals(createdId.intValue(), Integer.parseInt(stringId)); // Get newly created group and verify name Assert.assertEquals( getClient() .sendRequest(groupBuilders.get().id(createdId).build()) .getResponse() .getEntity() .getName(), name); // Partial update - change name String newName = "new name"; group.setName(newName); PatchRequest<Group> patch = PatchGenerator.diffEmpty(group); ResponseFuture<EmptyRecord> responseFuture = getClient().sendRequest(groupBuilders.partialUpdate().id(createdId).input(patch).build()); Assert.assertEquals(204, responseFuture.getResponse().getStatus()); // Get updated group and verify name Assert.assertEquals( getClient() .sendRequest(groupBuilders.get().id(createdId).build()) .getResponse() .getEntity() .getName(), newName); // Delete responseFuture = getClient().sendRequest(groupBuilders.delete().id(createdId).build()); Assert.assertEquals(204, responseFuture.getResponse().getStatus()); // Verify deleted try { getClient().sendRequest(groupBuilders.get().id(createdId).build()).getResponse(); Assert.fail("Expected RestLiResponseException"); } catch (RestLiResponseException e) { Assert.assertEquals(e.getStatus(), 404); } // Cleanup - delete the owner's membership that was created along with the group responseFuture = getClient() .sendRequest( membershipBuilders.delete().id(buildCompoundKey(memberID, createdId)).build()); Assert.assertEquals(204, responseFuture.getResponse().getStatus()); }