Add kamelet definition: google-sheets-source

This commit is contained in:
gitea_admin 2026-10-12 02:33:54 +00:00
parent 301c4f4aa2
commit 853b348b0c

349
kamelet.json Normal file
View File

@ -0,0 +1,349 @@
{
"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.22.1",
"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.",
"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.",
"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 Spreadsheet 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"
}
]
}
}
},
"propertiesSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"title": "Google Sheets Source",
"description": "Receive data from Google Sheets.",
"required": [
"spreadsheetId",
"clientId",
"accessToken",
"refreshToken",
"clientSecret"
],
"properties": {
"spreadsheetId": {
"type": "string",
"title": "Spreadsheet ID",
"description": "The Spreadsheet ID to be used as events source"
},
"clientId": {
"type": "string",
"title": "Client Id",
"description": "Client ID of the sheets application",
"format": "password"
},
"clientSecret": {
"type": "string",
"title": "Client Secret",
"description": "Client Secret of the sheets application",
"format": "password"
},
"accessToken": {
"type": "string",
"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.",
"format": "password"
},
"refreshToken": {
"type": "string",
"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.",
"format": "password"
},
"delay": {
"type": "integer",
"title": "Delay",
"description": "The number of milliseconds before the next poll",
"default": 500
},
"repeatCount": {
"type": "integer",
"title": "Repeat Count",
"description": "Specifies a maximum limit of number of fires"
},
"applicationName": {
"type": "string",
"title": "Application name",
"description": "Google Sheets application name"
},
"splitResults": {
"type": "boolean",
"title": "Split Results",
"description": "True if value range result should be split into rows or columns to process each of them individually.",
"default": true
},
"range": {
"type": "string",
"title": "Cells Range",
"description": "The range of rows and columns in a sheet to get data from."
},
"majorDimension": {
"type": "string",
"title": "Major Dimension",
"description": "Specifies the major dimension that the given values should use (ROWS or COLUMNS).",
"enum": [
"COLUMNS",
"ROWS"
],
"default": "ROWS"
},
"columnNames": {
"type": "string",
"title": "Column Names",
"description": "Optional custom column names that map to cell coordinates based on their position.",
"default": "A"
}
}
}
}