# ---------------------------------------------------------------------------
# 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: mongodb-source
  annotations:
    camel.apache.org/kamelet.support.level: "Stable"
    camel.apache.org/catalog.version: "4.10.2"
    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzEgNjciIGZpbGw9IiNmZmYiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjx1c2UgeGxpbms6aHJlZj0iI0EiIHg9IjEiIHk9IjEiLz48c3ltYm9sIGlkPSJBIiBvdmVyZmxvdz0idmlzaWJsZSI+PGcgc3Ryb2tlPSJub25lIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Ik0xNC4xNzQuMTc1bDEuNzA4IDMuMjA4Yy4zNzEuNTc5LjgwNCAxLjExNyAxLjI5IDEuNjA0IDEuNDMgMS40MyAyLjc4OCAyLjkyOCA0LjAwOCA0LjUzMiAyLjg5NCAzLjggNC44NDYgOCA2LjI0IDEyLjU4NGEzMC45NCAzMC45NCAwIDAgMSAxLjMyNCA4LjU0Yy4xNCA4LjY0Ni0yLjgyNCAxNi4wNy04LjggMjIuMjQtLjk3Mi45NzgtMi4wMjIgMS44NzYtMy4xNCAyLjY4NC0uNTkyIDAtLjg3Mi0uNDU0LTEuMTE2LS44NzItLjQ1NC0uNzY2LS43MzItMS42NC0uODcyLTIuNTEtLjIxLTEuMDQ2LS4zNDgtMi4wOTItLjI4LTMuMTcydi0uNDg4Yy0uMDQ4LS4xMjQtLjU3LTQ4LjEyNC0uMzYyLTQ4LjM1eiIgZmlsbD0iIzU5OTYzNiIvPjxwYXRoIGQ9Ik0xNC4xNzQuMDY5Yy0uMDctLjE0LS4xNC0uMDM0LS4yMS4wMzQuMDM0LjctLjIxIDEuMzI0LS41OTIgMS45Mi0uNC41OTItLjk3NiAxLjA0Ni0xLjUzNCAxLjUzNC0zLjEgMi42ODQtNS41NCA1LjkyNi03LjQ5NCA5LjU1Mi0yLjYgNC44OC0zLjk0IDEwLjExLTQuMzIgMTUuNjE2LS4xNzQgMS45ODYuNjI4IDguOTk0IDEuMjU0IDExLjAxNiAxLjcwOCA1LjM2OCA0Ljc3NiA5Ljg2NiA4Ljc1IDEzLjc3YTM1LjA4IDM1LjA4IDAgMCAwIDMuMSAyLjY1Yy4zMTQgMCAuMzQ4LS4yOC40LS40ODhhOS41NyA5LjU3IDAgMCAwIC4zMTQtMS4zNmwuNy01LjIyOEwxNC4xNzQuMDY5eiIgZmlsbD0iIzZjYWM0OCIvPjxwYXRoIGQ9Ik0xNS44ODIgNTcuNjkxYy4wNy0uOC40NTQtMS40NjQuODcyLTIuMTI2LS40LS4xNzQtLjczMi0uNTItLjk3Ni0uOTA2YTYuNDcgNi40NyAwIDAgMS0uNTItMS4xNWMtLjQ4OC0xLjQ2NC0uNTkyLTMtLjczMi00LjQ5NnYtLjkwNmMtLjE3NC4xNC0uMjEgMS4zMjQtLjIxIDEuNS0uMTAyIDEuNTgxLS4zMTIgMy4xNTQtLjYyOCA0LjcwNi0uMTA0LjYyOC0uMTc0IDEuMjU0LS41NiAxLjgxMiAwIC4wNyAwIC4xNC4wMzQuMjQ0LjYyOCAxLjg0OC44IDMuNzMuOTA2IDUuNjQ4di43YzAgLjgzNi0uMDM0LjY2LjY2Ljk0LjI4LjEwNC41OTIuMTQuODcyLjM0OC4yMSAwIC4yNDQtLjE3NC4yNDQtLjMxNGwtLjEwNC0xLjE1di0zLjIwOGMtLjAzNC0uNTYuMDctMS4xMTYuMTQtMS42NHoiIGZpbGw9IiNjMmJmYmYiLz48L2c+PC9zeW1ib2w+PC9zdmc+"
    camel.apache.org/provider: "Apache Software Foundation"
    camel.apache.org/kamelet.group: "MongoDB"
    camel.apache.org/kamelet.namespace: "Nosql"
  labels:
    camel.apache.org/kamelet.type: "source"
spec:
  definition:
    title: "MongoDB Source"
    description: |-
      Consume data from MongoDB.

      If you enable the `persistentTailTracking` property, the consumer keeps track of the last consumed message and, on the next restart, the consumption restarts from that message. If you enable `persistentTailTracking`, you must provide a value for the `tailTrackIncreasingField` property (by default it is optional).

      If you disable the `persistentTailTracking` property, the consumer consumes the whole collection and waits in idle for new data to consume.

      The collection that provides the data must be a capped collection.
    required:
      - hosts
      - collection
      - database
    type: object
    properties:
      hosts:
        title: MongoDB Hosts
        description: A comma-separated list of MongoDB host addresses in `host:port` format.
        type: string
      collection:
        title: MongoDB Collection
        description: The name of the MongoDB collection to bind to this endpoint.
        type: string
      password:
        title: MongoDB Password
        description: The user password for accessing MongoDB.
        type: string
        format: password
        x-descriptors:
        - urn:camel:group:credentials
      username:
        title: MongoDB Username
        description: The username for accessing MongoDB. The username must be present in the MongoDB's authentication database (`authenticationDatabase`). By default, the MongoDB `authenticationDatabase` is 'admin'.
        type: string
        x-descriptors:
        - urn:camel:group:credentials
      ssl:
        title: Enable Ssl for Mongodb Connection
        description: whether to enable ssl connection to mongodb
        type: boolean
        default: true
      sslValidationEnabled:
        title: Enables Ssl Certificates Validation and Host name checks.
        description: IMPORTANT this should be disabled only in test environment since can pose security issues.
        type: boolean
        default: true
      database:
        title: MongoDB Database
        description: The name of the MongoDB database.
        type: string
      persistentTailTracking:
        title: MongoDB Persistent Tail Tracking
        description: Specifies to enable persistent tail tracking, which is a mechanism to keep track of the last consumed data across system restarts. The next time the system is up, the endpoint recovers the cursor from the point where it last stopped consuimg data. This option will only work on capped collections.
        type: boolean
        default: false
      tailTrackIncreasingField:
        title: MongoDB Tail Track Increasing Field
        description: The correlation field in the incoming data which is of increasing nature and is used to position the tailing cursor every time it is generated.
        type: string
  dependencies:
    - "camel:kamelet"
    - "camel:mongodb"
    - "camel:jackson"
  template:
    beans:
      - name: local-mongodb
        type: "#class:org.apache.camel.component.mongodb.MongoDbComponent"
      - name: mongo-client
        type: "#class:org.apache.camel.component.kamelet.utils.mongodb.SslAwareMongoClient"
        properties:
          password: "{{?password}}"
          username: "{{?username}}"
          hosts: "{{hosts}}"
          ssl: "{{ssl}}"
          sslValidationEnabled: "{{sslValidationEnabled}}"
    from:
      uri: "{{local-mongodb}}:test"
      parameters:
        collection: "{{collection}}"
        database: "{{database}}"
        persistentTailTracking: "{{persistentTailTracking}}"
        tailTrackIncreasingField: "{{?tailTrackIncreasingField}}"
        mongoConnection: "#{{mongo-client}}"
      steps:
      - marshal:
          json: {}
      - to: kamelet:sink