// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/dropbox-source.svg[] Dropbox Source

*Provided by: "Apache Software Foundation"*

*Support Level for this Kamelet is: "Preview"*

Consume Files from Dropbox.

== Configuration Options

The following table summarizes the configuration options available for the `dropbox-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *accessToken {empty}* *| Dropbox Access Token| The access Token to use to access Dropbox| string| | 
| *clientIdentifier {empty}* *| Client Identifier| Dropbox App client Identifier| string| | 
| *period {empty}* *| Period between Polls| The interval between fetches to the Dropbox remote path in milliseconds| integer| `10000`| 
| *query {empty}* *| Queries| A space-separated list of sub-strings to search for. A file matches only if it contains all the sub-strings. If this option is not set, all files will be matched.| string| | 
| *remotePath {empty}* *| Remote Path| Original file or folder to work with| string| | 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `dropbox-source` can be used in various contexts.

=== Knative Source

The `dropbox-source` Kamelet can be used as Knative source by binding it to a Knative object.

.dropbox-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: dropbox-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: dropbox-source
    properties:
      accessToken: "The Dropbox Access Token"
      clientIdentifier: "The Client Identifier"
      query: "The Queries"
      remotePath: "The Remote Path"
  sink:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  
----
Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `dropbox-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f dropbox-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:dropbox
- camel:kamelet
- camel:core
- camel:jsonpath
- camel:timer 

==== *Binding to Knative using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind dropbox-source -p "source.accessToken=The Dropbox Access Token" -p "source.clientIdentifier=The Client Identifier" -p "source.query=The Queries" -p "source.remotePath=The Remote Path" channel/mychannel
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

=== Kafka Source

The `dropbox-source` Kamelet can be used as Kafka source by binding it to a Kafka topic.

.dropbox-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: dropbox-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: dropbox-source
    properties:
      accessToken: "The Dropbox Access Token"
      clientIdentifier: "The Client Identifier"
      query: "The Queries"
      remotePath: "The Remote Path"
  sink:
    ref:
      kind: KafkaTopic
      apiVersion: kafka.strimzi.io/v1beta1
      name: my-topic
  
----

Ensure that you've installed https://strimzi.io/[Strimzi] and created a topic named `my-topic` in the current namespace.
Make also sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `dropbox-source-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the source using the following command:

[source,shell]
----
kubectl apply -f dropbox-source-binding.yaml
----

==== *Binding to Kafka using the Kamel CLI:*

The procedure described above can be simplified into a single execution of the `kamel bind` command:

[source,shell]
----
kamel bind dropbox-source -p "source.accessToken=The Dropbox Access Token" -p "source.clientIdentifier=The Client Identifier" -p "source.query=The Queries" -p "source.remotePath=The Remote Path" kafka.strimzi.io/v1beta1:KafkaTopic:my-topic
----

This will create the KameletBinding under the hood and apply it to the current namespace in the cluster.

// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
