---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: Connector
  name: chunk
data:
  deployment.yml: |
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        funktion.fabric8.io/kind: Subscription
        connector: chunk
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            funktion.fabric8.io/kind: Subscription
            connector: chunk
        spec:
          containers:
          - image: funktion/connector-chunk:${project.version}
            name: connector
  schema.yml: |
    ---
    component:
      kind: component
      scheme: chunk
      syntax: chunk:resourceUri
      title: Chunk
      description: Transforms the message using a Chunk template.
      label: transformation
      deprecated: false
      async: false
      producerOnly: true
      javaType: org.apache.camel.component.chunk.ChunkComponent
      groupId: org.apache.camel
      artifactId: camel-chunk
      version: 2.18.3
    componentProperties: {}
    properties:
      resourceUri:
        kind: path
        group: producer
        required: true
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        order: 0
      contentCache:
        kind: parameter
        group: producer
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Sets whether to use resource content cache or not
        order: 1
      encoding:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Define the encoding of the body
        order: 2
      extension:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Define the file extension of the template
        order: 3
      themeFolder:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Define the themes folder to scan
        order: 4
      themeLayer:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Define the theme layer to elaborate
        order: 5
      themeSubfolder:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Define the themes subfolder to scan
        order: 6
      synchronous:
        kind: parameter
        group: advanced
        label: advanced
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        order: 7
  documentation.adoc: |+
    [[Chunk-Chunk]]
    Chunk
    ~~~~~

    *Available as of Camel 2.15*

    The *chunk:* component allows for processing a message using a
    http://www.x5software.com/chunk/examples/ChunkExample?loc=en_US[Chunk] template.
    This can be ideal when using link:templating.html[Templating] to
    generate responses for requests.

    Maven users will need to add the following dependency to
    their `pom.xml` for this component:

    [source,xml]
    ---------------------------------------------------------------------------------
    <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-chunk</artifactId>
    <version>x.x.x</version> <!-- use the same version as your Camel core version -->
    </dependency>
    ---------------------------------------------------------------------------------

    [[Chunk-URIformat]]
    URI format
    ^^^^^^^^^^

    [source,java]
    ----------------------------
    chunk:templateName[?options]
    ----------------------------

    Where *templateName* is the classpath-local URI of the template to
    invoke.

    You can append query options to the URI in the following
    format, `?option=value&option=value&...`

    [[Chunk-Options]]
    Options
    ^^^^^^^


    // component options: START
    The Chunk component has no options.
    // component options: END



    // endpoint options: START
    The Chunk component supports 8 endpoint options which are listed below:

    {% raw %}
    [width="100%",cols="2,1,1m,1m,5",options="header"]
    |=======================================================================
    | Name | Group | Default | Java Type | Description
    | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
    | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
    | encoding | producer |  | String | Define the encoding of the body
    | extension | producer |  | String | Define the file extension of the template
    | themeFolder | producer |  | String | Define the themes folder to scan
    | themeLayer | producer |  | String | Define the theme layer to elaborate
    | themeSubfolder | producer |  | String | Define the themes subfolder to scan
    | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    |=======================================================================
    {% endraw %}
    // endpoint options: END


    Chunk component will look for a specific template in _themes_ folder
    with extensions _.chtml_ or _.cxml. _If you need to specify a different
    folder or extensions, you will need to use the specific options listed
    above.

    [[Chunk-ChunkContext]]
    Chunk Context
    ^^^^^^^^^^^^^

    Camel will provide exchange information in the Chunk context (just
    a `Map`). The `Exchange` is transferred as:

     
    [width="100%",cols="20%,80%",options="header",]
    |=======================================================================
    |key |value

    |`exchange` |The `Exchange` itself.

    |`exchange.properties` |The `Exchange` properties.

    |`headers` |The headers of the In message.

    |`camelContext` |The Camel Context.

    |`request` |The In message.

    |`body` |The In message body.

    |`response` |The Out message (only for InOut message exchange pattern).
    |=======================================================================

    [[Chunk-Dynamictemplates]]
    Dynamic templates
    ^^^^^^^^^^^^^^^^^

    Camel provides two headers by which you can define a different resource
    location for a template or the template content itself. If any of these
    headers is set then Camel uses this over the endpoint configured
    resource. This allows you to provide a dynamic template at runtime.

    [width="100%",cols="20%,10%,10%,60%",options="header",]
    |=======================================================================
    |Header |Type |Description |Support Version

    |ChunkConstants.CHUNK_RESOURCE_URI |String |A URI for the template resource to use instead of the endpoint
    configured. |

    |ChunkConstants.CHUNK_TEMPLATE |String |The template to use instead of the endpoint configured. |
    |=======================================================================

    [[Chunk-Samples]]
    Samples
    ^^^^^^^

    For example you could use something like:

    [source,java]
    --------------------------
    from("activemq:My.Queue").
    to("chunk:template");
    --------------------------

    To use a Chunk template to formulate a response for a message for InOut
    message exchanges (where there is a `JMSReplyTo` header).

    If you want to use InOnly and consume the message and send it to another
    destination you could use:

    [source,java]
    -----------------------------
    from("activemq:My.Queue").
    to("chunk:template").
    to("activemq:Another.Queue");
    -----------------------------

    It's possible to specify what template the component should use
    dynamically via a header, so for example:

    [source,java]
    ------------------------------------------------------------------
    from("direct:in").
    setHeader(ChunkConstants.CHUNK_RESOURCE_URI).constant("template").
    to("chunk:dummy");
    ------------------------------------------------------------------

    An example of Chunk component options use:

    [source,java]
    ---------------------------------------------------------------------------------------
    from("direct:in").
    to("chunk:file_example?themeFolder=template&themeSubfolder=subfolder&extension=chunk");
    ---------------------------------------------------------------------------------------

    In this example Chunk component will look for the file
    _file_example.chunk_ in the folder _template/subfolder._

    [[Chunk-TheEmailSample]]
    The Email Sample
    ^^^^^^^^^^^^^^^^

    In this sample we want to use Chunk templating for an order confirmation
    email. The email template is laid out in Chunk as:

    [source,java]
    ----------------------------------------------
     
    Dear {$headers.lastName}, {$headers.firstName}

    Thanks for the order of {$headers.item}.

    Regards Camel Riders Bookstore
    {$body}
    ----------------------------------------------

    [[Chunk-SeeAlso]]
    See Also
    ^^^^^^^^

    * link:configuring-camel.html[Configuring Camel]
    * link:component.html[Component]
    * link:endpoint.html[Endpoint]
    * link:getting-started.html[Getting Started]

