[[google-drive-component]]
= Google Drive Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-google-drive/src/main/docs/google-drive-component.adoc
:docTitle: Google Drive
:artifactId: camel-google-drive
:description: Manage files in Google Drive.
:since: 2.14
:supportLevel: Stable
:component-header: Both producer and consumer are supported
//Manually maintained attributes
:group: Google

*Since Camel {since}*

*{component-header}*

The Google Drive component provides access to the
http://drive.google.com[Google Drive file storage service] via the
https://developers.google.com/drive/v2/reference[Google Drive Web APIs].

Google Drive 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/drive/web/auth/web-server[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-drive</artifactId>
            <!-- use the same version as your Camel core version -->
            <version>x.x.x</version>
    </dependency>
        
-------------------------------------------------------

== URI Format

'''''

The GoogleDrive Component uses the following URI format:

---------------------------------------------------------
        google-drive://endpoint-prefix/endpoint?[options]
    
---------------------------------------------------------

Endpoint prefix can be one of:

* drive-about
* drive-apps
* drive-changes
* drive-channels
* drive-children
* drive-comments
* drive-files
* drive-parents
* drive-permissions
* drive-properties
* drive-realtime
* drive-replies
* drive-revisions

== GoogleDriveComponent





// component options: START
The Google Drive component supports 11 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *applicationName* (common) | Google drive application name. Example would be camel-google-drive/1.0 |  | String
| *clientId* (common) | Client ID of the drive application |  | String
| *configuration* (common) | To use the shared configuration |  | GoogleDriveConfiguration
| *scopes* (common) | Specifies the level of permissions you want a drive application to have to a user account. See \https://developers.google.com/drive/web/scopes for more info. |  | List
| *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
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *clientFactory* (advanced) | To use the GoogleCalendarClientFactory as factory for creating the client. Will by default use BatchGoogleDriveClientFactory |  | GoogleDriveClientFactory
| *accessToken* (security) | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
| *clientSecret* (security) | Client secret of the drive application |  | String
| *refreshToken* (security) | 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
|===
// component options: END








// endpoint options: START
The Google Drive endpoint is configured using URI syntax:

----
google-drive: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. The value can be one of: drive-about, drive-apps, drive-changes, drive-channels, drive-children, drive-comments, drive-files, drive-parents, drive-permissions, drive-properties, drive-realtime, drive-replies, drive-revisions |  | GoogleDriveApiName
| *methodName* | *Required* What sub operation to use for the selected operation. The value can be one of: copy, delete, get, getIdForEmail, insert, list, patch, stop, touch, trash, untrash, update, watch |  | String
|===


=== Query Parameters (30 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *applicationName* (common) | Google drive application name. Example would be camel-google-drive/1.0 |  | String
| *clientFactory* (common) | To use the GoogleCalendarClientFactory as factory for creating the client. Will by default use BatchGoogleDriveClientFactory |  | GoogleDriveClientFactory
| *clientId* (common) | Client ID of the drive application |  | String
| *inBody* (common) | Sets the name of a parameter to be passed in the exchange In Body |  | String
| *scopes* (common) | Specifies the level of permissions you want a drive application to have to a user account. See \https://developers.google.com/drive/web/scopes for more info. |  | List
| *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
| *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. The value can be one of: InOnly, InOut, InOptionalOut |  | 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. |  | PollingConsumerPollStrategy
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *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. | 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. | 1000 | long
| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | 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. The value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | 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. |  | ScheduledExecutorService
| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. The value can be one of: none, spring, quartz | none | String
| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. The value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
| *accessToken* (security) | OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage. |  | String
| *clientSecret* (security) | Client secret of the drive application |  | String
| *refreshToken* (security) | 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
|===
// endpoint 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 `CamelGoogleDrive.<option>`. Note that the `inBody` option
overrides message header, i.e. the endpoint option `inBody=option` would
override a `CamelGoogleDrive.option` header.

For more information on the endpoints and options see API documentation
at: https://developers.google.com/drive/v2/reference/[https://developers.google.com/drive/v2/reference/]

== 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] 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 `CamelGoogleDrive.` prefix.

== Message Body

All result message bodies utilize objects provided by the underlying
APIs used by the GoogleDriveComponent. 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.     

include::camel-spring-boot::page$google-drive-starter.adoc[]
