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"); + } + }; + } +}