@Override public int hashCode() { return Objects.hash(getPaginationData(), getContainerResource()); } }
private Optional<String> getPhotosPaginationToken(Optional<PaginationData> paginationData) { Optional<String> paginationToken = Optional.empty(); if (paginationData.isPresent()) { String token = ((StringPaginationToken) paginationData.get()).getToken(); Preconditions .checkArgument(token.startsWith(PHOTO_TOKEN_PREFIX), "Invalid pagination token " + token); if (token.length() > PHOTO_TOKEN_PREFIX.length()) { paginationToken = Optional.of(token.substring(PHOTO_TOKEN_PREFIX.length())); } } return paginationToken; }
@Override public ExportResult<CalendarContainerResource> export( UUID jobId, TokensAndUrlAuthData authData, Optional<ExportInformation> exportInformation) { if (!exportInformation.isPresent()) { return exportCalendars(authData, Optional.empty()); } else { StringPaginationToken paginationToken = (StringPaginationToken) exportInformation.get().getPaginationData(); if (paginationToken != null && paginationToken.getToken().startsWith(CALENDAR_TOKEN_PREFIX)) { // Next thing to export is more calendars return exportCalendars(authData, Optional.of(paginationToken)); } else { // Next thing to export is events IdOnlyContainerResource idOnlyContainerResource = (IdOnlyContainerResource) exportInformation.get().getContainerResource(); Optional<PaginationData> pageData = Optional.ofNullable(paginationToken); return getCalendarEvents(authData, idOnlyContainerResource.getId(), pageData); } } }
(StringPaginationToken) exportInformation.get().getPaginationData(); IdOnlyContainerResource idOnlyContainerResource = (IdOnlyContainerResource) exportInformation.get().getContainerResource(); && paginationDataPresent && paginationToken.getToken().startsWith(ALBUM_TOKEN_PREFIX)) { return exportAlbums(authData, Optional.of(paginationToken)); } else {
@Test public void verifySerializeDeserialize() throws Exception { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerSubtypes( ContinuationData.class, IntPaginationToken.class, IdOnlyContainerResource.class); ContinuationData continuationData = new ContinuationData(new IntPaginationToken(100)); continuationData.addContainerResource(new IdOnlyContainerResource("123")); String serialized = objectMapper.writeValueAsString(continuationData); ContinuationData deserialized = objectMapper.readValue(serialized, ContinuationData.class); Assert.assertNotNull(deserialized); Assert.assertEquals(100, ((IntPaginationToken) deserialized.getPaginationData()).getStart()); Assert.assertEquals( "123", ((IdOnlyContainerResource) deserialized.getContainerResources().get(0)).getId()); } }
@Override public ExportResult<SocialActivityContainerResource> export( UUID jobId, TokensAndUrlAuthData authData, Optional<ExportInformation> exportInformation) throws IOException { Plus plus = getOrCreatePeopleService(authData); Plus.Activities.List listActivities = plus.activities().list("me", "public"); if (exportInformation.isPresent()) { StringPaginationToken pageToken = (StringPaginationToken) exportInformation.get().getPaginationData(); listActivities.setPageToken(pageToken.getToken()); } ActivityFeed activityFeed = listActivities.execute(); List<Activity> activities = activityFeed.getItems(); ContinuationData continuationData = null; SocialActivityContainerResource results = null; if (activities != null && !activities.isEmpty()) { List<com.ibm.common.activitystreams.Activity> parsedActivities = new ArrayList<>(); continuationData = new ContinuationData(new StringPaginationToken(activityFeed.getNextPageToken())); for (Activity activity : activities) { parsedActivities.add(postToActivityStream(activity)); } results = new SocialActivityContainerResource(jobId.toString(), parsedActivities, null); } return new ExportResult<>( ResultType.CONTINUE, results, continuationData); }
@Test public void exportEventSubsequentSet() throws IOException { setUpSingleEventResponse(); // Looking at subsequent page, with no pages after it ContainerResource containerResource = new IdOnlyContainerResource(CALENDAR_ID); PaginationData paginationData = new StringPaginationToken(EVENT_TOKEN_PREFIX + NEXT_TOKEN); ExportInformation exportInformation = new ExportInformation(paginationData, containerResource); eventListResponse.setNextPageToken(null); // Run test ExportResult<CalendarContainerResource> result = googleCalendarExporter.export(UUID.randomUUID(), null, Optional.of(exportInformation)); // Check results // Verify correct methods were called in order InOrder inOrder = Mockito.inOrder(eventListRequest); inOrder.verify(eventListRequest).setPageToken(NEXT_TOKEN); inOrder.verify(eventListRequest).execute(); // Check pagination token ContinuationData continuationData = (ContinuationData) result.getContinuationData(); StringPaginationToken paginationToken = (StringPaginationToken) continuationData.getPaginationData(); assertThat(paginationToken).isNull(); }
@Test(expected = IllegalStateException.class) public void testIllegalExport() { facebookPhotosExporter.export( uuid, new TokensAndUrlAuthData("accessToken", null, null), Optional.of(new ExportInformation(new StringPaginationToken(PHOTO_TOKEN_PREFIX), null))); } }
@Override public ExportResult<ContactsModelWrapper> export( UUID jobId, TokensAndUrlAuthData authData, Optional<ExportInformation> exportInformation) { if (exportInformation.isPresent()) { StringPaginationToken stringPaginationToken = (StringPaginationToken) exportInformation.get().getPaginationData(); return exportContacts(authData, Optional.ofNullable(stringPaginationToken)); } else { return exportContacts(authData, Optional.empty()); } }
@Override public ExportResult<TaskContainerResource> export( UUID jobId, AuthData authData, Optional<ExportInformation> exportInformation) { // Create new service for the authorized user RememberTheMilkService service = getOrCreateService(authData); IdOnlyContainerResource resource = exportInformation.isPresent() ? (IdOnlyContainerResource) exportInformation.get().getContainerResource() : null; if (resource != null) { return exportTask(service, resource); } else { return exportTaskList(service); } }
@Override public int hashCode() { int h = 1; h *= 1000003; h ^= this.state.hashCode(); h *= 1000003; h ^= this.exportService.hashCode(); h *= 1000003; h ^= this.importService.hashCode(); h *= 1000003; h ^= this.transferDataType.hashCode(); h *= 1000003; h ^= (exportInformation == null) ? 0 : this.exportInformation.hashCode(); h *= 1000003; h ^= this.createdTimestamp.hashCode(); h *= 1000003; h ^= this.lastUpdateTimestamp.hashCode(); h *= 1000003; h ^= this.jobAuthorization.hashCode(); return h; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ExportInformation that = (ExportInformation) o; return Objects.equals(getPaginationData(), that.getPaginationData()) && Objects.equals(getContainerResource(), that.getContainerResource()); }
@Test public void exportCalendarSubsequentSet() throws IOException { setUpSingleCalendarResponse(); // Looking at subsequent page, with no page after it PaginationData paginationData = new StringPaginationToken(CALENDAR_TOKEN_PREFIX + NEXT_TOKEN); ExportInformation exportInformation = new ExportInformation(paginationData, null); calendarListResponse.setNextPageToken(null); // Run test ExportResult<CalendarContainerResource> result = googleCalendarExporter.export(UUID.randomUUID(), null, Optional.of(exportInformation)); // Check results // Verify correct calls were made InOrder inOrder = Mockito.inOrder(calendarListRequest); inOrder.verify(calendarListRequest).setPageToken(NEXT_TOKEN); inOrder.verify(calendarListRequest).execute(); // Check pagination token ContinuationData continuationData = (ContinuationData) result.getContinuationData(); StringPaginationToken paginationToken = (StringPaginationToken) continuationData.getPaginationData(); assertThat(paginationToken).isNull(); }
@Override public ExportResult<PhotosContainerResource> export(UUID jobId, TokensAndUrlAuthData authData, Optional<ExportInformation> exportInformation) { if (exportInformation.isPresent()) { return exportPhotos(authData, Optional.ofNullable(exportInformation.get().getPaginationData())); } else { return exportPhotos(authData, Optional.empty()); } }
private Optional<String> stripTokenPrefix( Optional<StringPaginationToken> paginationData, String prefix) { Optional<String> paginationToken = Optional.empty(); if (paginationData.isPresent()) { String token = paginationData.get().getToken(); Preconditions.checkArgument(token.startsWith(prefix), "Invalid pagination token " + token); paginationToken = Optional.of(token.substring(prefix.length())); } return paginationToken; }
@Override public ExportResult<PhotosContainerResource> export( UUID jobId, TokenSecretAuthData authData, Optional<ExportInformation> exportInformation) throws IOException { StringPaginationToken paginationToken = exportInformation.isPresent() ? (StringPaginationToken) exportInformation.get().getPaginationData() : null; IdOnlyContainerResource resource = exportInformation.isPresent() ? (IdOnlyContainerResource) exportInformation.get().getContainerResource() : null; SmugMugInterface smugMugInterface; try { smugMugInterface = getOrCreateSmugMugInterface(authData); } catch (IOException e) { monitor.severe(() -> "Unable to create Smugmug service for user", e); throw e; } if (resource != null) { return exportPhotos(resource, paginationToken, smugMugInterface, jobId); } else { return exportAlbums(paginationToken, smugMugInterface); } }
@Test public void exportMessagesSubsequentSet() throws IOException { setUpSingleMessageResponse(); // Looking at subsequent page, with no page after it PaginationData paginationData = new StringPaginationToken(NEXT_TOKEN); ExportInformation exportInformation = new ExportInformation(paginationData, null); messageListResponse.setNextPageToken(null); // Run test ExportResult<MailContainerResource> result = googleMailExporter.export(JOB_ID, null, Optional.of(exportInformation)); // Check results // Verify correct calls were made (i.e., token was set before execution) InOrder inOrder = Mockito.inOrder(messageListRequest); inOrder.verify(messageListRequest).setPageToken(NEXT_TOKEN); inOrder.verify(messageListRequest).execute(); // Check pagination token (should be null) ContinuationData continuationData = (ContinuationData) result.getContinuationData(); StringPaginationToken paginationToken = (StringPaginationToken) continuationData.getPaginationData(); assertThat(paginationToken).isNull(); }
@Override public ExportResult<ContactsModelWrapper> export( UUID jobId, TokensAndUrlAuthData authData, Optional<ExportInformation> exportInformation) { GraphPagination graphPagination = exportInformation.isPresent() ? (GraphPagination) exportInformation.get() .getPaginationData() : null; if (graphPagination != null && graphPagination.getNextLink() != null) { return doExport(authData, graphPagination.getNextLink()); } else { return doExport(authData, contactsUrl); } }
@Override public ExportResult<TaskContainerResource> export( UUID jobId, TokensAndUrlAuthData authData, Optional<ExportInformation> exportInformation) { // Create a new tasks service for the authorized user Tasks tasksService = getOrCreateTasksService(authData); IdOnlyContainerResource resource = exportInformation.isPresent() ? (IdOnlyContainerResource) exportInformation.get().getContainerResource() : null; PaginationData paginationData = exportInformation.isPresent() ? exportInformation.get().getPaginationData() : null; try { if (resource != null) { return getTasks(tasksService, resource, Optional.ofNullable(paginationData)); } else { return getTasksList(tasksService, Optional.ofNullable(paginationData)); } } catch (Exception e) { monitor.severe(() -> "Error occurred trying to retrieve task", e); return new ExportResult<>(e); } }
@Override public ExportResult<PhotosContainerResource> export( UUID jobId, AuthData authData, Optional<ExportInformation> exportInformation) { Auth auth; try { auth = FlickrUtils.getAuth(authData, flickr); } catch (FlickrException e) { return new ExportResult<>(e); } RequestContext.getRequestContext().setAuth(auth); PaginationData paginationData = exportInformation.isPresent() ? exportInformation.get().getPaginationData() : null; IdOnlyContainerResource resource = exportInformation.isPresent() ? (IdOnlyContainerResource) exportInformation.get().getContainerResource() : null; if (resource != null) { return getPhotos(resource, paginationData); } else { return getAlbums(paginationData, auth); } }