---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: Connector
  name: string-template
data:
  deployment.yml: |
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        funktion.fabric8.io/kind: Subscription
        connector: string-template
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            funktion.fabric8.io/kind: Subscription
            connector: string-template
        spec:
          containers:
          - image: funktion/connector-string-template:${project.version}
            name: connector
  schema.yml: |
    ---
    component:
      kind: component
      scheme: string-template
      syntax: string-template:resourceUri
      title: String Template
      description: Transforms the message using a String template.
      label: transformation
      deprecated: false
      async: false
      producerOnly: true
      javaType: org.apache.camel.component.stringtemplate.StringTemplateComponent
      groupId: org.apache.camel
      artifactId: camel-stringtemplate
      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
      delimiterStart:
        kind: parameter
        group: producer
        type: string
        javaType: char
        deprecated: false
        secret: false
        defaultValue: <
        description: The variable start delimiter
        order: 2
      delimiterStop:
        kind: parameter
        group: producer
        type: string
        javaType: char
        deprecated: false
        secret: false
        defaultValue: '>'
        description: The variable end delimiter
        order: 3
      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: 4
  documentation.adoc: |+
    [[StringTemplate-StringTemplate]]
    String Template
    ~~~~~~~~~~~~~~~

    The *string-template:* component allows you to process a message using a
    http://www.stringtemplate.org/[String 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-stringtemplate</artifactId>
        <version>x.x.x</version>
        <!-- use the same version as your Camel core version -->
    </dependency>
    ------------------------------------------------------------

    [[StringTemplate-URIformat]]
    URI format
    ^^^^^^^^^^

    [source,java]
    --------------------------------------
    string-template:templateName[?options]
    --------------------------------------

    Where *templateName* is the classpath-local URI of the template to
    invoke; or the complete URL of the remote template.

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

    [[StringTemplate-Options]]
    Options
    ^^^^^^^


    // component options: START
    The String Template component has no options.
    // component options: END



    // endpoint options: START
    The String Template component supports 5 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
    | delimiterStart | producer | < | char | The variable start delimiter
    | delimiterStop | producer | > | char | The variable end delimiter
    | 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


    [[StringTemplate-Headers]]
    Headers
    ^^^^^^^

    Camel will store a reference to the resource in the message header with
    key, `org.apache.camel.stringtemplate.resource`. The Resource is an
    `org.springframework.core.io.Resource` object.

    [[StringTemplate-Hotreloading]]
    Hot reloading
    ^^^^^^^^^^^^^

    The string template resource is by default hot-reloadable for both file
    and classpath resources (expanded jar). If you set `contentCache=true`,
    Camel loads the resource only once and hot-reloading is not possible.
    This scenario can be used in production when the resource never changes.

    [[StringTemplate-StringTemplateAttributes]]
    StringTemplate Attributes
    ^^^^^^^^^^^^^^^^^^^^^^^^^

    Since Camel 2.14, you can define the custom context map by setting the
    message header "*CamelStringTemplateVariableMap*" just like the below
    code.

    [source,java]
    --------------------------------------------------------------------------
    Map<String, Object> variableMap = new HashMap<String, Object>();
    Map<String, Object> headersMap = new HashMap<String, Object>();
    headersMap.put("name", "Willem");
    variableMap.put("headers", headersMap);
    variableMap.put("body", "Monday");
    variableMap.put("exchange", exchange);
    exchange.getIn().setHeader("CamelStringTemplateVariableMap", variableMap);
    --------------------------------------------------------------------------

    [[StringTemplate-Samples]]
    Samples
    ^^^^^^^

    For example you could use a string template as follows in order to
    formulate a response to a message:

    [source,java]
    -----------------------------------------------
    from("activemq:My.Queue").
      to("string-template:com/acme/MyResponse.tm");
    -----------------------------------------------

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

    In this sample we want to use a string template to send an order
    confirmation email. The email template is laid out in `StringTemplate`
    as: This example works for *camel 2.11.0*. If your camel version is less
    than 2.11.0, the variables should be started and ended with $.

    [source,java]
    --------------------------------------------
    Dear <headers.lastName>, <headers.firstName>

    Thanks for the order of <headers.item>.

    Regards Camel Riders Bookstore
    <body>
    --------------------------------------------

    And the java code is as follows:

    [[StringTemplate-SeeAlso]]
    See Also
    ^^^^^^^^

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

