[[google-calendar-component]]
= Google Calendar Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-google-calendar/src/main/docs/google-calendar-component.adoc
:docTitle: Google Calendar
:artifactId: camel-google-calendar
:description: Perform various operations on a Google Calendar.
:since: 2.15
:supportLevel: Stable
:component-header: Both producer and consumer are supported
//Manually maintained attributes
:group: Google

*Since Camel {since}*

*{component-header}*

The Google Calendar component provides access
to http://google.com/calendar[Google Calendar] via
the https://developers.google.com/google-apps/calendar/v3/reference/[Google
Calendar Web APIs].

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/google-apps/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
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-calendar</artifactId>
            <!-- use the same version as your Camel core version -->
            <version>x.x.x</version>
    </dependency>
        
----------------------------------------------------------

== 1. Google Calendar Options




// component options: START
The Google Calendar component supports 14 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *applicationName* (common) | Google calendar application name. Example would be camel-google-calendar/1.0 |  | String
| *clientId* (common) | Client ID of the calendar application |  | String
| *configuration* (common) | To use the shared configuration |  | GoogleCalendarConfiguration
| *emailAddress* (common) | The emailAddress of the Google Service Account. |  | String
| *p12FileName* (common) | The name of the p12 file which has the private key to use with the Google Service Account. |  | String
| *scopes* (common) | Specifies the level of permissions you want a calendar application to have to a user account. You can separate multiple scopes by comma. See \https://developers.google.com/google-apps/calendar/auth for more info. | https://www.googleapis.com/auth/calendar | String
| *user* (common) | The email address of the user the application is trying to impersonate in the service account flow |  | 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
| *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 BatchGoogleCalendarClientFactory |  | GoogleCalendarClientFactory
| *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 calendar 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 Calendar endpoint is configured using URI syntax:

----
google-calendar: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: ACL, LIST, CALENDARS, CHANNELS, COLORS, FREEBUSY, EVENTS, SETTINGS |  | GoogleCalendarApiName
| *methodName* | *Required* What sub operation to use for the selected operation. The value can be one of: calendarImport, clear, delete, get, insert, instances, list, move, patch, query, quickAdd, stop, update, watch |  | String
|===


=== Query Parameters (32 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *applicationName* (common) | Google calendar application name. Example would be camel-google-calendar/1.0 |  | String
| *clientId* (common) | Client ID of the calendar application |  | String
| *emailAddress* (common) | The emailAddress of the Google Service Account. |  | String
| *inBody* (common) | Sets the name of a parameter to be passed in the exchange In Body |  | String
| *p12FileName* (common) | The name of the p12 file which has the private key to use with the Google Service Account. |  | String
| *scopes* (common) | Specifies the level of permissions you want a calendar application to have to a user account. You can separate multiple scopes by comma. See \https://developers.google.com/google-apps/calendar/auth for more info. | https://www.googleapis.com/auth/calendar | String
| *user* (common) | The email address of the user the application is trying to impersonate in the service account flow |  | 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
| *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 calendar 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



== URI Format

The GoogleCalendar Component uses the following URI format:

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

Endpoint prefix can be one of:

* acl
* calendars
* channels
* colors
* events
* freebusy
* list
* settings

== 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 `CamelGoogleCalendar.<option>`. Note that the `inBody` option
overrides message header, i.e. the endpoint option `inBody=option` would
override a `CamelGoogleCalendar.option` header.


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

== Message Body

All result message bodies utilize objects provided by the underlying
APIs used by the GoogleCalendarComponent. 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-calendar-starter.adoc[]
