[camel] branch sandbox/camel-3.x updated (a170082 -> a305977)

classic Classic list List threaded Threaded
44 messages Options
123
Reply | Threaded
Open this post in threaded view
|

[camel] branch sandbox/camel-3.x updated (a170082 -> a305977)

acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a change to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from a170082  Upgrade AWS Xray to version 2.1.0
     new 81173ec  CAMEL-12943: Rest DSL generates invalid swagger operation Id
     new ef52c6e  Fix typo.
     new 2d04a01  Avoid constants in interfaces
     new 8f691ed  Remove gmail related naming from calendar component
     new 5d93782  Remove unused oauth scopes in google mail component
     new 16a793a  Use given exchange pattern when creating the exchange for incoming mail events
     new 3f81927  Move integration Maven profile to camel-parent pom.xml in order to enable proper configuration propagation to submodules
     new 67b60ae  Regen
     new b0961cc  Regen
     new e32496a  Refactor irc tests
     new 377c134  CAMEL-12950: Add google-sheets component
     new 814098d  Fixed backport of google-sheet from 2.x and regen
     new 5de6927  CAMEL-12950 - Fixed CS
     new 104ee39  Upgrade Reactor to version 3.2.3.RELEASE
     new 3d058bb  CAMEL-12950 - Added camel-google-sheets Spring Boot Integration test
     new 218ea27  Upgrade Json Schema Validator to version 0.1.24
     new 867aeb7  Camel-NSQ: Fixed the NSQ component description and first version
     new 9cea595  Upgrade Owasp Dependency Check Maven Plugin to version 4.0.0
     new 8b4aba1  Upgrade Brave to version 5.5.1
     new e4b9d0e  Probably a typo, the builder was configured but always resetted by a new one (#2632)
     new a11c4c2  upgrading johnzon to 1.1.10
     new df588a8  dropping asm to prepare coming spifly upgrade
     new 380474d  Updating CXF
     new 5acea45  Exclude data files of FHIR examples from license check
     new 9712d8a  Add missing license information
     new d9c214b  Ignore mvel file for license check
     new 97ddc73  Ignore KieServerExtension file in license check
     new 94732f8  Fix license check excludes
     new 1f709c7  Added a Camel connector for R3's Corda blockchain platform using corda-rpc module
     new 0a46282  Camel-corda fixed backport from 2.x and regen
     new 6326f78  CAMEL-12952 Send pong frame as a response to ping frame
     new 1e44eb9  CAMEL-12951 reconnect exception is passed to exception handler
     new 2cced7c  Camel-AHC WS - Fixed CS
     new 421b58a  CAMEL-12958 - Wrong camel context bound in service registry of jbpm/Kie Server
     new 0c3e0a6  Fix camel-corda stuff for kit
     new a2480d7  Set the secure processing feature on various DocumentBuilderFactory, TransformerFactory, SAXParserFactory instances
     new 63463c3  Upgrade TestContainers to version 1.10.2
     new 4b65752  Upgrade Mongodb Java Driver to version 3.9.1
     new 1571742  Fixed Backport in WSEndpoint
     new 42602cc  Regen
     new c0d7998  Fixed Camel-corda-starter
     new 76a3703  Fixed Camel google-sheets starter
     new a305977  Fixed camel-corda-starter and camel-google-sheets starter

The 43 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 apache-camel/pom.xml                               |  20 +-
 apache-camel/src/main/descriptors/common-bin.xml   |   6 +-
 bom/camel-bom/pom.xml                              |  20 +
 .../apache/camel/converter/jaxp/XmlConverter.java  |   8 +
 .../apache/camel/model/RouteDefinitionHelper.java  |  29 +-
 .../apache/camel/model/rest/RestDefinition.java    |  10 +-
 .../camel/impl/RouteIdRestDefinitionTest.java      |  52 +++
 .../management/mbean/RouteCoverageXmlParser.java   |   5 +-
 .../org/apache/camel/util/XmlLineNumberParser.java |   3 +
 .../apache/camel/component/ahc/ws/WsEndpoint.java  |   9 +
 .../camel/component/cm/CMSenderOneMessageImpl.java |   6 +-
 components/camel-corda/.gitignore                  |   6 +
 components/camel-corda/README.md                   |   3 +
 components/camel-corda/pom.xml                     |  84 ++++
 .../camel-corda/src/main/docs/corda-component.adoc | 141 ++++++
 .../camel/component/corda/CordaComponent.java      |  55 +++
 .../camel/component/corda/CordaConfiguration.java  | 168 +++++++
 .../camel/component/corda/CordaConstants.java      |  69 +++
 .../camel/component/corda/CordaConsumer.java       | 267 +++++++++++
 .../camel/component/corda/CordaEndpoint.java       | 102 +++++
 .../camel/component/corda/CordaProducer.java       | 240 ++++++++++
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../services/org/apache/camel/component/corda      |  18 +
 .../apache/camel/component/corda/CamelFlow.java}   |  20 +-
 .../corda/CordaConsumerNetworkMapFeedTest.java     |  49 ++
 .../CordaConsumerStartTrackedFlowDynamicTest.java  |  54 +++
 .../corda/CordaConsumerStateMachineFeedTest.java   |  49 ++
 .../component/corda/CordaConsumerTestSupport.java  |  62 +++
 .../corda/CordaConsumerTransactionMapFeedTest.java |  49 ++
 .../CordaConsumerVaultTrackByCriteriaTest.java     |  51 +++
 .../corda/CordaConsumerVaultTrackByTest.java       |  53 +++
 ...ordaConsumerVaultTrackByWithPagingSpecTest.java |  52 +++
 .../CordaConsumerVaultTrackByWithSortingTest.java  |  52 +++
 .../corda/CordaConsumerVaultTrackTest.java         |  49 ++
 .../camel/component/corda/CordaProducerTest.java   | 498 +++++++++++++++++++++
 .../camel/component/corda/CordaTestSupport.java    |  75 ++++
 .../component/corda/IntegrationWhiteList.java}     |  24 +-
 ...corda.core.serialization.SerializationWhitelist |   1 +
 .../src/test/resources/log4j2.properties}          |  20 +-
 .../org.mockito.plugins.MockMaker                  |   0
 .../component/flatpack/FlatpackConverter.java      |   5 +-
 .../apache/camel/component/fop/FopProducer.java    |   7 +-
 .../google/bigquery/GoogleBigQueryConstants.java   |  17 +-
 .../docs/google-calendar-stream-component.adoc     |  24 +-
 .../calendar/internal/GoogleCalendarConstants.java |  13 +-
 .../stream/GoogleCalendarStreamComponent.java      |   9 +-
 .../stream/GoogleCalendarStreamConfiguration.java  |  21 +-
 .../stream/GoogleCalendarStreamConstants.java      |  16 +-
 .../stream/GoogleCalendarStreamEndpoint.java       |  19 +-
 .../AbstractGoogleCalendarStreamTestSupport.java   |   6 +-
 .../drive/internal/GoogleDriveConstants.java       |  13 +-
 .../main/docs/google-mail-stream-component.adoc    |  10 +-
 .../google/mail/internal/GoogleMailConstants.java  |  13 +-
 .../mail/stream/GoogleMailStreamConfiguration.java |  23 -
 .../mail/stream/GoogleMailStreamConstants.java     |  21 +-
 .../mail/stream/GoogleMailStreamEndpoint.java      |  22 +-
 components/camel-google-sheets/pom.xml             | 289 ++++++++++++
 .../src/main/docs/google-sheets-component.adoc     | 180 ++++++++
 .../main/docs/google-sheets-stream-component.adoc} |  96 ++--
 .../sheets/BatchGoogleSheetsClientFactory.java     |  66 +++
 .../google/sheets/GoogleSheetsClientFactory.java}  |  13 +-
 .../google/sheets/GoogleSheetsComponent.java       | 103 +++++
 .../google/sheets/GoogleSheetsConfiguration.java   | 130 ++++++
 .../google/sheets/GoogleSheetsConsumer.java        |  54 +++
 .../google/sheets/GoogleSheetsEndpoint.java        | 109 +++++
 .../google/sheets/GoogleSheetsProducer.java        |  54 +++
 .../sheets/GoogleSheetsVerifierExtension.java      |  77 ++++
 .../sheets/internal/GoogleSheetsConstants.java}    |  16 +-
 .../internal/GoogleSheetsPropertiesHelper.java}    |  24 +-
 .../sheets/stream/GoogleSheetsStreamComponent.java |  96 ++++
 .../stream/GoogleSheetsStreamConfiguration.java}   | 139 +++---
 .../stream/GoogleSheetsStreamConstants.java}       |  22 +-
 .../sheets/stream/GoogleSheetsStreamConsumer.java  | 120 +++++
 .../sheets/stream/GoogleSheetsStreamEndpoint.java  | 104 +++++
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../org/apache/camel/component/google-sheets       |  17 +
 .../apache/camel/component/google-sheets-stream    |  17 +
 .../sheets/AbstractGoogleSheetsTestSupport.java    | 165 +++++++
 .../sheets/GoogleSheetsVerifierExtensionTest.java  |  68 +++
 .../google/sheets/SheetsConfigurationTest.java     |  64 +++
 .../sheets/SheetsSpreadsheetsIntegrationTest.java  | 120 +++++
 .../SheetsSpreadsheetsValuesIntegrationTest.java   | 169 +++++++
 .../AbstractGoogleSheetsStreamTestSupport.java     |  44 ++
 .../SheetsStreamConsumerIntegrationTest.java       |  70 +++
 .../src/test/resources/log4j2.properties}          |  14 +-
 .../src/test/resources/test-options.properties}    |  12 +-
 components/camel-irc/pom.xml                       |  37 ++
 .../apache/camel/component/irc/IrcsRouteTest.java  |  38 --
 .../irc/it/IrcIntegrationTestSupport.java          |  68 +++
 .../irc/{ => it}/IrcMultiChannelRouteTest.java     |  63 ++-
 .../component/irc/{ => it}/IrcOnReplyTest.java     |  18 +-
 .../component/irc/{ => it}/IrcPrivmsgTest.java     |  27 +-
 .../camel/component/irc/{ => it}/IrcRouteTest.java |  36 +-
 .../IrcsListUsersTest.java}                        |  32 +-
 .../camel/component/irc/it/IrcsRouteTest.java}     |  21 +-
 .../IrcsWithSslContextParamsRouteTest.java         |   2 +-
 ...t-list-users.properties => it-tests.properties} |  12 +-
 .../jbpm/server/CamelKieServerExtension.java       |   2 +-
 .../camel/component/johnzon/JohnzonDataFormat.java |   2 +-
 components/camel-nsq/pom.xml                       |  18 +
 .../camel-nsq/src/main/docs/nsq-component.adoc     |  10 +-
 .../apache/camel/component/nsq/NsqEndpoint.java    |   2 +-
 .../processor/SchematronProcessorFactory.java      |   2 +
 .../spring/ws/bean/CamelEndpointMapping.java       |   2 +
 .../impl/HeaderTransformationMessageFilter.java    |  10 +-
 .../dataformat/tagsoup/TidyMarkupDataFormat.java   |   5 +-
 .../apache/camel/component/tika/TikaProducer.java  |   2 +
 components/pom.xml                                 |   4 +-
 components/readme.adoc                             |  15 +-
 docs/user-manual/en/SUMMARY.md                     |   5 +-
 examples/camel-example-kafka/README.adoc           |   2 +-
 parent/pom.xml                                     |  96 +++-
 .../camel/catalog/nexus/BaseNexusRepository.java   |   3 +
 .../apache/camel/catalog/DefaultCamelCatalog.java  |   7 +-
 .../karaf/features/src/main/resources/features.xml |  44 +-
 .../camel-corda-starter}/pom.xml                   |  70 ++-
 .../CordaComponentAutoConfiguration.java           | 128 ++++++
 .../springboot/CordaComponentConfiguration.java    | 182 ++++++++
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../additional-spring-configuration-metadata.json  |  10 +
 .../src/main/resources/META-INF/spring.factories   |   5 +-
 .../src/main/resources/META-INF/spring.provides    |   5 +-
 ...GoogleCalendarStreamComponentConfiguration.java |   8 +-
 .../GoogleMailStreamComponentConfiguration.java    |  15 -
 .../camel-google-sheets-starter}/pom.xml           |  66 +--
 .../GoogleSheetsComponentAutoConfiguration.java    | 129 ++++++
 .../GoogleSheetsComponentConfiguration.java}       | 138 ++----
 ...ogleSheetsStreamComponentAutoConfiguration.java | 130 ++++++
 .../GoogleSheetsStreamComponentConfiguration.java} | 120 ++---
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../src/main/resources/META-INF/spring.factories   |   7 +-
 .../src/main/resources/META-INF/spring.provides    |   5 +-
 platforms/spring-boot/components-starter/pom.xml   |   2 +
 .../camel-spring-boot-dependencies/pom.xml         |  95 ++--
 pom.xml                                            |  33 +-
 .../camel/itest/karaf/CamelGoogleSheetsTest.java   |  22 +-
 .../itest/springboot/CamelGoogleSheetsTest.java    |  50 +++
 .../camel/parser/helper/XmlLineNumberParser.java   |   4 +
 .../maven/bom/generator/BomGeneratorMojo.java      |  11 +-
 .../java/org/apache/camel/maven/XmlHelper.java     |   7 +-
 .../maven/packaging/PrepareCatalogKarafMojo.java   |   3 +
 .../maven/packaging/SpringBootStarterMojo.java     |  10 +-
 146 files changed, 6214 insertions(+), 796 deletions(-)
 create mode 100644 camel-core/src/test/java/org/apache/camel/impl/RouteIdRestDefinitionTest.java
 create mode 100644 components/camel-corda/.gitignore
 create mode 100644 components/camel-corda/README.md
 create mode 100644 components/camel-corda/pom.xml
 create mode 100644 components/camel-corda/src/main/docs/corda-component.adoc
 create mode 100644 components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaComponent.java
 create mode 100644 components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConfiguration.java
 create mode 100644 components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConstants.java
 create mode 100644 components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaConsumer.java
 create mode 100644 components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaEndpoint.java
 create mode 100644 components/camel-corda/src/main/java/org/apache/camel/component/corda/CordaProducer.java
 copy {tooling/maven/camel-package-maven-plugin => components/camel-corda}/src/main/resources/META-INF/LICENSE.txt (100%)
 mode change 100644 => 100755
 copy {tooling/maven/camel-package-maven-plugin => components/camel-corda}/src/main/resources/META-INF/NOTICE.txt (100%)
 mode change 100644 => 100755
 create mode 100755 components/camel-corda/src/main/resources/META-INF/services/org/apache/camel/component/corda
 copy components/{camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java => camel-corda/src/test/java/org/apache/camel/component/corda/CamelFlow.java} (70%)
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerNetworkMapFeedTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerStartTrackedFlowDynamicTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerStateMachineFeedTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerTestSupport.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerTransactionMapFeedTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerVaultTrackByCriteriaTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerVaultTrackByTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerVaultTrackByWithPagingSpecTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerVaultTrackByWithSortingTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaConsumerVaultTrackTest.java
 create mode 100644 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaProducerTest.java
 create mode 100755 components/camel-corda/src/test/java/org/apache/camel/component/corda/CordaTestSupport.java
 copy components/{camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java => camel-corda/src/test/java/org/apache/camel/component/corda/IntegrationWhiteList.java} (59%)
 create mode 100644 components/camel-corda/src/test/resources/META-INF/services/net.corda.core.serialization.SerializationWhitelist
 copy components/{camel-irc/src/test/resources/it-list-users.properties => camel-corda/src/test/resources/log4j2.properties} (65%)
 copy components/{camel-web3j => camel-corda}/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker (100%)
 create mode 100644 components/camel-google-sheets/pom.xml
 create mode 100644 components/camel-google-sheets/src/main/docs/google-sheets-component.adoc
 copy components/{camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc => camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc} (54%)
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
 copy components/{camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java => camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsClientFactory.java} (70%)
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConfiguration.java
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java
 copy components/{camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java => camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java} (71%)
 copy components/{camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java => camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java} (50%)
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
 copy components/{camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java => camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java} (52%)
 copy components/{camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java => camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java} (55%)
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
 create mode 100644 components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
 copy {tooling/maven/camel-package-maven-plugin => components/camel-google-sheets}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => components/camel-google-sheets}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets
 create mode 100644 components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets-stream
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsConfigurationTest.java
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
 create mode 100644 components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
 copy components/{camel-irc/src/test/resources/it-list-users.properties => camel-google-sheets/src/test/resources/log4j2.properties} (68%)
 copy components/{camel-irc/src/test/resources/it-list-users.properties => camel-google-sheets/src/test/resources/test-options.properties} (79%)
 delete mode 100644 components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
 create mode 100644 components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java
 rename components/camel-irc/src/test/java/org/apache/camel/component/irc/{ => it}/IrcMultiChannelRouteTest.java (59%)
 rename components/camel-irc/src/test/java/org/apache/camel/component/irc/{ => it}/IrcOnReplyTest.java (81%)
 rename components/camel-irc/src/test/java/org/apache/camel/component/irc/{ => it}/IrcPrivmsgTest.java (80%)
 rename components/camel-irc/src/test/java/org/apache/camel/component/irc/{ => it}/IrcRouteTest.java (81%)
 rename components/camel-irc/src/test/java/org/apache/camel/component/irc/{IrcsListUsersIntegrationTest.java => it/IrcsListUsersTest.java} (74%)
 copy components/{camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java => camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsRouteTest.java} (70%)
 rename components/camel-irc/src/test/java/org/apache/camel/component/irc/{ => it}/IrcsWithSslContextParamsRouteTest.java (98%)
 copy components/camel-irc/src/test/resources/{it-list-users.properties => it-tests.properties} (84%)
 copy {components/camel-irc => platforms/spring-boot/components-starter/camel-corda-starter}/pom.xml (53%)
 create mode 100644 platforms/spring-boot/components-starter/camel-corda-starter/src/main/java/org/apache/camel/component/corda/springboot/CordaComponentAutoConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-corda-starter/src/main/java/org/apache/camel/component/corda/springboot/CordaComponentConfiguration.java
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-corda-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-corda-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-corda-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json
 copy components/camel-irc/src/test/resources/it-list-users.properties => platforms/spring-boot/components-starter/camel-corda-starter/src/main/resources/META-INF/spring.factories (87%)
 copy components/camel-irc/src/test/resources/it-list-users.properties => platforms/spring-boot/components-starter/camel-corda-starter/src/main/resources/META-INF/spring.provides (91%)
 copy {components/camel-irc => platforms/spring-boot/components-starter/camel-google-sheets-starter}/pom.xml (53%)
 create mode 100644 platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java
 copy platforms/spring-boot/components-starter/{camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java => camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java} (57%)
 create mode 100644 platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java
 copy platforms/spring-boot/components-starter/{camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java => camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java} (58%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-google-sheets-starter}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/camel-package-maven-plugin => platforms/spring-boot/components-starter/camel-google-sheets-starter}/src/main/resources/META-INF/NOTICE.txt (100%)
 copy components/camel-irc/src/test/resources/it-list-users.properties => platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.factories (78%)
 rename components/camel-irc/src/test/resources/it-list-users.properties => platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.provides (91%)
 copy components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarConstants.java => tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelGoogleSheetsTest.java (67%)
 create mode 100644 tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelGoogleSheetsTest.java

Reply | Threaded
Open this post in threaded view
|

[camel] 01/43: CAMEL-12943: Rest DSL generates invalid swagger operation Id

acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 81173ecc7dec6ba8473d5fb30b57db844c2acaf7
Author: Dmitry Volodin <[hidden email]>
AuthorDate: Mon Nov 19 19:22:27 2018 +0300

    CAMEL-12943: Rest DSL generates invalid swagger operation Id
---
 .../apache/camel/model/RouteDefinitionHelper.java  | 29 +++++++++++-
 .../apache/camel/model/rest/RestDefinition.java    | 10 ++++-
 .../camel/impl/RouteIdRestDefinitionTest.java      | 52 ++++++++++++++++++++++
 3 files changed, 89 insertions(+), 2 deletions(-)

diff --git a/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java b/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
index 95f6c0b..805514e 100644
--- a/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
@@ -144,6 +144,19 @@ public final class RouteDefinitionHelper {
                     });
                 }
                 customIds.add(id);
+            } else {
+                RestDefinition rest = route.getRestDefinition();
+                if (rest != null && route.isRest()) {
+                    VerbDefinition verb = findVerbDefinition(rest, route.getInputs().get(0).getUri());
+                    if (verb != null) {
+                        String id = verb.getId();
+                        if (verb.hasCustomIdAssigned() && ObjectHelper.isNotEmpty(id) && !customIds.contains(id)) {
+                            route.setId(id);
+                            customIds.add(id);
+                            break;
+                        }
+                    }
+                }
             }
         }
 
@@ -171,7 +184,8 @@ public final class RouteDefinitionHelper {
             }
             RestDefinition rest = route.getRestDefinition();
             if (rest != null && route.isRest()) {
-                for (VerbDefinition verb : rest.getVerbs()) {
+                VerbDefinition verb = findVerbDefinition(rest, route.getInputs().get(0).getUri());
+                if (verb != null) {
                     String id = verb.idOrCreate(context.getNodeIdFactory());
                     if (!verb.getUsedForGeneratingNodeId()) {
                         id = route.getId();
@@ -197,6 +211,19 @@ public final class RouteDefinitionHelper {
             }
         }
     }
+    
+    /**
+     * Find verb associated with the route by mapping uri
+     */
+    private static VerbDefinition findVerbDefinition(RestDefinition rest, String endpointUri) {
+        for (VerbDefinition verb : rest.getVerbs()) {
+            String verbUri = rest.buildFromUri(verb);
+            if (endpointUri.startsWith(verbUri)) {
+                return verb;
+            }
+        }
+        return null;
+    }
 
     /**
      * Validates that the target route has no duplicate id's from any of the existing routes.
diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
index d672225..6d9755f 100644
--- a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java
@@ -611,6 +611,13 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         verb.setRoute(route);
         return route;
     }
+    
+    /**
+     * Build the from endpoint uri for the verb
+     */
+    public String buildFromUri(VerbDefinition verb) {
+        return "rest:" + verb.asVerb() + ":" + buildUri(verb);
+    }
 
     // Implementation
     //-------------------------------------------------------------------------
@@ -750,6 +757,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
         return answer;
     }
 
+    @SuppressWarnings("rawtypes")
     private void addRouteDefinition(CamelContext camelContext, List<RouteDefinition> answer, String component) {
         for (VerbDefinition verb : getVerbs()) {
             // either the verb has a singular to or a embedded route
@@ -828,7 +836,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
             route.setRestBindingDefinition(binding);
 
             // create the from endpoint uri which is using the rest component
-            String from = "rest:" + verb.asVerb() + ":" + buildUri(verb);
+            String from = buildFromUri(verb);
 
             // append options
             Map<String, Object> options = new HashMap<>();
diff --git a/camel-core/src/test/java/org/apache/camel/impl/RouteIdRestDefinitionTest.java b/camel-core/src/test/java/org/apache/camel/impl/RouteIdRestDefinitionTest.java
new file mode 100644
index 0000000..30b1327
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/impl/RouteIdRestDefinitionTest.java
@@ -0,0 +1,52 @@
+/**
+ * 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.impl;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.rest.DummyRestConsumerFactory;
+import org.apache.camel.component.rest.DummyRestProcessorFactory;
+import org.junit.Test;
+
+public class RouteIdRestDefinitionTest extends ContextTestSupport {
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("dummy-rest", new DummyRestConsumerFactory());
+        jndi.bind("dummy-rest-api", new DummyRestProcessorFactory());
+        return jndi;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start1?timeout=30000").to("mock:result");
+                from("direct:start2").to("mock:result");
+                rest("/say/hello").get("/bar").id("getSayHelloBar").to("mock:result");
+            }
+        };
+    }
+
+    @Test
+    public void testSayHelloBar() {
+        assertEquals("getSayHelloBar", context.getRouteDefinitions().get(2).getId());
+    }
+    
+}
\ No newline at end of file

Reply | Threaded
Open this post in threaded view
|

[camel] 02/43: Fix typo.

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ef52c6e9979411fc0d65ba490d44e6c8f7523868
Author: Erhun Baycelik <[hidden email]>
AuthorDate: Thu Nov 22 09:54:02 2018 +0200

    Fix typo.
---
 examples/camel-example-kafka/README.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/examples/camel-example-kafka/README.adoc b/examples/camel-example-kafka/README.adoc
index d1f35cb..f439cde 100644
--- a/examples/camel-example-kafka/README.adoc
+++ b/examples/camel-example-kafka/README.adoc
@@ -2,7 +2,7 @@
 
 === Introduction
 
-An example which shows how to integrate Camel with Kakfa.
+An example which shows how to integrate Camel with Kafka.
 
 This project consists of the following examples:
 

Reply | Threaded
Open this post in threaded view
|

[camel] 03/43: Avoid constants in interfaces

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 2d04a01f38257cd824bd7af01b8bcca28f39e675
Author: Christoph Deppisch <[hidden email]>
AuthorDate: Thu Nov 22 09:11:45 2018 +0100

    Avoid constants in interfaces
---
 .../google/bigquery/GoogleBigQueryConstants.java    | 17 ++++++++++++-----
 .../calendar/internal/GoogleCalendarConstants.java  | 13 ++++++++++---
 .../stream/GoogleCalendarStreamConstants.java       | 21 ++++++++++++++-------
 .../google/drive/internal/GoogleDriveConstants.java | 13 ++++++++++---
 .../google/mail/internal/GoogleMailConstants.java   | 13 ++++++++++---
 .../mail/stream/GoogleMailStreamConstants.java      | 21 ++++++++++++++-------
 6 files changed, 70 insertions(+), 28 deletions(-)

diff --git a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
index 89d0eeb..cfd3c57 100644
--- a/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
+++ b/components/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
@@ -16,9 +16,16 @@
  */
 package org.apache.camel.component.google.bigquery;
 
-public interface GoogleBigQueryConstants {
-    String TABLE_SUFFIX = "CamelGoogleBigQueryTableSuffix";
-    String TABLE_ID = "CamelGoogleBigQueryTableId";
-    String INSERT_ID = "CamelGoogleBigQueryInsertId";
-    String PARTITION_DECORATOR = "CamelGoogleBigQueryPartitionDecorator";
+public final class GoogleBigQueryConstants {
+    public static final String TABLE_SUFFIX = "CamelGoogleBigQueryTableSuffix";
+    public static final String TABLE_ID = "CamelGoogleBigQueryTableId";
+    public static final String INSERT_ID = "CamelGoogleBigQueryInsertId";
+    public static final String PARTITION_DECORATOR = "CamelGoogleBigQueryPartitionDecorator";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleBigQueryConstants() {
+        super();
+    }
 }
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarConstants.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarConstants.java
index b604ad0..f25f84c 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarConstants.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarConstants.java
@@ -19,11 +19,18 @@ package org.apache.camel.component.google.calendar.internal;
 /**
  * Constants for GoogleCalendar component.
  */
-public interface GoogleCalendarConstants {
+public final class GoogleCalendarConstants {
 
     // suffix for parameters when passed as exchange header properties
-    String PROPERTY_PREFIX = "CamelGoogleCalendar.";
+    public static final String PROPERTY_PREFIX = "CamelGoogleCalendar.";
 
     // thread profile name for this component
-    String THREAD_PROFILE_NAME = "CamelGoogleCalendar";
+    public static final String THREAD_PROFILE_NAME = "CamelGoogleCalendar";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleCalendarConstants() {
+        super();
+    }
 }
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
index c671c54..e590b74 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
@@ -19,12 +19,19 @@ package org.apache.camel.component.google.calendar.stream;
 /**
  * Constants used in Camel Google Calendar Stream
  */
-public interface GoogleCalendarStreamConstants {
+public final class GoogleCalendarStreamConstants {
 
-    String MAIL_TO = "CamelGoogleMailStreamTo";
-    String MAIL_FROM = "CamelGoogleMailStreamFrom";
-    String MAIL_CC = "CamelGoogleMailStreamCc";
-    String MAIL_BCC = "CamelGoogleMailStreamBcc";
-    String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
-    String MAIL_ID = "CamelGoogleMailId";
+    public static final String MAIL_TO = "CamelGoogleMailStreamTo";
+    public static final String MAIL_FROM = "CamelGoogleMailStreamFrom";
+    public static final String MAIL_CC = "CamelGoogleMailStreamCc";
+    public static final String MAIL_BCC = "CamelGoogleMailStreamBcc";
+    public static final String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
+    public static final String MAIL_ID = "CamelGoogleMailId";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleCalendarStreamConstants() {
+        super();
+    }
 }
diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDriveConstants.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDriveConstants.java
index 9f824f5..d19ba20 100644
--- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDriveConstants.java
+++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDriveConstants.java
@@ -19,11 +19,18 @@ package org.apache.camel.component.google.drive.internal;
 /**
  * Constants for GoogleDrive component.
  */
-public interface GoogleDriveConstants {
+public final class GoogleDriveConstants {
 
     // suffix for parameters when passed as exchange header properties
-    String PROPERTY_PREFIX = "CamelGoogleDrive.";
+    public static final String PROPERTY_PREFIX = "CamelGoogleDrive.";
 
     // thread profile name for this component
-    String THREAD_PROFILE_NAME = "CamelGoogleDrive";
+    public static final String THREAD_PROFILE_NAME = "CamelGoogleDrive";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleDriveConstants() {
+        super();
+    }
 }
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java
index f788ff3..a834549 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailConstants.java
@@ -19,11 +19,18 @@ package org.apache.camel.component.google.mail.internal;
 /**
  * Constants for GoogleMail component.
  */
-public interface GoogleMailConstants {
+public final class GoogleMailConstants {
 
     // suffix for parameters when passed as exchange header properties
-    String PROPERTY_PREFIX = "CamelGoogleMail.";
+    public static final String PROPERTY_PREFIX = "CamelGoogleMail.";
 
     // thread profile name for this component
-    String THREAD_PROFILE_NAME = "CamelGoogleMail";
+    public static final String THREAD_PROFILE_NAME = "CamelGoogleMail";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleMailConstants() {
+        super();
+    }
 }
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
index ccd2c0f..e8ca7c2 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
@@ -19,12 +19,19 @@ package org.apache.camel.component.google.mail.stream;
 /**
  * Constants used in Camel Google Mail Stream
  */
-public interface GoogleMailStreamConstants {
+public final class GoogleMailStreamConstants {
 
-    String MAIL_TO = "CamelGoogleMailStreamTo";
-    String MAIL_FROM = "CamelGoogleMailStreamFrom";
-    String MAIL_CC = "CamelGoogleMailStreamCc";
-    String MAIL_BCC = "CamelGoogleMailStreamBcc";
-    String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
-    String MAIL_ID = "CamelGoogleMailId";
+    public static final String MAIL_TO = "CamelGoogleMailStreamTo";
+    public static final String MAIL_FROM = "CamelGoogleMailStreamFrom";
+    public static final String MAIL_CC = "CamelGoogleMailStreamCc";
+    public static final String MAIL_BCC = "CamelGoogleMailStreamBcc";
+    public static final String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
+    public static final String MAIL_ID = "CamelGoogleMailId";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleMailStreamConstants() {
+        super();
+    }
 }

Reply | Threaded
Open this post in threaded view
|

[camel] 04/43: Remove gmail related naming from calendar component

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8f691ed51335bc7c3b4df1955b24cfd95a92a0f3
Author: Christoph Deppisch <[hidden email]>
AuthorDate: Thu Nov 22 09:13:18 2018 +0100

    Remove gmail related naming from calendar component
   
    Conflicts:
    components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
---
 .../main/docs/google-calendar-stream-component.adoc | 18 +++++++++---------
 .../stream/GoogleCalendarStreamComponent.java       |  9 ++++-----
 .../stream/GoogleCalendarStreamConfiguration.java   | 21 ++++++++++-----------
 .../stream/GoogleCalendarStreamConstants.java       |  7 +------
 .../stream/GoogleCalendarStreamEndpoint.java        | 19 ++++++++-----------
 .../AbstractGoogleCalendarStreamTestSupport.java    |  6 +++---
 .../GoogleCalendarStreamComponentConfiguration.java | 10 +++++-----
 7 files changed, 40 insertions(+), 50 deletions(-)

diff --git a/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc b/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
index 93090f4..624e342 100644
--- a/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
+++ b/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
@@ -12,7 +12,7 @@ Google Calendar uses
 the https://developers.google.com/accounts/docs/OAuth2[OAuth 2.0
 protocol] for authenticating a Google account and authorizing access to
 user data. Before you can use this component, you will need
-to https://developers.google.com/gmail/api/auth/web-server[create an
+to https://developers.google.com/calendar/auth[create an
 account and generate OAuth credentials]. Credentials comprise of a
 clientId, clientSecret, and a refreshToken. A handy resource for
 generating a long-lived refreshToken is
@@ -27,7 +27,7 @@ for this component:
             <artifactId>camel-google-calendar</artifactId>
             <version>2.23.0</version>
     </dependency>
-        
+
 ------------------------------------------------------
 
 ### URI Format
@@ -36,10 +36,10 @@ The Google Calendar Component uses the following URI format:
 
 --------------------------------------------------------
         google-calendar-stream://index?[options]
-    
+
 --------------------------------------------------------
 
-### GoogleMailStreamComponent
+### GoogleCalendarStreamComponent
 
 
 // component options: START
@@ -88,14 +88,14 @@ with the following path and query parameters:
 | *applicationName* (consumer) | Google Calendar application name. Example would be camel-google-calendar/1.0 |  | String
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *calendarId* (consumer) | The calendarId to be used | primary | String
-| *clientId* (consumer) | Client ID of the mail application |  | String
-| *clientSecret* (consumer) | Client secret of the mail application |  | String
+| *clientId* (consumer) | Client ID of the calendar application |  | String
+| *clientSecret* (consumer) | Client secret of the calendar application |  | String
 | *considerLastUpdate* (consumer) | Take into account the lastUpdate of the last event polled as start date for the next poll | false | boolean
 | *consumeFromNow* (consumer) | Consume events in the selected calendar from now on | true | boolean
 | *maxResults* (consumer) | Max results to be returned | 10 | int
 | *query* (consumer) | The query to execute on calendar |  | String
 | *refreshToken* (consumer) | OAuth 2 refresh token. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
-| *scopes* (consumer) | Specifies the level of permissions you want a mail application to have to a user account. See https://developers.google.com/calendar/api/auth/scopes for more info. |  | List
+| *scopes* (consumer) | Specifies the level of permissions you want a calendar application to have to a user account. See https://developers.google.com/calendar/auth for more info. |  | List
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
@@ -148,7 +148,7 @@ The component supports 15 options, which are listed below.
 
 ### Consumer
 
-The consumer will poll by default with maxResults equals to 10.
+The consumer will poll by default with maxResults equals to 5.
 
 For example
 
@@ -157,6 +157,6 @@ For example
 from("google-calendar-stream://test?markAsRead=true&delay=5000&maxResults=5").to("mock:result");
 ---------------------------------------------------------
 
-This route will consume the next ten events starting from the date of polling.
+This route will consume the next five events starting from the date of polling.
 
    
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamComponent.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamComponent.java
index c52caf0..de0a404 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamComponent.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamComponent.java
@@ -19,7 +19,6 @@ package org.apache.camel.component.google.calendar.stream;
 import java.util.Map;
 
 import com.google.api.services.calendar.Calendar;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.component.google.calendar.BatchGoogleCalendarClientFactory;
@@ -49,11 +48,11 @@ public class GoogleCalendarStreamComponent extends DefaultComponent {
         this.configuration = new GoogleCalendarStreamConfiguration();
     }
 
-    public Calendar getClient(GoogleCalendarStreamConfiguration googleMailConfiguration) {
+    public Calendar getClient(GoogleCalendarStreamConfiguration endpointConfiguration) {
         if (client == null) {
-            client = getClientFactory().makeClient(googleMailConfiguration.getClientId(), googleMailConfiguration.getClientSecret(), configuration.getScopes(),
-                                                   googleMailConfiguration.getApplicationName(), googleMailConfiguration.getRefreshToken(),
-                                                   googleMailConfiguration.getAccessToken(), null, null, "me");
+            client = getClientFactory().makeClient(endpointConfiguration.getClientId(), endpointConfiguration.getClientSecret(), endpointConfiguration.getScopes(),
+                                                    endpointConfiguration.getApplicationName(), endpointConfiguration.getRefreshToken(),
+                                                    endpointConfiguration.getAccessToken(), null, null, "me");
         }
         return client;
     }
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
index 8b5648d..4fbc43e 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConfiguration.java
@@ -16,11 +16,10 @@
  */
 package org.apache.camel.component.google.calendar.stream;
 
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import com.google.api.services.calendar.CalendarScopes;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
@@ -31,7 +30,7 @@ import org.apache.camel.spi.UriPath;
  */
 @UriParams
 public class GoogleCalendarStreamConfiguration implements Cloneable {
-    private static final List<String> DEFAULT_SCOPES = Arrays.asList(CalendarScopes.CALENDAR);
+    private static final List<String> DEFAULT_SCOPES = Collections.singletonList(CalendarScopes.CALENDAR);
 
     @UriPath
     private String index;
@@ -59,13 +58,13 @@ public class GoogleCalendarStreamConfiguration implements Cloneable {
 
     @UriParam(defaultValue = "10")
     private int maxResults = 10;
-    
+
     @UriParam(defaultValue = "primary")
     private String calendarId = "primary";
-    
+
     @UriParam(defaultValue = "true")
     private boolean consumeFromNow = true;
-    
+
     @UriParam(defaultValue = "false")
     private boolean considerLastUpdate;
 
@@ -74,7 +73,7 @@ public class GoogleCalendarStreamConfiguration implements Cloneable {
     }
 
     /**
-     * Client ID of the mail application
+     * Client ID of the calendar application
      */
     public void setClientId(String clientId) {
         this.clientId = clientId;
@@ -85,7 +84,7 @@ public class GoogleCalendarStreamConfiguration implements Cloneable {
     }
 
     /**
-     * Client secret of the mail application
+     * Client secret of the calendar application
      */
     public void setClientSecret(String clientSecret) {
         this.clientSecret = clientSecret;
@@ -132,8 +131,8 @@ public class GoogleCalendarStreamConfiguration implements Cloneable {
     }
 
     /**
-     * Specifies the level of permissions you want a mail application to have to
-     * a user account. See https://developers.google.com/calendar/api/auth/scopes
+     * Specifies the level of permissions you want a calendar application to have to
+     * a user account. See https://developers.google.com/calendar/auth
      * for more info.
      */
     public void setScopes(List<String> scopes) {
@@ -187,7 +186,7 @@ public class GoogleCalendarStreamConfiguration implements Cloneable {
     public boolean isConsumeFromNow() {
         return consumeFromNow;
     }
-    
+
     /**
      * Consume events in the selected calendar from now on
      */
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
index e590b74..6f61d54 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
@@ -21,12 +21,7 @@ package org.apache.camel.component.google.calendar.stream;
  */
 public final class GoogleCalendarStreamConstants {
 
-    public static final String MAIL_TO = "CamelGoogleMailStreamTo";
-    public static final String MAIL_FROM = "CamelGoogleMailStreamFrom";
-    public static final String MAIL_CC = "CamelGoogleMailStreamCc";
-    public static final String MAIL_BCC = "CamelGoogleMailStreamBcc";
-    public static final String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
-    public static final String MAIL_ID = "CamelGoogleMailId";
+    public static final String EVENT_ID = "CamelGoogleCalendarEventId";
 
     /**
      * Prevent instantiation.
diff --git a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
index 70568aa..24e0fbc 100644
--- a/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
+++ b/components/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
@@ -16,11 +16,8 @@
  */
 package org.apache.camel.component.google.calendar.stream;
 
-import java.io.UnsupportedEncodingException;
-
 import com.google.api.services.calendar.Calendar;
 import com.google.api.services.calendar.model.Event;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
@@ -35,15 +32,15 @@ import org.apache.camel.spi.UriParam;
 /**
  * The google-calendar component provides access to Google Calendar in a streaming mod.
  */
-@UriEndpoint(firstVersion = "2.23.0",
-             scheme = "google-calendar-stream",
-             title = "Google Calendar Stream",
-             syntax = "google-calendar-stream:index",
+@UriEndpoint(firstVersion = "2.23.0",
+             scheme = "google-calendar-stream",
+             title = "Google Calendar Stream",
+             syntax = "google-calendar-stream:index",
              consumerClass = GoogleCalendarStreamConsumer.class,
              consumerOnly = true,
              label = "api,cloud")
 public class GoogleCalendarStreamEndpoint extends ScheduledPollEndpoint {
-    
+
     @UriParam
     private GoogleCalendarStreamConfiguration configuration;
 
@@ -85,11 +82,11 @@ public class GoogleCalendarStreamEndpoint extends ScheduledPollEndpoint {
         return true;
     }
 
-    public Exchange createExchange(ExchangePattern pattern, Event event) throws UnsupportedEncodingException {
-
-        Exchange exchange = super.createExchange();
+    public Exchange createExchange(ExchangePattern pattern, Event event) {
+        Exchange exchange = super.createExchange(pattern);
         Message message = exchange.getIn();
         message.setBody(event);
+        message.setHeader(GoogleCalendarStreamConstants.EVENT_ID, event.getId());
         return exchange;
     }
 }
diff --git a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/stream/AbstractGoogleCalendarStreamTestSupport.java b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/stream/AbstractGoogleCalendarStreamTestSupport.java
index d95a2c6..0f0e5f9 100644
--- a/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/stream/AbstractGoogleCalendarStreamTestSupport.java
+++ b/components/camel-google-calendar/src/test/java/org/apache/camel/component/google/calendar/stream/AbstractGoogleCalendarStreamTestSupport.java
@@ -26,7 +26,7 @@ import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.support.IntrospectionSupport;
 
 /**
- * Abstract base class for GoogleMail Integration tests generated by Camel API
+ * Abstract base class for GoogleCalendar Integration tests generated by Camel API
  * component maven plugin.
  */
 public class AbstractGoogleCalendarStreamTestSupport extends CamelTestSupport {
@@ -40,7 +40,7 @@ public class AbstractGoogleCalendarStreamTestSupport extends CamelTestSupport {
 
         final CamelContext context = super.createCamelContext();
 
-        // read GoogleMail component configuration from TEST_OPTIONS_PROPERTIES
+        // read GoogleCalendar component configuration from TEST_OPTIONS_PROPERTIES
         final Properties properties = new Properties();
         try {
             properties.load(getClass().getResourceAsStream(TEST_OPTIONS_PROPERTIES));
@@ -56,7 +56,7 @@ public class AbstractGoogleCalendarStreamTestSupport extends CamelTestSupport {
         final GoogleCalendarStreamConfiguration configuration = new GoogleCalendarStreamConfiguration();
         IntrospectionSupport.setProperties(configuration, options);
 
-        // add GoogleMailComponent to Camel context
+        // add GoogleCalendarComponent to Camel context
         final GoogleCalendarStreamComponent component = new GoogleCalendarStreamComponent(context);
         component.setConfiguration(configuration);
         context.addComponent("google-calendar-stream", component);
diff --git a/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java
index 5acded1..d8efcb8 100644
--- a/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 /**
  * The google-calendar component provides access to Google Calendar in a
  * streaming mod.
- *
+ *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -84,11 +84,11 @@ public class GoogleCalendarStreamComponentConfiguration
     public static class GoogleCalendarStreamConfigurationNestedConfiguration {
         public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.google.calendar.stream.GoogleCalendarStreamConfiguration.class;
         /**
-         * Client ID of the mail application
+         * Client ID of the calendar application
          */
         private String clientId;
         /**
-         * Client secret of the mail application
+         * Client secret of the calendar application
          */
         private String clientSecret;
         /**
@@ -108,9 +108,9 @@ public class GoogleCalendarStreamComponentConfiguration
          */
         private String applicationName;
         /**
-         * Specifies the level of permissions you want a mail application to
+         * Specifies the level of permissions you want a calendar application to
          * have to a user account. See
-         * https://developers.google.com/calendar/api/auth/scopes for more info.
+         * https://developers.google.com/calendar/auth for more info.
          */
         private List scopes;
         /**

Reply | Threaded
Open this post in threaded view
|

[camel] 05/43: Remove unused oauth scopes in google mail component

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5d93782b30f0bbde3dd409c3dbe58bca22800a17
Author: Christoph Deppisch <[hidden email]>
AuthorDate: Thu Nov 22 09:14:12 2018 +0100

    Remove unused oauth scopes in google mail component
---
 .../main/docs/google-mail-stream-component.adoc    |  7 +++----
 .../mail/stream/GoogleMailStreamConfiguration.java | 23 ----------------------
 .../GoogleMailStreamComponentConfiguration.java    | 17 +---------------
 3 files changed, 4 insertions(+), 43 deletions(-)

diff --git a/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc b/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
index ed2086b..f6160da 100644
--- a/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
+++ b/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
@@ -27,7 +27,7 @@ for this component:
             <artifactId>camel-google-mail</artifactId>
             <version>2.22-SNAPSHOT</version>
     </dependency>
-        
+
 ------------------------------------------------------
 
 ### URI Format
@@ -36,7 +36,7 @@ The GoogleMail Component uses the following URI format:
 
 --------------------------------------------------------
         google-mail-stream://index?[options]
-    
+
 --------------------------------------------------------
 
 ### GoogleMailStreamComponent
@@ -78,7 +78,7 @@ with the following path and query parameters:
 |===
 
 
-==== Query Parameters (29 parameters):
+==== Query Parameters (28 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -94,7 +94,6 @@ with the following path and query parameters:
 | *maxResults* (consumer) | Max results to be returned | 10 | long
 | *query* (consumer) | The query to execute on gmail box | is:unread | String
 | *refreshToken* (consumer) | OAuth 2 refresh token. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
-| *scopes* (consumer) | Specifies the level of permissions you want a mail application to have to a user account. See https://developers.google.com/gmail/api/auth/scopes for more info. |  | List
 | *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
index a69f719..d816478 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConfiguration.java
@@ -16,11 +16,6 @@
  */
 package org.apache.camel.component.google.mail.stream;
 
-import java.util.Arrays;
-import java.util.List;
-
-import com.google.api.services.gmail.GmailScopes;
-
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
@@ -31,15 +26,10 @@ import org.apache.camel.spi.UriPath;
  */
 @UriParams
 public class GoogleMailStreamConfiguration implements Cloneable {
-    private static final List<String> DEFAULT_SCOPES = Arrays.asList(GmailScopes.GMAIL_COMPOSE, GmailScopes.GMAIL_MODIFY, GmailScopes.MAIL_GOOGLE_COM);
-
     @UriPath
     private String index;
 
     @UriParam
-    private List<String> scopes = DEFAULT_SCOPES;
-
-    @UriParam
     private String clientId;
 
     @UriParam
@@ -124,19 +114,6 @@ public class GoogleMailStreamConfiguration implements Cloneable {
         this.applicationName = applicationName;
     }
 
-    public List<String> getScopes() {
-        return scopes;
-    }
-
-    /**
-     * Specifies the level of permissions you want a mail application to have to
-     * a user account. See https://developers.google.com/gmail/api/auth/scopes
-     * for more info.
-     */
-    public void setScopes(List<String> scopes) {
-        this.scopes = scopes;
-    }
-
     public String getIndex() {
         return index;
     }
diff --git a/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java
index 0a5d1e4..c790e30 100644
--- a/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java
@@ -16,14 +16,13 @@
  */
 package org.apache.camel.component.google.mail.stream.springboot;
 
-import java.util.List;
 import javax.annotation.Generated;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
  * The google-mail component provides access to Google Mail.
- *
+ *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
@@ -105,12 +104,6 @@ public class GoogleMailStreamComponentConfiguration
          */
         private String applicationName;
         /**
-         * Specifies the level of permissions you want a mail application to
-         * have to a user account. See
-         * https://developers.google.com/gmail/api/auth/scopes for more info.
-         */
-        private List scopes;
-        /**
          * Specifies an index for the endpoint
          */
         private String index;
@@ -171,14 +164,6 @@ public class GoogleMailStreamComponentConfiguration
             this.applicationName = applicationName;
         }
 
-        public List getScopes() {
-            return scopes;
-        }
-
-        public void setScopes(List scopes) {
-            this.scopes = scopes;
-        }
-
         public String getIndex() {
             return index;
         }

Reply | Threaded
Open this post in threaded view
|

[camel] 06/43: Use given exchange pattern when creating the exchange for incoming mail events

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 16a793a04fd4b8d6fd240d292f87cd76cc6a6e77
Author: Christoph Deppisch <[hidden email]>
AuthorDate: Thu Nov 22 09:15:54 2018 +0100

    Use given exchange pattern when creating the exchange for incoming mail events
---
 .../mail/stream/GoogleMailStreamEndpoint.java      | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
index 7ad816f..f08d3a9 100644
--- a/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
+++ b/components/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
@@ -16,13 +16,10 @@
  */
 package org.apache.camel.component.google.mail.stream;
 
-import java.io.UnsupportedEncodingException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.mail.internet.AddressException;
-
 import com.google.api.client.util.Base64;
 import com.google.api.services.gmail.Gmail;
 import com.google.api.services.gmail.model.Label;
@@ -30,7 +27,6 @@ import com.google.api.services.gmail.model.ListLabelsResponse;
 import com.google.api.services.gmail.model.MessagePart;
 import com.google.api.services.gmail.model.MessagePartHeader;
 import com.google.common.base.Splitter;
-
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
@@ -46,10 +42,10 @@ import org.apache.camel.util.ObjectHelper;
 /**
  * The google-mail component provides access to Google Mail.
  */
-@UriEndpoint(firstVersion = "2.22.0",
-             scheme = "google-mail-stream",
-             title = "Google Mail Stream",
-             syntax = "google-mail-stream:index",
+@UriEndpoint(firstVersion = "2.22.0",
+             scheme = "google-mail-stream",
+             title = "Google Mail Stream",
+             syntax = "google-mail-stream:index",
              consumerClass = GoogleMailStreamConsumer.class,
              consumerOnly = true,
              label = "api,cloud,mail")
@@ -116,14 +112,14 @@ public class GoogleMailStreamEndpoint extends ScheduledPollEndpoint {
         return true;
     }
 
-    public Exchange createExchange(ExchangePattern pattern, com.google.api.services.gmail.model.Message mail) throws UnsupportedEncodingException {
+    public Exchange createExchange(ExchangePattern pattern, com.google.api.services.gmail.model.Message mail) {
 
-        Exchange exchange = super.createExchange();
+        Exchange exchange = super.createExchange(pattern);
         Message message = exchange.getIn();
         exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_ID, mail.getId());
         List<MessagePart> parts = mail.getPayload().getParts();
         if (parts != null && parts.get(0).getBody().getData() != null) {
-            byte[] bodyBytes = Base64.decodeBase64(parts.get(0).getBody().getData().trim().toString());
+            byte[] bodyBytes = Base64.decodeBase64(parts.get(0).getBody().getData().trim());
             String body = new String(bodyBytes, StandardCharsets.UTF_8);
             message.setBody(body);
         }
@@ -151,8 +147,8 @@ public class GoogleMailStreamEndpoint extends ScheduledPollEndpoint {
             }
         }
     }
-    
-    private List<String> splitLabels(String labels) throws AddressException {
+
+    private List<String> splitLabels(String labels) {
         return Splitter.on(',').splitToList(labels);
     }
 }

Reply | Threaded
Open this post in threaded view
|

[camel] 07/43: Move integration Maven profile to camel-parent pom.xml in order to enable proper configuration propagation to submodules

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3f819278f42e7312469dbdf4854f0794ddfd228a
Author: Christoph Deppisch <[hidden email]>
AuthorDate: Thu Nov 22 09:01:35 2018 +0100

    Move integration Maven profile to camel-parent pom.xml in order to enable proper configuration propagation to submodules
---
 parent/pom.xml | 33 +++++++++++++++++++++++++++++++++
 pom.xml        | 29 -----------------------------
 2 files changed, 33 insertions(+), 29 deletions(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index 83609fa..408b277 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -5635,6 +5635,39 @@
       </dependencies>
     </profile>
 
+    <profile>
+      <id>integration</id>
+      <!--The profile for running the unit and integration test -->
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <version>${maven-surefire-plugin-version}</version>
+            <configuration>
+              <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
+              <childDelegation>false</childDelegation>
+              <useFile>true</useFile>
+              <failIfNoTests>false</failIfNoTests>
+              <runOrder>alphabetical</runOrder>
+              <rerunFailingTestsCount>0</rerunFailingTestsCount>
+              <systemPropertyVariables>
+                <derby.stream.error.file>target/derby.log</derby.stream.error.file>
+                <java.awt.headless>${java.awt.headless}</java.awt.headless>
+              </systemPropertyVariables>
+              <includes>
+                <include>**/*Test.*</include>
+                <include>**/*IntegrationTest.*</include>
+              </includes>
+              <excludes>
+                <exclude>**/*XXXTest.*</exclude>
+              </excludes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+
     <!-- experimental profile to activate ekstazi http://www.ekstazi.org -->
     <profile>
       <id>ekstazi</id>
diff --git a/pom.xml b/pom.xml
index 8db58e4..853bb82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -565,35 +565,6 @@
     </profile>
 
     <profile>
-      <id>integration</id>
-      <!--The profile for running the unit and integration test -->
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <version>${maven-surefire-plugin-version}</version>
-            <configuration>
-              <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
-              <childDelegation>false</childDelegation>
-              <useFile>true</useFile>
-              <failIfNoTests>false</failIfNoTests>
-              <runOrder>alphabetical</runOrder>
-              <systemPropertyVariables>
-                <derby.stream.error.file>target/derby.log</derby.stream.error.file>
-                <java.awt.headless>${java.awt.headless}</java.awt.headless>
-              </systemPropertyVariables>
-              <includes>
-                <include>**/*Test.*</include>
-                <include>**/*IntegrationTest.*</include>
-              </includes>
-            </configuration>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-
-    <profile>
       <id>deploy</id>
       <build>
         <defaultGoal>deploy</defaultGoal>

Reply | Threaded
Open this post in threaded view
|

[camel] 08/43: Regen

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 67b60aecc527919b4607be39564e9e37403f6b6b
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Wed Dec 5 09:23:45 2018 +0100

    Regen
---
 .../stream/springboot/GoogleCalendarStreamComponentConfiguration.java   | 2 +-
 .../mail/stream/springboot/GoogleMailStreamComponentConfiguration.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java
index d8efcb8..0689c8d 100644
--- a/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-calendar-starter/src/main/java/org/apache/camel/component/google/calendar/stream/springboot/GoogleCalendarStreamComponentConfiguration.java
@@ -24,7 +24,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 /**
  * The google-calendar component provides access to Google Calendar in a
  * streaming mod.
- *
+ *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
diff --git a/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java
index c790e30..92074ed 100644
--- a/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-mail-starter/src/main/java/org/apache/camel/component/google/mail/stream/springboot/GoogleMailStreamComponentConfiguration.java
@@ -22,7 +22,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
  * The google-mail component provides access to Google Mail.
- *
+ *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")

Reply | Threaded
Open this post in threaded view
|

[camel] 09/43: Regen

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b0961cc93f7b1930e114cada5333e07da269cabf
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Thu Nov 22 11:11:01 2018 +0100

    Regen
---
 .../src/main/docs/google-calendar-stream-component.adoc             | 6 +++---
 .../src/main/docs/google-mail-stream-component.adoc                 | 3 +--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc b/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
index 624e342..bcfe036 100644
--- a/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
+++ b/components/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
@@ -131,15 +131,15 @@ The component supports 15 options, which are listed below.
 | *camel.component.google-calendar-stream.configuration.access-token* | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
 | *camel.component.google-calendar-stream.configuration.application-name* | Google Calendar application name. Example would be camel-google-calendar/1.0 |  | String
 | *camel.component.google-calendar-stream.configuration.calendar-id* | The calendarId to be used | primary | String
-| *camel.component.google-calendar-stream.configuration.client-id* | Client ID of the mail application |  | String
-| *camel.component.google-calendar-stream.configuration.client-secret* | Client secret of the mail application |  | String
+| *camel.component.google-calendar-stream.configuration.client-id* | Client ID of the calendar application |  | String
+| *camel.component.google-calendar-stream.configuration.client-secret* | Client secret of the calendar application |  | String
 | *camel.component.google-calendar-stream.configuration.consider-last-update* | Take into account the lastUpdate of the last event polled as start date for the next poll | false | Boolean
 | *camel.component.google-calendar-stream.configuration.consume-from-now* | Consume events in the selected calendar from now on | true | Boolean
 | *camel.component.google-calendar-stream.configuration.index* | Specifies an index for the endpoint |  | String
 | *camel.component.google-calendar-stream.configuration.max-results* | Max results to be returned | 10 | Integer
 | *camel.component.google-calendar-stream.configuration.query* | The query to execute on calendar |  | String
 | *camel.component.google-calendar-stream.configuration.refresh-token* | OAuth 2 refresh token. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
-| *camel.component.google-calendar-stream.configuration.scopes* | Specifies the level of permissions you want a mail application to have to a user account. See https://developers.google.com/calendar/api/auth/scopes for more info. |  | List
+| *camel.component.google-calendar-stream.configuration.scopes* | Specifies the level of permissions you want a calendar application to have to a user account. See https://developers.google.com/calendar/auth for more info. |  | List
 | *camel.component.google-calendar-stream.enabled* | Whether to enable auto configuration of the google-calendar-stream component. This is enabled by default. |  | Boolean
 | *camel.component.google-calendar-stream.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
 |===
diff --git a/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc b/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
index f6160da..ae40384 100644
--- a/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
+++ b/components/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
@@ -118,7 +118,7 @@ with the following path and query parameters:
 === Spring Boot Auto-Configuration
 
 
-The component supports 14 options, which are listed below.
+The component supports 13 options, which are listed below.
 
 
 
@@ -136,7 +136,6 @@ The component supports 14 options, which are listed below.
 | *camel.component.google-mail-stream.configuration.max-results* | Max results to be returned | 10 | Long
 | *camel.component.google-mail-stream.configuration.query* | The query to execute on gmail box | is:unread | String
 | *camel.component.google-mail-stream.configuration.refresh-token* | OAuth 2 refresh token. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
-| *camel.component.google-mail-stream.configuration.scopes* | Specifies the level of permissions you want a mail application to have to a user account. See https://developers.google.com/gmail/api/auth/scopes for more info. |  | List
 | *camel.component.google-mail-stream.enabled* | Whether to enable auto configuration of the google-mail-stream component. This is enabled by default. |  | Boolean
 | *camel.component.google-mail-stream.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
 |===

Reply | Threaded
Open this post in threaded view
|

[camel] 10/43: Refactor irc tests

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e32496abc346684957be67720d3f1130940ad597
Author: Jan <[hidden email]>
AuthorDate: Tue Nov 20 18:44:16 2018 +0100

    Refactor irc tests
   
    Conflicts:
    components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
    components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
    components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcPrivmsgTest.java
    components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcRouteTest.java
---
 components/camel-irc/pom.xml                       | 37 ++++++++++++
 .../irc/it/IrcIntegrationTestSupport.java          | 68 ++++++++++++++++++++++
 .../irc/{ => it}/IrcMultiChannelRouteTest.java     | 63 ++++++++++----------
 .../component/irc/{ => it}/IrcOnReplyTest.java     | 18 +++---
 .../component/irc/{ => it}/IrcPrivmsgTest.java     | 27 ++++-----
 .../camel/component/irc/{ => it}/IrcRouteTest.java | 36 ++++++------
 .../IrcsListUsersTest.java}                        | 32 +++-------
 .../component/irc/{ => it}/IrcsRouteTest.java      | 17 ++----
 .../IrcsWithSslContextParamsRouteTest.java         |  2 +-
 ...t-list-users.properties => it-tests.properties} | 12 +++-
 10 files changed, 196 insertions(+), 116 deletions(-)

diff --git a/components/camel-irc/pom.xml b/components/camel-irc/pom.xml
index 70c7fdb..6dee839 100644
--- a/components/camel-irc/pom.xml
+++ b/components/camel-irc/pom.xml
@@ -39,6 +39,43 @@
     </camel.osgi.export.service>
   </properties>
 
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>
+              **/it/**
+            </exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>it-tests</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration combine.self="override">
+              <includes>
+                <include>**/*Test.java</include>
+              </includes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+
+    </profile>
+  </profiles>
+
   <dependencies>
 
     <dependency>
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java
new file mode 100644
index 0000000..b459749
--- /dev/null
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcIntegrationTestSupport.java
@@ -0,0 +1,68 @@
+/**
+ * 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.irc.it;
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.concurrent.TimeUnit;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Before;
+
+public class IrcIntegrationTestSupport extends CamelTestSupport {
+
+    @EndpointInject(uri = "mock:result")
+    protected MockEndpoint resultEndpoint;
+
+    protected Properties properties;
+
+    @Before
+    public void doBefore() throws IOException {
+        properties = loadProperties();
+        resetMock(resultEndpoint);
+    }
+
+    protected void resetMock(MockEndpoint mock) {
+        mock.reset();
+        mock.setResultWaitTime(TimeUnit.MINUTES.toMillis(1));
+    }
+
+    private Properties loadProperties() throws IOException {
+        Properties p = new Properties();
+        p.load(this.getClass().getResourceAsStream("/it-tests.properties"));
+        return p;
+    }
+
+    @Override
+    protected Properties useOverridePropertiesWithPropertiesComponent() {
+        try {
+            return loadProperties();
+        } catch (IOException e) {
+            log.error("Can't load configuration properties");
+            return null;
+        }
+    }
+
+    protected String sendUri() {
+        return "ircs://{{camelTo}}@{{server}}?channels={{channel1}}";
+    }
+
+    protected String fromUri() {
+        return "ircs://{{camelFrom}}@{{server}}?&channels={{channel1}}";
+    }
+}
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcMultiChannelRouteTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
similarity index 59%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcMultiChannelRouteTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
index b82bc12..c0f461d 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcMultiChannelRouteTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcMultiChannelRouteTest.java
@@ -14,31 +14,37 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
 import java.util.List;
-
+import java.util.concurrent.TimeUnit;
+import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.irc.IrcConstants;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Ignore;
 import org.junit.Test;
 
-public class IrcMultiChannelRouteTest extends CamelTestSupport {
-    protected MockEndpoint resultEndpoint;
+public class IrcMultiChannelRouteTest extends IrcIntegrationTestSupport {
     protected String body1 = "Message One";
     protected String body2 = "Message Two";
     protected String body3 = "Message Three";
-    private boolean sentMessages;    
 
-    @Ignore("test manual, irc.codehaus.org has been closed")
+    @EndpointInject(uri = "mock:joined")
+    private MockEndpoint joined;
+
+
     @Test
     public void testIrcMessages() throws Exception {
-        resultEndpoint = context.getEndpoint("mock:result", MockEndpoint.class);
+        resetMock(joined);
+        joined.expectedMessageCount(2);
+        joined.expectedHeaderValuesReceivedInAnyOrder(IrcConstants.IRC_TARGET, properties.get("channel1"), properties.get("channel2"));
+        joined.assertIsSatisfied();
+
+        sendMessages();
+
         //consumer is going to receive two copies of body3
-        resultEndpoint.expectedBodiesReceived(body1, body2, body3, body3);
+        resultEndpoint.expectedBodiesReceivedInAnyOrder(body1, body2, body3, body3);
 
         resultEndpoint.assertIsSatisfied();
 
@@ -53,38 +59,31 @@ public class IrcMultiChannelRouteTest extends CamelTestSupport {
             public void configure() throws Exception {
                 from(fromUri()).
                         choice().
-                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("PRIVMSG")).to("mock:result").
-                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("JOIN")).to("seda:consumerJoined");
+                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("PRIVMSG")).to("direct:mock").
+                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("JOIN")).to(joined);
 
-                from("seda:consumerJoined").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        sendMessages();
-                    }
-                });
+                from("direct:mock").filter(e -> !e.getIn().getBody(String.class).contains("VERSION")).to(resultEndpoint);
             }
         };
     }
 
-    protected String sendUri() {
-        return "irc://[hidden email]:6667?nickname=camel-prd&channels=#camel-test1,#camel-test2";
-    }
 
-    protected String fromUri() {
-        return "irc://[hidden email]:6667?nickname=camel-con&channels=#camel-test1,#camel-test2";
-    }    
-    
     /**
      * Lets send messages once the consumer has joined
      */
     protected void sendMessages() {
-        if (!sentMessages) {
-            sentMessages = true;
+        template.sendBodyAndHeader(sendUri(), body1, "irc.target", properties.get("channel1"));
+        template.sendBodyAndHeader(sendUri(), body2, "irc.target", properties.get("channel2"));
+        template.sendBody(sendUri(), body3);
+    }
 
-            // now the consumer has joined, lets send some messages
+    @Override
+    protected String sendUri() {
+        return "ircs://camel-prd@{{server}}?nickname=camel-prd&channels={{channel1}},{{channel2}}";
+    }
 
-            template.sendBodyAndHeader(sendUri(), body1, "irc.target", "#camel-test1");
-            template.sendBodyAndHeader(sendUri(), body2, "irc.target", "#camel-test2");
-            template.sendBody(sendUri(), body3);
-        }
+    @Override
+    protected String fromUri() {
+        return "ircs://camel-con@{{server}}??nickname=camel-con&channels={{channel1}},{{channel2}}";
     }
 }
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
similarity index 81%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
index fa4608b..cfd555c 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcOnReplyTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcOnReplyTest.java
@@ -14,28 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
 import java.util.List;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.irc.IrcConstants;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Ignore;
 import org.junit.Test;
 
-public class IrcOnReplyTest extends CamelTestSupport {
-    protected MockEndpoint resultEndpoint;
+public class IrcOnReplyTest extends IrcIntegrationTestSupport {
     protected String command = "WHO #camel-test";
-    protected String resultEnd = "End of WHO list";
-    private boolean sentMessages;    
+    protected String resultEnd = "End of /WHO list.";
+    private boolean sentMessages;
 
-    @Ignore("test manual, irc.codehaus.org has been closed")
     @Test
     public void testIrcMessages() throws Exception {
-        resultEndpoint = context.getEndpoint("mock:result", MockEndpoint.class);
         resultEndpoint.expectedBodiesReceived(resultEnd);
 
         resultEndpoint.assertIsSatisfied();
@@ -64,7 +59,8 @@ public class IrcOnReplyTest extends CamelTestSupport {
     }
 
     protected String fromUri() {
-        return "irc://[hidden email]:6667?nickname=camel-con&channels=#camel-test&onReply=true";
+        StringBuilder sb = new StringBuilder(super.fromUri());
+        return sb.append("&onReply=true").toString();
     }    
     
     /**
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcPrivmsgTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcPrivmsgTest.java
similarity index 80%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcPrivmsgTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcPrivmsgTest.java
index 38bc571..5a37152 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcPrivmsgTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcPrivmsgTest.java
@@ -14,21 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
 import java.util.List;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.irc.IrcConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Ignore;
 import org.junit.Test;
 
-public class IrcPrivmsgTest extends CamelTestSupport {
-    protected MockEndpoint resultEndpoint;
-
+public class IrcPrivmsgTest extends IrcIntegrationTestSupport {
     protected String expectedBody1 = "Message One";
     protected String expectedBody2 = "Message Two";
 
@@ -37,10 +36,8 @@ public class IrcPrivmsgTest extends CamelTestSupport {
 
     private boolean sentMessages;    
 
-    @Ignore("test manual, irc.codehaus.org has been closed")
     @Test
     public void testIrcPrivateMessages() throws Exception {
-        resultEndpoint = context.getEndpoint("mock:result", MockEndpoint.class);
         resultEndpoint.expectedBodiesReceived(expectedBody1, expectedBody2);
 
         resultEndpoint.assertIsSatisfied();
@@ -56,7 +53,7 @@ public class IrcPrivmsgTest extends CamelTestSupport {
             public void configure() throws Exception {
                 from(fromUri()).
                         choice().
-                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("PRIVMSG")).to("mock:result").
+                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("PRIVMSG")).to("direct:mock").
                         when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("JOIN")).to("seda:consumerJoined");
 
                 from("seda:consumerJoined")
@@ -65,28 +62,26 @@ public class IrcPrivmsgTest extends CamelTestSupport {
                             sendMessages();
                         }
                     });
+
+                from("direct:mock").filter(e -> !e.getIn().getBody(String.class).contains("VERSION")).to(resultEndpoint);
             }
         };
     }
 
+    @Override
     protected String sendUri() {
-        return "irc://[hidden email]:6667/#camel-test?nickname=camel-prd";
+        return "ircs://{{camelTo}}@{{server}}?channels={{channel1}}&username={{username}}&password={{password}}";
     }
 
-    protected String fromUri() {
-        return "irc://[hidden email]:6667/#camel-test?nickname=camel-con";
-    }    
-    
     /**
      * Lets send messages once the consumer has joined
      */
-    protected void sendMessages() {
+    protected void sendMessages() throws InterruptedException {
         if (!sentMessages) {
             sentMessages = true;
 
-            // now the consumer has joined, lets send some messages
-            template.sendBodyAndHeader(sendUri(), body1, "irc.target", "camel-con");
-            template.sendBodyAndHeader(sendUri(), body2, "irc.target", "camel-con");
+            template.sendBodyAndHeader(sendUri(), body1, "irc.target", properties.get("camelFrom"));
+            template.sendBodyAndHeader(sendUri(), body2, "irc.target", properties.get("camelFrom"));
         }
     }
 }
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcRouteTest.java
similarity index 81%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcRouteTest.java
index e622e98..cbee8da 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcRouteTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcRouteTest.java
@@ -14,44 +14,50 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
 import java.util.List;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.irc.IrcConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Ignore;
 import org.junit.Test;
 
-public class IrcRouteTest extends CamelTestSupport {
-    protected MockEndpoint resultEndpoint;
+public class IrcRouteTest extends IrcIntegrationTestSupport {
     protected String body1 = "Message One";
     protected String body2 = "Message Two";
     private boolean sentMessages;    
 
-    @Ignore("test manual, irc.codehaus.org has been closed")  
     @Test
     public void testIrcMessages() throws Exception {
-        resultEndpoint = context.getEndpoint("mock:result", MockEndpoint.class);
-        resultEndpoint.expectedBodiesReceived(body1, body2);
-
+        resultEndpoint.expectedBodiesReceivedInAnyOrder(body1, body2);
         resultEndpoint.assertIsSatisfied();
 
         List<Exchange> list = resultEndpoint.getReceivedExchanges();
         for (Exchange exchange : list) {
             log.info("Received exchange: " + exchange + " headers: " + exchange.getIn().getHeaders());
         }
-    }  
+    }
+
+    protected String sendUri() {
+        return "irc://{{camelTo}}@{{non.ssl.server}}?channels={{channel1}}";
+    }
+
+    protected String fromUri() {
+        return "irc://{{camelFrom}}@{{non.ssl.server}}?&channels={{channel1}}";
+    }
     
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from(fromUri()).
                         choice().
-                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("PRIVMSG")).to("mock:result").
+                        when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("PRIVMSG"))
+                        .to("direct:mock").
                         when(header(IrcConstants.IRC_MESSAGE_TYPE).isEqualTo("JOIN")).to("seda:consumerJoined");
 
                 from("seda:consumerJoined").process(new Processor() {
@@ -59,17 +65,11 @@ public class IrcRouteTest extends CamelTestSupport {
                         sendMessages();
                     }
                 });
+
+                from("direct:mock").filter(e -> !e.getIn().getBody(String.class).contains("VERSION")).to(resultEndpoint);
             }
         };
     }
-
-    protected String sendUri() {
-        return "irc://[hidden email]:6667/#camel-test?nickname=camel-prd";
-    }
-
-    protected String fromUri() {
-        return "irc://[hidden email]:6667/#camel-test?nickname=camel-con";
-    }    
     
     /**
      * Lets send messages once the consumer has joined
@@ -84,4 +84,4 @@ public class IrcRouteTest extends CamelTestSupport {
             template.sendBody(sendUri(), body2);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsListUsersIntegrationTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsListUsersTest.java
similarity index 74%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsListUsersIntegrationTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsListUsersTest.java
index 7e629ee..2956901 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsListUsersIntegrationTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsListUsersTest.java
@@ -14,17 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.irc.IrcConfiguration;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,27 +37,15 @@ import org.slf4j.LoggerFactory;
  * Joins a channel and asserts that the username of the current test user is
  * listed for the channel.
  */
-public class IrcsListUsersIntegrationTest extends CamelTestSupport {
+public class IrcsListUsersTest extends IrcIntegrationTestSupport {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(IrcsListUsersIntegrationTest.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(IrcsListUsersTest.class);
 
     /** message code for a reply to a <code>NAMES</code> command. */
     private static final String IRC_RPL_NAMREPLY = "353";
 
     /** irc component uri. configured by properties */
-    private static final String PRODUCER_URI = "ircs:{{test.user}}@{{test.server}}/{{test.room}}";
-
-    @EndpointInject(uri = "mock:result")
-    protected MockEndpoint resultEndpoint;
-
-    protected Properties properties;
-
-    public IrcsListUsersIntegrationTest() throws IOException {
-        super();
-        properties = new Properties();
-        InputStream resourceAsStream = this.getClass().getResourceAsStream("/it-list-users.properties");
-        properties.load(resourceAsStream);
-    }
+    private static final String PRODUCER_URI = "ircs:{{camelFrom}}@{{server}}/{{channel1}}";
 
     @Override
     protected RoutesBuilder createRouteBuilder() throws Exception {
@@ -76,17 +67,12 @@ public class IrcsListUsersIntegrationTest extends CamelTestSupport {
 
     @Test
     public void test() throws Exception {
-        resultEndpoint.setMinimumExpectedMessageCount(1);
+        resultEndpoint.expectedMessageCount(1);
         resultEndpoint.assertIsSatisfied();
         String body = resultEndpoint.getExchanges().get(0).getIn().getBody(String.class);
         LOGGER.debug("Received usernames: [{}]", body);
-        String username = properties.getProperty("test.user");
+        String username = properties.getProperty("camelFrom");
         assertTrue("userlist does not contain test user", body.contains(username));
     }
 
-    @Override
-    protected Properties useOverridePropertiesWithPropertiesComponent() {
-        return properties;
-    }
-
 }
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsRouteTest.java
similarity index 64%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsRouteTest.java
index d79e5ae..466a9c5 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsRouteTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsRouteTest.java
@@ -14,25 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
-import org.junit.Ignore;
-
-@Ignore
 public class IrcsRouteTest extends IrcRouteTest {
 
-    // TODO This test is disabled until we can find a public SSL enabled IRC
-    // server to test against. To use this you'll need to change the server
-    // information below and the username/password.
-
     @Override
     protected String sendUri() {
-        return "ircs://[hidden email]:6667/#camel-test?nickname=camel-prd&password=blah";
+        return "ircs://{{camelTo}}@{{server}}?channels={{channel1}}";
     }
 
-    @Override    
+    @Override
     protected String fromUri() {
-        return "ircs://[hidden email]:6667/#camel-test?nickname=camel-con&password=blah";
-    }    
+        return "ircs://{{camelFrom}}@{{server}}?channels={{channel1}}";
+    }
 
 }
\ No newline at end of file
diff --git a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsWithSslContextParamsRouteTest.java
similarity index 98%
rename from components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
rename to components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsWithSslContextParamsRouteTest.java
index 1f40452..84340be 100644
--- a/components/camel-irc/src/test/java/org/apache/camel/component/irc/IrcsWithSslContextParamsRouteTest.java
+++ b/components/camel-irc/src/test/java/org/apache/camel/component/irc/it/IrcsWithSslContextParamsRouteTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.irc;
+package org.apache.camel.component.irc.it;
 
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.support.jsse.KeyStoreParameters;
diff --git a/components/camel-irc/src/test/resources/it-list-users.properties b/components/camel-irc/src/test/resources/it-tests.properties
similarity index 84%
rename from components/camel-irc/src/test/resources/it-list-users.properties
rename to components/camel-irc/src/test/resources/it-tests.properties
index bebe5fb..81bc728 100644
--- a/components/camel-irc/src/test/resources/it-list-users.properties
+++ b/components/camel-irc/src/test/resources/it-tests.properties
@@ -15,6 +15,12 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-test.server=chat.freenode.net:6697
-test.room=#testroom123
-test.user=camel-irc-ituser
+server=chat.freenode.net:6697
+non.ssl.server=chat.freenode.net:8002
+channel1=#camel-test1
+channel2=#testroom2
+username=
+password=
+camelFrom=camel-irc-ituser
+camelTo=camel-prod
+

Reply | Threaded
Open this post in threaded view
|

[camel] 11/43: CAMEL-12950: Add google-sheets component

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 377c134d07429e511111e1bfcb1f19f0d698dc64
Author: Christoph Deppisch <[hidden email]>
AuthorDate: Thu Nov 22 09:41:52 2018 +0100

    CAMEL-12950: Add google-sheets component
   
    Conflicts:
    components/readme.adoc
---
 apache-camel/pom.xml                               |  11 +-
 apache-camel/src/main/descriptors/common-bin.xml   |   4 +-
 bom/camel-bom/pom.xml                              |  10 +
 components/camel-google-sheets/pom.xml             | 289 +++++++++++++++++++++
 .../src/main/docs/google-sheets-component.adoc     | 180 +++++++++++++
 .../main/docs/google-sheets-stream-component.adoc  | 164 ++++++++++++
 .../sheets/BatchGoogleSheetsClientFactory.java     |  66 +++++
 .../google/sheets/GoogleSheetsClientFactory.java   |  25 ++
 .../google/sheets/GoogleSheetsComponent.java       | 102 ++++++++
 .../google/sheets/GoogleSheetsConfiguration.java   | 130 +++++++++
 .../google/sheets/GoogleSheetsConsumer.java        |  52 ++++
 .../google/sheets/GoogleSheetsEndpoint.java        | 115 ++++++++
 .../google/sheets/GoogleSheetsProducer.java        |  54 ++++
 .../sheets/GoogleSheetsVerifierExtension.java      |  80 ++++++
 .../sheets/internal/GoogleSheetsConstants.java     |  33 +++
 .../internal/GoogleSheetsPropertiesHelper.java     |  39 +++
 .../sheets/stream/GoogleSheetsStreamComponent.java |  96 +++++++
 .../stream/GoogleSheetsStreamConfiguration.java    | 255 ++++++++++++++++++
 .../sheets/stream/GoogleSheetsStreamConstants.java |  37 +++
 .../sheets/stream/GoogleSheetsStreamConsumer.java  | 120 +++++++++
 .../sheets/stream/GoogleSheetsStreamEndpoint.java  |  99 +++++++
 .../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 +
 .../org/apache/camel/component/google-sheets       |  17 ++
 .../apache/camel/component/google-sheets-stream    |  17 ++
 .../sheets/AbstractGoogleSheetsTestSupport.java    | 164 ++++++++++++
 .../sheets/GoogleSheetsVerifierExtensionTest.java  |  68 +++++
 .../google/sheets/SheetsConfigurationTest.java     |  64 +++++
 .../sheets/SheetsSpreadsheetsIntegrationTest.java  | 114 ++++++++
 .../SheetsSpreadsheetsValuesIntegrationTest.java   | 159 ++++++++++++
 .../AbstractGoogleSheetsStreamTestSupport.java     |  44 ++++
 .../SheetsStreamConsumerIntegrationTest.java       |  70 +++++
 .../src/test/resources/log4j2.properties           |  28 ++
 .../src/test/resources/test-options.properties     |  26 ++
 components/pom.xml                                 |   3 +-
 components/readme.adoc                             |   6 +
 docs/user-manual/en/SUMMARY.md                     |   2 +
 parent/pom.xml                                     |  15 +-
 .../karaf/features/src/main/resources/features.xml |  38 ++-
 .../camel-google-sheets-starter/pom.xml            |  61 +++++
 .../GoogleSheetsComponentAutoConfiguration.java    | 129 +++++++++
 .../GoogleSheetsComponentConfiguration.java        | 174 +++++++++++++
 ...ogleSheetsStreamComponentAutoConfiguration.java | 130 +++++++++
 .../GoogleSheetsStreamComponentConfiguration.java  | 252 ++++++++++++++++++
 .../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 +
 .../src/main/resources/META-INF/spring.factories   |  21 ++
 .../src/main/resources/META-INF/spring.provides    |  17 ++
 platforms/spring-boot/components-starter/pom.xml   |   1 +
 .../camel-spring-boot-dependencies/pom.xml         |  10 +
 .../camel/itest/karaf/CamelGoogleSheetsTest.java   |  33 +++
 51 files changed, 4035 insertions(+), 17 deletions(-)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 86c7545..7fb160a 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -340,6 +340,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-google-sheets</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-google-drive</artifactId>
     </dependency>
     <dependency>
@@ -1358,7 +1362,7 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-fhir-starter</artifactId>
       <version>${project.version}</version>
-    </dependency>    
+    </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-flatpack-starter</artifactId>
@@ -1416,6 +1420,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-google-sheets-starter</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-google-drive-starter</artifactId>
       <version>${project.version}</version>
     </dependency>
diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index c962d8b..f445fff 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -98,6 +98,7 @@
         <include>org.apache.camel:camel-git</include>
         <include>org.apache.camel:camel-github</include>
         <include>org.apache.camel:camel-google-calendar</include>
+        <include>org.apache.camel:camel-google-sheets</include>
         <include>org.apache.camel:camel-google-drive</include>
         <include>org.apache.camel:camel-google-mail</include>
         <include>org.apache.camel:camel-google-bigquery</include>
@@ -383,6 +384,7 @@
         <include>org.apache.camel:camel-git-starter</include>
         <include>org.apache.camel:camel-google-bigquery-starter</include>
         <include>org.apache.camel:camel-google-calendar-starter</include>
+        <include>org.apache.camel:camel-google-sheets-starter</include>
         <include>org.apache.camel:camel-google-drive-starter</include>
         <include>org.apache.camel:camel-google-mail-starter</include>
         <include>org.apache.camel:camel-google-pubsub-starter</include>
@@ -445,7 +447,7 @@
         <include>org.apache.camel:camel-mail-starter</include>
         <include>org.apache.camel:camel-master-starter</include>
         <include>org.apache.camel:camel-metrics-starter</include>
-        <include>org.apache.camel:camel-micrometer-starter</include>
+        <include>org.apache.camel:camel-micrometer-starter</include>
         <include>org.apache.camel:camel-milo-starter</include>
         <include>org.apache.camel:camel-mina2-starter</include>
         <include>org.apache.camel:camel-mllp-starter</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 6d15154..4847bd4 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -925,6 +925,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-sheets</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-sheets-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-gora</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-google-sheets/pom.xml b/components/camel-google-sheets/pom.xml
new file mode 100644
index 0000000..da26bd6
--- /dev/null
+++ b/components/camel-google-sheets/pom.xml
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components</artifactId>
+    <version>2.23.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-google-sheets</artifactId>
+  <packaging>jar</packaging>
+  <name>Camel :: GoogleSheets</name>
+  <description>Camel Component for GoogleSheets</description>
+
+  <properties>
+    <schemeName>google-sheets</schemeName>
+    <componentName>GoogleSheets</componentName>
+    <componentPackage>org.apache.camel.component.google.sheets</componentPackage>
+    <outPackage>org.apache.camel.component.google.sheets.internal</outPackage>
+    <camel.osgi.private.pkg>org.apache.camel.component.google.sheets.internal</camel.osgi.private.pkg>
+    <camel.osgi.export.pkg>org.apache.camel.component.google.sheets</camel.osgi.export.pkg>
+    <camel.osgi.export.service>org.apache.camel.spi.ComponentResolver;component=google-sheets</camel.osgi.export.service>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+    </dependency>
+    <dependency>
+        <groupId>com.google.api-client</groupId>
+        <artifactId>google-api-client</artifactId>
+        <version>${google-api-client-version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.google.oauth-client</groupId>
+        <artifactId>google-oauth-client</artifactId>
+        <version>${google-api-client-version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.google.http-client</groupId>
+        <artifactId>google-http-client-jackson2</artifactId>
+        <version>${google-api-client-version}</version>
+    </dependency>
+    <dependency>
+        <groupId>com.google.apis</groupId>
+        <artifactId>google-api-services-sheets</artifactId>
+        <version>${google-api-services-sheets-version}</version>
+    </dependency>
+
+    <!-- Camel annotations in provided scope to avoid compile errors in IDEs -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>spi-annotations</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <!-- Component API javadoc in provided scope to read API signatures -->
+    <dependency>
+        <groupId>com.google.apis</groupId>
+        <artifactId>google-api-services-sheets</artifactId>
+        <version>${google-api-services-sheets-version}</version>
+      <type>javadoc</type>
+      <scope>provided</scope>
+    </dependency>
+
+    <!-- logging -->
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- testing -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-test</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <defaultGoal>install</defaultGoal>
+
+    <plugins>
+
+      <!-- generate Component source and test source -->
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-api-component-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>generate-test-component-classes</id>
+            <goals>
+              <goal>fromApis</goal>
+            </goals>
+            <configuration>
+              <apis>
+                <api>
+                  <apiName>spreadsheets</apiName>
+                  <proxyClass>com.google.api.services.sheets.v4.Sheets$Spreadsheets</proxyClass>
+                  <fromJavadoc />
+                </api>
+                <api>
+                  <apiName>data</apiName>
+                  <proxyClass>com.google.api.services.sheets.v4.Sheets$Spreadsheets$Values</proxyClass>
+                  <fromJavadoc />
+                </api>
+              </apis>
+              <substitutions>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.ValueRange</argType>
+                  <replacement>values</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest</argType>
+                  <replacement>batchUpdateSpreadsheetRequest</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.GetSpreadsheetByDataFilterRequest</argType>
+                  <replacement>getSpreadsheetByDataFilterRequest</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.ClearValuesRequest</argType>
+                  <replacement>clearValuesRequest</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.BatchClearValuesRequest</argType>
+                  <replacement>batchClearValuesRequest</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.BatchUpdateValuesByDataFilterRequest</argType>
+                  <replacement>batchUpdateValuesByDataFilterRequest</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.BatchGetValuesByDataFilterRequest</argType>
+                  <replacement>batchGetValuesByDataFilterRequest</replacement>
+                </substitution>
+                <substitution>
+                  <method>^.+$</method>
+                  <argName>content</argName>
+                  <argType>com.google.api.services.sheets.v4.model.BatchUpdateValuesRequest</argType>
+                  <replacement>batchUpdateValuesRequest</replacement>
+                </substitution>
+              </substitutions>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!-- add generated source and test source to build -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.8</version>
+        <executions>
+          <execution>
+            <id>add-generated-sources</id>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-sources/camel-component</source>
+              </sources>
+            </configuration>
+          </execution>
+          <execution>
+            <id>add-generated-test-sources</id>
+            <goals>
+              <goal>add-test-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-test-sources/camel-component</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+
+    </plugins>
+
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.camel</groupId>
+          <artifactId>camel-api-component-maven-plugin</artifactId>
+          <version>${project.version}</version>
+          <configuration>
+            <scheme>${schemeName}</scheme>
+            <componentName>${componentName}</componentName>
+            <componentPackage>${componentPackage}</componentPackage>
+            <outPackage>${outPackage}</outPackage>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+
+  </build>
+
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-api-component-maven-plugin</artifactId>
+        <version>${project.version}</version>
+        <configuration>
+          <scheme>${schemeName}</scheme>
+          <componentName>${componentName}</componentName>
+          <componentPackage>${componentPackage}</componentPackage>
+          <outPackage>${outPackage}</outPackage>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+
+  <profiles>
+    <profile>
+      <id>google-sheets-test</id>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <childDelegation>false</childDelegation>
+              <useFile>true</useFile>
+              <forkCount>1</forkCount>
+              <reuseForks>true</reuseForks>
+              <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
+              <excludes>
+                <exclude>**/*XXXTest.java</exclude>
+              </excludes>
+              <includes>
+                <include>**/*Test.java</include>
+              </includes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>
diff --git a/components/camel-google-sheets/src/main/docs/google-sheets-component.adoc b/components/camel-google-sheets/src/main/docs/google-sheets-component.adoc
new file mode 100644
index 0000000..0cba9c9
--- /dev/null
+++ b/components/camel-google-sheets/src/main/docs/google-sheets-component.adoc
@@ -0,0 +1,180 @@
+[[google-sheets-component]]
+== Google Sheets Component
+
+*Available as of Camel version 2.23*
+
+The Google Sheets component provides access
+to http://google.com/sheets[Google Sheets] via
+the https://developers.google.com/sheets/api/reference/rest/[Google
+Sheets Web APIs].
+
+Google Sheets uses
+the https://developers.google.com/accounts/docs/OAuth2[OAuth 2.0
+protocol] for authenticating a Google account and authorizing access to
+user data. Before you can use this component, you will need
+to https://developers.google.com/google-apps/sheets/auth[create an
+account and generate OAuth credentials]. Credentials comprise of a
+clientId, clientSecret, and a refreshToken. A handy resource for
+generating a long-lived refreshToken is
+the https://developers.google.com/oauthplayground[OAuth playground].
+
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+
+----------------------------------------------------------
+    <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-google-sheets</artifactId>
+            <version>2.23.0</version>
+    </dependency>
+
+----------------------------------------------------------
+
+### URI Format
+
+The GoogleSheets Component uses the following URI format:
+
+------------------------------------------------------------
+        google-sheets://endpoint-prefix/endpoint?[options]
+
+------------------------------------------------------------
+
+Endpoint prefix can be one of:
+
+* spreadsheets
+* data
+
+### GoogleSheetsComponent
+
+
+
+
+
+// component options: START
+The Google Sheets component supports 3 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *configuration* (common) | To use the shared configuration |  | GoogleSheets Configuration
+| *clientFactory* (advanced) | To use the GoogleSheetsClientFactory as factory for creating the client. Will by default use BatchGoogleSheetsClientFactory |  | GoogleSheetsClient Factory
+| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
+|===
+// component options: END
+
+
+
+
+
+
+
+// endpoint options: START
+The Google Sheets endpoint is configured using URI syntax:
+
+----
+google-sheets:apiName/methodName
+----
+
+with the following path and query parameters:
+
+==== Path Parameters (2 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *apiName* | *Required* What kind of operation to perform |  | GoogleSheetsApiName
+| *methodName* | *Required* What sub operation to use for the selected operation |  | String
+|===
+
+
+==== Query Parameters (10 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *accessToken* (common) | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
+| *applicationName* (common) | Google Sheets application name. Example would be camel-google-sheets/1.0 |  | String
+| *clientId* (common) | Client ID of the sheets application |  | String
+| *clientSecret* (common) | Client secret of the sheets application |  | String
+| *inBody* (common) | Sets the name of a parameter to be passed in the exchange In Body |  | String
+| *refreshToken* (common) | OAuth 2 refresh token. Using this, the Google Sheets component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
+| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+|===
+// endpoint options: END
+// spring-boot-auto-configure options: START
+=== Spring Boot Auto-Configuration
+
+
+The component supports 10 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *camel.component.google-sheets.client-factory* | To use the GoogleSheetsClientFactory as factory for creating the client. Will by default use BatchGoogleSheetsClientFactory. The option is a org.apache.camel.component.google.sheets.GoogleSheetsClientFactory type. |  | String
+| *camel.component.google-sheets.configuration.access-token* | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
+| *camel.component.google-sheets.configuration.api-name* | What kind of operation to perform |  | GoogleSheetsApiName
+| *camel.component.google-sheets.configuration.application-name* | Google Sheets application name. Example would be camel-google-sheets/1.0 |  | String
+| *camel.component.google-sheets.configuration.client-id* | Client ID of the sheets application |  | String
+| *camel.component.google-sheets.configuration.client-secret* | Client secret of the sheets application |  | String
+| *camel.component.google-sheets.configuration.method-name* | What sub operation to use for the selected operation |  | String
+| *camel.component.google-sheets.configuration.refresh-token* | OAuth 2 refresh token. Using this, the Google Sheets component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
+| *camel.component.google-sheets.enabled* | Whether to enable auto configuration of the google-sheets component. This is enabled by default. |  | Boolean
+| *camel.component.google-sheets.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
+|===
+// spring-boot-auto-configure options: END
+
+
+
+
+### Producer Endpoints
+
+Producer endpoints can use endpoint prefixes followed by endpoint names
+and associated options described next. A shorthand alias can be used for
+some endpoints. The endpoint URI MUST contain a prefix.
+
+Endpoint options that are not mandatory are denoted by []. When there
+are no mandatory options for an endpoint, one of the set of [] options
+MUST be provided. Producer endpoints can also use a special option
+*`inBody`* that in turn should contain the name of the endpoint option
+whose value will be contained in the Camel Exchange In message.
+
+Any of the endpoint options can be provided in either the endpoint URI,
+or dynamically in a message header. The message header name must be of
+the format `CamelGoogleSheets.<option>`. Note that the `inBody` option
+overrides message header, i.e. the endpoint option `inBody=option` would
+override a `CamelGoogleSheets.option` header.
+
+For more information on the endpoints and options see API documentation
+at: https://developers.google.com/sheets/api/reference/rest/[https://developers.google.com/sheets/api/reference/rest/]
+
+### Consumer Endpoints
+
+Any of the producer endpoints can be used as a consumer endpoint.
+Consumer endpoints can use
+http://camel.apache.org/polling-consumer.html#PollingConsumer-ScheduledPollConsumerOptions[Scheduled
+Poll Consumer Options] with a `consumer.` prefix to schedule endpoint
+invocation. Consumer endpoints that return an array or collection will
+generate one exchange per element, and their routes will be executed
+once for each exchange.
+
+### Message Headers
+
+Any URI option can be provided in a message header for producer
+endpoints with a `CamelGoogleSheets.` prefix.
+
+### Message Body
+
+All result message bodies utilize objects provided by the underlying
+APIs used by the GoogleSheetsComponent. Producer endpoints can specify
+the option name for incoming message body in the `inBody` endpoint URI
+parameter. For endpoints that return an array or collection, a consumer
+endpoint will map every element to distinct messages.     
diff --git a/components/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc b/components/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc
new file mode 100644
index 0000000..63555c9
--- /dev/null
+++ b/components/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc
@@ -0,0 +1,164 @@
+[[google-sheets-stream-component]]
+== Google Sheets Stream Component
+
+*Available as of Camel version 2.23*
+
+The Google Sheets component provides access
+to https://sheets.google.com/[Sheets] via
+the https://developers.google.com/sheets/api/reference/rest/[Google Sheets
+Web APIs].
+
+Google Sheets uses
+the https://developers.google.com/accounts/docs/OAuth2[OAuth 2.0
+protocol] for authenticating a Google account and authorizing access to
+user data. Before you can use this component, you will need
+to https://developers.google.com/google-apps/sheets/auth[create an
+account and generate OAuth credentials]. Credentials comprise of a
+clientId, clientSecret, and a refreshToken. A handy resource for
+generating a long-lived refreshToken is
+the https://developers.google.com/oauthplayground[OAuth playground].
+
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+
+------------------------------------------------------
+    <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-google-sheets</artifactId>
+            <version>2.23.0</version>
+    </dependency>
+
+------------------------------------------------------
+
+### URI Format
+
+The Google Sheets Component uses the following URI format:
+
+--------------------------------------------------------
+        google-sheets-stream://apiName?[options]
+
+--------------------------------------------------------
+
+### GoogleSheetsStreamComponent
+
+
+// component options: START
+The Google Sheets Stream component supports 3 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *configuration* (consumer) | To use the shared configuration |  | GoogleSheetsStream Configuration
+| *clientFactory* (advanced) | To use the GoogleSheetsClientFactory as factory for creating the client. Will by default use BatchGoogleSheetsClientFactory |  | GoogleSheetsClient Factory
+| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
+|===
+// component options: END
+
+
+
+
+// endpoint options: START
+The Google Sheets Stream endpoint is configured using URI syntax:
+
+----
+google-sheets-stream:apiName
+----
+
+with the following path and query parameters:
+
+==== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *apiName* | Sets the apiName. |  | String
+|===
+
+
+==== Query Parameters (31 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *accessToken* (consumer) | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
+| *applicationName* (consumer) | Google sheets application name. Example would be camel-google-sheets/1.0 |  | String
+| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Client ID of the sheets application |  | String
+| *clientSecret* (consumer) | Client secret of the sheets application |  | String
+| *includeGridData* (consumer) | True if grid data should be returned. | false | boolean
+| *majorDimension* (consumer) | Specifies the major dimension that results should use.. | ROWS | String
+| *maxResults* (consumer) | Specify the maximum number of returned results. This will limit the number of rows in a returned value range data set or the number of returned value ranges in a batch request. | 10 | int
+| *range* (consumer) | Specifies the range of rows and columns in a sheet to get data from. |  | String
+| *refreshToken* (consumer) | OAuth 2 refresh token. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
+| *scopes* (consumer) | Specifies the level of permissions you want a sheets application to have to a user account. See https://developers.google.com/identity/protocols/googlescopes for more info. |  | List
+| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
+| *spreadsheetId* (consumer) | Specifies the spreadsheet identifier that is used to identify the target to obtain. |  | String
+| *valueRenderOption* (consumer) | Determines how values should be rendered in the output. | FORMATTED_VALUE | String
+| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
+| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPoll Strategy
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
+| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
+| *delay* (scheduler) | Milliseconds before the next poll. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 500 | long
+| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
+| *initialDelay* (scheduler) | Milliseconds before the first poll starts. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 1000 | long
+| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. | TRACE | LoggingLevel
+| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutor Service
+| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz2 component | none | ScheduledPollConsumer Scheduler
+| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz2, Spring based scheduler. |  | Map
+| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
+| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. | MILLISECONDS | TimeUnit
+| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
+|===
+// endpoint options: END
+// spring-boot-auto-configure options: START
+=== Spring Boot Auto-Configuration
+
+
+The component supports 16 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *camel.component.google-sheets-stream.client-factory* | To use the GoogleSheetsClientFactory as factory for creating the client. Will by default use BatchGoogleSheetsClientFactory. The option is a org.apache.camel.component.google.sheets.GoogleSheetsClientFactory type. |  | String
+| *camel.component.google-sheets-stream.configuration.access-token* | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
+| *camel.component.google-sheets-stream.configuration.api-name* | Sets the apiName. |  | String
+| *camel.component.google-sheets-stream.configuration.application-name* | Google sheets application name. Example would be camel-google-sheets/1.0 |  | String
+| *camel.component.google-sheets-stream.configuration.client-id* | Client ID of the sheets application |  | String
+| *camel.component.google-sheets-stream.configuration.client-secret* | Client secret of the sheets application |  | String
+| *camel.component.google-sheets-stream.configuration.include-grid-data* | True if grid data should be returned. | false | Boolean
+| *camel.component.google-sheets-stream.configuration.major-dimension* | Specifies the major dimension that results should use.. | ROWS | String
+| *camel.component.google-sheets-stream.configuration.max-results* | Specify the maximum number of returned results. This will limit the number of rows in a returned value range data set or the number of returned value ranges in a batch request. | 10 | Integer
+| *camel.component.google-sheets-stream.configuration.range* | Specifies the range of rows and columns in a sheet to get data from. |  | String
+| *camel.component.google-sheets-stream.configuration.refresh-token* | OAuth 2 refresh token. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived. |  | String
+| *camel.component.google-sheets-stream.configuration.scopes* | Specifies the level of permissions you want a sheets application to have to a user account. See https://developers.google.com/identity/protocols/googlescopes for more info. |  | List
+| *camel.component.google-sheets-stream.configuration.spreadsheet-id* | Specifies the spreadsheet identifier that is used to identify the target to obtain. |  | String
+| *camel.component.google-sheets-stream.configuration.value-render-option* | Determines how values should be rendered in the output. | FORMATTED_VALUE | String
+| *camel.component.google-sheets-stream.enabled* | Whether to enable auto configuration of the google-sheets-stream component. This is enabled by default. |  | Boolean
+| *camel.component.google-sheets-stream.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | Boolean
+|===
+// spring-boot-auto-configure options: END
+
+
+### Consumer
+
+The consumer will poll by default with maxResults equals to 5.
+
+For example
+
+[source,java]
+---------------------------------------------------------
+from("google-sheets-stream://data?range=A:B&delay=5000&maxResults=5").to("mock:result");
+---------------------------------------------------------
+
+This route will consume the next ten events starting from the date of polling.
+
+   
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
new file mode 100644
index 0000000..1c5a91a
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/BatchGoogleSheetsClientFactory.java
@@ -0,0 +1,66 @@
+/**
+ * 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.sheets;
+
+import com.google.api.client.auth.oauth2.Credential;
+import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
+import com.google.api.client.http.javanet.NetHttpTransport;
+import com.google.api.client.json.jackson2.JacksonFactory;
+import com.google.api.services.sheets.v4.Sheets;
+import org.apache.camel.RuntimeCamelException;
+
+public class BatchGoogleSheetsClientFactory implements GoogleSheetsClientFactory {
+
+    private final NetHttpTransport transport;
+    private final JacksonFactory jsonFactory;
+
+    public BatchGoogleSheetsClientFactory() {
+        this.transport = new NetHttpTransport();
+        this.jsonFactory = new JacksonFactory();
+    }
+
+    @Override
+    public Sheets makeClient(String clientId, String clientSecret, String applicationName, String refreshToken, String accessToken) {
+        if (clientId == null || clientSecret == null) {
+            throw new IllegalArgumentException("clientId and clientSecret are required to create Google Sheets client.");
+        }
+        try {
+            Credential credential = authorize(clientId, clientSecret);
+
+            if (refreshToken != null && !"".equals(refreshToken)) {
+                credential.setRefreshToken(refreshToken);
+            }
+            if (accessToken != null && !"".equals(accessToken)) {
+                credential.setAccessToken(accessToken);
+            }
+            return new Sheets.Builder(transport, jsonFactory, credential)
+                                .setApplicationName(applicationName)
+                                .build();
+        } catch (Exception e) {
+            throw new RuntimeCamelException("Could not create Google Sheets client.", e);
+        }
+    }
+
+    // Authorizes the installed application to access user's protected data.
+    private Credential authorize(String clientId, String clientSecret) {
+        // authorize
+        return new GoogleCredential.Builder()
+                        .setJsonFactory(jsonFactory)
+                        .setTransport(transport)
+                        .setClientSecrets(clientId, clientSecret).build();
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsClientFactory.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsClientFactory.java
new file mode 100644
index 0000000..78b4e97
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsClientFactory.java
@@ -0,0 +1,25 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.Sheets;
+
+public interface GoogleSheetsClientFactory {
+
+    Sheets makeClient(String clientId, String clientSecret, String applicationName, String refreshToken, String accessToken);
+
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
new file mode 100644
index 0000000..f5764b1
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
@@ -0,0 +1,102 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.Sheets;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.util.component.AbstractApiComponent;
+
+/**
+ * Represents the component that manages {@link GoogleSheetsEndpoint}.
+ */
+@Metadata(label = "verifiers", enums = "parameters,connectivity")
+public class GoogleSheetsComponent extends AbstractApiComponent<GoogleSheetsApiName, GoogleSheetsConfiguration, GoogleSheetsApiCollection> {
+
+    @Metadata(label = "advanced")
+    private Sheets client;
+    @Metadata(label = "advanced")
+    private GoogleSheetsClientFactory clientFactory;
+
+    public GoogleSheetsComponent() {
+        super(GoogleSheetsEndpoint.class, GoogleSheetsApiName.class, GoogleSheetsApiCollection.getCollection());
+        registerExtension(new GoogleSheetsVerifierExtension("google-sheets"));
+    }
+
+    public GoogleSheetsComponent(CamelContext context) {
+        super(context, GoogleSheetsEndpoint.class, GoogleSheetsApiName.class, GoogleSheetsApiCollection.getCollection());
+        registerExtension(new GoogleSheetsVerifierExtension("google-sheets", context));
+    }
+
+    @Override
+    protected GoogleSheetsApiName getApiName(String apiNameStr) throws IllegalArgumentException {
+        return GoogleSheetsApiName.fromValue(apiNameStr);
+    }
+
+    public Sheets getClient(GoogleSheetsConfiguration config) {
+        if (client == null) {
+            client = getClientFactory().makeClient(config.getClientId(),
+                    config.getClientSecret(),
+                    config.getApplicationName(),
+                    config.getRefreshToken(),
+                    config.getAccessToken());
+        }
+        return client;
+    }
+
+    public GoogleSheetsClientFactory getClientFactory() {
+        if (clientFactory == null) {
+            clientFactory = new BatchGoogleSheetsClientFactory();
+        }
+        return clientFactory;
+    }
+
+    /**
+     * To use the shared configuration
+     */
+    @Override
+    public void setConfiguration(GoogleSheetsConfiguration configuration) {
+        super.setConfiguration(configuration);
+    }
+
+    @Override
+    public GoogleSheetsConfiguration getConfiguration() {
+        if (configuration == null) {
+            configuration = new GoogleSheetsConfiguration();
+        }
+        return super.getConfiguration();
+    }
+
+    /**
+     * To use the GoogleSheetsClientFactory as factory for creating the client.
+     * Will by default use {@link BatchGoogleSheetsClientFactory}
+     */
+    public void setClientFactory(GoogleSheetsClientFactory clientFactory) {
+        this.clientFactory = clientFactory;
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, String methodName, GoogleSheetsApiName apiName,
+                                      GoogleSheetsConfiguration endpointConfiguration) {
+        endpointConfiguration.setApiName(apiName);
+        endpointConfiguration.setMethodName(methodName);
+        return new GoogleSheetsEndpoint(uri, this, apiName, methodName, endpointConfiguration);
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConfiguration.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConfiguration.java
new file mode 100644
index 0000000..3492c59
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConfiguration.java
@@ -0,0 +1,130 @@
+/**
+ * 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.sheets;
+
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriParams;
+import org.apache.camel.spi.UriPath;
+
+/**
+ * Component configuration for GoogleSheets component.
+ */
+@UriParams
+public class GoogleSheetsConfiguration {
+
+    @UriPath
+    @Metadata(required = "true")
+    private GoogleSheetsApiName apiName;
+
+    @UriPath(enums = "create,get,update,append,batchUpdate,clear")
+    @Metadata(required = "true")
+    private String methodName;
+
+    @UriParam
+    private String clientId;
+
+    @UriParam
+    private String clientSecret;
+
+    @UriParam
+    private String accessToken;
+
+    @UriParam
+    private String refreshToken;
+
+    @UriParam
+    private String applicationName;
+
+    public GoogleSheetsApiName getApiName() {
+        return apiName;
+    }
+
+    /**
+     * What kind of operation to perform
+     */
+    public void setApiName(GoogleSheetsApiName apiName) {
+        this.apiName = apiName;
+    }
+
+    public String getMethodName() {
+        return methodName;
+    }
+
+    /**
+     * What sub operation to use for the selected operation
+     */
+    public void setMethodName(String methodName) {
+        this.methodName = methodName;
+    }
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    /**
+     * Client ID of the sheets application
+     */
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getClientSecret() {
+        return clientSecret;
+    }
+
+    /**
+     * Client secret of the sheets application
+     */
+    public void setClientSecret(String clientSecret) {
+        this.clientSecret = clientSecret;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    /**
+     * OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage.
+     */
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public String getRefreshToken() {
+        return refreshToken;
+    }
+
+    /**
+     * OAuth 2 refresh token. Using this, the Google Sheets component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.
+     */
+    public void setRefreshToken(String refreshToken) {
+        this.refreshToken = refreshToken;
+    }
+
+    public String getApplicationName() {
+        return applicationName;
+    }
+
+    /**
+     * Google Sheets application name. Example would be "camel-google-sheets/1.0"
+     */
+    public void setApplicationName(String applicationName) {
+        this.applicationName = applicationName;
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
new file mode 100644
index 0000000..70255e7
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
@@ -0,0 +1,52 @@
+/**
+ * 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.sheets;
+
+import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
+import org.apache.camel.Processor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.component.AbstractApiConsumer;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * The GoogleSheets consumer.
+ */
+public class GoogleSheetsConsumer extends AbstractApiConsumer<GoogleSheetsApiName, GoogleSheetsConfiguration> {
+
+    public GoogleSheetsConsumer(GoogleSheetsEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+    }
+
+    @Override
+    protected Object doInvokeMethod(Map<String, Object> properties) throws RuntimeCamelException {
+        AbstractGoogleClientRequest<?> request = (AbstractGoogleClientRequest) super.doInvokeMethod(properties);
+        try {
+            TypeConverter typeConverter = getEndpoint().getCamelContext().getTypeConverter();
+            for (Entry<String, Object> p : properties.entrySet()) {
+                IntrospectionSupport.setProperty(typeConverter, request, p.getKey(), p.getValue());
+            }
+            return request.execute();
+        } catch (Exception e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
new file mode 100644
index 0000000..ac21617
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
@@ -0,0 +1,115 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.Sheets;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsConstants;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsPropertiesHelper;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.util.component.AbstractApiEndpoint;
+import org.apache.camel.util.component.ApiMethod;
+import org.apache.camel.util.component.ApiMethodPropertiesHelper;
+
+import java.util.Map;
+
+/**
+ * The google-sheets component provides access to Google Sheets.
+ */
+@UriEndpoint(firstVersion = "2.23.0",
+        scheme = "google-sheets",
+        title = "Google Sheets",
+        syntax = "google-sheets:apiName/methodName",
+        consumerClass = GoogleSheetsConsumer.class,
+        consumerPrefix = "consumer",
+        label = "api,cloud,sheets")
+public class GoogleSheetsEndpoint extends AbstractApiEndpoint<GoogleSheetsApiName, GoogleSheetsConfiguration> {
+
+    @UriParam
+    private GoogleSheetsConfiguration configuration;
+
+    private Object apiProxy;
+
+    public GoogleSheetsEndpoint(String uri, GoogleSheetsComponent component,
+                                GoogleSheetsApiName apiName, String methodName, GoogleSheetsConfiguration endpointConfiguration) {
+        super(uri, component, apiName, methodName, GoogleSheetsApiCollection.getCollection().getHelper(apiName), endpointConfiguration);
+        this.configuration = endpointConfiguration;
+    }
+
+    @Override
+    public Producer createProducer() throws Exception {
+        return new org.apache.camel.component.google.sheets.GoogleSheetsProducer(this);
+    }
+
+    @Override
+    public Consumer createConsumer(Processor processor) throws Exception {
+        // make sure inBody is not set for consumers
+        if (inBody != null) {
+            throw new IllegalArgumentException("Option inBody is not supported for consumer endpoint");
+        }
+        final GoogleSheetsConsumer consumer = new GoogleSheetsConsumer(this, processor);
+        // also set consumer.* properties
+        configureConsumer(consumer);
+        return consumer;
+    }
+
+    @Override
+    protected ApiMethodPropertiesHelper<GoogleSheetsConfiguration> getPropertiesHelper() {
+        return GoogleSheetsPropertiesHelper.getHelper();
+    }
+
+    @Override
+    protected String getThreadProfileName() {
+        return GoogleSheetsConstants.THREAD_PROFILE_NAME;
+    }
+
+    @Override
+    protected void afterConfigureProperties() {
+        switch (apiName) {
+            case SPREADSHEETS:
+                apiProxy = getClient().spreadsheets();
+                break;
+            case DATA:
+                apiProxy = getClient().spreadsheets().values();
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid API name " + apiName);
+        }
+    }
+
+    public Sheets getClient() {
+        return ((GoogleSheetsComponent)getComponent()).getClient(configuration);
+    }
+
+    @Override
+    public Object getApiProxy(ApiMethod method, Map<String, Object> args) {
+        return apiProxy;
+    }
+
+    public GoogleSheetsClientFactory getClientFactory() {
+        return ((GoogleSheetsComponent)getComponent()).getClientFactory();
+    }
+
+    public void setClientFactory(GoogleSheetsClientFactory clientFactory) {
+        ((GoogleSheetsComponent)getComponent()).setClientFactory(clientFactory);
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
new file mode 100644
index 0000000..7fec2fc
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
@@ -0,0 +1,54 @@
+/**
+ * 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.sheets;
+
+import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsPropertiesHelper;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.component.AbstractApiProducer;
+import org.apache.camel.util.component.ApiMethod;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * The GoogleSheets producer.
+ */
+public class GoogleSheetsProducer extends AbstractApiProducer<GoogleSheetsApiName, GoogleSheetsConfiguration> {
+
+    public GoogleSheetsProducer(GoogleSheetsEndpoint endpoint) {
+        super(endpoint, GoogleSheetsPropertiesHelper.getHelper());
+    }
+
+    @Override
+    protected Object doInvokeMethod(ApiMethod method, Map<String, Object> properties) throws RuntimeCamelException {
+        AbstractGoogleClientRequest<?> request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties);
+        try {
+            TypeConverter typeConverter = getEndpoint().getCamelContext().getTypeConverter();
+            for (Entry<String, Object> p : properties.entrySet()) {
+                IntrospectionSupport.setProperty(typeConverter, request, p.getKey(), p.getValue());
+            }
+            return request.execute();
+        } catch (Exception e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java
new file mode 100644
index 0000000..a531908
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java
@@ -0,0 +1,80 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.Sheets;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
+import org.apache.camel.component.extension.verifier.ResultBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorHelper;
+
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+
+public class GoogleSheetsVerifierExtension extends DefaultComponentVerifierExtension {
+
+    public GoogleSheetsVerifierExtension(String defaultScheme) {
+        super(defaultScheme);
+    }
+
+    public GoogleSheetsVerifierExtension(String defaultScheme, CamelContext context) {
+        super(defaultScheme, context);
+    }
+
+    // *********************************
+    // Parameters validation
+    // *********************************
+
+    @Override
+    protected Result verifyParameters(Map<String, Object> parameters) {
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS).error(ResultErrorHelper.requiresOption("applicationName", parameters))
+            .error(ResultErrorHelper.requiresOption("clientId", parameters)).error(ResultErrorHelper.requiresOption("clientSecret", parameters));
+
+        return builder.build();
+    }
+
+    // *********************************
+    // Connectivity validation
+    // *********************************
+
+    @Override
+    @SuppressWarnings("PMD.AvoidCatchingGenericException")
+    protected Result verifyConnectivity(Map<String, Object> parameters) {
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
+
+        try {
+            GoogleSheetsConfiguration configuration = setProperties(new GoogleSheetsConfiguration(), parameters);
+            GoogleSheetsClientFactory clientFactory = new BatchGoogleSheetsClientFactory();
+            Sheets client = clientFactory.makeClient(configuration.getClientId(), configuration.getClientSecret(),
+                    configuration.getApplicationName(),
+                    configuration.getRefreshToken(), configuration.getAccessToken());
+            client.spreadsheets().get(Optional.ofNullable(parameters.get("spreadsheetId"))
+                                              .map(Object::toString)
+                                              .orElse(UUID.randomUUID().toString())).execute();
+        } catch (Exception e) {
+            ResultErrorBuilder errorBuilder = ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, e.getMessage())
+                .detail("google_sheets_exception_message", e.getMessage()).detail(VerificationError.ExceptionAttribute.EXCEPTION_CLASS, e.getClass().getName())
+                .detail(VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE, e);
+
+            builder.error(errorBuilder.build());
+        }
+
+        return builder.build();
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java
new file mode 100644
index 0000000..a14a251
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java
@@ -0,0 +1,33 @@
+/**
+ * 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.sheets.internal;
+
+/**
+ * Constants for Camel Google Sheets component.
+ */
+public final class GoogleSheetsConstants {
+
+    // suffix for parameters when passed as exchange header properties
+    public static final String PROPERTY_PREFIX = "CamelGoogleSheets.";
+    // thread profile name for this component
+    public static final String THREAD_PROFILE_NAME = "CamelGoogleSheets";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleSheetsConstants() {}
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
new file mode 100644
index 0000000..48c345e
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
@@ -0,0 +1,39 @@
+/**
+ * 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.sheets.internal;
+
+import org.apache.camel.component.google.sheets.GoogleSheetsConfiguration;
+import org.apache.camel.util.component.ApiMethodPropertiesHelper;
+
+/**
+ * Singleton {@link ApiMethodPropertiesHelper} for GoogleSheets component.
+ */
+public final class GoogleSheetsPropertiesHelper extends ApiMethodPropertiesHelper<GoogleSheetsConfiguration> {
+
+    private static GoogleSheetsPropertiesHelper helper;
+
+    private GoogleSheetsPropertiesHelper() {
+        super(GoogleSheetsConfiguration.class, GoogleSheetsConstants.PROPERTY_PREFIX);
+    }
+
+    public static synchronized GoogleSheetsPropertiesHelper getHelper() {
+        if (helper == null) {
+            helper = new GoogleSheetsPropertiesHelper();
+        }
+        return helper;
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
new file mode 100644
index 0000000..693d64a
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
@@ -0,0 +1,96 @@
+/**
+ * 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.sheets.stream;
+
+import com.google.api.services.sheets.v4.Sheets;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.google.sheets.BatchGoogleSheetsClientFactory;
+import org.apache.camel.component.google.sheets.GoogleSheetsClientFactory;
+import org.apache.camel.component.google.sheets.GoogleSheetsVerifierExtension;
+import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Metadata;
+
+import java.util.Map;
+
+/**
+ * Represents the component that manages {@link GoogleSheetsStreamEndpoint}.
+ */
+@Metadata(label = "verifiers", enums = "parameters,connectivity")
+public class GoogleSheetsStreamComponent extends DefaultComponent {
+
+    @Metadata(label = "advanced")
+    private Sheets client;
+    @Metadata(label = "advanced")
+    private GoogleSheetsClientFactory clientFactory;
+    @Metadata
+    private GoogleSheetsStreamConfiguration configuration;
+
+    public GoogleSheetsStreamComponent() {
+        this(null);
+    }
+
+    public GoogleSheetsStreamComponent(CamelContext context) {
+        super(context);
+        registerExtension(new GoogleSheetsVerifierExtension("google-sheets-stream", context));
+        this.configuration = new GoogleSheetsStreamConfiguration();
+    }
+
+    public Sheets getClient(GoogleSheetsStreamConfiguration endpointConfiguration) {
+        if (client == null) {
+            client = getClientFactory().makeClient(endpointConfiguration.getClientId(), endpointConfiguration.getClientSecret(),
+                                                    endpointConfiguration.getApplicationName(), endpointConfiguration.getRefreshToken(),
+                                                    endpointConfiguration.getAccessToken());
+        }
+        return client;
+    }
+
+    public GoogleSheetsClientFactory getClientFactory() {
+        if (clientFactory == null) {
+            clientFactory = new BatchGoogleSheetsClientFactory();
+        }
+        return clientFactory;
+    }
+
+    public GoogleSheetsStreamConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * To use the shared configuration
+     */
+    public void setConfiguration(GoogleSheetsStreamConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    /**
+     * To use the GoogleSheetsClientFactory as factory for creating the client.
+     * Will by default use {@link BatchGoogleSheetsClientFactory}
+     */
+    public void setClientFactory(GoogleSheetsClientFactory clientFactory) {
+        this.clientFactory = clientFactory;
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+        final GoogleSheetsStreamConfiguration configuration = this.configuration.copy();
+        setProperties(configuration, parameters);
+        GoogleSheetsStreamEndpoint endpoint = new GoogleSheetsStreamEndpoint(uri, this, configuration);
+        setProperties(endpoint, parameters);
+        return endpoint;
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java
new file mode 100644
index 0000000..3a88ffb
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java
@@ -0,0 +1,255 @@
+/**
+ * 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.sheets.stream;
+
+import com.google.api.services.sheets.v4.SheetsScopes;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriParams;
+import org.apache.camel.spi.UriPath;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Component configuration for GoogleSheets stream component.
+ */
+@UriParams
+public class GoogleSheetsStreamConfiguration implements Cloneable {
+
+    private static final List<String> DEFAULT_SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS);
+
+    @UriPath
+    private String apiName;
+
+    @UriParam
+    private List<String> scopes = DEFAULT_SCOPES;
+
+    @UriParam
+    private String clientId;
+
+    @UriParam
+    private String clientSecret;
+
+    @UriParam
+    private String accessToken;
+
+    @UriParam
+    private String refreshToken;
+
+    @UriParam
+    private String applicationName;
+
+    @UriParam
+    private String spreadsheetId;
+
+    @UriParam(defaultValue = "10")
+    private int maxResults = 10;
+
+    @UriParam
+    private String range;
+
+    @UriParam
+    private boolean includeGridData;
+
+    @UriParam(enums = "ROWS,COLUMNS,DIMENSION_UNSPECIFIED", defaultValue = "ROWS")
+    private String majorDimension = "ROWS";
+
+    @UriParam(enums = "FORMATTED_VALUE,UNFORMATTED_VALUE,FORMULA", defaultValue = "FORMATTED_VALUE")
+    private String valueRenderOption = "FORMATTED_VALUE";
+
+    public String getClientId() {
+        return clientId;
+    }
+
+    /**
+     * Client ID of the sheets application
+     */
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getClientSecret() {
+        return clientSecret;
+    }
+
+    /**
+     * Client secret of the sheets application
+     */
+    public void setClientSecret(String clientSecret) {
+        this.clientSecret = clientSecret;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    /**
+     * OAuth 2 access token. This typically expires after an hour so
+     * refreshToken is recommended for long term usage.
+     */
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public String getRefreshToken() {
+        return refreshToken;
+    }
+
+    /**
+     * OAuth 2 refresh token. Using this, the Google Calendar component can
+     * obtain a new accessToken whenever the current one expires - a necessity
+     * if the application is long-lived.
+     */
+    public void setRefreshToken(String refreshToken) {
+        this.refreshToken = refreshToken;
+    }
+
+    public String getApplicationName() {
+        return applicationName;
+    }
+
+    /**
+     * Google sheets application name. Example would be "camel-google-sheets/1.0"
+     */
+    public void setApplicationName(String applicationName) {
+        this.applicationName = applicationName;
+    }
+
+    public List<String> getScopes() {
+        return scopes;
+    }
+
+    /**
+     * Specifies the level of permissions you want a sheets application to have to
+     * a user account. See https://developers.google.com/identity/protocols/googlescopes
+     * for more info.
+     */
+    public void setScopes(List<String> scopes) {
+        this.scopes = scopes;
+    }
+
+    /**
+     * Gets the apiName.
+     *
+     * @return
+     */
+    public String getApiName() {
+        return apiName;
+    }
+
+    /**
+     * Sets the apiName.
+     *
+     * @param apiName
+     */
+    public void setApiName(String apiName) {
+        this.apiName = apiName;
+    }
+
+    public String getSpreadsheetId() {
+        return spreadsheetId;
+    }
+
+    /**
+     * Specifies the spreadsheet identifier that is used to identify the target to obtain.
+     *
+     * @param spreadsheetId
+     */
+    public void setSpreadsheetId(String spreadsheetId) {
+        this.spreadsheetId = spreadsheetId;
+    }
+
+    public int getMaxResults() {
+        return maxResults;
+    }
+
+    /**
+     * Specify the maximum number of returned results. This will limit the number of rows in a returned value range
+     * data set or the number of returned value ranges in a batch request.
+     *
+     * @param maxResults
+     */
+    public void setMaxResults(int maxResults) {
+        this.maxResults = maxResults;
+    }
+
+    public String getRange() {
+        return range;
+    }
+
+    /**
+     * Specifies the range of rows and columns in a sheet to get data from.
+     *
+     * @param range
+     */
+    public void setRange(String range) {
+        this.range = range;
+    }
+
+    public String getMajorDimension() {
+        return majorDimension;
+    }
+
+    /**
+     * Specifies the major dimension that results should use..
+     *
+     * @param majorDimension
+     */
+    public void setMajorDimension(String majorDimension) {
+        this.majorDimension = majorDimension;
+    }
+
+    public String getValueRenderOption() {
+        return valueRenderOption;
+    }
+
+    /**
+     * Determines how values should be rendered in the output.
+     *
+     * @param valueRenderOption
+     */
+    public void setValueRenderOption(String valueRenderOption) {
+        this.valueRenderOption = valueRenderOption;
+    }
+
+    public boolean isIncludeGridData() {
+        return includeGridData;
+    }
+
+    /**
+     * True if grid data should be returned.
+     *
+     * @param includeGridData
+     */
+    public void setIncludeGridData(boolean includeGridData) {
+        this.includeGridData = includeGridData;
+    }
+
+    // *************************************************
+    //
+    // *************************************************
+
+    public GoogleSheetsStreamConfiguration copy() {
+        try {
+            return (GoogleSheetsStreamConfiguration)super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java
new file mode 100644
index 0000000..d721585
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java
@@ -0,0 +1,37 @@
+/**
+ * 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.sheets.stream;
+
+/**
+ * Constants used in Camel Google Sheets Stream
+ */
+public final class GoogleSheetsStreamConstants {
+
+    private static final String PROPERTY_PREFIX = "CamelGoogleSheets";
+
+    public static final String SPREADSHEET_ID =  PROPERTY_PREFIX + "SpreadsheetId";
+    public static final String SPREADSHEET_URL =  PROPERTY_PREFIX + "SpreadsheetUrl";
+    public static final String MAJOR_DIMENSION = PROPERTY_PREFIX + "MajorDimension";
+    public static final String RANGE = PROPERTY_PREFIX + "Range";
+
+    /**
+     * Prevent instantiation.
+     */
+    private GoogleSheetsStreamConstants() {
+        super();
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
new file mode 100644
index 0000000..a22b3e5
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
@@ -0,0 +1,120 @@
+/**
+ * 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.sheets.stream;
+
+import com.google.api.services.sheets.v4.Sheets;
+import com.google.api.services.sheets.v4.model.BatchGetValuesResponse;
+import com.google.api.services.sheets.v4.model.Spreadsheet;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.impl.ScheduledBatchPollingConsumer;
+import org.apache.camel.util.CastUtils;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Queue;
+import java.util.stream.Collectors;
+
+/**
+ * The GoogleSheets consumer.
+ */
+public class GoogleSheetsStreamConsumer extends ScheduledBatchPollingConsumer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(GoogleSheetsStreamConsumer.class);
+
+    public GoogleSheetsStreamConsumer(Endpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+    }
+
+    protected GoogleSheetsStreamConfiguration getConfiguration() {
+        return getEndpoint().getConfiguration();
+    }
+
+    protected Sheets getClient() {
+        return getEndpoint().getClient();
+    }
+
+    @Override
+    public GoogleSheetsStreamEndpoint getEndpoint() {
+        return (GoogleSheetsStreamEndpoint)super.getEndpoint();
+    }
+
+    @Override
+    protected int poll() throws Exception {
+        Queue<Exchange> answer = new ArrayDeque<>();
+
+        if (ObjectHelper.isNotEmpty(getConfiguration().getRange())) {
+            Sheets.Spreadsheets.Values.BatchGet request = getClient().spreadsheets().values().batchGet(getConfiguration().getSpreadsheetId());
+
+            request.setMajorDimension(getConfiguration().getMajorDimension());
+            request.setValueRenderOption(getConfiguration().getValueRenderOption());
+
+            if (getConfiguration().getRange().contains(",")) {
+                request.setRanges(Arrays.stream(getConfiguration().getRange().split(","))
+                                        .map(String::trim)
+                                        .collect(Collectors.toList()));
+            } else {
+                request.setRanges(Collections.singletonList(getConfiguration().getRange()));
+            }
+
+            BatchGetValuesResponse response = request.execute();
+
+            if (response.getValueRanges() != null) {
+                response.getValueRanges()
+                        .stream()
+                        .limit(getConfiguration().getMaxResults())
+                        .map(valueRange -> getEndpoint().createExchange(valueRange))
+                        .forEach(answer::add);
+            }
+        } else {
+            Sheets.Spreadsheets.Get request = getClient().spreadsheets().get(getConfiguration().getSpreadsheetId());
+
+            request.setIncludeGridData(getConfiguration().isIncludeGridData());
+
+            Spreadsheet spreadsheet = request.execute();
+            answer.add(getEndpoint().createExchange(spreadsheet));
+        }
+
+        return processBatch(CastUtils.cast(answer));
+    }
+
+    @Override
+    public int processBatch(Queue<Object> exchanges) throws Exception {
+        int total = exchanges.size();
+
+        for (int index = 0; index < total && isBatchAllowed(); index++) {
+            // only loop if we are started (allowed to run)
+            final Exchange exchange = ObjectHelper.cast(Exchange.class, exchanges.poll());
+            // add current index and total as properties
+            exchange.setProperty(Exchange.BATCH_INDEX, index);
+            exchange.setProperty(Exchange.BATCH_SIZE, total);
+            exchange.setProperty(Exchange.BATCH_COMPLETE, index == total - 1);
+
+            // update pending number of exchanges
+            pendingExchanges = total - index - 1;
+
+            getAsyncProcessor().process(exchange, doneSync -> LOG.trace("Processing exchange done"));
+        }
+
+        return total;
+    }
+}
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
new file mode 100644
index 0000000..648be83
--- /dev/null
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
@@ -0,0 +1,99 @@
+/**
+ * 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.sheets.stream;
+
+import com.google.api.services.sheets.v4.Sheets;
+import com.google.api.services.sheets.v4.model.Spreadsheet;
+import com.google.api.services.sheets.v4.model.ValueRange;
+import org.apache.camel.*;
+import org.apache.camel.component.google.sheets.GoogleSheetsClientFactory;
+import org.apache.camel.impl.ScheduledPollEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+
+/**
+ * The google-sheets component provides access to Google Sheets.
+ */
+@UriEndpoint(firstVersion = "2.23.0",
+             scheme = "google-sheets-stream",
+             title = "Google Sheets Stream",
+             syntax = "google-sheets-stream:apiName",
+             consumerClass = GoogleSheetsStreamConsumer.class,
+             consumerOnly = true,
+             label = "api,cloud,sheets")
+public class GoogleSheetsStreamEndpoint extends ScheduledPollEndpoint {
+
+    @UriParam
+    private GoogleSheetsStreamConfiguration configuration;
+
+    public GoogleSheetsStreamEndpoint(String uri, GoogleSheetsStreamComponent component, GoogleSheetsStreamConfiguration endpointConfiguration) {
+        super(uri, component);
+        this.configuration = endpointConfiguration;
+    }
+
+    @Override
+    public Producer createProducer() throws Exception {
+        throw new UnsupportedOperationException("The camel google sheets stream component doesn't support producer");
+    }
+
+    @Override
+    public Consumer createConsumer(Processor processor) throws Exception {
+        final GoogleSheetsStreamConsumer consumer = new GoogleSheetsStreamConsumer(this, processor);
+        configureConsumer(consumer);
+        return consumer;
+    }
+
+    public Sheets getClient() {
+        return ((GoogleSheetsStreamComponent)getComponent()).getClient(configuration);
+    }
+
+    public GoogleSheetsClientFactory getClientFactory() {
+        return ((GoogleSheetsStreamComponent)getComponent()).getClientFactory();
+    }
+
+    public void setClientFactory(GoogleSheetsClientFactory clientFactory) {
+        ((GoogleSheetsStreamComponent)getComponent()).setClientFactory(clientFactory);
+    }
+
+    public GoogleSheetsStreamConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    @Override
+    public boolean isSingleton() {
+        return true;
+    }
+
+    public Exchange createExchange(ValueRange valueRange) {
+        Exchange exchange = super.createExchange(getExchangePattern());
+        Message message = exchange.getIn();
+        exchange.getIn().setHeader(GoogleSheetsStreamConstants.SPREADSHEET_ID, configuration.getSpreadsheetId());
+        exchange.getIn().setHeader(GoogleSheetsStreamConstants.RANGE, valueRange.getRange());
+        exchange.getIn().setHeader(GoogleSheetsStreamConstants.MAJOR_DIMENSION, valueRange.getMajorDimension());
+        message.setBody(valueRange);
+        return exchange;
+    }
+
+    public Exchange createExchange(Spreadsheet spreadsheet) {
+        Exchange exchange = super.createExchange(getExchangePattern());
+        Message message = exchange.getIn();
+        exchange.getIn().setHeader(GoogleSheetsStreamConstants.SPREADSHEET_ID, spreadsheet.getSpreadsheetId());
+        exchange.getIn().setHeader(GoogleSheetsStreamConstants.SPREADSHEET_URL, spreadsheet.getSpreadsheetUrl());
+        message.setBody(spreadsheet);
+        return exchange;
+    }
+}
diff --git a/components/camel-google-sheets/src/main/resources/META-INF/LICENSE.txt b/components/camel-google-sheets/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/components/camel-google-sheets/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
diff --git a/components/camel-google-sheets/src/main/resources/META-INF/NOTICE.txt b/components/camel-google-sheets/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/components/camel-google-sheets/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets b/components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets
new file mode 100644
index 0000000..a3e7e26
--- /dev/null
+++ b/components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets
@@ -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.
+#
+class=org.apache.camel.component.google.sheets.GoogleSheetsComponent
diff --git a/components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets-stream b/components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets-stream
new file mode 100644
index 0000000..0ac2679
--- /dev/null
+++ b/components/camel-google-sheets/src/main/resources/META-INF/services/org/apache/camel/component/google-sheets-stream
@@ -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.
+#
+class=org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamComponent
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
new file mode 100644
index 0000000..afb01a7
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
@@ -0,0 +1,164 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.model.Sheet;
+import com.google.api.services.sheets.v4.model.SheetProperties;
+import com.google.api.services.sheets.v4.model.Spreadsheet;
+import com.google.api.services.sheets.v4.model.SpreadsheetProperties;
+import com.google.api.services.sheets.v4.model.ValueRange;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.util.IntrospectionSupport;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Random;
+
+/**
+ * Abstract base class for GoogleSheets Integration tests generated by Camel
+ * API component maven plugin.
+ */
+public class AbstractGoogleSheetsTestSupport extends CamelTestSupport {
+
+    protected static final String TEST_SHEET = "TestData";
+    private static final String TEST_OPTIONS_PROPERTIES = "/test-options.properties";
+
+    private Spreadsheet spreadsheet;
+
+    /**
+     * Create test spreadsheet that is used throughout all tests.
+     */
+    private void createTestSpreadsheet() {
+        Spreadsheet spreadsheet = new Spreadsheet();
+        SpreadsheetProperties spreadsheetProperties = new SpreadsheetProperties();
+        spreadsheetProperties.setTitle("camel-sheets-" + Math.abs(new Random().nextInt()));
+
+        spreadsheet.setProperties(spreadsheetProperties);
+
+        Sheet sheet = new Sheet();
+        SheetProperties sheetProperties = new SheetProperties();
+        sheetProperties.setTitle(TEST_SHEET);
+        sheet.setProperties(sheetProperties);
+
+        spreadsheet.setSheets(Collections.singletonList(sheet));
+
+        this.spreadsheet = requestBody("google-sheets://spreadsheets/create?inBody=content", spreadsheet);
+    }
+
+    /**
+     * Add some initial test data to test spreadsheet.
+     */
+    private void createTestData() {
+        if (spreadsheet == null) {
+            createTestSpreadsheet();
+        }
+
+        ValueRange valueRange = new ValueRange();
+        valueRange.setValues(Arrays.asList(Arrays.asList("a1", "b1"), Arrays.asList("a2", "b2")));
+
+        final Map<String, Object> headers = new HashMap<>();
+        // parameter type is String
+        headers.put("CamelGoogleSheets.spreadsheetId", spreadsheet.getSpreadsheetId());
+        // parameter type is String
+        headers.put("CamelGoogleSheets.range", TEST_SHEET + "!A1:B2");
+
+        // parameter type is String
+        headers.put("CamelGoogleSheets.valueInputOption", "USER_ENTERED");
+
+        requestBodyAndHeaders("google-sheets://data/update?inBody=values", valueRange, headers);
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+
+        final CamelContext context = super.createCamelContext();
+
+        final GoogleSheetsConfiguration configuration = new GoogleSheetsConfiguration();
+        IntrospectionSupport.setProperties(configuration, getTestOptions());
+
+        // add GoogleSheetsComponent to Camel context
+        final GoogleSheetsComponent component = new GoogleSheetsComponent(context);
+        component.setConfiguration(configuration);
+        context.addComponent("google-sheets", component);
+
+        return context;
+    }
+
+    /**
+     * Read component configuration from TEST_OPTIONS_PROPERTIES.
+     * @return Map of component options.
+     * @throws IOException when TEST_OPTIONS_PROPERTIES could not be loaded.
+     */
+    protected Map<String, Object> getTestOptions() throws IOException {
+        final Properties properties = new Properties();
+        try {
+            properties.load(getClass().getResourceAsStream(TEST_OPTIONS_PROPERTIES));
+        } catch (Exception e) {
+            throw new IOException(String.format("%s could not be loaded: %s", TEST_OPTIONS_PROPERTIES, e.getMessage()), e);
+        }
+
+        Map<String, Object> options = new HashMap<>();
+        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
+            options.put(entry.getKey().toString(), entry.getValue());
+        }
+
+        return options;
+    }
+
+    @Override
+    public boolean isCreateCamelContextPerClass() {
+        // only create the context once for this class
+        return true;
+    }
+
+    @SuppressWarnings("unchecked")
+    protected <T> T requestBodyAndHeaders(String endpointUri, Object body, Map<String, Object> headers) throws CamelExecutionException {
+        return (T) template().requestBodyAndHeaders(endpointUri, body, headers);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected <T> T requestBody(String endpoint, Object body) throws CamelExecutionException {
+        return (T) template().requestBody(endpoint, body);
+    }
+
+    public Spreadsheet getSpreadsheet() {
+        if (spreadsheet == null) {
+            createTestSpreadsheet();
+        }
+        return spreadsheet;
+    }
+
+    public Spreadsheet getSpreadsheetWithTestData() {
+        if (spreadsheet == null) {
+            createTestSpreadsheet();
+        }
+
+        createTestData();
+
+        return spreadsheet;
+    }
+
+    public void setSpreadsheet(Spreadsheet sheet) {
+        this.spreadsheet = sheet;
+    }
+}
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java
new file mode 100644
index 0000000..a4504a8
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java
@@ -0,0 +1,68 @@
+/**
+ * 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.sheets;
+
+import org.apache.camel.Component;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+public class GoogleSheetsVerifierExtensionTest extends CamelTestSupport {
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Test
+    public void testVerifyParameters() {
+        Component component = context().getComponent("google-sheets");
+
+        ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class)
+                                                       .orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("clientId", "l");
+        parameters.put("clientSecret", "k");
+        parameters.put("applicationName", "test");
+
+        ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
+    }
+
+    @Test
+    public void testVerifyConnectivity() {
+        Component component = context().getComponent("google-sheets");
+        ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class)
+                                                       .orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("clientId", "l");
+        parameters.put("clientSecret", "k");
+        parameters.put("applicationName", "test");
+        parameters.put("spreadsheetId", UUID.randomUUID().toString());
+
+        ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+    }
+
+}
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsConfigurationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsConfigurationTest.java
new file mode 100644
index 0000000..298ffaf
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsConfigurationTest.java
@@ -0,0 +1,64 @@
+/**
+ * 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.sheets;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
+import org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsApiMethod;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class SheetsConfigurationTest extends CamelTestSupport {
+
+    private static final String PATH_PREFIX = GoogleSheetsApiCollection.getCollection().getApiName(SheetsSpreadsheetsApiMethod.class).getName();
+    private static final String TEST_URI = "google-sheets://" + PATH_PREFIX + "/create?clientId=a&clientSecret=b&applicationName=c&accessToken=d&refreshToken=e";
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        final CamelContext context = new DefaultCamelContext(createRegistry());
+
+        // add GoogleSheetsComponent to Camel context but don't set up configuration
+        final GoogleSheetsComponent component = new GoogleSheetsComponent(context);
+        context.addComponent("google-sheets", component);
+
+        return context;
+    }
+
+    @Test
+    public void testConfiguration() throws Exception {
+        GoogleSheetsEndpoint endpoint = getMandatoryEndpoint(TEST_URI, GoogleSheetsEndpoint.class);
+        GoogleSheetsConfiguration configuration = endpoint.getConfiguration();
+        assertNotNull(configuration);
+        assertEquals("a", configuration.getClientId());
+        assertEquals("b", configuration.getClientSecret());
+        assertEquals("c", configuration.getApplicationName());
+        assertEquals("d", configuration.getAccessToken());
+        assertEquals("e", configuration.getRefreshToken());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct://CREATE").to(TEST_URI);
+            }
+        };
+    }
+}
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java
new file mode 100644
index 0000000..680c08c
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java
@@ -0,0 +1,114 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.model.*;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
+import org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsApiMethod;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+/**
+ * Test class for {@link com.google.api.services.sheets.v4.Sheets.Spreadsheets} APIs.
+ */
+public class SheetsSpreadsheetsIntegrationTest extends AbstractGoogleSheetsTestSupport {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SheetsSpreadsheetsIntegrationTest.class);
+    private static final String PATH_PREFIX = GoogleSheetsApiCollection.getCollection().getApiName(SheetsSpreadsheetsApiMethod.class).getName();
+
+    @Test
+    public void testCreate() throws Exception {
+        String title = "camel-sheets-" + Math.abs(new Random().nextInt());
+        Spreadsheet sheetToCreate = new Spreadsheet();
+        SpreadsheetProperties sheetProperties = new SpreadsheetProperties();
+        sheetProperties.setTitle(title);
+
+        sheetToCreate.setProperties(sheetProperties);
+
+        // using com.google.api.services.sheets.v4.model.Spreadsheet message body for single parameter "content"
+        final Spreadsheet result = requestBody("direct://CREATE", sheetToCreate);
+
+        assertNotNull("create result is null", result);
+        assertEquals(title, result.getProperties().getTitle());
+
+        LOG.debug("create: " + result);
+    }
+
+    @Test
+    public void testGet() throws Exception {
+        Spreadsheet testSheet = getSpreadsheet();
+
+        // using String message body for single parameter "spreadsheetId"
+        final Spreadsheet result = requestBody("direct://GET", testSheet.getSpreadsheetId());
+
+        assertNotNull("get result is null", result);
+        assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
+
+        LOG.debug("get: " + result);
+    }
+
+    @Test
+    public void testBatchUpdate() throws Exception {
+        Spreadsheet testSheet = getSpreadsheet();
+        String updateTitle = "updated-" + testSheet.getProperties().getTitle();
+
+        final Map<String, Object> headers = new HashMap<>();
+        // parameter type is String
+        headers.put("CamelGoogleSheets.spreadsheetId", testSheet.getSpreadsheetId());
+        // parameter type is com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest
+        headers.put("CamelGoogleSheets.batchUpdateSpreadsheetRequest", new BatchUpdateSpreadsheetRequest()
+                                                                            .setIncludeSpreadsheetInResponse(true)
+                                                                            .setRequests(Collections.singletonList(new Request().setUpdateSpreadsheetProperties(new UpdateSpreadsheetPropertiesRequest()
+                                                                                    .setProperties(new SpreadsheetProperties().setTitle(updateTitle))
+                                                                                    .setFields("title")))));
+
+        final BatchUpdateSpreadsheetResponse result = requestBodyAndHeaders("direct://BATCHUPDATE", null, headers);
+
+        assertNotNull("batchUpdate result in null", result);
+        assertEquals(updateTitle, result.getUpdatedSpreadsheet().getProperties().getTitle());
+
+        LOG.debug("batchUpdate: " + result);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                // test route for batchUpdate
+                from("direct://BATCHUPDATE")
+                        .to("google-sheets://" + PATH_PREFIX + "/batchUpdate");
+
+                // test route for create
+                from("direct://CREATE")
+                        .to("google-sheets://" + PATH_PREFIX + "/create?inBody=content");
+
+                // test route for get
+                from("direct://GET")
+                        .to("google-sheets://" + PATH_PREFIX + "/get?inBody=spreadsheetId");
+
+            }
+        };
+    }
+}
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java
new file mode 100644
index 0000000..0e00a0c
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java
@@ -0,0 +1,159 @@
+/**
+ * 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.sheets;
+
+import com.google.api.services.sheets.v4.model.*;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
+import org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsValuesApiMethod;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
+
+/**
+ * Test class for {@link com.google.api.services.sheets.v4.Sheets.Spreadsheets.Values} APIs.
+ */
+public class SheetsSpreadsheetsValuesIntegrationTest extends AbstractGoogleSheetsTestSupport {
+
+    private static final Logger LOG = LoggerFactory.getLogger(SheetsSpreadsheetsValuesIntegrationTest.class);
+    private static final String PATH_PREFIX = GoogleSheetsApiCollection.getCollection().getApiName(SheetsSpreadsheetsValuesApiMethod.class).getName();
+
+    @Test
+    public void testGet() throws Exception {
+        Spreadsheet testSheet = getSpreadsheet();
+
+        final Map<String, Object> headers = new HashMap<>();
+        // parameter type is String
+        headers.put("CamelGoogleSheets.spreadsheetId", testSheet.getSpreadsheetId());
+        // parameter type is String
+        headers.put("CamelGoogleSheets.range", TEST_SHEET + "!A1:B2");
+
+        final ValueRange result = requestBodyAndHeaders("direct://GET", null, headers);
+
+        assertNotNull("get result is null", result);
+        assertEquals(TEST_SHEET + "!A1:B2", result.getRange());
+        assertNull("expected empty value range but found entries", result.getValues());
+
+        LOG.debug("get: " + result);
+    }
+
+    @Test
+    public void testUpdate() throws Exception {
+        Spreadsheet testSheet = getSpreadsheet();
+
+        List<List<Object>> data = Arrays.asList(
+                Arrays.asList("A1", "B1"),
+                Arrays.asList("A2", "B2")
+        );
+        ValueRange values = new ValueRange();
+        values.setValues(data);
+
+        final Map<String, Object> headers = new HashMap<>();
+        // parameter type is String
+        headers.put("CamelGoogleSheets.spreadsheetId", testSheet.getSpreadsheetId());
+        // parameter type is String
+        headers.put("CamelGoogleSheets.range", TEST_SHEET + "!A1:B2");
+        // parameter type is com.google.api.services.sheets.v4.model.ValueRange
+        headers.put("CamelGoogleSheets.values", values);
+
+        // parameter type is String
+        headers.put("CamelGoogleSheets.valueInputOption", "USER_ENTERED");
+
+        final UpdateValuesResponse result = requestBodyAndHeaders("direct://UPDATE", null, headers);
+
+        assertNotNull("update result is null", result);
+        assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
+        assertEquals(TEST_SHEET + "!A1:B2", result.getUpdatedRange());
+        assertEquals(Integer.valueOf(2), result.getUpdatedRows());
+        assertEquals(Integer.valueOf(4), result.getUpdatedCells());
+
+        LOG.debug("update: " + result);
+    }
+
+    @Test
+    public void testAppend() throws Exception {
+        Spreadsheet testSheet = getSpreadsheet();
+
+        final Map<String, Object> headers = new HashMap<>();
+        // parameter type is String
+        headers.put("CamelGoogleSheets.spreadsheetId", testSheet.getSpreadsheetId());
+        // parameter type is String
+        headers.put("CamelGoogleSheets.range", TEST_SHEET + "!A10");
+        // parameter type is com.google.api.services.sheets.v4.model.ValueRange
+        headers.put("CamelGoogleSheets.values", new ValueRange().setValues(Collections.singletonList(Arrays.asList("A10", "B10", "C10"))));
+
+        // parameter type is String
+        headers.put("CamelGoogleSheets.valueInputOption", "USER_ENTERED");
+
+        final AppendValuesResponse result = requestBodyAndHeaders("direct://APPEND", null, headers);
+
+        assertNotNull("append result is null", result);
+        assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
+        assertEquals(TEST_SHEET + "!A10:C10", result.getUpdates().getUpdatedRange());
+        assertEquals(Integer.valueOf(1), result.getUpdates().getUpdatedRows());
+        assertEquals(Integer.valueOf(3), result.getUpdates().getUpdatedCells());
+
+        LOG.debug("append: " + result);
+    }
+
+    @Test
+    public void testClear() throws Exception {
+        Spreadsheet testSheet = getSpreadsheetWithTestData();
+
+        final Map<String, Object> headers = new HashMap<>();
+        // parameter type is String
+        headers.put("CamelGoogleSheets.spreadsheetId", testSheet.getSpreadsheetId());
+        // parameter type is String
+        headers.put("CamelGoogleSheets.range", TEST_SHEET + "!A1:B2");
+        // parameter type is com.google.api.services.sheets.v4.model.ClearValuesRequest
+        headers.put("CamelGoogleSheets.clearValuesRequest", new ClearValuesRequest());
+
+        final ClearValuesResponse result = requestBodyAndHeaders("direct://CLEAR", null, headers);
+
+        assertNotNull("clear result is null", result);
+        assertEquals(testSheet.getSpreadsheetId(), result.getSpreadsheetId());
+        assertEquals(TEST_SHEET + "!A1:B2", result.getClearedRange());
+
+        LOG.debug("clear: " + result);
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                // test route for append
+                from("direct://APPEND")
+                        .to("google-sheets://" + PATH_PREFIX + "/append");
+
+                // test route for clear
+                from("direct://CLEAR")
+                        .to("google-sheets://" + PATH_PREFIX + "/clear");
+
+                // test route for get
+                from("direct://GET")
+                        .to("google-sheets://" + PATH_PREFIX + "/get");
+
+                // test route for update
+                from("direct://UPDATE")
+                        .to("google-sheets://" + PATH_PREFIX + "/update");
+            }
+        };
+    }
+}
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
new file mode 100644
index 0000000..4767a0c
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
@@ -0,0 +1,44 @@
+/**
+ * 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.sheets.stream;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.google.sheets.AbstractGoogleSheetsTestSupport;
+import org.apache.camel.util.IntrospectionSupport;
+
+/**
+ * Abstract base class for GoogleSheets Integration tests generated by Camel API
+ * component maven plugin.
+ */
+public class AbstractGoogleSheetsStreamTestSupport extends AbstractGoogleSheetsTestSupport {
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+
+        final CamelContext context = super.createCamelContext();
+
+        final GoogleSheetsStreamConfiguration configuration = new GoogleSheetsStreamConfiguration();
+        IntrospectionSupport.setProperties(configuration, getTestOptions());
+
+        // add GoogleSheetsComponent to Camel context
+        final GoogleSheetsStreamComponent component = new GoogleSheetsStreamComponent(context);
+        component.setConfiguration(configuration);
+        context.addComponent("google-sheets-stream", component);
+
+        return context;
+    }
+}
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
new file mode 100644
index 0000000..aa7c284
--- /dev/null
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
@@ -0,0 +1,70 @@
+/**
+ * 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.sheets.stream;
+
+import com.google.api.services.sheets.v4.model.Spreadsheet;
+import com.google.api.services.sheets.v4.model.ValueRange;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConstants.MAJOR_DIMENSION;
+import static org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConstants.RANGE;
+import static org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConstants.SPREADSHEET_ID;
+
+public class SheetsStreamConsumerIntegrationTest extends AbstractGoogleSheetsStreamTestSupport {
+
+    private String range = "A1:B2";
+
+    @Test
+    public void testConsumeValueRange() throws Exception {
+        Spreadsheet testSheet = getSpreadsheetWithTestData();
+
+        context().addRoutes(createGoogleStreamRouteBuilder(testSheet.getSpreadsheetId()));
+        context().startRoute("google-stream-test");
+
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMinimumMessageCount(1);
+        assertMockEndpointsSatisfied();
+
+        Exchange exchange = mock.getReceivedExchanges().get(0);
+        Assert.assertTrue(exchange.getIn().getHeaders().containsKey(SPREADSHEET_ID));
+        Assert.assertTrue(exchange.getIn().getHeaders().containsKey(RANGE));
+        Assert.assertTrue(exchange.getIn().getHeaders().containsKey(MAJOR_DIMENSION));
+        Assert.assertEquals(testSheet.getSpreadsheetId(), exchange.getIn().getHeaders().get(SPREADSHEET_ID));
+        Assert.assertEquals(TEST_SHEET + "!" + range, exchange.getIn().getHeaders().get(RANGE));
+        Assert.assertEquals("ROWS", exchange.getIn().getHeaders().get(MAJOR_DIMENSION));
+
+        ValueRange values = (ValueRange) exchange.getIn().getBody();
+        Assert.assertEquals(2L, values.getValues().size());
+        Assert.assertEquals("a1", values.getValues().get(0).get(0));
+        Assert.assertEquals("b1", values.getValues().get(0).get(1));
+        Assert.assertEquals("a2", values.getValues().get(1).get(0));
+        Assert.assertEquals("b2", values.getValues().get(1).get(1));
+    }
+
+    private RouteBuilder createGoogleStreamRouteBuilder(String spreadsheetId) throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("google-sheets-stream://data?spreadsheetId=" + spreadsheetId + "&range=" + range + "&delay=2000&maxResults=5").routeId("google-stream-test").to("mock:result");
+            }
+        };
+    }
+}
diff --git a/components/camel-google-sheets/src/test/resources/log4j2.properties b/components/camel-google-sheets/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..17088a9
--- /dev/null
+++ b/components/camel-google-sheets/src/test/resources/log4j2.properties
@@ -0,0 +1,28 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-google-sheets-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+appender.out.type = Console
+appender.out.name = out
+appender.out.layout.type = PatternLayout
+appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = DEBUG
+rootLogger.appenderRef.file.ref = file
diff --git a/components/camel-google-sheets/src/test/resources/test-options.properties b/components/camel-google-sheets/src/test/resources/test-options.properties
new file mode 100644
index 0000000..b21908c
--- /dev/null
+++ b/components/camel-google-sheets/src/test/resources/test-options.properties
@@ -0,0 +1,26 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+#####################################
+## Login properties for Google Sheets Component
+#####################################
+## Application client id and secret
+clientId=
+clientSecret=
+applicationName=camel-google-sheets/1.0
+accessToken=
+refreshToken=
diff --git a/components/pom.xml b/components/pom.xml
index cda568c..2160c43 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -133,6 +133,7 @@
     <module>camel-git</module>
     <module>camel-github</module>
     <module>camel-google-calendar</module>
+    <module>camel-google-sheets</module>
     <module>camel-google-drive</module>
     <module>camel-google-mail</module>
     <module>camel-google-bigquery</module>
@@ -357,7 +358,7 @@
     <profile>
       <id>validate</id>
       <build>
-        <plugins>          
+        <plugins>
           <!-- to validate Camel endpoints: mvn camel:validate -Pvalidate -->
           <plugin>
             <groupId>org.apache.camel</groupId>
diff --git a/components/readme.adoc b/components/readme.adoc
index 77c121e..5aeeae5 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -299,6 +299,12 @@ Number of Components: 283 in 188 JAR artifacts (1 deprecated)
 | link:camel-google-pubsub/src/main/docs/google-pubsub-component.adoc[Google Pubsub] (camel-google-pubsub) +
 `google-pubsub:projectId:destinationName` | 2.19 | Messaging client for Google Cloud Platform PubSub Service
 
+| link:camel-google-sheets/src/main/docs/google-sheets-component.adoc[Google Sheets] (camel-google-sheets) +
+`google-sheets:apiName/methodName` | 2.23 | The google-sheets component provides access to Google Sheets.
+
+| link:camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc[Google Sheets Stream] (camel-google-sheets) +
+`google-sheets-stream:apiName` | 2.23 | The google-sheets component provides access to Google Sheets.
+
 | link:camel-gora/src/main/docs/gora-component.adoc[Gora] (camel-gora) +
 `gora:name` | 2.14 | The gora component allows you to work with NoSQL databases using the Apache Gora framework.
 
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index e9cbb6e..ef31d4d 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -255,6 +255,8 @@
  * [Google Mail](google-mail-component.adoc)
  * [Google Mail Stream](google-mail-stream-component.adoc)
  * [Google Pubsub](google-pubsub-component.adoc)
+ * [Google Sheets](google-sheets-component.adoc)
+ * [Google Sheets Stream](google-sheets-stream-component.adoc)
  * [Gora](gora-component.adoc)
  * [Grape](grape-component.adoc)
  * [gRPC](grpc-component.adoc)
diff --git a/parent/pom.xml b/parent/pom.xml
index 408b277..85313ae 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -260,6 +260,7 @@
     <google-api-client-version>1.22.0</google-api-client-version>
     <google-api-services-drive-version>v2-rev297-1.22.0</google-api-services-drive-version>
     <google-api-services-calendar-version>v3-rev291-1.22.0</google-api-services-calendar-version>
+    <google-api-services-sheets-version>v4-rev551-1.22.0</google-api-services-sheets-version>
     <google-api-services-mail-version>v1-rev81-1.22.0</google-api-services-mail-version>
     <google-api-services-bigquery-version>v2-rev352-1.22.0</google-api-services-bigquery-version>
     <google-api-services-pubsub-version>v1-rev12-1.22.0</google-api-services-pubsub-version>
@@ -1244,12 +1245,17 @@
         <artifactId>camel-github</artifactId>
         <version>${project.version}</version>
       </dependency>
-       <dependency>
+      <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-google-calendar</artifactId>
         <version>${project.version}</version>
       </dependency>
-       <dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-sheets</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-google-drive</artifactId>
         <version>${project.version}</version>
@@ -2755,6 +2761,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-sheets-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-google-drive-starter</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 2e07d63..0b1b71a 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -771,6 +771,20 @@
     <bundle dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client-jetty/${google-api-client-version}</bundle>
     <bundle>mvn:org.apache.camel/camel-google-calendar/${project.version}</bundle>
   </feature>
+  <feature name='camel-google-sheets' version='${project.version}' resolver='(obr)' start-level='50'>
+    <feature version='${project.version}'>camel-core</feature>
+    <bundle dependency='true'>mvn:commons-codec/commons-codec/${commons-codec-version}</bundle>
+    <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle>
+    <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-httpclient/${commons-httpclient-bundle-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.api-client/google-api-client/${google-api-client-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.apis/google-api-services-sheets/${google-api-services-sheets-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.http-client/google-http-client/${google-api-client-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.http-client/google-http-client-jackson2/${google-api-client-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client/${google-api-client-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client-java6/${google-api-client-version}</bundle>
+    <bundle dependency='true'>wrap:mvn:com.google.oauth-client/google-oauth-client-jetty/${google-api-client-version}</bundle>
+    <bundle>mvn:org.apache.camel/camel-google-sheets/${project.version}</bundle>
+  </feature>
   <feature name='camel-google-drive' version='${project.version}' resolver='(obr)' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
     <bundle dependency='true'>mvn:commons-codec/commons-codec/${commons-codec-version}</bundle>
@@ -1158,17 +1172,17 @@
     <bundle dependency='true'>mvn:org.kie.soup/kie-soup-project-datamodel-commons/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.kie.soup/kie-soup-commons/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.kie/kie-api/${jbpm-version}</bundle>
-    <bundle dependency='true'>mvn:org.kie/kie-internal/${jbpm-version}</bundle>    
+    <bundle dependency='true'>mvn:org.kie/kie-internal/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.drools/drools-core/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.drools/drools-compiler/${jbpm-version}</bundle>
-    <bundle dependency='true'>mvn:org.mvel/mvel2/${mvel-version}</bundle>    
+    <bundle dependency='true'>mvn:org.mvel/mvel2/${mvel-version}</bundle>
     <bundle dependency='true'>mvn:org.kie/kie-dmn-model/${jbpm-version}</bundle>
-    <bundle dependency='true'>mvn:org.kie/kie-dmn-api/${jbpm-version}</bundle>  
+    <bundle dependency='true'>mvn:org.kie/kie-dmn-api/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.optaplanner/optaplanner-core/${jbpm-version}</bundle>
-    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-common/${jbpm-version}</bundle>  
+    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-common/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-jaxb/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-jackson/${jbpm-version}</bundle>
-    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-xstream/${jbpm-version}</bundle>  
+    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-xstream/${jbpm-version}</bundle>
     <bundle dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
     <bundle dependency='true'>mvn:com.google.guava/guava/${google-guava-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.commons/commons-math3/${commons-math3-version}</bundle>
@@ -1177,13 +1191,13 @@
     <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson2-version}</bundle>
     <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-core/${jackson2-version}</bundle>
     <bundle dependency='true'>mvn:com.fasterxml.jackson.core/jackson-databind/${jackson2-version}</bundle>
-    <bundle dependency='true'>mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${jackson2-version}</bundle>    
+    <bundle dependency='true'>mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${jackson2-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.2/${servicemix-specs-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xstream-java8/${xstream-bundle-version}</bundle>
-    <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/${xpp3-bundle-version}</bundle>    
+    <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xpp3/${xpp3-bundle-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.reflections/${reflections-bundle-version}</bundle>
-    <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-xjc/${jaxb-bundle-version}</bundle>    
-    <bundle>mvn:org.apache.camel/camel-jbpm/${project.version}</bundle>
+    <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-xjc/${jaxb-bundle-version}</bundle>
+    <bundle>mvn:org.apache.camel/camel-jbpm/${project.version}</bundle>
   </feature>
   <feature name='camel-jcache' version='${project.version}' resolver='(obr)' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
@@ -1731,10 +1745,10 @@
     <bundle dependency='true'>mvn:commons-io/commons-io/${commons-io-version}</bundle>
     <bundle dependency='true'>mvn:commons-collections/commons-collections/${commons-collections-version}</bundle>
     <bundle dependency='true'>mvn:org.optaplanner/optaplanner-core/${optaplanner-version}</bundle>
-    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-common/${optaplanner-version}</bundle>  
+    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-common/${optaplanner-version}</bundle>
     <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-jaxb/${optaplanner-version}</bundle>
     <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-jackson/${optaplanner-version}</bundle>
-    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-xstream/${optaplanner-version}</bundle>
+    <bundle dependency='true'>mvn:org.optaplanner/optaplanner-persistence-xstream/${optaplanner-version}</bundle>
     <bundle dependency='true'>mvn:org.kie.soup/kie-soup-maven-support/${kie-version}</bundle>
     <bundle dependency='true'>mvn:org.kie.soup/kie-soup-project-datamodel-api/${kie-version}</bundle>
     <bundle dependency='true'>mvn:org.kie.soup/kie-soup-project-datamodel-commons/${kie-version}</bundle>
@@ -1750,7 +1764,7 @@
     <bundle dependency='true'>mvn:com.google.protobuf/protobuf-java/${protobuf-version}</bundle>
     <bundle dependency='true'>mvn:com.google.guava/guava/${google-guava-version}</bundle>
     <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javax-inject/${javax-inject-bundle-version}</bundle>
-    <bundle>mvn:org.apache.camel/camel-optaplanner/${project.version}</bundle>    
+    <bundle>mvn:org.apache.camel/camel-optaplanner/${project.version}</bundle>
   </feature>
   <feature name='camel-openstack' version='${project.version}' resolver='(obr)' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/pom.xml b/platforms/spring-boot/components-starter/camel-google-sheets-starter/pom.xml
new file mode 100644
index 0000000..be43502
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>components-starter</artifactId>
+    <version>2.23.0-SNAPSHOT</version>
+  </parent>
+  <artifactId>camel-google-sheets-starter</artifactId>
+  <packaging>jar</packaging>
+  <name>Spring-Boot Starter :: Camel :: GoogleSheets</name>
+  <description>Spring-Boot Starter for Camel Component for GoogleSheets</description>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+      <version>${spring-boot-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-google-sheets</artifactId>
+      <version>${project.version}</version>
+      <!--START OF GENERATED CODE-->
+      <exclusions>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+      <!--END OF GENERATED CODE-->
+    </dependency>
+    <!--START OF GENERATED CODE-->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring-boot-starter</artifactId>
+    </dependency>
+    <!--END OF GENERATED CODE-->
+  </dependencies>
+</project>
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java
new file mode 100644
index 0000000..0f6f12f
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java
@@ -0,0 +1,129 @@
+/**
+ * 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.sheets.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.google.sheets.GoogleSheetsComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+        GoogleSheetsComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        GoogleSheetsComponentConfiguration.class})
+public class GoogleSheetsComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(GoogleSheetsComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private GoogleSheetsComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<GoogleSheetsComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.google-sheets");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "google-sheets-component")
+    @ConditionalOnMissingBean(GoogleSheetsComponent.class)
+    public GoogleSheetsComponent configureGoogleSheetsComponent()
+            throws Exception {
+        GoogleSheetsComponent component = new GoogleSheetsComponent();
+        component.setCamelContext(camelContext);
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(configuration, parameters, null,
+                false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    CamelPropertiesHelper.setCamelProperties(camelContext,
+                            nestedProperty, nestedParameters, false);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
+            }
+        }
+        CamelPropertiesHelper.setCamelProperties(camelContext, component,
+                parameters, false);
+        if (ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<GoogleSheetsComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.google-sheets.customizer",
+                                ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.google-sheets.customizer");
+                if (useCustomizer) {
+                    LOGGER.debug("Configure component {}, with customizer {}",
+                            component, customizer);
+                    customizer.customize(component);
+                }
+            }
+        }
+        return component;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java
new file mode 100644
index 0000000..5af2202
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java
@@ -0,0 +1,174 @@
+/**
+ * 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.sheets.springboot;
+
+import javax.annotation.Generated;
+import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * The google-sheets component provides access to Google Sheets.
+ *
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.google-sheets")
+public class GoogleSheetsComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
+
+    /**
+     * Whether to enable auto configuration of the google-sheets component. This
+     * is enabled by default.
+     */
+    private Boolean enabled;
+    /**
+     * To use the shared configuration
+     */
+    private GoogleSheetsConfigurationNestedConfiguration configuration;
+    /**
+     * To use the GoogleSheetsClientFactory as factory for creating the client.
+     * Will by default use BatchGoogleSheetsClientFactory. The option is a
+     * org.apache.camel.component.google.sheets.GoogleSheetsClientFactory type.
+     */
+    private String clientFactory;
+    /**
+     * Whether the component should resolve property placeholders on itself when
+     * starting. Only properties which are of String type can use property
+     * placeholders.
+     */
+    private Boolean resolvePropertyPlaceholders = true;
+
+    public GoogleSheetsConfigurationNestedConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(
+            GoogleSheetsConfigurationNestedConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public String getClientFactory() {
+        return clientFactory;
+    }
+
+    public void setClientFactory(String clientFactory) {
+        this.clientFactory = clientFactory;
+    }
+
+    public Boolean getResolvePropertyPlaceholders() {
+        return resolvePropertyPlaceholders;
+    }
+
+    public void setResolvePropertyPlaceholders(
+            Boolean resolvePropertyPlaceholders) {
+        this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+    }
+
+    public static class GoogleSheetsConfigurationNestedConfiguration {
+        public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.google.sheets.GoogleSheetsConfiguration.class;
+        /**
+         * What kind of operation to perform
+         */
+        private GoogleSheetsApiName apiName;
+        /**
+         * What sub operation to use for the selected operation
+         */
+        private String methodName;
+        /**
+         * Client ID of the sheets application
+         */
+        private String clientId;
+        /**
+         * Client secret of the sheets application
+         */
+        private String clientSecret;
+        /**
+         * OAuth 2 access token. This typically expires after an hour so
+         * refreshToken is recommended for long term usage.
+         */
+        private String accessToken;
+        /**
+         * OAuth 2 refresh token. Using this, the Google Sheets component can
+         * obtain a new accessToken whenever the current one expires - a
+         * necessity if the application is long-lived.
+         */
+        private String refreshToken;
+        /**
+         * Google Sheets application name. Example would be
+         * camel-google-sheets/1.0
+         */
+        private String applicationName;
+
+        public GoogleSheetsApiName getApiName() {
+            return apiName;
+        }
+
+        public void setApiName(GoogleSheetsApiName apiName) {
+            this.apiName = apiName;
+        }
+
+        public String getMethodName() {
+            return methodName;
+        }
+
+        public void setMethodName(String methodName) {
+            this.methodName = methodName;
+        }
+
+        public String getClientId() {
+            return clientId;
+        }
+
+        public void setClientId(String clientId) {
+            this.clientId = clientId;
+        }
+
+        public String getClientSecret() {
+            return clientSecret;
+        }
+
+        public void setClientSecret(String clientSecret) {
+            this.clientSecret = clientSecret;
+        }
+
+        public String getAccessToken() {
+            return accessToken;
+        }
+
+        public void setAccessToken(String accessToken) {
+            this.accessToken = accessToken;
+        }
+
+        public String getRefreshToken() {
+            return refreshToken;
+        }
+
+        public void setRefreshToken(String refreshToken) {
+            this.refreshToken = refreshToken;
+        }
+
+        public String getApplicationName() {
+            return applicationName;
+        }
+
+        public void setApplicationName(String applicationName) {
+            this.applicationName = applicationName;
+        }
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java
new file mode 100644
index 0000000..35fed67
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java
@@ -0,0 +1,130 @@
+/**
+ * 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.sheets.stream.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+        GoogleSheetsStreamComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        GoogleSheetsStreamComponentConfiguration.class})
+public class GoogleSheetsStreamComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(GoogleSheetsStreamComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private GoogleSheetsStreamComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<GoogleSheetsStreamComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.google-sheets-stream");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "google-sheets-stream-component")
+    @ConditionalOnMissingBean(GoogleSheetsStreamComponent.class)
+    public GoogleSheetsStreamComponent configureGoogleSheetsStreamComponent()
+            throws Exception {
+        GoogleSheetsStreamComponent component = new GoogleSheetsStreamComponent();
+        component.setCamelContext(camelContext);
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(configuration, parameters, null,
+                false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    CamelPropertiesHelper.setCamelProperties(camelContext,
+                            nestedProperty, nestedParameters, false);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
+            }
+        }
+        CamelPropertiesHelper.setCamelProperties(camelContext, component,
+                parameters, false);
+        if (ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<GoogleSheetsStreamComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator
+                                .evaluate(
+                                        applicationContext.getEnvironment(),
+                                        "camel.component.customizer",
+                                        "camel.component.google-sheets-stream.customizer",
+                                        ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator
+                                .evaluate(applicationContext.getEnvironment(),
+                                        "camel.component.customizer",
+                                        "camel.component.google-sheets-stream.customizer");
+                if (useCustomizer) {
+                    LOGGER.debug("Configure component {}, with customizer {}",
+                            component, customizer);
+                    customizer.customize(component);
+                }
+            }
+        }
+        return component;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java
new file mode 100644
index 0000000..8d0f1f1
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java
@@ -0,0 +1,252 @@
+/**
+ * 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.sheets.stream.springboot;
+
+import java.util.List;
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * The google-sheets component provides access to Google Sheets.
+ *
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.google-sheets-stream")
+public class GoogleSheetsStreamComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
+
+    /**
+     * Whether to enable auto configuration of the google-sheets-stream
+     * component. This is enabled by default.
+     */
+    private Boolean enabled;
+    /**
+     * To use the shared configuration
+     */
+    private GoogleSheetsStreamConfigurationNestedConfiguration configuration;
+    /**
+     * To use the GoogleSheetsClientFactory as factory for creating the client.
+     * Will by default use BatchGoogleSheetsClientFactory. The option is a
+     * org.apache.camel.component.google.sheets.GoogleSheetsClientFactory type.
+     */
+    private String clientFactory;
+    /**
+     * Whether the component should resolve property placeholders on itself when
+     * starting. Only properties which are of String type can use property
+     * placeholders.
+     */
+    private Boolean resolvePropertyPlaceholders = true;
+
+    public GoogleSheetsStreamConfigurationNestedConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(
+            GoogleSheetsStreamConfigurationNestedConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    public String getClientFactory() {
+        return clientFactory;
+    }
+
+    public void setClientFactory(String clientFactory) {
+        this.clientFactory = clientFactory;
+    }
+
+    public Boolean getResolvePropertyPlaceholders() {
+        return resolvePropertyPlaceholders;
+    }
+
+    public void setResolvePropertyPlaceholders(
+            Boolean resolvePropertyPlaceholders) {
+        this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+    }
+
+    public static class GoogleSheetsStreamConfigurationNestedConfiguration {
+        public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConfiguration.class;
+        /**
+         * Client ID of the sheets application
+         */
+        private String clientId;
+        /**
+         * Client secret of the sheets application
+         */
+        private String clientSecret;
+        /**
+         * OAuth 2 access token. This typically expires after an hour so
+         * refreshToken is recommended for long term usage.
+         */
+        private String accessToken;
+        /**
+         * OAuth 2 refresh token. Using this, the Google Calendar component can
+         * obtain a new accessToken whenever the current one expires - a
+         * necessity if the application is long-lived.
+         */
+        private String refreshToken;
+        /**
+         * Google sheets application name. Example would be
+         * camel-google-sheets/1.0
+         */
+        private String applicationName;
+        /**
+         * Specifies the level of permissions you want a sheets application to
+         * have to a user account. See
+         * https://developers.google.com/identity/protocols/googlescopes for
+         * more info.
+         */
+        private List scopes;
+        /**
+         * Sets the apiName.
+         */
+        private String apiName;
+        /**
+         * Specifies the spreadsheet identifier that is used to identify the
+         * target to obtain.
+         */
+        private String spreadsheetId;
+        /**
+         * Specify the maximum number of returned results. This will limit the
+         * number of rows in a returned value range data set or the number of
+         * returned value ranges in a batch request.
+         */
+        private Integer maxResults = 10;
+        /**
+         * Specifies the range of rows and columns in a sheet to get data from.
+         */
+        private String range;
+        /**
+         * Specifies the major dimension that results should use..
+         */
+        private String majorDimension = "ROWS";
+        /**
+         * Determines how values should be rendered in the output.
+         */
+        private String valueRenderOption = "FORMATTED_VALUE";
+        /**
+         * True if grid data should be returned.
+         */
+        private Boolean includeGridData = false;
+
+        public String getClientId() {
+            return clientId;
+        }
+
+        public void setClientId(String clientId) {
+            this.clientId = clientId;
+        }
+
+        public String getClientSecret() {
+            return clientSecret;
+        }
+
+        public void setClientSecret(String clientSecret) {
+            this.clientSecret = clientSecret;
+        }
+
+        public String getAccessToken() {
+            return accessToken;
+        }
+
+        public void setAccessToken(String accessToken) {
+            this.accessToken = accessToken;
+        }
+
+        public String getRefreshToken() {
+            return refreshToken;
+        }
+
+        public void setRefreshToken(String refreshToken) {
+            this.refreshToken = refreshToken;
+        }
+
+        public String getApplicationName() {
+            return applicationName;
+        }
+
+        public void setApplicationName(String applicationName) {
+            this.applicationName = applicationName;
+        }
+
+        public List getScopes() {
+            return scopes;
+        }
+
+        public void setScopes(List scopes) {
+            this.scopes = scopes;
+        }
+
+        public String getApiName() {
+            return apiName;
+        }
+
+        public void setApiName(String apiName) {
+            this.apiName = apiName;
+        }
+
+        public String getSpreadsheetId() {
+            return spreadsheetId;
+        }
+
+        public void setSpreadsheetId(String spreadsheetId) {
+            this.spreadsheetId = spreadsheetId;
+        }
+
+        public Integer getMaxResults() {
+            return maxResults;
+        }
+
+        public void setMaxResults(Integer maxResults) {
+            this.maxResults = maxResults;
+        }
+
+        public String getRange() {
+            return range;
+        }
+
+        public void setRange(String range) {
+            this.range = range;
+        }
+
+        public String getMajorDimension() {
+            return majorDimension;
+        }
+
+        public void setMajorDimension(String majorDimension) {
+            this.majorDimension = majorDimension;
+        }
+
+        public String getValueRenderOption() {
+            return valueRenderOption;
+        }
+
+        public void setValueRenderOption(String valueRenderOption) {
+            this.valueRenderOption = valueRenderOption;
+        }
+
+        public Boolean getIncludeGridData() {
+            return includeGridData;
+        }
+
+        public void setIncludeGridData(Boolean includeGridData) {
+            this.includeGridData = includeGridData;
+        }
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/LICENSE.txt b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/NOTICE.txt b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..7a23c23
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## 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.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.google.sheets.springboot.GoogleSheetsComponentAutoConfiguration,\
+org.apache.camel.component.google.sheets.stream.springboot.GoogleSheetsStreamComponentAutoConfiguration
+
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.provides b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.provides
new file mode 100644
index 0000000..ec60fe4
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/resources/META-INF/spring.provides
@@ -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.
+## ---------------------------------------------------------------------------
+provides: camel-google-sheets
diff --git a/platforms/spring-boot/components-starter/pom.xml b/platforms/spring-boot/components-starter/pom.xml
index f9a1a82..16d53f6 100644
--- a/platforms/spring-boot/components-starter/pom.xml
+++ b/platforms/spring-boot/components-starter/pom.xml
@@ -172,6 +172,7 @@
     <module>camel-google-drive-starter</module>
     <module>camel-google-mail-starter</module>
     <module>camel-google-pubsub-starter</module>
+    <module>camel-google-sheets-starter</module>
     <module>camel-gora-starter</module>
     <module>camel-grape-starter</module>
     <module>camel-groovy-starter</module>
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index 2ac7b3c..ae6f5b5 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -1131,6 +1131,16 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-sheets</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-google-sheets-starter</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-gora</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelGoogleSheetsTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelGoogleSheetsTest.java
new file mode 100644
index 0000000..682697c
--- /dev/null
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelGoogleSheetsTest.java
@@ -0,0 +1,33 @@
+/**
+ * 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.itest.karaf;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+
+@RunWith(PaxExam.class)
+public class CamelGoogleSheetsTest extends BaseKarafTest {
+
+    public static final String COMPONENT = extractName(CamelGoogleSheetsTest.class);
+
+    @Test
+    public void test() throws Exception {
+        testComponent(COMPONENT);
+    }
+
+}

Reply | Threaded
Open this post in threaded view
|

[camel] 12/43: Fixed backport of google-sheet from 2.x and regen

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 814098d3af80324556458265fe4c287fa162b27a
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Wed Dec 5 09:43:17 2018 +0100

    Fixed backport of google-sheet from 2.x and regen
---
 components/camel-google-sheets/pom.xml                              | 2 +-
 .../apache/camel/component/google/sheets/GoogleSheetsComponent.java | 3 ++-
 .../apache/camel/component/google/sheets/GoogleSheetsConsumer.java  | 4 ++--
 .../apache/camel/component/google/sheets/GoogleSheetsEndpoint.java  | 6 +++---
 .../apache/camel/component/google/sheets/GoogleSheetsProducer.java  | 6 +++---
 .../google/sheets/internal/GoogleSheetsPropertiesHelper.java        | 2 +-
 .../component/google/sheets/stream/GoogleSheetsStreamComponent.java | 2 +-
 .../component/google/sheets/stream/GoogleSheetsStreamConsumer.java  | 2 +-
 .../component/google/sheets/stream/GoogleSheetsStreamEndpoint.java  | 2 +-
 .../component/google/sheets/AbstractGoogleSheetsTestSupport.java    | 3 ++-
 .../google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java | 2 +-
 .../google/sheets/stream/SheetsStreamConsumerIntegrationTest.java   | 2 +-
 .../sheets/springboot/GoogleSheetsComponentAutoConfiguration.java   | 2 +-
 .../sheets/springboot/GoogleSheetsComponentConfiguration.java       | 2 +-
 .../springboot/GoogleSheetsStreamComponentAutoConfiguration.java    | 2 +-
 .../stream/springboot/GoogleSheetsStreamComponentConfiguration.java | 2 +-
 16 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/components/camel-google-sheets/pom.xml b/components/camel-google-sheets/pom.xml
index da26bd6..eb57fcf 100644
--- a/components/camel-google-sheets/pom.xml
+++ b/components/camel-google-sheets/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>org.apache.camel</groupId>
     <artifactId>components</artifactId>
-    <version>2.23.0-SNAPSHOT</version>
+    <version>3.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>camel-google-sheets</artifactId>
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
index f5764b1..bc4d568 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsComponent.java
@@ -22,7 +22,8 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.util.component.AbstractApiComponent;
+import org.apache.camel.support.component.AbstractApiComponent;
+
 
 /**
  * Represents the component that manages {@link GoogleSheetsEndpoint}.
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
index 70255e7..b1e5c9b 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
@@ -21,8 +21,8 @@ import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
-import org.apache.camel.util.IntrospectionSupport;
-import org.apache.camel.util.component.AbstractApiConsumer;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.support.component.AbstractApiConsumer;
 
 import java.util.Map;
 import java.util.Map.Entry;
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
index ac21617..4b245ac 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
@@ -26,9 +26,9 @@ import org.apache.camel.component.google.sheets.internal.GoogleSheetsConstants;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsPropertiesHelper;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
-import org.apache.camel.util.component.AbstractApiEndpoint;
-import org.apache.camel.util.component.ApiMethod;
-import org.apache.camel.util.component.ApiMethodPropertiesHelper;
+import org.apache.camel.support.component.AbstractApiEndpoint;
+import org.apache.camel.support.component.ApiMethod;
+import org.apache.camel.support.component.ApiMethodPropertiesHelper;
 
 import java.util.Map;
 
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
index 7fec2fc..024fe25 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
@@ -21,9 +21,9 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsPropertiesHelper;
-import org.apache.camel.util.IntrospectionSupport;
-import org.apache.camel.util.component.AbstractApiProducer;
-import org.apache.camel.util.component.ApiMethod;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.support.component.AbstractApiProducer;
+import org.apache.camel.support.component.ApiMethod;
 
 import java.util.Map;
 import java.util.Map.Entry;
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
index 48c345e..caa8c40 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
@@ -17,7 +17,7 @@
 package org.apache.camel.component.google.sheets.internal;
 
 import org.apache.camel.component.google.sheets.GoogleSheetsConfiguration;
-import org.apache.camel.util.component.ApiMethodPropertiesHelper;
+import org.apache.camel.support.component.ApiMethodPropertiesHelper;
 
 /**
  * Singleton {@link ApiMethodPropertiesHelper} for GoogleSheets component.
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
index 693d64a..08dade6 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
@@ -22,8 +22,8 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.component.google.sheets.BatchGoogleSheetsClientFactory;
 import org.apache.camel.component.google.sheets.GoogleSheetsClientFactory;
 import org.apache.camel.component.google.sheets.GoogleSheetsVerifierExtension;
-import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.spi.Metadata;
+import org.apache.camel.support.DefaultComponent;
 
 import java.util.Map;
 
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
index a22b3e5..7136a50 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
@@ -22,7 +22,7 @@ import com.google.api.services.sheets.v4.model.Spreadsheet;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.impl.ScheduledBatchPollingConsumer;
+import org.apache.camel.support.ScheduledBatchPollingConsumer;
 import org.apache.camel.util.CastUtils;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
index 648be83..c8c6e71 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
@@ -21,9 +21,9 @@ import com.google.api.services.sheets.v4.model.Spreadsheet;
 import com.google.api.services.sheets.v4.model.ValueRange;
 import org.apache.camel.*;
 import org.apache.camel.component.google.sheets.GoogleSheetsClientFactory;
-import org.apache.camel.impl.ScheduledPollEndpoint;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
+import org.apache.camel.support.ScheduledPollEndpoint;
 
 /**
  * The google-sheets component provides access to Google Sheets.
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
index afb01a7..0f9c9a4 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
@@ -23,8 +23,9 @@ import com.google.api.services.sheets.v4.model.SpreadsheetProperties;
 import com.google.api.services.sheets.v4.model.ValueRange;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelExecutionException;
+import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.camel.util.IntrospectionSupport;
+
 
 import java.io.IOException;
 import java.util.Arrays;
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
index 4767a0c..8573839 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/AbstractGoogleSheetsStreamTestSupport.java
@@ -18,7 +18,7 @@ package org.apache.camel.component.google.sheets.stream;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.google.sheets.AbstractGoogleSheetsTestSupport;
-import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.support.IntrospectionSupport;
 
 /**
  * Abstract base class for GoogleSheets Integration tests generated by Camel API
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
index aa7c284..36dd79b 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/stream/SheetsStreamConsumerIntegrationTest.java
@@ -37,7 +37,7 @@ public class SheetsStreamConsumerIntegrationTest extends AbstractGoogleSheetsStr
         Spreadsheet testSheet = getSpreadsheetWithTestData();
 
         context().addRoutes(createGoogleStreamRouteBuilder(testSheet.getSpreadsheetId()));
-        context().startRoute("google-stream-test");
+        context().start();
 
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java
index 0f6f12f..54cc6fe 100644
--- a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentAutoConfiguration.java
@@ -30,7 +30,7 @@ import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
 import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
 import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
-import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java
index 5af2202..2f19c56 100644
--- a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/springboot/GoogleSheetsComponentConfiguration.java
@@ -23,7 +23,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
  * The google-sheets component provides access to Google Sheets.
- *
+ *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java
index 35fed67..fb6a03f 100644
--- a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentAutoConfiguration.java
@@ -30,7 +30,7 @@ import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
 import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
 import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
-import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java
index 8d0f1f1..3dbff38 100644
--- a/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-google-sheets-starter/src/main/java/org/apache/camel/component/google/sheets/stream/springboot/GoogleSheetsStreamComponentConfiguration.java
@@ -23,7 +23,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
  * The google-sheets component provides access to Google Sheets.
- *
+ *
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")

Reply | Threaded
Open this post in threaded view
|

[camel] 13/43: CAMEL-12950 - Fixed CS

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5de6927904c9fb60672e159e2888a66026eb1a9a
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Thu Nov 22 13:27:24 2018 +0100

    CAMEL-12950 - Fixed CS
---
 .../google/sheets/GoogleSheetsConsumer.java        |  8 ++++--
 .../google/sheets/GoogleSheetsEndpoint.java        | 32 +++++++++-------------
 .../google/sheets/GoogleSheetsProducer.java        |  8 +++---
 .../sheets/GoogleSheetsVerifierExtension.java      | 17 +++++-------
 .../sheets/internal/GoogleSheetsConstants.java     |  2 +-
 .../sheets/stream/GoogleSheetsStreamComponent.java |  4 +--
 .../stream/GoogleSheetsStreamConfiguration.java    |  6 ++--
 .../sheets/stream/GoogleSheetsStreamConsumer.java  | 12 ++++----
 .../sheets/stream/GoogleSheetsStreamEndpoint.java  |  7 ++++-
 .../sheets/AbstractGoogleSheetsTestSupport.java    | 16 +++++------
 .../sheets/GoogleSheetsVerifierExtensionTest.java  |  8 +++---
 .../sheets/SheetsSpreadsheetsIntegrationTest.java  | 18 ++++++++----
 .../SheetsSpreadsheetsValuesIntegrationTest.java   | 16 +++++++++--
 13 files changed, 84 insertions(+), 70 deletions(-)

diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
index b1e5c9b..1517cca 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsConsumer.java
@@ -16,6 +16,11 @@
  */
 package org.apache.camel.component.google.sheets;
 
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+
 import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
@@ -24,9 +29,6 @@ import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiName;
 import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.support.component.AbstractApiConsumer;
 
-import java.util.Map;
-import java.util.Map.Entry;
-
 /**
  * The GoogleSheets consumer.
  */
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
index 4b245ac..38a0eaa 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsEndpoint.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.google.sheets;
 
+import java.util.Map;
+
 import com.google.api.services.sheets.v4.Sheets;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
@@ -30,18 +32,11 @@ import org.apache.camel.support.component.AbstractApiEndpoint;
 import org.apache.camel.support.component.ApiMethod;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
 
-import java.util.Map;
-
 /**
  * The google-sheets component provides access to Google Sheets.
  */
-@UriEndpoint(firstVersion = "2.23.0",
-        scheme = "google-sheets",
-        title = "Google Sheets",
-        syntax = "google-sheets:apiName/methodName",
-        consumerClass = GoogleSheetsConsumer.class,
-        consumerPrefix = "consumer",
-        label = "api,cloud,sheets")
+@UriEndpoint(firstVersion = "2.23.0", scheme = "google-sheets", title = "Google Sheets",
+             syntax = "google-sheets:apiName/methodName", consumerClass = GoogleSheetsConsumer.class, consumerPrefix = "consumer", label = "api,cloud,sheets")
 public class GoogleSheetsEndpoint extends AbstractApiEndpoint<GoogleSheetsApiName, GoogleSheetsConfiguration> {
 
     @UriParam
@@ -49,8 +44,7 @@ public class GoogleSheetsEndpoint extends AbstractApiEndpoint<GoogleSheetsApiNam
 
     private Object apiProxy;
 
-    public GoogleSheetsEndpoint(String uri, GoogleSheetsComponent component,
-                                GoogleSheetsApiName apiName, String methodName, GoogleSheetsConfiguration endpointConfiguration) {
+    public GoogleSheetsEndpoint(String uri, GoogleSheetsComponent component, GoogleSheetsApiName apiName, String methodName, GoogleSheetsConfiguration endpointConfiguration) {
         super(uri, component, apiName, methodName, GoogleSheetsApiCollection.getCollection().getHelper(apiName), endpointConfiguration);
         this.configuration = endpointConfiguration;
     }
@@ -85,14 +79,14 @@ public class GoogleSheetsEndpoint extends AbstractApiEndpoint<GoogleSheetsApiNam
     @Override
     protected void afterConfigureProperties() {
         switch (apiName) {
-            case SPREADSHEETS:
-                apiProxy = getClient().spreadsheets();
-                break;
-            case DATA:
-                apiProxy = getClient().spreadsheets().values();
-                break;
-            default:
-                throw new IllegalArgumentException("Invalid API name " + apiName);
+        case SPREADSHEETS:
+            apiProxy = getClient().spreadsheets();
+            break;
+        case DATA:
+            apiProxy = getClient().spreadsheets().values();
+            break;
+        default:
+            throw new IllegalArgumentException("Invalid API name " + apiName);
         }
     }
 
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
index 024fe25..017958e 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsProducer.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.google.sheets;
 
+import java.util.Map;
+import java.util.Map.Entry;
+
 import com.google.api.client.googleapis.services.AbstractGoogleClientRequest;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.TypeConverter;
@@ -25,9 +28,6 @@ import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.support.component.AbstractApiProducer;
 import org.apache.camel.support.component.ApiMethod;
 
-import java.util.Map;
-import java.util.Map.Entry;
-
 /**
  * The GoogleSheets producer.
  */
@@ -39,7 +39,7 @@ public class GoogleSheetsProducer extends AbstractApiProducer<GoogleSheetsApiNam
 
     @Override
     protected Object doInvokeMethod(ApiMethod method, Map<String, Object> properties) throws RuntimeCamelException {
-        AbstractGoogleClientRequest<?> request = (AbstractGoogleClientRequest) super.doInvokeMethod(method, properties);
+        AbstractGoogleClientRequest<?> request = (AbstractGoogleClientRequest)super.doInvokeMethod(method, properties);
         try {
             TypeConverter typeConverter = getEndpoint().getCamelContext().getTypeConverter();
             for (Entry<String, Object> p : properties.entrySet()) {
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java
index a531908..26100cf 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtension.java
@@ -16,6 +16,10 @@
  */
 package org.apache.camel.component.google.sheets;
 
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+
 import com.google.api.services.sheets.v4.Sheets;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
@@ -23,10 +27,6 @@ import org.apache.camel.component.extension.verifier.ResultBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
 import org.apache.camel.component.extension.verifier.ResultErrorHelper;
 
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-
 public class GoogleSheetsVerifierExtension extends DefaultComponentVerifierExtension {
 
     public GoogleSheetsVerifierExtension(String defaultScheme) {
@@ -61,12 +61,9 @@ public class GoogleSheetsVerifierExtension extends DefaultComponentVerifierExten
         try {
             GoogleSheetsConfiguration configuration = setProperties(new GoogleSheetsConfiguration(), parameters);
             GoogleSheetsClientFactory clientFactory = new BatchGoogleSheetsClientFactory();
-            Sheets client = clientFactory.makeClient(configuration.getClientId(), configuration.getClientSecret(),
-                    configuration.getApplicationName(),
-                    configuration.getRefreshToken(), configuration.getAccessToken());
-            client.spreadsheets().get(Optional.ofNullable(parameters.get("spreadsheetId"))
-                                              .map(Object::toString)
-                                              .orElse(UUID.randomUUID().toString())).execute();
+            Sheets client = clientFactory.makeClient(configuration.getClientId(), configuration.getClientSecret(), configuration.getApplicationName(),
+                                                     configuration.getRefreshToken(), configuration.getAccessToken());
+            client.spreadsheets().get(Optional.ofNullable(parameters.get("spreadsheetId")).map(Object::toString).orElse(UUID.randomUUID().toString())).execute();
         } catch (Exception e) {
             ResultErrorBuilder errorBuilder = ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, e.getMessage())
                 .detail("google_sheets_exception_message", e.getMessage()).detail(VerificationError.ExceptionAttribute.EXCEPTION_CLASS, e.getClass().getName())
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java
index a14a251..feb9141 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsConstants.java
@@ -29,5 +29,5 @@ public final class GoogleSheetsConstants {
     /**
      * Prevent instantiation.
      */
-    private GoogleSheetsConstants() {}
+    private GoogleSheetsConstants() { }
 }
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
index 08dade6..3eeb3fe 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamComponent.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.google.sheets.stream;
 
+import java.util.Map;
+
 import com.google.api.services.sheets.v4.Sheets;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -25,8 +27,6 @@ import org.apache.camel.component.google.sheets.GoogleSheetsVerifierExtension;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.support.DefaultComponent;
 
-import java.util.Map;
-
 /**
  * Represents the component that manages {@link GoogleSheetsStreamEndpoint}.
  */
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java
index 3a88ffb..e72446c 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConfiguration.java
@@ -16,15 +16,15 @@
  */
 package org.apache.camel.component.google.sheets.stream;
 
+import java.util.Collections;
+import java.util.List;
+
 import com.google.api.services.sheets.v4.SheetsScopes;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Component configuration for GoogleSheets stream component.
  */
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
index 7136a50..c59618a 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConsumer.java
@@ -16,6 +16,12 @@
  */
 package org.apache.camel.component.google.sheets.stream;
 
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Queue;
+import java.util.stream.Collectors;
+
 import com.google.api.services.sheets.v4.Sheets;
 import com.google.api.services.sheets.v4.model.BatchGetValuesResponse;
 import com.google.api.services.sheets.v4.model.Spreadsheet;
@@ -28,12 +34,6 @@ import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayDeque;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Queue;
-import java.util.stream.Collectors;
-
 /**
  * The GoogleSheets consumer.
  */
diff --git a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
index c8c6e71..e9bc6e4 100644
--- a/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
+++ b/components/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
@@ -19,7 +19,12 @@ package org.apache.camel.component.google.sheets.stream;
 import com.google.api.services.sheets.v4.Sheets;
 import com.google.api.services.sheets.v4.model.Spreadsheet;
 import com.google.api.services.sheets.v4.model.ValueRange;
-import org.apache.camel.*;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
 import org.apache.camel.component.google.sheets.GoogleSheetsClientFactory;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
index 0f9c9a4..0542d3d 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/AbstractGoogleSheetsTestSupport.java
@@ -16,6 +16,14 @@
  */
 package org.apache.camel.component.google.sheets;
 
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Random;
+
 import com.google.api.services.sheets.v4.model.Sheet;
 import com.google.api.services.sheets.v4.model.SheetProperties;
 import com.google.api.services.sheets.v4.model.Spreadsheet;
@@ -27,14 +35,6 @@ import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.test.junit4.CamelTestSupport;
 
 
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Random;
-
 /**
  * Abstract base class for GoogleSheets Integration tests generated by Camel
  * API component maven plugin.
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java
index a4504a8..9af19c7 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/GoogleSheetsVerifierExtensionTest.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.component.google.sheets;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
 import org.apache.camel.Component;
 import org.apache.camel.component.extension.ComponentVerifierExtension;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
 public class GoogleSheetsVerifierExtensionTest extends CamelTestSupport {
 
     @Override
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java
index 680c08c..800d023 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsIntegrationTest.java
@@ -16,7 +16,18 @@
  */
 package org.apache.camel.component.google.sheets;
 
-import com.google.api.services.sheets.v4.model.*;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest;
+import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetResponse;
+import com.google.api.services.sheets.v4.model.Request;
+import com.google.api.services.sheets.v4.model.Spreadsheet;
+import com.google.api.services.sheets.v4.model.SpreadsheetProperties;
+import com.google.api.services.sheets.v4.model.UpdateSpreadsheetPropertiesRequest;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
 import org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsApiMethod;
@@ -24,11 +35,6 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
 /**
  * Test class for {@link com.google.api.services.sheets.v4.Sheets.Spreadsheets} APIs.
  */
diff --git a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java
index 0e00a0c..0075f7a 100644
--- a/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java
+++ b/components/camel-google-sheets/src/test/java/org/apache/camel/component/google/sheets/SheetsSpreadsheetsValuesIntegrationTest.java
@@ -16,7 +16,19 @@
  */
 package org.apache.camel.component.google.sheets;
 
-import com.google.api.services.sheets.v4.model.*;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.api.services.sheets.v4.model.AppendValuesResponse;
+import com.google.api.services.sheets.v4.model.ClearValuesRequest;
+import com.google.api.services.sheets.v4.model.ClearValuesResponse;
+import com.google.api.services.sheets.v4.model.Spreadsheet;
+import com.google.api.services.sheets.v4.model.UpdateValuesResponse;
+import com.google.api.services.sheets.v4.model.ValueRange;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.google.sheets.internal.GoogleSheetsApiCollection;
 import org.apache.camel.component.google.sheets.internal.SheetsSpreadsheetsValuesApiMethod;
@@ -24,8 +36,6 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.*;
-
 /**
  * Test class for {@link com.google.api.services.sheets.v4.Sheets.Spreadsheets.Values} APIs.
  */

Reply | Threaded
Open this post in threaded view
|

[camel] 14/43: Upgrade Reactor to version 3.2.3.RELEASE

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 104ee3925db9584c399b0f21e054770bdfb9de3d
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Fri Nov 23 08:58:11 2018 +0100

    Upgrade Reactor to version 3.2.3.RELEASE
---
 parent/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index 85313ae..7fd5af4 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -579,7 +579,7 @@
     <quickfixj-version>2.1.0</quickfixj-version>
     <rabbitmq-amqp-client-version>5.5.0</rabbitmq-amqp-client-version>
     <reactive-streams-version>1.0.2</reactive-streams-version>
-    <reactor-version>3.2.2.RELEASE</reactor-version>
+    <reactor-version>3.2.3.RELEASE</reactor-version>
     <reflections-version>0.9.11</reflections-version>
     <reflections-bundle-version>0.9.11_1</reflections-bundle-version>
     <regexp-bundle-version>1.4_1</regexp-bundle-version>

Reply | Threaded
Open this post in threaded view
|

[camel] 16/43: Upgrade Json Schema Validator to version 0.1.24

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 218ea27086b13fc1d6bb06d6fe871269d0a76a4c
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Fri Nov 23 10:38:07 2018 +0100

    Upgrade Json Schema Validator to version 0.1.24
---
 parent/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index 7fd5af4..a32a386 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -522,7 +522,7 @@
     <netty3-version>3.10.6.Final</netty3-version>
     <netty-version>4.1.31.Final</netty-version>
     <netty40-version>4.0.56.Final</netty40-version>
-    <networknt-json-schema-validator-version>0.1.23</networknt-json-schema-validator-version>
+    <networknt-json-schema-validator-version>0.1.24</networknt-json-schema-validator-version>
     <noggit-bundle-version>0.5_1</noggit-bundle-version>
     <objenesis-version>2.6</objenesis-version>
     <!-- should be in-sync with deltaspike -->

Reply | Threaded
Open this post in threaded view
|

[camel] 15/43: CAMEL-12950 - Added camel-google-sheets Spring Boot Integration test

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3d058bb1962e28a0f6537e35100dcdd4ebe320bb
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Fri Nov 23 09:09:59 2018 +0100

    CAMEL-12950 - Added camel-google-sheets Spring Boot Integration test
---
 .../itest/springboot/CamelGoogleSheetsTest.java    | 50 ++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelGoogleSheetsTest.java b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelGoogleSheetsTest.java
new file mode 100644
index 0000000..61c4d4c
--- /dev/null
+++ b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelGoogleSheetsTest.java
@@ -0,0 +1,50 @@
+/**
+ * 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.itest.springboot;
+
+import org.apache.camel.itest.springboot.util.ArquillianPackager;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+@RunWith(Arquillian.class)
+public class CamelGoogleSheetsTest extends AbstractSpringBootTestSupport {
+
+    @Deployment
+    public static Archive<?> createSpringBootPackage() throws Exception {
+        return ArquillianPackager.springBootPackage(createTestConfig());
+    }
+
+    public static ITestConfig createTestConfig() {
+        return new ITestConfigBuilder()
+                .module(inferModuleName(CamelGoogleSheetsTest.class))
+                .unitTestExpectedNumber(0)
+                .build();
+    }
+
+    @Test
+    public void componentTests() throws Exception {
+        this.runComponentTest(config, "google-sheets");
+        this.runComponentTest(config, "google-sheets-stream");
+        this.runModuleUnitTestsIfEnabled(config);
+    }
+
+
+}

Reply | Threaded
Open this post in threaded view
|

[camel] 22/43: dropping asm to prepare coming spifly upgrade

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit df588a8a8969948f97165620fc23c3e13ccd982c
Author: Romain Manni-Bucau <[hidden email]>
AuthorDate: Fri Nov 23 16:25:19 2018 +0100

    dropping asm to prepare coming spifly upgrade
---
 platforms/karaf/features/src/main/resources/features.xml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml
index 722a630..cd6fe58 100644
--- a/platforms/karaf/features/src/main/resources/features.xml
+++ b/platforms/karaf/features/src/main/resources/features.xml
@@ -1277,9 +1277,6 @@
   </feature>
   <feature name='camel-johnzon' version='${project.version}' resolver='(obr)' start-level='50'>
     <feature version='${project.version}'>camel-core</feature>
-    <bundle dependency='true'>mvn:org.ow2.asm/asm/${asm-version}</bundle>
-    <bundle dependency='true'>mvn:org.ow2.asm/asm-commons/${asm-version}</bundle>
-    <bundle dependency='true'>mvn:org.ow2.asm/asm-tree/${asm-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.aries.spifly/org.apache.aries.spifly.dynamic.bundle/${aries-spifly-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.johnzon/johnzon-core/${johnzon-version}</bundle>
     <bundle dependency='true'>mvn:org.apache.johnzon/johnzon-mapper/${johnzon-version}</bundle>

Reply | Threaded
Open this post in threaded view
|

[camel] 17/43: Camel-NSQ: Fixed the NSQ component description and first version

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 867aeb74e8d6330caac27eec25f37977b4e4c73d
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Fri Nov 23 12:01:53 2018 +0100

    Camel-NSQ: Fixed the NSQ component description and first version
---
 .../src/main/java/org/apache/camel/component/nsq/NsqEndpoint.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqEndpoint.java b/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqEndpoint.java
index 2410249..e047c55 100644
--- a/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqEndpoint.java
+++ b/components/camel-nsq/src/main/java/org/apache/camel/component/nsq/NsqEndpoint.java
@@ -35,7 +35,7 @@ import org.apache.camel.util.ObjectHelper;
 /**
  * Represents a nsq endpoint.
  */
-@UriEndpoint(firstVersion = "2.22.0", scheme = "nsq", title = "nsq", syntax = "nsq:lookupServer", consumerClass = NsqConsumer.class, label = "messaging")
+@UriEndpoint(firstVersion = "2.23.0", scheme = "nsq", title = "NSQ", syntax = "nsq:lookupServer", consumerClass = NsqConsumer.class, label = "messaging")
 public class NsqEndpoint extends DefaultEndpoint {
 
     @UriParam

Reply | Threaded
Open this post in threaded view
|

[camel] 19/43: Upgrade Brave to version 5.5.1

acosentino
In reply to this post by acosentino
This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch sandbox/camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8b4aba1afa47a9ceeec936f59c1e624affc0eb71
Author: Andrea Cosentino <[hidden email]>
AuthorDate: Fri Nov 23 14:54:54 2018 +0100

    Upgrade Brave to version 5.5.1
---
 parent/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index 67b2e690..e1cd9b9 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -98,7 +98,7 @@
     <boxjavalibv2.version>3.2.1</boxjavalibv2.version>
     <box-java-sdk-version>2.10.0</box-java-sdk-version>
     <braintree-gateway-version>2.87.0</braintree-gateway-version>
-    <brave-zipkin-version>5.5.0</brave-zipkin-version>
+    <brave-zipkin-version>5.5.1</brave-zipkin-version>
     <build-helper-maven-plugin-version>1.12</build-helper-maven-plugin-version>
     <c3p0-version>0.9.5.2</c3p0-version>
     <c3p0-bundle-version>0.9.5.2_2</c3p0-bundle-version>

123