# ---------------------------------------------------------------------------
# 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/v1alpha1
kind: Kamelet
metadata:
  name: google-storage-cdc-source
  annotations:
    camel.apache.org/kamelet.support.level: "Preview"
    camel.apache.org/catalog.version: "3.21.0"
    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1MDAiIHZpZXdCb3g9Ii0xLjYzMzIzNTQzIDcuMDMyNjA5MzMgMTMxLjI2NTc0NjgyIDExNC40MzkzOTA2NyIgd2lkdGg9IjI1MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2NCIgeDI9IjY0IiB5MT0iNy4wMzQiIHkyPSIxMjAuNzg5Ij48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM0Mzg3ZmQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0NjgzZWEiLz48L2xpbmVhckdyYWRpZW50PjxwYXRoIGQ9Im0yNy43OSAxMTUuMjE3LTI2LjI1LTQ1LjQ2OGExMS40OTkgMTEuNDk5IDAgMCAxIDAtMTEuNDk5bDI2LjI1LTQ1LjQ2N2ExMS41IDExLjUgMCAwIDEgOS45Ni01Ljc1aDUyLjVhMTEuNSAxMS41IDAgMCAxIDkuOTU5IDUuNzVsMjYuMjUgNDUuNDY3YTExLjQ5OSAxMS40OTkgMCAwIDEgMCAxMS41bC0yNi4yNSA0NS40NjdhMTEuNSAxMS41IDAgMCAxIC05Ljk1OSA1Ljc0OWgtNTIuNWExMS40OTkgMTEuNDk5IDAgMCAxIC05Ljk2LTUuNzV6IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0ibTEyMS4wNTQgNzkuNTgtMzEuODM2LTMxLjgzNC01Ljg1OCAxLjIxNC0xNC42MDMtMTQuNjAyLTQuNjczIDguNzM5LTIuNTM0IDEwLjEwOSA0LjI4OSA0LjI5LTguMjM4IDEuNjgyLTExLjI5Ni0xMS4yOTYtNy42NyA3LjM3MyAxNC4xMjMgMTQuMTI1LTE0Ljk3IDExLjkgNDAuMTkzIDQwLjE5MiAxOS41ODEtLjE5eiIgb3BhY2l0eT0iLjA3Ii8+PGcgZmlsbD0iI2ZmZiI+PGNpcmNsZSBjeD0iODUuNTE5IiBjeT0iNTEuNTc2IiByPSI1LjMyNCIvPjxjaXJjbGUgY3g9IjQyLjQ4IiBjeT0iNTEuNTc2IiByPSI1LjMyNCIvPjxjaXJjbGUgY3g9IjY0IiBjeT0iODguODQ5IiByPSI1LjMyNSIvPjxjaXJjbGUgY3g9IjY0IiBjeT0iNjQiIHI9IjguNjAyIi8+PGNpcmNsZSBjeD0iNDIuNDgiIGN5PSI3Ni40MjQiIHI9IjYuNzU4Ii8+PGNpcmNsZSBjeD0iODUuNTE5IiBjeT0iNzYuNDI0IiByPSI2Ljc1OCIvPjxjaXJjbGUgY3g9IjY0IiBjeT0iMzkuMTUxIiByPSI2Ljc1OSIvPjwvZz48L3N2Zz4="
    camel.apache.org/provider: "Apache Software Foundation"
    camel.apache.org/kamelet.group: "Google Storage"
    camel.apache.org/kamelet.namespace: "GCP"
  labels:
    camel.apache.org/kamelet.type: "source"
spec:
  definition:
    title: "Google Storage CDC Source"
    description: |-
      Receive data from Google Pubsub reporting events related to a Google Storage bucket.

      Service account key is the basic method for authenticating to the Google Pubsub and Google Storage.

      To use this Kamelet you'll need to set up Events notification for your Google Storage Bucket.
      
      You must encode the `serviceAccountKey` property before you pass it as a parameter.
    required:
      - projectId
      - subscriptionName
      - serviceAccountKey
      - bucketNameOrArn
    type: object
    properties:
      projectId:
        title: Project Id
        description: The Google Cloud Pub/Sub Project ID.
        type: string
      subscriptionName:
        title: Subscription Name
        description: The subscription name.
        type: string
      serviceAccountKey:
        title: Service Account Key
        description: The service account key to use as credentials for the Pub/Sub publisher/subscriber. You must encode this value in base64.
        type: binary
        x-descriptors:
        - urn:camel:group:credentials
      synchronousPull:
        title: Synchronous Pull
        description: Specifies to synchronously pull batches of messages.
        type: boolean
        x-descriptors:
        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
        default: false
      maxMessagesPerPoll:
        title: Max Messages Per Poll
        description: The maximum number of messages to receive from the server in a single API call.
        type: integer
        default: 1
      concurrentConsumers:
        title: Concurrent Consumers
        description: The number of parallel streams to consume from the subscription.
        type: integer
        default: 1
      bucketNameOrArn:
        title: Bucket Name Or ARN
        description: The Google Cloud Storage bucket name or Bucket Amazon Resource Name (ARN).
        type: string
      getObject:
        title: Get Object in Bucket
        description: >-
          If getObject is enabled, then the file created in the Bucket will be
          get and returned as body, if not only the event will be returned as body.
        type: boolean
        x-descriptors:
          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
        default: false        
  dependencies:
    - "camel:kamelet"
    - "camel:google-pubsub"
    - "camel:google-storage"
    - "camel:jackson"
    - "camel:core"
  template:
    from:
      uri: "google-pubsub://{{projectId}}:{{subscriptionName}}"
      parameters:
        serviceAccountKey: "base64:{{serviceAccountKey}}"
        synchronousPull: "{{synchronousPull}}"
        maxMessagesPerPoll: "{{maxMessagesPerPoll}}"
        concurrentConsumers: "{{concurrentConsumers}}"
      steps:
        - choice:
            precondition: true
            when:
              - simple: '${properties:getObject:true}'
                steps:
                  - set-property:
                      name: google-storage-event-type
                      simple: "${headers.CamelGooglePubsubAttributes[eventType]}"
                  - set-property:
                      name: google-storage-object-id
                      simple: "${headers.CamelGooglePubsubAttributes[objectId]}"
                  - set-property:
                      name: google-storage-bucket-id
                      simple: "${headers.CamelGooglePubsubAttributes[bucketId]}"
                  - choice:
                      when:
                        - simple: '${exchangeProperty.google-storage-event-type} == "OBJECT_FINALIZE" && ${exchangeProperty.google-storage-bucket-id} == "{{bucketNameOrArn}}"'
                          steps:
                            - toD: >-
                                google-storage:{{bucketNameOrArn}}?serviceAccountKey=base64:{{serviceAccountKey}}&operation=getObject&objectName=${exchangeProperty.google-storage-object-id}
        - to: 'kamelet:sink'