From 903880014184739189deae712f2e49a5ddcbfc3a Mon Sep 17 00:00:00 2001 From: gitea_admin Date: Mon, 12 Oct 2026 02:35:48 +0000 Subject: [PATCH] Add kamelet definition: ogcapi-features-action --- kamelet.json | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 kamelet.json diff --git a/kamelet.json b/kamelet.json new file mode 100644 index 0000000..b203b3b --- /dev/null +++ b/kamelet.json @@ -0,0 +1,207 @@ +{ + "apiVersion": "camel.apache.org/v1", + "kind": "Kamelet", + "metadata": { + "name": "ogcapi-features-action", + "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,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgd2lkdGg9IjIxMDAiCiAgIGhlaWdodD0iMjEwMCIKICAgdmlld0JveD0iMCAwIDIxMDAgMjEwMCIKICAgdmVyc2lvbj0iMS4xIgogICB4bWw6c3BhY2U9InByZXNlcnZlIgogICBzdHlsZT0iY2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjIiCiAgIGlkPSJzdmcxMTEwIgogICBzb2RpcG9kaTpkb2NuYW1lPSJPcGVuX0dlb3NwYXRpYWxfQ29uc29ydGl1bV9sb2dvLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjIgKDBhMDBjZjUzMzksIDIwMjItMDItMDQpIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iPjxkZWZzCiAgIGlkPSJkZWZzMTExNCIgLz48c29kaXBvZGk6bmFtZWR2aWV3CiAgIGlkPSJuYW1lZHZpZXcxMTEyIgogICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgIHNob3dncmlkPSJmYWxzZSIKICAgaW5rc2NhcGU6em9vbT0iMC4xMjgzNzUiCiAgIGlua3NjYXBlOmN4PSIxNDkxLjcyMzUiCiAgIGlua3NjYXBlOmN5PSIxNDA5LjkzMTgiCiAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iOTgzIgogICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgaW5rc2NhcGU6d2luZG93LXk9IjAiCiAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9Ik9HQy0yRC1Mb2NrdXAtdy0tVHJhZGVtYXJrIiAvPgogICAgPGcKICAgaWQ9Ik9HQy0yRC1Mb2NrdXAtdy0tVHJhZGVtYXJrIgogICBzZXJpZjppZD0iT0dDIDJEIExvY2t1cCB3LyBUcmFkZW1hcmsiCiAgIHRyYW5zZm9ybT0ibWF0cml4KDIwLjA2NTEsMCwwLDIwLjA2NTEsLTE0MzUuMDksLTEwMjQuMTQpIj4KICAgICAgICAKICAgICAgICA8ZwogICBpZD0iQ3ViZSIKICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM1LjkyNzA1NiwtNDkuNDQ2NTI0KSI+CiAgICAgICAgICAgIDxnCiAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1Ni4yMTcsMTYxLjU2OSkiCiAgIGlkPSJnMTA5OCI+CiAgICAgICAgICAgICAgICA8cGF0aAogICBkPSJNIDAsMTQuNjUzIDAuMDAxLDQzLjk4MyAtNDIuMzEyLDE5LjU1NCAtNDIuMzEzLC0yOS4zMyAwLC00LjkwMSB2IDkuNzc2IGwgLTguNDQ2LC00Ljg3NCAtNC4yMzMsLTIuNDQ1IC0yMS4xNjcsLTEyLjIyMSB2IDI5LjMzIGwgMjUuNCwxNC42NjYgdiAtOS43NzcgbCAtMTIuNywtNy4zMzMgMC4wMDEsLTQuODg4IGggLTAuMDAxIFYgMi40NDUgWiIKICAgc3R5bGU9ImZpbGw6IzAwYjFmZjtmaWxsLXJ1bGU6bm9uemVybyIKICAgaWQ9InBhdGgxMDk2IiAvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxnCiAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MC40NTUsMTEwLjI2MSkiCiAgIGlkPSJnMTEwMiI+CiAgICAgICAgICAgICAgICA8cGF0aAogICBkPSJNIDAsMjkuMzMgLTI1LjQwMywxNC42NjUgMCwtMC4wMDEgMjUuMzk5LDE0LjY2NSAyMS4xNjcsMTcuMTA5IFogTSAtMC4wMDEsLTkuNzc3IC00Mi4zMzYsMTQuNjY1IC0wLjAwMSwzOS4xMDcgNDIuMzMzLDE0LjY2NSBaIgogICBzdHlsZT0iZmlsbDojMDBiMWZmO2ZpbGwtcnVsZTpub256ZXJvIgogICBpZD0icGF0aDExMDAiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPGcKICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTgxLjY2LDE4MS4yMzkpIgogICBpZD0iZzExMDYiPgogICAgICAgICAgICAgICAgPHBhdGgKICAgZD0ibSAwLC0yNC42ODggOC40NjgsLTQuODg4IDguNDY2LC00Ljg4OSAxMGUtNCw5Ljc3NyA4LjQ0NCwtNC44NzUgdiAtMTkuNDQ0IGwgLTQyLjMxMiwyNC40MjkgdiA5LjY2NiBoIDAuMDAxIGwgLTAuMDAxLDIuOTE4IDAuMDAxLDM2LjE5IC0wLjAyMiwtMC4wMTMgdiAwLjEzNiBMIDI1LjM3OSwtMC4xMjMgdiAtMTkuNjY1IGwgLTguNDQ0LDQuODc3IHYgOS43NzYgTCAtOC40NjYsOS41MyAtOC40NjUsLTE5Ljc5OSBaIgogICBzdHlsZT0iZmlsbDojMDBiMWZmO2ZpbGwtcnVsZTpub256ZXJvIgogICBpZD0icGF0aDExMDQiIC8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo=", + "camel.apache.org/provider": "Apache Software Foundation", + "camel.apache.org/kamelet.group": "Geospatial", + "camel.apache.org/kamelet.namespace": "Geo" + }, + "labels": { + "camel.apache.org/kamelet.type": "action" + } + }, + "spec": { + "definition": { + "title": "OGC Api Feature Get Item Action", + "description": "Returns the items of the collection provided of an OGC API Features server.", + "required": [ + "url", + "collection" + ], + "type": "object", + "properties": { + "url": { + "title": "URL", + "description": "The URL to fetch for data", + "type": "string", + "example": "https://emotional.byteroad.net", + "pattern": "^(http|https)://.*" + }, + "collection": { + "title": "Collection", + "description": "Name of the collection we want to extract items from.", + "type": "string" + }, + "bbox": { + "title": "Bounding Box", + "description": "Bounding Box of the items we want to retrieve.", + "example": "160.6,-55.95,-170,-25.89", + "default": "-180,-90,180,90", + "type": "string" + }, + "limit": { + "title": "Limit", + "description": "Maximum number of items to retrieve. Must be a number between 1 and 10 000.", + "type": "integer", + "default": 10 + }, + "split": { + "title": "Split by Feature", + "description": "When true, instead of returning the full geojson, split the message into each feature.", + "type": "boolean", + "default": false + }, + "query": { + "title": "Query", + "description": "Separated list by `&` of properties we want to query.", + "example": "property1=1&property2=dos", + "default": "", + "type": "string" + } + } + }, + "types": { + "in": { + "mediaType": "text/plain" + }, + "out": { + "mediaType": "application/json" + } + }, + "dependencies": [ + "camel:core", + "camel:http", + "camel:kamelet", + "camel:jsonpath", + "camel:jackson" + ], + "template": { + "from": { + "uri": "kamelet:source", + "steps": [ + { + "setHeader": { + "name": "Accept", + "constant": "application/geo+json" + } + }, + { + "setHeader": { + "name": "CamelHttpQuery", + "simple": "limit={{limit}}&bbox={{bbox}}&{{?query}}&${body}" + } + }, + { + "setBody": { + "simple": "" + } + }, + { + "to": { + "uri": "{{url}}/collections/{{collection}}/items" + } + }, + { + "removeHeader": { + "name": "Accept" + } + }, + { + "removeHeader": { + "name": "CamelHttpQuery" + } + }, + { + "convertBodyTo": { + "type": "java.lang.String" + } + }, + { + "choice": { + "when": [ + { + "simple": "{{split}}", + "steps": [ + { + "split": { + "jsonpath": "$.features[*]", + "steps": [ + { + "marshal": { + "json": {} + } + }, + { + "to": "kamelet:sink" + } + ] + } + } + ] + } + ], + "otherwise": { + "steps": [ + { + "to": "kamelet:sink" + } + ] + } + } + } + ] + } + } + }, + "propertiesSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "OGC Api Feature Get Item Action", + "description": "Returns the items of the collection provided of an OGC API Features server.", + "required": [ + "url", + "collection" + ], + "properties": { + "url": { + "type": "string", + "title": "URL", + "description": "The URL to fetch for data" + }, + "collection": { + "type": "string", + "title": "Collection", + "description": "Name of the collection we want to extract items from." + }, + "bbox": { + "type": "string", + "title": "Bounding Box", + "description": "Bounding Box of the items we want to retrieve.", + "default": "-180,-90,180,90" + }, + "limit": { + "type": "integer", + "title": "Limit", + "description": "Maximum number of items to retrieve. Must be a number between 1 and 10 000.", + "default": 10 + }, + "split": { + "type": "boolean", + "title": "Split by Feature", + "description": "When true, instead of returning the full geojson, split the message into each feature.", + "default": false + }, + "query": { + "type": "string", + "title": "Query", + "description": "Separated list by `&` of properties we want to query.", + "default": "" + } + } + } +} \ No newline at end of file