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 <jans...@gmail.com>
Authored: Sun Sep 7 23:57:38 2014 -0230
Committer: Jonathan Anstey <jans...@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");
+            }
+        };
+    }
+}

Reply via email to