kamelets.google-sheets-source.kamelet.yaml Maven / Gradle / Ivy
The newest version!
# ---------------------------------------------------------------------------
# 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.
# ---------------------------------------------------------------------------
apiVersion: camel.apache.org/v1
kind: Kamelet
metadata:
name: google-sheets-source
annotations:
camel.apache.org/kamelet.support.level: "Stable"
camel.apache.org/catalog.version: "4.8.0"
camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA4OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgODg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojMERDNTRDO30KCS5zdDF7ZmlsbDojMDg5NjJEO30KCS5zdDJ7ZmlsbDojRkRGRkZGO30KPC9zdHlsZT4KPGcgaWQ9IkxheWVyXzQiPgoJPHBhdGggY2xhc3M9InN0MCIgZD0iTTU4LDg4SDZjLTMuMywwLTYtMi43LTYtNlY2YzAtMy4zLDIuNy02LDYtNmgzNmwyMiwyMnY2MEM2NCw4NS4zLDYxLjMsODgsNTgsODh6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNNDIsMGwyMiwyMkg0MlYweiIvPgoJPHBhdGggY2xhc3M9InN0MiIgZD0iTTEyLDM0LjV2MjhoNDB2LTI4SDEyeiBNMTcsMzkuNWgxMi41VjQ2SDE3VjM5LjV6IE0xNyw1MWgxMi41djYuNUgxN1Y1MXogTTQ3LDU3LjVIMzQuNVY1MUg0N1Y1Ny41eiBNNDcsNDYKCQlIMzQuNXYtNi41SDQ3VjQ2eiIvPgo8L2c+Cjwvc3ZnPgo="
camel.apache.org/provider: "Apache Software Foundation"
camel.apache.org/kamelet.group: "Google Sheets"
camel.apache.org/kamelet.namespace: "GCP"
labels:
camel.apache.org/kamelet.type: "source"
spec:
definition:
title: "Google Sheets Source"
description: |-
Receive data from Google Sheets.
required:
- spreadsheetId
- clientId
- accessToken
- refreshToken
- clientSecret
type: object
properties:
spreadsheetId:
title: Spreadsheet ID
description: The Spreadsheet ID to be used as events source
type: string
clientId:
title: Client Id
description: Client ID of the sheets application
type: string
format: password
x-descriptors:
- urn:camel:group:credentials
clientSecret:
title: Client Secret
description: Client Secret of the sheets application
type: string
format: password
x-descriptors:
- urn:camel:group:credentials
accessToken:
title: Access Token
description: OAuth 2 access token for google sheets application. This typically expires after an hour so refreshToken is recommended for long term usage.
type: string
format: password
x-descriptors:
- urn:camel:group:credentials
refreshToken:
title: Refresh Token
description: OAuth 2 refresh token for google sheets application. Using this, the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.
type: string
format: password
x-descriptors:
- urn:camel:group:credentials
delay:
title: Delay
description: The number of milliseconds before the next poll
type: integer
default: 500
repeatCount:
title: Repeat Count
description: Specifies a maximum limit of number of fires
type: integer
applicationName:
title: Application name
description: Google Sheets application name
type: string
splitResults:
title: Split Results
description: True if value range result should be split into rows or columns to process each of them individually.
type: boolean
default: true
range:
title: Cells Range
description: The range of rows and columns in a sheet to get data from.
type: string
example: "A1:B3"
majorDimension:
title: Major Dimension
description: Specifies the major dimension that the given values should use (ROWS or COLUMNS).
type: string
enum: [ "COLUMNS", "ROWS" ]
default: "ROWS"
example: "ROWS"
columnNames:
title: Column Names
description: Optional custom column names that map to cell coordinates based on their position.
type: string
default: "A"
dataTypes:
out:
default: json
headers:
CamelGoogleSheets.range:
title: Range
description: Cells range to write data to.
default: A:A
type: string
CamelGoogleSheets.spreadsheetId:
title: Spreadsheet id
description: The Spreadsheet ID to be used as identifier.
type: string
CamelGoogleSheets.majorDimension:
title: Major dimension
description: Specifies the major dimension that the given values should use (ROWS or COLUMNS).
default: ROWS
type: string
CamelGoogleSheets.columnNames:
title: Column Names
description: Optional custom column names that map to cell coordinates based on their position.
default: A
type: string
CamelGoogleSheets.splitResults:
title: Split Results
description: True if value range result should be split into rows or columns to process each of them individually.
default: "true"
type: boolean
types:
json:
format: "application-json"
description: |-
Json representation of a GoogleSheets ValueRange object that holds all values for the given cell range.
Or Json array of values for a single row/column in the range when 'splitResults' mode is enabled.
mediaType: application/json
json-struct:
format: "google-sheets:application-x-struct"
description: |-
Special Json representation of Google Sheets ValueRange object with just row and column values as a generic JsonNode.
Each cell value is represented by a Json property named after the respective row (A-Z) or column (1-n) depending on the given majorDimension.
Custom column names are supported in order to use custom property names instead of generic row (A-Z) or column (1-n) coordinates.
The produced Json struct is ready to be transformed back into a proper Google Sheets ValueRange object that can be used in an update/append values operation.
mediaType: application/json
cloudevents:
format: "google-sheets-stream:application-cloudevents"
description: |-
Output data type represents Google Sheets Stream response as CloudEvent V1. The data type sets Camel specific CloudEvent headers on the exchange with
respective data from the Spreasheet and its derived object.
headers:
CamelCloudEventID:
title: CloudEvent ID
description: The Camel exchange id set as event id
type: string
CamelCloudEventType:
title: CloudEvent Type
description: The event type
default: "org.apache.camel.event.google.sheets.stream.consume"
type: string
CamelCloudEventSource:
title: CloudEvent Source
description: The event source. By default, the Spreadsheet Id with prefix "google.sheets.stream.".
type: string
CamelCloudEventSubject:
title: CloudEvent Subject
description: The event subject. Usually the Spreadsheet URL.
type: string
CamelCloudEventTime:
title: CloudEvent Time
description: The exchange creation timestamp as event time.
type: string
dependencies:
- "camel:core"
- "camel:jackson"
- "camel:kamelet"
- "camel:google-sheets"
template:
from:
uri: "google-sheets-stream://{{spreadsheetId}}"
parameters:
clientId: "{{clientId}}"
accessToken: "{{accessToken}}"
refreshToken: "{{refreshToken}}"
clientSecret: "{{clientSecret}}"
delay: "{{delay}}"
applicationName: "{{?applicationName}}"
splitResults: "{{splitResults}}"
range: "{{?range}}"
repeatCount: "{{?repeatCount}}"
steps:
- marshal:
json: {}
- setHeader:
name: CamelGoogleSheets.spreadsheetId
simple: "{{spreadsheetId}}"
- setHeader:
name: CamelGoogleSheets.range
simple: "{{?range}}"
- setHeader:
name: CamelGoogleSheets.majorDimension
simple: "{{?majorDimension}}"
- setHeader:
name: CamelGoogleSheets.columnNames
simple: "{{?columnNames}}"
- setHeader:
name: CamelGoogleSheets.splitResults
simple: "{{?splitResults}}"
- to: "kamelet:sink"