You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2014/09/08 15:57:55 UTC
[18/21] git commit: Add a file comverter for Google drive files
Add a file comverter for Google drive files
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/30e1fdbe
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/30e1fdbe
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/30e1fdbe
Branch: refs/heads/master
Commit: 30e1fdbede2bf7e0124af73d2fbcc7972905d612
Parents: c502e15
Author: Jonathan Anstey <ja...@gmail.com>
Authored: Sun Sep 7 23:57:38 2014 -0230
Committer: Jonathan Anstey <ja...@gmail.com>
Committed: Mon Sep 8 09:06:11 2014 -0230
----------------------------------------------------------------------
.../drive/DefaultGoogleDriveClientFactory.java | 10 +--
.../google/drive/GoogleDriveComponent.java | 2 +-
.../google/drive/GoogleDriveFilesConverter.java | 63 ++++++++++++++++
.../services/org/apache/camel/TypeConverter | 17 +++++
.../drive/AbstractGoogleDriveTestSupport.java | 2 +-
.../google/drive/FileConverterTest.java | 79 ++++++++++++++++++++
.../drive/FilesConsumerIntegrationTest.java | 71 ++++++++++++++++++
7 files changed, 233 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/DefaultGoogleDriveClientFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/DefaultGoogleDriveClientFactory.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/DefaultGoogleDriveClientFactory.java
index 876ef86..da9e796 100644
--- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/DefaultGoogleDriveClientFactory.java
+++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/DefaultGoogleDriveClientFactory.java
@@ -31,21 +31,13 @@ public class DefaultGoogleDriveClientFactory implements GoogleDriveClientFactory
private NetHttpTransport transport;
private JacksonFactory jsonFactory;
private FileDataStoreFactory dataStoreFactory;
- // TODO Directory to store user credentials
- private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".store/drive_sample");
+ private static final java.io.File DATA_STORE_DIR = new java.io.File(".google_drive");
public DefaultGoogleDriveClientFactory() {
this.transport = new NetHttpTransport();
this.jsonFactory = new JacksonFactory();
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.apache.camel.component.google.drive.GoogleDriveClientFactory#makeClient
- * (java.lang.String, java.lang.String, java.util.Collection)
- */
@Override
public Drive makeClient(String clientId, String clientSecret, Collection<String> scopes, String applicationName) {
Credential credential;
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveComponent.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveComponent.java
index e960db9..c4fe472 100644
--- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveComponent.java
+++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveComponent.java
@@ -20,7 +20,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.util.component.AbstractApiComponent;
-
+import org.apache.camel.component.google.drive.internal.DriveFilesApiMethod;
import org.apache.camel.component.google.drive.internal.GoogleDriveApiCollection;
import org.apache.camel.component.google.drive.internal.GoogleDriveApiName;
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java
new file mode 100644
index 0000000..1058a10
--- /dev/null
+++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.google.drive;
+
+import java.io.File;
+import java.io.InputStream;
+
+import org.apache.camel.Converter;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.file.GenericFile;
+
+import com.google.api.client.http.FileContent;
+import com.google.api.client.http.InputStreamContent;
+
+public final class GoogleDriveFilesConverter {
+ private GoogleDriveFilesConverter() {
+ }
+
+ @Converter
+ public static com.google.api.services.drive.model.File genericFileToGoogleDriveFile(GenericFile<?> file, Exchange exchange) throws Exception {
+ if (file.getFile() instanceof File) {
+ File f = (File) file.getFile();
+ com.google.api.services.drive.model.File fileMetadata = new com.google.api.services.drive.model.File();
+ fileMetadata.setTitle(f.getName());
+ FileContent mediaContent = new FileContent(null, f);
+ if (exchange != null) {
+ exchange.getIn().setHeader("CamelGoogleDrive.content", fileMetadata);
+ exchange.getIn().setHeader("CamelGoogleDrive.mediaContent", mediaContent);
+ }
+ return fileMetadata;
+ }
+ if (exchange != null) {
+ // body wasn't a java.io.File so let's try to convert it
+ file.getBinding().loadContent(exchange, file);
+ InputStream is = exchange.getContext().getTypeConverter().convertTo(InputStream.class, exchange, file.getBody());
+
+ com.google.api.services.drive.model.File fileMetadata = new com.google.api.services.drive.model.File();
+ fileMetadata.setTitle(file.getFileName());
+ InputStreamContent mediaContent = new InputStreamContent(null, is);
+ if (exchange != null) {
+ exchange.getIn().setHeader("CamelGoogleDrive.content", fileMetadata);
+ exchange.getIn().setHeader("CamelGoogleDrive.mediaContent", mediaContent);
+ }
+
+ return fileMetadata;
+ }
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/main/resources/META-INF/services/org/apache/camel/TypeConverter b/components/camel-google-drive/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
new file mode 100644
index 0000000..ec2888d
--- /dev/null
+++ b/components/camel-google-drive/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
@@ -0,0 +1,17 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+org.apache.camel.component.google.drive.GoogleDriveFilesConverter
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/AbstractGoogleDriveTestSupport.java
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/AbstractGoogleDriveTestSupport.java b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/AbstractGoogleDriveTestSupport.java
index 17b8ee1..d4b5a3a 100644
--- a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/AbstractGoogleDriveTestSupport.java
+++ b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/AbstractGoogleDriveTestSupport.java
@@ -64,7 +64,7 @@ public abstract class AbstractGoogleDriveTestSupport extends CamelTestSupport {
// parameter type is com.google.api.client.http.AbstractInputStreamContent
headers.put("CamelGoogleDrive.mediaContent", mediaContent);
- File result = requestBodyAndHeaders("direct://INSERT_1", null, headers);
+ File result = requestBodyAndHeaders("google-drive://drive-files/insert", null, headers);
return result;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterTest.java b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterTest.java
new file mode 100644
index 0000000..9a0a83e
--- /dev/null
+++ b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FileConverterTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.google.drive;
+
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.camel.component.google.drive.internal.GoogleDriveApiCollection;
+import org.apache.camel.component.google.drive.internal.DriveFilesApiMethod;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import com.google.api.services.drive.model.File;
+import com.google.api.services.drive.model.FileList;
+
+/**
+ * Test class for com.google.api.services.drive.Drive$Files APIs.
+ */
+public class FileConverterTest extends AbstractGoogleDriveTestSupport {
+
+ private static final Logger LOG = LoggerFactory.getLogger(FileConverterTest.class);
+ private static final String PATH_PREFIX = GoogleDriveApiCollection.getCollection().getApiName(DriveFilesApiMethod.class).getName();
+
+ @Override
+ public void setUp() throws Exception {
+ deleteDirectory("target/convertertest");
+ super.setUp();
+ }
+
+ @Test
+ public void testConverter() throws Exception {
+ template.sendBodyAndHeader("file://target/convertertest", "Hello!", "CamelFileName", "greeting.txt");
+
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+
+ assertMockEndpointsSatisfied();
+
+ FileList fileList = mock.getReceivedExchanges().get(0).getIn().getBody(com.google.api.services.drive.model.FileList.class);
+ assertTrue(fileInList("greeting.txt", fileList));
+ }
+
+ private boolean fileInList(String fileName, FileList fileList) {
+ for (File f : fileList.getItems()) {
+ if (f.getTitle().equals(fileName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ from("file://target/convertertest?noop=true")
+ // should convert from GenericFile to Google File here
+ .to("google-drive://drive-files/insert?inBody=content")
+ .to("google-drive://drive-files/list")
+ .to("mock:result");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/30e1fdbe/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java
new file mode 100644
index 0000000..55dd5f4
--- /dev/null
+++ b/components/camel-google-drive/src/test/java/org/apache/camel/component/google/drive/FilesConsumerIntegrationTest.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.google.drive;
+
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.camel.component.google.drive.internal.GoogleDriveApiCollection;
+import org.apache.camel.component.google.drive.internal.DriveFilesApiMethod;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import com.google.api.services.drive.model.File;
+import com.google.api.services.drive.model.FileList;
+
+/**
+ * Test class for com.google.api.services.drive.Drive$Files APIs.
+ */
+public class FilesConsumerIntegrationTest extends AbstractGoogleDriveTestSupport {
+
+ private static final Logger LOG = LoggerFactory.getLogger(FilesConsumerIntegrationTest.class);
+ private static final String PATH_PREFIX = GoogleDriveApiCollection.getCollection().getApiName(DriveFilesApiMethod.class).getName();
+
+ @Test
+ public void testListConsumer() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+
+ File testFile = uploadTestFile();
+ String fileId = testFile.getId();
+
+ assertMockEndpointsSatisfied();
+
+ FileList fileList = mock.getReceivedExchanges().get(0).getIn().getBody(com.google.api.services.drive.model.FileList.class);
+ assertTrue(fileInList(fileId, fileList));
+
+ }
+
+ private boolean fileInList(String fileId, FileList fileList) {
+ for (File f : fileList.getItems()) {
+ if (f.getId().equals(fileId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() {
+ from("google-drive://drive-files/list").to("mock:result");
+ }
+ };
+ }
+}