---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: Connector
  name: language
data:
  deployment.yml: |
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      labels:
        funktion.fabric8.io/kind: Subscription
        connector: language
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            funktion.fabric8.io/kind: Subscription
            connector: language
        spec:
          containers:
          - image: funktion/connector-language:${project.version}
            name: connector
  schema.yml: |
    ---
    component:
      kind: component
      scheme: language
      syntax: language:languageName:resourceUri
      title: Language
      description: The language component allows you to send a message to an endpoint which executes a script by any of the supported Languages in Camel.
      label: core,script
      deprecated: false
      async: false
      producerOnly: true
      javaType: org.apache.camel.component.language.LanguageComponent
      groupId: org.apache.camel
      artifactId: camel-core
      version: 2.18.3
    componentProperties: {}
    properties:
      languageName:
        kind: path
        group: producer
        required: true
        type: string
        javaType: java.lang.String
        enum:
        - bean
        - constant
        - el
        - exchangeProperty
        - file
        - groovy
        - header
        - javascript
        - jsonpath
        - jxpath
        - mvel
        - ognl
        - php
        - python
        - ref
        - ruby
        - simple
        - spel
        - sql
        - terser
        - tokenize
        - xpath
        - xquery
        - xtokenize
        deprecated: false
        secret: false
        description: Sets the name of the language to use
        order: 0
      resourceUri:
        kind: path
        group: producer
        required: false
        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: 1
      binary:
        kind: parameter
        group: producer
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String)
        order: 2
      cacheScript:
        kind: parameter
        group: producer
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: false
        description: Whether to cache the compiled script and reuse Notice reusing the script can cause side effects from processing one Camel org.apache.camel.Exchange to the next org.apache.camel.Exchange.
        order: 3
      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: 4
      script:
        kind: parameter
        group: producer
        type: string
        javaType: java.lang.String
        deprecated: false
        secret: false
        description: Sets the script to execute
        order: 5
      transform:
        kind: parameter
        group: producer
        type: boolean
        javaType: boolean
        deprecated: false
        secret: false
        defaultValue: true
        description: Whether or not the result of the script should be used as message body. This options is default true.
        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: |+
    [[Language-Language]]
    Language
    ~~~~~~~~

    *Available as of Camel 2.5*

    The language component allows you to send link:exchange.html[Exchange]
    to an endpoint which executes a script by any of the supported
    link:languages.html[Languages] in Camel. +
     By having a component to execute language scripts, it allows more
    dynamic routing capabilities. For example by using the
    link:routing-slip.html[Routing Slip] or link:dynamic-router.html[Dynamic
    Router] EIPs you can send messages to `language` endpoints where the
    script is dynamic defined as well.

    This component is provided out of the box in `camel-core` and hence no
    additional JARs is needed. You only have to include additional Camel
    components if the language of choice mandates it, such as using
    link:groovy.html[Groovy] or link:javascript.html[JavaScript] languages.

    [[Language-URIformat]]
    URI format
    ^^^^^^^^^^

    [source,java]
    ------------------------------------------
    language://languageName[:script][?options]
    ------------------------------------------

    And from Camel 2.11 onwards you can refer to an external resource for
    the script using same notation as supported by the other
    link:language.html[Language]s in Camel

    [source,java]
    -----------------------------------------------------------
    language://languageName:resource:scheme:location][?options]
    -----------------------------------------------------------

    [[Language-URIOptions]]
    URI Options
    ^^^^^^^^^^^


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



    // endpoint options: START
    The Language 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
    | languageName | producer |  | String | *Required* Sets the name of the language to use
    | resourceUri | producer |  | String | Path to the resource or a reference to lookup a bean in the Registry to use as the resource
    | binary | producer | false | boolean | Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String)
    | cacheScript | producer | false | boolean | Whether to cache the compiled script and reuse Notice reusing the script can cause side effects from processing one Camel org.apache.camel.Exchange to the next org.apache.camel.Exchange.
    | contentCache | producer | false | boolean | Sets whether to use resource content cache or not.
    | script | producer |  | String | Sets the script to execute
    | transform | producer | true | boolean | Whether or not the result of the script should be used as message body. This options is default true.
    | 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


    [[Language-MessageHeaders]]
    Message Headers
    ^^^^^^^^^^^^^^^

    The following message headers can be used to affect the behavior of the
    component

    [width="100%",cols="10%,90%",options="header",]
    |=======================================================================
    |Header |Description

    |`CamelLanguageScript` |The script to execute provided in the header. Takes precedence over
    script configured on the endpoint.
    |=======================================================================

    [[Language-Examples]]
    Examples
    ^^^^^^^^

    For example you can use the link:simple.html[Simple] language to
    link:message-translator.html[Message Translator] a message:

    In case you want to convert the message body type you can do this as
    well:

    You can also use the link:groovy.html[Groovy] language, such as this
    example where the input message will by multiplied with 2:

    You can also provide the script as a header as shown below. Here we use
    link:xpath.html[XPath] language to extract the text from the `<foo>`
    tag.

    [source,java]
    --------------------------------------------------------------------------------------------------------------------------------
    Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()");
    assertEquals("Hello World", out);
    --------------------------------------------------------------------------------------------------------------------------------

    [[Language-Loadingscriptsfromresources]]
    Loading scripts from resources
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    *Available as of Camel 2.9*

    You can specify a resource uri for a script to load in either the
    endpoint uri, or in the `Exchange.LANGUAGE_SCRIPT` header. +
     The uri must start with one of the following schemes: file:,
    classpath:, or http:

    For example to load a script from the classpath:

    By default the script is loaded once and cached. However you can disable
    the `contentCache` option and have the script loaded on each
    evaluation. +
     For example if the file myscript.txt is changed on disk, then the
    updated script is used:

    From *Camel 2.11* onwards you can refer to the resource similar to the
    other link:language.html[Language]s in Camel by prefixing with
    `"resource:"` as shown below:

    [[Language-SeeAlso]]
    See Also
    ^^^^^^^^

    * link:configuring-camel.html[Configuring Camel]
    * link:component.html[Component]
    * link:endpoint.html[Endpoint]
    * link:getting-started.html[Getting Started]
    * link:languages.html[Languages]
    * link:routing-slip.html[Routing Slip]
    * link:dynamic-router.html[Dynamic Router]
    * link:script.html[Script]

