---
apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-grape
      version: 1.1.23
      group: io.fabric8.funktion.connector
    name: grape
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: grape
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: grape
          spec:
            containers:
            - image: fabric8/connector-grape:1.1.23
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: grape
        syntax: grape:defaultCoordinates
        title: Grape
        description: Grape component allows you to fetch, load and manage additional jars when CamelContext is running.
        label: management,deployment
        producerOnly: true
        javaType: org.apache.camel.component.grape.GrapeEndpoint
        groupId: org.apache.camel
        artifactId: camel-grape
        version: 2.18.1
      componentProperties: {}
      properties:
        defaultCoordinates:
          kind: path
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          description: Maven coordinates to use as default to grab if the message body is empty.
        exchangePattern:
          kind: parameter
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          defaultValue: InOnly
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          type: boolean
          javaType: boolean
          deprecated: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Grape-GrapeComponent]]
      Grape Component
      ~~~~~~~~~~~~~~~

      Available as of Camel 2.16??

      http://docs.groovy-lang.org/latest/html/documentation/grape.html[Grape]
      component allows you to fetch, load and manage additional jars when
      `CamelContext` is running. In practice with Camel Grape component you
      can add new components, data formats and beans to your `CamelContext`
      without the restart of the router.


      [[Grape-Options]]
      Grape options
      ^^^^^^^^^^^^^

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


      // endpoint options: START
      The Grape component supports 3 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | defaultCoordinates |  |  | String | *Required* Maven coordinates to use as default to grab if the message body is empty.
      | exchangePattern |  | InOnly | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | synchronous |  | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Grape-Settingupclassloader]]
      Setting up class loader
      ^^^^^^^^^^^^^^^^^^^^^^^

      Grape requires using Groovy class loader with the `CamelContext`. You
      can enable Groovy class loading on the existing Camel Context using the
      `GrapeComponent#grapeCamelContext()` method:

      [source,java]
      --------------------------------------------------------------------------------
      import static org.apache.camel.component.grape.GrapeComponent.grapeCamelContext;
      ...
      CamelContext camelContext = grapeCamelContext(new DefaultCamelContext());
      --------------------------------------------------------------------------------

      You can also set up the Groovy class loader used be Camel context by
      yourself:

      [source,java]
      ------------------------------------------------------------------------------------
      camelContext.setApplicationContextClassLoader(new GroovyClassLoader(myClassLoader));
      ------------------------------------------------------------------------------------

      [[Grape-URIformat]]
      URI format
      ^^^^^^^^^^

      Grape component supports only producer endpoints.

      [source,java]
      -----------------------------
      grape:defaultMavenCoordinates
      -----------------------------

      For example the following snippet loads Camel FTP component:

      [source,java]
      ------------------------------------------------
      from("direct:loadCamelFTP").
        to("grape:org.apache.camel/camel-ftp/2.15.2");
      ------------------------------------------------

      You can also specify the Maven coordinates by sending them to the
      endpoint as the exchange body:

      [source,java]
      ----------------------------------------------------------
      from("direct:loadCamelFTP").
        setBody().constant("org.apache.camel/camel-ftp/2.15.2").
        to("grape:defaultMavenCoordinates");
      ----------------------------------------------------------

      [[Grape-AddingtheGrapecomponenttotheproject]]
      Adding the Grape component to the project
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      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-grape</artifactId>
          <version>x.y.z</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Grape-Defaultpayloadtype]]
      Default payload type
      ^^^^^^^^^^^^^^^^^^^^

      By default Camel Grape component operates on the String payloads:

      [source,java]
      ------------------------------------------------------------------------------------------------
      producerTemplate.sendBody("grape:defaultMavenCoordinates", "org.apache.camel/camel-ftp/2.15.2");
      ------------------------------------------------------------------------------------------------

      But of course Camel build-in??link:type-converter.html[type conversion
      API] can perform the automatic data type transformations for you. In the
      example below Camel automatically converts binary payload into the
      String:

      ??

      [source,java]
      -----------------------------------------------------------------------------------------------------------
      producerTemplate.sendBody("grape:defaultMavenCoordinates", "org.apache.camel/camel-ftp/2.15.2".getBytes());
      -----------------------------------------------------------------------------------------------------------

      [[Grape-Headers]]
      Headers
      ^^^^^^^

      The following headers are recognized by the Grape component:

      [width="100%",cols="10%,10%,10%,10%,60%",options="header",]
      |=======================================================================
      |Header |Java constant |Endpoint type |Value type |Description

      |`CamelGrapeCommand` |`GrapeConstants.GRAPE_COMMAND` |Producer |`org.apache.camel.component.grape.GrapeCommand` |The command to be performed by the Grape endpoint. Default to `grab`.
      |=======================================================================

      [[Grape-Loadingcomponentsatruntime]]
      Loading components at runtime
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In order to load the new component at the router runtime, just grab the
      jar containing the given component:

      [source,java]
      -------------------------------------------------------------------------
      ProducerTemplate template = camelContext.createProducerTemplate();
      template.sendBody("grape:grape", "org.apache.camel/camel-stream/2.15.2");
      template.sendBody("stream:out", "msg");
      -------------------------------------------------------------------------

      [[Grape-Loadingprocessorsbeanatruntime]]
      Loading processors??bean??at runtime
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In order to load the new processor??bean ??with your custom business login
      at the router runtime, just grab the jar containing the required bean:

      [source,java]
      -----------------------------------------------------------------------------------------------------------------
      ProducerTemplate template = camelContext.createProducerTemplate();
      template.sendBody("grape:grape", "com.example/my-business-processors/1.0");
      int productId = 1;
      int price = template.requestBody("bean:com.example.PricingBean?method=currentProductPrice", productId, int.class)
      -----------------------------------------------------------------------------------------------------------------

      ??

      [[Grape-LoadingdeployedjarsafterCamelcontextrestart]]
      Loading deployed jars after Camel context restart
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      After you download new jar, you usually would like to have it loaded by
      the Camel again after the restart of the `CamelContext`. It is certainly
      possible, as Grape component keeps track of the jar files you have
      installed. In order to load again the installed jars on the context
      startup, use the??`GrapeEndpoint.loadPatches()`??method in your route:??

      ??

      [source,java]
      -------------------------------------------------------------------------
      import static org.apache.camel.component.grape.GrapeEndpoint.loadPatches;

      ...??
      camelContext.addRoutes(
        new RouteBuilder() {??
          @Override??
          public void configure() throws Exception {??
            loadPatches(camelContext);
      ??
            from("direct:loadCamelFTP").
              to("grape:org.apache.camel/camel-ftp/2.15.2");??
          }
        });
      -------------------------------------------------------------------------

      ??

      [[Grape-Managingtheinstalledjars]]
      Managing the installed jars
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If you would like to check what jars have been installed into the given
      `CamelContext`, send message to the grape endpoint with
      the??`CamelGrapeCommand` header set to `GrapeCommand.listPatches`:

      [source,java]
      ----------------------------------------------------------------------------------------
            from("netty-http4:http://0.0.0.0:80/patches").
              setHeader(GrapeConstats.GRAPE_COMMAND, constant(CamelGrapeCommand.listPatches)).
              to("grape:list");??
      ----------------------------------------------------------------------------------------

      Connecting the to the route defined above using the HTTP client returns
      the list of the jars installed by Grape component:

      [source,java]
      ---------------------------------------
      $ curl http://my-router.com/patches
      grape:org.apache.camel/camel-ftp/2.15.2
      grape:org.apache.camel/camel-jms/2.15.2
      ---------------------------------------

      If you would like to remove the installed jars, so these won't be loaded
      again after the context restart, use the??`GrapeCommand.``clearPatches`
      command:

      [source,java]
      -----------------------------------------------------------------------------------------
            from("netty-http4:http://0.0.0.0:80/patches").
              setHeader(GrapeConstats.GRAPE_COMMAND, constant(CamelGrapeCommand.clearPatches)).
              setBody().constant("Installed patches have been deleted.");??
      -----------------------------------------------------------------------------------------

      [[Grape-SeeAlso]]
      See Also
      ^^^^^^^^

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

