Repository: camel Updated Branches: refs/heads/camel-2.14.x a6c54c535 -> f9044427b refs/heads/master 343559bcf -> 948984898
CAMEL-8089 - Support paging and restricting results from google drive Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/94898489 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/94898489 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/94898489 Branch: refs/heads/master Commit: 94898489839bddeed256dc8efbb1c432dab87ddd Parents: 343559b Author: Jonathan Anstey <jans...@gmail.com> Authored: Thu Nov 27 14:55:46 2014 -0330 Committer: Jonathan Anstey <jans...@gmail.com> Committed: Thu Nov 27 14:56:26 2014 -0330 ---------------------------------------------------------------------- .../google/drive/GoogleDriveConsumer.java | 12 ++++++- .../google/drive/GoogleDriveProducer.java | 12 ++++++- .../google/drive/DriveFilesIntegrationTest.java | 37 ++++++++++++++++++-- 3 files changed, 56 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/94898489/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java ---------------------------------------------------------------------- diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java index 0505bcf..266aa27 100644 --- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java +++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveConsumer.java @@ -24,6 +24,7 @@ import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; import org.apache.camel.Processor; import org.apache.camel.RuntimeCamelException; import org.apache.camel.component.google.drive.internal.GoogleDriveApiName; +import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.component.AbstractApiConsumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,9 +44,18 @@ public class GoogleDriveConsumer extends AbstractApiConsumer<GoogleDriveApiName, protected Object doInvokeMethod(Map<String, Object> properties) throws RuntimeCamelException { AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(properties); try { + setProperty(properties, request, "q"); + setProperty(properties, request, "maxResults"); + setProperty(properties, request, "pageToken"); return request.execute(); - } catch (IOException e) { + } catch (Exception e) { throw new RuntimeCamelException(e); } } + + private void setProperty(Map<String, Object> properties, AbstractGoogleClientRequest request, String key) throws Exception { + if (properties.containsKey(key)) { + IntrospectionSupport.setProperty(getEndpoint().getCamelContext().getTypeConverter(), request, key, properties.get(key)); + } + } } http://git-wip-us.apache.org/repos/asf/camel/blob/94898489/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java index d8b4b5c..55b815a 100644 --- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java +++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveProducer.java @@ -25,6 +25,7 @@ import org.apache.camel.RuntimeCamelException; import org.apache.camel.component.google.drive.internal.GoogleDriveApiName; import org.apache.camel.component.google.drive.internal.GoogleDriveConstants; import org.apache.camel.component.google.drive.internal.GoogleDrivePropertiesHelper; +import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.component.AbstractApiProducer; import org.apache.camel.util.component.ApiMethod; @@ -41,8 +42,11 @@ public class GoogleDriveProducer extends AbstractApiProducer<GoogleDriveApiName, protected Object doInvokeMethod(ApiMethod method, Map<String, Object> properties) throws RuntimeCamelException { AbstractGoogleClientRequest request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties); try { + setProperty(properties, request, "q"); + setProperty(properties, request, "maxResults"); + setProperty(properties, request, "pageToken"); return request.execute(); - } catch (IOException e) { + } catch (Exception e) { throw new RuntimeCamelException(e); } } @@ -50,4 +54,10 @@ public class GoogleDriveProducer extends AbstractApiProducer<GoogleDriveApiName, protected String getThreadProfileName() { return GoogleDriveConstants.THREAD_PROFILE_NAME; } + + private void setProperty(Map<String, Object> properties, AbstractGoogleClientRequest request, String key) throws Exception { + if (properties.containsKey(key)) { + IntrospectionSupport.setProperty(getEndpoint().getCamelContext().getTypeConverter(), request, key, properties.get(key)); + } + } } http://git-wip-us.apache.org/repos/asf/camel/blob/94898489/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/DriveFilesIntegrationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/DriveFilesIntegrationTest.java b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/DriveFilesIntegrationTest.java index bc15ec4..624ef7b 100644 --- a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/DriveFilesIntegrationTest.java +++ b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/DriveFilesIntegrationTest.java @@ -16,7 +16,10 @@ */ package org.apache.camel.component.google.drive; +import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import com.google.api.client.http.FileContent; @@ -111,11 +114,39 @@ public class DriveFilesIntegrationTest extends AbstractGoogleDriveTestSupport { @Test public void testList() throws Exception { // upload a test file - File theTestFile = uploadTestFile(); + File testFile = uploadTestFile(); - final FileList result = requestBody("direct://LIST", null); + FileList result = requestBody("direct://LIST", null); assertNotNull("list result", result); - LOG.debug("list: " + result); + assertTrue(result.getItems().size() >= 1); + + File testFile2 = uploadTestFile(); + + Map<String, Object> headers = new HashMap<String, Object>(); + headers.put("CamelGoogleDrive.maxResults", 1); + + result = requestBodyAndHeaders("direct://LIST", null, headers); + assertNotNull("list result", result); + assertTrue(result.getItems().size() == 1); + + // test paging the list + List<File> resultList = new ArrayList<File>(); + String pageToken; + int i = 0; + do { + result = requestBodyAndHeaders("direct://LIST", null, headers); + + resultList.addAll(result.getItems()); + pageToken = result.getNextPageToken(); + headers.put("CamelGoogleDrive.pageToken", pageToken); + + i++; + } while (pageToken != null && pageToken.length() > 0 && i < 2); + + // we should have 2 files in result (one file for each of the 2 pages) + assertTrue(resultList.size() == 2); + // they should be different files + assertFalse(resultList.get(0).getId().equals(resultList.get(1))); } @Ignore