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

*Provided by: "Apache Software Foundation"*

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

Receive data from Fhir server.

== Configuration Options

The following table summarizes the configuration options available for the `fhir-source` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *password {empty}* *| Password| The password to access the Fhir server| string| | 
| *serverUrl {empty}* *| Server URL| The Fhir server url| string| | 
| *username {empty}* *| Username| The username to access the Fhir server| string| | 
| encoding| Encoding| Encoding to use for all request. Possible values are JSON and XML| string| `"JSON"`| 
| fhirVersion| Fhir Version| The FHIR Version to use. There are 6 enums and the value can be one of DSTU2, DSTU2_HL7ORG, DSTU2_1, DSTU3, R4, R5| string| `"R4"`| 
| prettyPrint| Json Pretty Print| Define if the Json must be pretty print or not| boolean| `true`| 
| url| URL| The Fhir resource type url| string| `"/Patient"`| 
|===

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

== Usage

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

=== Knative Source

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

.fhir-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: fhir-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: fhir-source
    properties:
      password: "The Password"
      serverUrl: "The Server URL"
      username: "The Username"
  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 `fhir-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 fhir-source-binding.yaml
----

==== *Dependencies*

The Kamelet needs the following dependencies:


- camel:fhir

- camel:kamelet
 

==== *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 fhir-source -p "source.password=The Password" -p "source.serverUrl=The Server URL" -p "source.username=The Username" channel/mychannel
----

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

=== Kafka Source

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

.fhir-source-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: fhir-source-binding
spec:
  source:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: fhir-source
    properties:
      password: "The Password"
      serverUrl: "The Server URL"
      username: "The Username"
  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 `fhir-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 fhir-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 fhir-source -p "source.password=The Password" -p "source.serverUrl=The Server URL" -p "source.username=The Username" 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
