org.mule.modules

mule-module-google-calendar

config-with-oauth

Namespacehttp://www.mulesoft.org/schema/mule/google-calendars
Schema Locationhttp://www.mulesoft.org/schema/mule/google-calendars/current/mule-google-calendars.xsd  (View Schema)
Schema Version1.0
Minimum Mule Version3.5

Module Overview

Google Calendars Cloud connector. This connector covers almost all the Google Calendar API v3 using OAuth2 for authentication.

Summary

Configuration
<google-calendars:config-with-oauth>
Configure an instance of this module
Message Processors
<google-calendars:batch-delete-calendar>
Deletes many events in a batch
<google-calendars:batch-delete-event>
Deletes many events in a batch
<google-calendars:batch-insert-calendar>
Inserts many calendars in a batch
<google-calendars:batch-insert-event>
Inserts many events as a batch
<google-calendars:batch-update-calendar>
Updates many calendars in a batch
<google-calendars:batch-update-event>
Updates many events in a batch
<google-calendars:clear-calendar>
Clears all the events on the calendar referenced by id
<google-calendars:create-calendar>
Inserts a new calendar associated with the user that owns the current OAuth token
<google-calendars:delete-acl-rule>
Deletes an ACL rule on a calendar
<google-calendars:delete-calendar>
Deletes a particular calendar referenced by id
<google-calendars:delete-calendar-list>
Deletes a calendar list referenced by id
<google-calendars:delete-event>
Deletes an event from a specified calendar
<google-calendars:get-acl-rule-by-id>
Retrieves a Rule by Id
<google-calendars:get-all-acl-rules>
Returns all the Acl rules for a particular calendar
<google-calendars:get-calendar-by-id>
Returns a particular calendar specified by id
<google-calendars:get-calendar-list>
Returns a paginated iterator with instances of CalendarList listing the calendars of the user that owns the OAuth access token.
<google-calendars:get-calendar-list-by-id>
Returns a particular calendar list identified by id.
<google-calendars:get-event-by-id>
Retrieves an event by id
<google-calendars:get-events>
Searchs and returns events matching the criteria parameters.
<google-calendars:get-free-time>
Returns the free time the authenticated user has between two times
<google-calendars:get-instances>
For recurring events, it returns one instance of Event for each recurrence instance
<google-calendars:import-event>
Imports the given event into a calendar
<google-calendars:insert-acl-rule>
Inserts a new ACL rule in a calendar
<google-calendars:insert-event>
Inserts the given event into an specified calendar
<google-calendars:move-event>
Moves a calendar form one calendar to another
<google-calendars:quick-add-event>
Shortcut method for creating an event with nothing but a description text.
<google-calendars:update-acl-rule>
Updates a rule on a given calendar
<google-calendars:update-calendar>
Updates a calendar referenced by id with the content of one specified or taken from the message payload.
<google-calendars:update-calendar-list>
Updates a calendar list referenced by id with the content of one specified or taken from the message payload.
<google-calendars:update-event>
Updates an event.

Configuration

To use the this module within a flow the namespace to the module must be included. The resulting flow will look similar to the following:

<mule xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:google-calendars="http://www.mulesoft.org/schema/mule/google-calendars"
      xsi:schemaLocation="
               http://www.mulesoft.org/schema/mule/core
               http://www.mulesoft.org/schema/mule/core/current/mule.xsd
               http://www.mulesoft.org/schema/mule/google-calendars
               http://www.mulesoft.org/schema/mule/google-calendars/current/mule-google-calendars.xsd">

      <!-- here goes your flows and configuration elements -->

</mule>

This module is configured using the config element. This element must be placed outside of your flows and at the root of your Mule application. You can create as many configurations as you deem necessary as long as each carries its own name.

Each message processor, message source or transformer carries a config-ref attribute that allows the invoker to specify which configuration to use.

Attributes
TypeNameDefault ValueDescriptionJava TypeMIME TypeEncoding
xs:string name Optional. Give a name to this configuration so it can be later referenced.
xs:string applicationName Mule-GoogleCalendarConnector/1.0 Optional. Application name registered on Google API console
clientFactory Optional. Factory to instantiate the underlying google client.
xs:string consumerKey The OAuth2 consumer key
xs:string consumerSecret The OAuth2 consumer secret
xs:string scope https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar Optional. The OAuth scopes you want to request
xs:string authorizationUrl https://accounts.google.com/o/oauth2/auth Optional. The URL defined by the Service Provider where the resource owner will be redirected to grant authorization to the connector
xs:string accessTokenUrl https://accounts.google.com/o/oauth2/token Optional. The URL defined by the Service Provider to obtain an access token

OAuth2

This connector uses OAuth2 as an authorization and authentication mechanism. All the message processors or sources that require the connector to be authorized by the service provider will throw a NotAuthorizedException until the connector is authorized properly.

Authorizing the connector is a simple process of calling:

    <google-calendars:authorize/>

The call to authorize the message processor must be made though a message coming from an HTTP inbound endpoint as the authorize process will reply with a redirect to the service provider. The following is an example of how to use it in a flow with an HTTP inbound endpoint:

    <flow name="authorizationAndAuthenticationFlow">
        <http:inbound-endpoint host="localhost" port="8080" path="oauth-authorize"/>
        <google-calendars:authorize/>
    </flow>

If you hit that endpoint via a web-browser it will initiate the OAuth dance, redirecting the user to the service provider page and creating a callback endpoint so the service provider can call us back once the user has been authenticated. Once the callback gets called then the connector will switch to an authorized state and any message processor or source that requires authentication can be called.

The authorize message processor supports the following attributes:

Authorize Attributes
NameDefault ValueDescription
access_type online Optional. Indicates if your application needs to access a Google API when the user is not present at the browser. Use offline to get a refresh token and use that when the user is not at the browser. Default is online
force_prompt auto Optional. Indicates if google should remember that an app has been authorized or if each should ask authorization every time. Use force to request authorization every time or auto to only do it the first time. Default is auto
authorizationUrl https://accounts.google.com/o/oauth2/auth Optional. The URL defined by the Service Provider where the resource owner will be redirected to grant authorization to the connector
accessTokenUrl https://accounts.google.com/o/oauth2/token Optional. The URL defined by the Service Provider to obtain an access token
accessTokenId   Optional. The Id with which the obtained access token will be stored. If not provided, then it will be the config name

After Authorization

The authorize message processor is an intercepting one. If something that requires authentication is requested but the connector is not authorized yet, the authorize message processor will be triggered. It will redirect the user to the service provider so that he can authorize the connector. This is why the authorize message processor needs to be behind an http:inbound-endpoint. Once authentication and authorization are successful, the service provider will respond to the connector with a callback. The connector will extract information from this callback, set its own internal state to authorized, and then move on to executing anything that had been interrupted by the authorization method.

  <flow name="authorizationAndAuthenticationFlow">
      <http:inbound-endpoint host="localhost" port="8080" path="oauth-authorize"/>
      <google-calendars:authorize/>
      <http:response-builder status="200">
          <set-payload value="You have successfully authorized the connector"/>
      </http:response-builder>
  </flow>

In the above example we added the http:response-builder (keep in mind that this element is available only in Mule 3.3.0 and later). If the connector is not yet authorized, the execution of the response builder will be delayed until the callback is received.

On the other hand, if the connector had already been authorized before, then the flow execution will not be delayed; it will continue and the http:response-builder will get executed right away rather than after the callback.

Error Handling during Authorization

If for any reason, an error occurs while processing the callback, the exception strategy of the flow containing the authorize will be executed. So, if the callback sent the wrong information you can handle that situation by setting up an exception strategy as follows:

  <flow name="authorizationAndAuthenticationFlow">
      <http:inbound-endpoint host="localhost" port="8080" path="oauth-authorize"/>
      <google-calendars:authorize/>
      <http:response-builder status="200">
          <set-payload value="You have successfully authorized the connector"/>
      </http:response-builder>
      <catch-exception-strategy>
         <http:response-builder status="404">
             <set-payload value="An error has occurred authorizing the connector"/>
         </http:response-builder>
      </catch-exception-strategy>
  </flow>

What happens if a tenant who is not yet authorized wants to perform an OAuth protected operation? You can set this with the onNoToken property:

<google-calendars:config name="google-calendarss" consumerKey="${consumerKey}" consumerSecret="${consumerSecret}" onNoToken="[STOP_FLOW|EXCEPTION]">
    <google-calendars:oauth-callback-config connector-ref="${oauth.http.connector}" domain="${oauth.url}" localPort="${https.port}" async="false" path="oauth2callback" />
</google-calendars:config-with-oauth>

The onNoToken property can be set to two different values:

Unauthorize

Once this connector has been authorized further calls to the authorize message processor will be no-ops. If you wish to reset the state of the connector back to a non-authorized state you must call:

    <google-calendars:unauthorize/>

Keep in mind that after the connector is unauthorized all future calls that attempt to access protected resources will fail until the connector is re-authorized.

Callback Customization

As mentioned earlier, once authorize gets called and before we redirect the user to the service provider, we create a callback endpoint. The callback endpoint will get called automatically by the service provider once the user is authenticated and he grants authorization to the connector to access his private information.

The callback can be customized in the config element of the this connector as follows:

    <google-calendars:config>
        <google-calendars:oauth-callback-config domain="${fullDomain}" localPort="${http.port}" remotePort="80" defaultAccessTokenId="#[message.inboundProperties['tenantId']]" />
    </google-calendars:config>

The oauth-callback-config element can be used to customize the endpoint that gets created for the callback. It features the following attributes:

OAuth Callback Config Attributes
NameDescription
connector-ref Optional. Reference to a user-defined HTTP connector.
domain Optional. The domain portion of the callback URL. This is usually something like xxx.cloudhub.io if you are deploying to CloudHub for example.
localPort Optional. The local port number that the endpoint will listen on. Normally 80, in the case of CloudHub you can use the environment variable ${http.port}.
remotePort Optional. This is the port number that we will tell the service provider we are listening on. It is usually the same as localPort but it is separated in case your deployment features port forwarding or a proxy.
path Optional. Path under which the callback should be exposed. If not specified a random path will be generated.
defaultAccessTokenId Optional. A Mule Expression to use as access token id. If provided, this expression will be evaluated for all obtained access tokens and the result will be used as their id (except in the cases in which a specific acessTokenId was provided on the authorize processor

The example shown above is what the configuration would look like if your app would be deployed to CloudHub.

Access Token Store

This connector has the capability of automatically saving and restoring access tokens. The connector will store in either the default user object store or a user-defined one the acquired access tokens, refresh tokens, and any other pertinent information using the access token identifier as the key.

The object store can be configured as follows

    <google-calendars:config>
        <google-calendars:oauth-store-config objectStore-ref="my-object-store"/>
    </google-calendars:config>

There is only a single attribute entitled objectStore-ref in the oauth-store-config element that allows the user to specify the name of the object store that he wishes to use to save and restore access tokens.

Another important aspect of the token store is the ids. This connector supports multi-tenancy, which means that each instance of this connector is capable of supporting multiple concurrent users. Therefore, each access token is given an id to identify the owning tenant.

By default, the connector's config name is used the access token id. Also, by default, at the time of using a protected operation, it's not mandatory to provide an accessTokenId since the config's name will also be used by default.

This defaults are fine for the single-tenant case or for CloudHub enabled multi-tenancy. If you are running on-premise or you are not using Cloudhub's multi-tenancy mode, there are a couple of ways in which you can easily handle your token ids manually.

First, you can specify a defaultAccessTokenId on the connector's callback element. Each time a callback is received, that expression will get evaluated and the resulting value will be used as the token id. At the same time, when using a protected operation that expression will be evaluated to obtain the id of the access token to fetch.

Another option is to use to provide an accessTokenId expression on the authorize processor. If you do so, the expression's result will be used as the token id instead. Notice that if you choose to force the token id like this, then you also need to provide a matching accessTokenId expression on each protected operation that uses that token.

Message Processors

<google-calendars:batch-delete-calendar>

Deletes many events in a batch

XML Sample
<google-calendars:batch-delete-calendar />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendars #[payload] Optional. A collection with instances of @{link org.mule.module.google.calendar.model.Calendar} that are to be deleted Collection<Calendar> */*
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:batch-delete-event>

Deletes many events in a batch

XML Sample
<google-calendars:batch-delete-event calendarId="mariano.gonzalez@mulesoft.com" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the events to be deleted String */* UTF-8
calendarEvents #[payload] Optional. A collection with instances of Event that are to be deleted Collection<Event> */*
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:batch-insert-calendar>

Inserts many calendars in a batch

XML Sample
<google-calendars:batch-insert-calendar />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendars #[payload] Optional. A collection with instances of @{link org.mule.module.google.calendar.model.Calendar} that are to be inserted Collection<Calendar> */*
Returns
Return Type Description
BatchResponse<Calendar> an instance of org.mule.modules.google.api.client.batch.BatchResponse
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:batch-insert-event>

Inserts many events as a batch

XML Sample
<google-calendars:batch-insert-event calendarId="mariano.gonzalez@mulesoft.com" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar that's receiving the calendars String */* UTF-8
calendarEvents #[payload] Optional. A collection with instances of Event that are to be inserted Collection<Event> */*
Returns
Return Type Description
BatchResponse<Event> an instance of org.mule.modules.google.api.client.batch.BatchResponse
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:batch-update-calendar>

Updates many calendars in a batch

XML Sample
<google-calendars:batch-update-calendar /> 

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendars #[payload] Optional. A collection with instances of @{link org.mule.module.google.calendar.model.Calendar} that are to be updated Collection<Calendar> */*
Returns
Return Type Description
BatchResponse<Calendar> an instance of org.mule.modules.google.api.client.batch.BatchResponse
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:batch-update-event>

Updates many events in a batch

XML Sample
<google-calendars:batch-update-event calendarId="mariano.gonzalez@mulesoft.com" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the events to be updated String */* UTF-8
calendarEvents #[payload] Optional. A collection with instances of Event that are to be updated Collection<Event> */*
Returns
Return Type Description
BatchResponse<Event> an instance of org.mule.modules.google.api.client.batch.BatchResponse
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:clear-calendar>

Clears all the events on the calendar referenced by id

XML Sample
<google-calendars:clear-calendar id="mariano.gonzalez@mulesoft.com"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar you want to clear String */* UTF-8
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:create-calendar>

Inserts a new calendar associated with the user that owns the current OAuth token

XML Sample
<google-calendars:create-calendar />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendar #[payload] Optional. An instance of Calendar with the information of the calendar you want to insert Calendar */*
Returns
Return Type Description
Calendar another instance of Calendar representing the calendar that was created
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:delete-acl-rule>

Deletes an ACL rule on a calendar

XML Sample
<google-calendars:delete-acl-rule calendarId="mariano.gonzalez@mulesoft.com" ruleId="#[map-payload:ruleId]" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar loosing a rule String */* UTF-8
ruleId The id of the rule to be deleted String */* UTF-8
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:delete-calendar>

Deletes a particular calendar referenced by id

XML Sample
<google-calendars:delete-calendar id="mariano.gonzalez@mulesoft.com"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar you want to delete String */* UTF-8
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:delete-calendar-list>

Deletes a calendar list referenced by id

XML Sample
<google-calendars:delete-calendar-list id="someId"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar list you want to delete String */* UTF-8
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:delete-event>

Deletes an event from a specified calendar

XML Sample
<google-calendars:delete-event calendarId="#[map-payload:calendarId]" eventId="#[map-payload:eventId]"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the event String */* UTF-8
eventId The event's id String */* UTF-8
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-acl-rule-by-id>

Retrieves a Rule by Id

XML Sample
<google-calendars:get-acl-rule-by-id calendarId="mariano.gonzalez@mulesoft.com" ruleId="#[map-payload:ruleId]" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the rule String */* UTF-8
ruleId The id of the rule String */* UTF-8
Returns
Return Type Description
AclRule an instance of AclRule
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-all-acl-rules>

Returns all the Acl rules for a particular calendar

XML Sample
<google-calendars:get-all-acl-rules calendarId="mariano.gonzalez@mulesoft.com"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the rules String */* UTF-8
Returns
Return Type Description
List<AclRule> a list of instances of AclRule
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-calendar-by-id>

Returns a particular calendar specified by id

XML Sample
<google-calendars:get-calendar-by-id id="mariano.gonzalez@mulesoft.com"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar you want to get String */* UTF-8
Returns
Return Type Description
Calendar an instance of Calendar
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-calendar-list>

Returns a paginated iterator with instances of

This operation can potentially return a large amount of records that might exceed memory capacity.

To prevent this from being a problem, the output of this operation is automatically paginated into an iterable collection of objects. Regardless of the page-size, the iterator will be pushing out registries one at a time and fetching next pages on demand. If you wish to take advantage of the pagination, you must process the output through elements that can handle collections, such as a ForEach scope or DataMapper. In this way, Mule will execute the entire set of registries one at a time, but processing only a batch at a time and thus keeping memory usage from going over limits.

CalendarList listing the calendars of the user that owns the OAuth access token. Optional parameters are not considered in the search if not specified.

This operation can potentially return a large amount of records that might exceed memory capacity.

To prevent this from being a problem, the output of this operation is automatically paginated into an iterable collection of objects. Regardless of the page-size, the iterator will be pushing out registries one at a time and fetching next pages on demand. If you wish to take advantage of the pagination, you must process the output through elements that can handle collections, such as a ForEach scope or DataMapper. In this way, Mule will execute the entire set of registries one at a time, but processing only a batch at a time and thus keeping memory usage from going over limits.

XML Sample
<google-calendars:get-calendar-list showHidden="true" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
showHidden false Optional. If true, hidden calendars will be returned boolean */*
fetchSize 100 Specify the number of objects that will be returned in each iteration int    
Returns
Return Type Description
Iterator < CalendarList > A collection: each index contains a list of objects, each object with its own set of properties. It is possible to process it in parts thanks to its pagination.
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-calendar-list-by-id>

Returns a particular calendar list identified by id. The user owning the OAuth token needs to have permissions for reading that list

XML Sample
<google-calendars:get-calendar-list-by-id id="someId" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar list you want to get String */* UTF-8
Returns
Return Type Description
CalendarList an instance of CalendarList
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-event-by-id>

Retrieves an event by id

XML Sample
<google-calendars:get-event-by-id calendarId="#[map-payload:calendarId]" eventId="#[map-payload:eventId]"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the event String */* UTF-8
eventId The event's id String */* UTF-8
Returns
Return Type Description
Event an instance of Event representing the event on google's servers
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-events>

Searchs and returns events matching the criteria parameters. If a criteria is not specified, then it is not applied

This operation can potentially return a large amount of records that might exceed memory capacity.

To prevent this from being a problem, the output of this operation is automatically paginated into an iterable collection of objects. Regardless of the page-size, the iterator will be pushing out registries one at a time and fetching next pages on demand. If you wish to take advantage of the pagination, you must process the output through elements that can handle collections, such as a ForEach scope or DataMapper. In this way, Mule will execute the entire set of registries one at a time, but processing only a batch at a time and thus keeping memory usage from going over limits.

XML Sample
<google-calendars:get-events calendarId="mariano.gonzalez@mulesoft.com" timeMin="2012-01-01T00:00:00Z"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the colendar that contains the events String */* UTF-8
icalUID Optional. Specifies iCalendar UID (iCalUID) of events to be included in the response String */* UTF-8
maxAttendees Optional. The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Integer */*
orderBy Optional. The order of the events returned in the result String */* UTF-8
query Optional. Free text search terms to find events that match these terms in any field, except for extended properties String */* UTF-8
showDeleted false Optional. Whether to include deleted events (with 'eventStatus' equals 'cancelled') in the result. boolean */*
showHiddenInvitations false Optional. Whether to include hidden invitations in the result boolean */*
singleEvents true Optional. Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. boolean */*
timeMin Optional. Lower bound timestamp (inclusive) for an event's end time to filter by String */* UTF-8
timeMax Optional. Upper bound timestamp (exclusive) for an event's start time to filter by String */* UTF-8
datetimeFormat yyyy-MM-dd\'T\'HH:mm:ss\'Z\' Optional. The timestamp format for timeMin, timeMax and lastUpdated. It defaults to RFC 3369 (yyyy-MM-dd'T'HH:mm:ssZ) String */* UTF-8
timezone UTC Optional. Timezone in which timeMin, timeMax and lastUpdated is to be considered on String */* UTF-8
lastUpdated Optional. Lower bound timestamp for an event's last modification time to filter by String */* UTF-8
fetchSize 100 Specify the number of objects that will be returned in each iteration int    
Returns
Return Type Description
Iterator < Event > A collection: each index contains a list of objects, each object with its own set of properties. It is possible to process it in parts thanks to its pagination.
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-free-time>

Returns the free time the authenticated user has between two times

XML Sample
<google-calendars:get-free-time timeMin="2012-06-18T00:00:00Z" timeMax="2012-06-19T00:00:00Z"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
timeMin The start of the interval for the query String */* UTF-8
timeMax The end of the interval for the query String */* UTF-8
timezone UTC Optional. Time zone used in the response String */* UTF-8
datetimeFormat yyyy-MM-dd\'T\'HH:mm:ss\'Z\' Optional. The format to be used to parse timeMin and timeMax String */* UTF-8
maxCalendarExpansion Optional. Maximal number of calendars for which FreeBusy information is to be provided Integer */*
Child Elements
NameDefault ValueDescriptionJava Type
<google-calendars:ids> #[payload] Optional. List of calendars and/or groups identifiers to query. List<String>
Returns
Return Type Description
FreeBusy an instance of FreeBusy
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:get-instances>

For recurring events, it returns one instance of

This operation can potentially return a large amount of records that might exceed memory capacity.

To prevent this from being a problem, the output of this operation is automatically paginated into an iterable collection of objects. Regardless of the page-size, the iterator will be pushing out registries one at a time and fetching next pages on demand. If you wish to take advantage of the pagination, you must process the output through elements that can handle collections, such as a ForEach scope or DataMapper. In this way, Mule will execute the entire set of registries one at a time, but processing only a batch at a time and thus keeping memory usage from going over limits.

Event for each recurrence instance

This operation can potentially return a large amount of records that might exceed memory capacity.

To prevent this from being a problem, the output of this operation is automatically paginated into an iterable collection of objects. Regardless of the page-size, the iterator will be pushing out registries one at a time and fetching next pages on demand. If you wish to take advantage of the pagination, you must process the output through elements that can handle collections, such as a ForEach scope or DataMapper. In this way, Mule will execute the entire set of registries one at a time, but processing only a batch at a time and thus keeping memory usage from going over limits.

XML Sample
<google-calendars:get-instances calendarId="#[map-payload:calendarId]" eventId="#[map-payload:eventId]"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the recurrent event String */* UTF-8
eventId The id of a recurrent event String */* UTF-8
maxAttendess Optional. The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Integer */*
showDeleted false Optional. Whether to include deleted events (with 'eventStatus' equals 'cancelled') in the result. boolean */*
timezone UTC Optional. Time zone used in the response String */* UTF-8
originalStart Optional. The original start time of the instance in the result String */* UTF-8
fetchSize 100 Specify the number of objects that will be returned in each iteration int    
Returns
Return Type Description
Iterator < Event > A collection: each index contains a list of objects, each object with its own set of properties. It is possible to process it in parts thanks to its pagination.
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:import-event>

Imports the given event into a calendar

XML Sample
<google-calendars:import-event calendarId="mariano.gonzalez@mulesoft.com"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the target calendar String */* UTF-8
calendarEvent #[payload] Optional. An instance of Event representing the event to be imported Event */*
Returns
Return Type Description
Event an instance of Event representing the imported event on google's servers
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:insert-acl-rule>

Inserts a new ACL rule in a calendar

XML Sample
<google-calendars:insert-acl-rule calendarId="mariano.gonzalez@mulesoft.com" role="writer" scope="someuser@gmail.com" scopeType="USER"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar affected by the rule String */* UTF-8
scope The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type "default". String */* UTF-8
scopeType The type of the scope. Possible values are: - "default" - The public scope. This is the default value. "user" - Limits the scope to a single user. "group" - Limits the scope to a group. "domain" - Limits the scope to a domain. Note: The permissions granted to the "default", or public, scope apply to any user, authenticated or not. ScopeType */*
role The role assigned to the scope. Possible values are: "none" - Provides no access. - "freeBusyReader" Provides read access to free/busy information. "reader" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. "writer" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. "owner" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs. ScopeRole */*
Returns
Return Type Description
AclRule an instance of AclRule representing the newly created rule
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:insert-event>

Inserts the given event into an specified calendar

XML Sample
<google-calendars:insert-event calendarId="mariano.gonzalez@mulesoft.com" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar that's to contain the event String */* UTF-8
calendarEvent #[payload] Optional. An instance of Event representing the event to be inserted Event */*
Returns
Return Type Description
Event an instance of Event representing the event inserted on google's servers
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:move-event>

Moves a calendar form one calendar to another

XML Sample
<google-calendars:move-event sourceCalendarId="#[map-payload:source]" eventId="#[map-payload:event]" targetCalendarId="#[map-payload:target]" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
sourceCalendarId The id of the calendar that currently has the event String */* UTF-8
eventId The id of the event to be moved String */* UTF-8
targetCalendarId The id of the calendar to receive the event String */* UTF-8
Returns
Return Type Description
Event an instance of Event representing the moved event
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:quick-add-event>

Shortcut method for creating an event with nothing but a description text.

XML Sample
<google-calendars:quick-add-event calendarId="#[map-payload:calendarId]" text="#[map-payload:text]" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar to contain the new event String */* UTF-8
text Description of the new event String */* UTF-8
Returns
Return Type Description
Event an instance of Event representing the newly created event
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:update-acl-rule>

Updates a rule on a given calendar

XML Sample
<google-calendars:update-acl-rule calendarId="mariano.gonzalez@mulesoft.com" ruleId="#[map-payload:ruleId]" />

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar containing the rule String */* UTF-8
ruleId The id of the rule to be modified String */* UTF-8
aclRule #[payload] Optional. An instance of AclRule containing the new state of the rule AclRule */*
Returns
Return Type Description
AclRule an instance of AclRule representing the new updated state of the rule
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:update-calendar>

Updates a calendar referenced by id with the content of one specified or taken from the message payload.

XML Sample
<google-calendars:update-calendar id="mariano.gonzalez@mulesoft.com"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar you want to get String */* UTF-8
calendar #[payload] Optional. An instance of Calendar with the content you want to have reflected Calendar */*
Returns
Return Type Description
Calendar an instance of Calendar representing the updated calendar's state
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:update-calendar-list>

Updates a calendar list referenced by id with the content of one specified or taken from the message payload.

XML Sample
<google-calendars:update-calendar-list id="someId"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
id The id of the calendar list you want to update String */* UTF-8
calendarList #[payload] Optional. An instance of CalendarList with the content you want to have reflected CalendarList */*
Returns
Return Type Description
CalendarList an instance of CalendarList with reflecting the calendar's updated state
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

<google-calendars:update-event>

Updates an event.

XML Sample
<google-calendars:update-event calendarId="mariano.gonzalez@mulesoft.com" eventId="someEventId"/>

Attributes
NameDefault ValueDescriptionJava TypeMIME TypeEncoding
config-ref Optional. Specify which configuration to use.
calendarId The id of the calendar that contains the event to be updated String */* UTF-8
eventId The if of the event to be updated String */* UTF-8
calendarEvent #[payload] Optional. An instance of Event with the event's new state Event */*
Returns
Return Type Description
Event an instance of Event representing the updated event
Exception Payloads
Payload ClassDescription
IOException if there's a communication error

Message Sources

Transformers