This is an automated email from the ASF dual-hosted git repository.

onders pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new d8934d4  CAMEL-12464 Add support for transform with context
d8934d4 is described below

commit d8934d471eb86a913fe9dfe164b0891b06f35a92
Author: Ganesh Pagade <ganesh.pag...@tesco.com>
AuthorDate: Sun May 6 14:39:07 2018 +0530

    CAMEL-12464 Add support for transform with context
---
 .../apache/camel/component/jolt/JoltEndpoint.java  | 32 +++++++++++++---------
 .../camel/component/jolt/JoltFirstSampleTest.java  | 15 ++++++++++
 .../camel/component/jolt/firstSample/output.json   |  2 +-
 .../camel/component/jolt/firstSample/spec.json     |  6 ++++
 4 files changed, 41 insertions(+), 14 deletions(-)

diff --git 
a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
 
b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
index ec3c82a..fc51d36 100644
--- 
a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
+++ 
b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java
@@ -17,14 +17,9 @@
 package org.apache.camel.component.jolt;
 
 import java.io.InputStream;
+import java.util.Map;
 
-import com.bazaarvoice.jolt.Chainr;
-import com.bazaarvoice.jolt.Defaultr;
-import com.bazaarvoice.jolt.JsonUtils;
-import com.bazaarvoice.jolt.Removr;
-import com.bazaarvoice.jolt.Shiftr;
-import com.bazaarvoice.jolt.Sortr;
-import com.bazaarvoice.jolt.Transform;
+import com.bazaarvoice.jolt.*;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
@@ -32,6 +27,7 @@ import org.apache.camel.Message;
 import org.apache.camel.component.ResourceEndpoint;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
+import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -40,8 +36,8 @@ import org.apache.camel.util.ObjectHelper;
 @UriEndpoint(firstVersion = "2.16.0", scheme = "jolt", title = "JOLT", syntax 
= "jolt:resourceUri", producerOnly = true, label = "transformation")
 public class JoltEndpoint extends ResourceEndpoint {
     
-    private Transform transform;
-    
+    private JoltTransform transform;
+
     @UriParam(defaultValue = "Hydrated")
     private JoltInputOutputType outputType;
     
@@ -73,7 +69,7 @@ public class JoltEndpoint extends ResourceEndpoint {
         return "jolt:" + getResourceUri();
     }
 
-    private synchronized Transform getTransform() throws Exception {
+    private synchronized JoltTransform getTransform() throws Exception {
         if (transform == null) {
             if (log.isDebugEnabled()) {
                 String path = getResourceUri();
@@ -110,7 +106,7 @@ public class JoltEndpoint extends ResourceEndpoint {
     /**
      * Sets the Transform to use. If not set a Transform specified by the 
transformDsl will be created
      */
-    public void setTransform(Transform transform) {
+    public void setTransform(JoltTransform transform) {
         this.transform = transform;
     }
     
@@ -167,14 +163,24 @@ public class JoltEndpoint extends ResourceEndpoint {
             newEndpoint.onExchange(exchange);
             return;
         }
+
         Object input;
         if (getInputType() == JoltInputOutputType.JsonString) {
             input = 
JsonUtils.jsonToObject(exchange.getIn().getBody(InputStream.class));
         } else {
             input = exchange.getIn().getBody();
         }
-        Object output = getTransform().transform(input);
-                
+
+        Object output;
+
+        @SuppressWarnings("unchecked")
+        Map<String, Object> inputContextMap = 
exchange.getIn().getHeader(JoltConstants.JOLT_CONTEXT, Map.class);
+        if (inputContextMap != null) {
+            output = ((ContextualTransform)getTransform()).transform(input, 
inputContextMap);
+        } else {
+            output = ((Transform)getTransform()).transform(input);
+        }
+
         // now lets output the results to the exchange
         Message out = exchange.getOut();
         if (getOutputType() == JoltInputOutputType.JsonString) {
diff --git 
a/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java
 
b/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java
index a70cc5b..63bef43 100644
--- 
a/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java
+++ 
b/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java
@@ -16,12 +16,17 @@
  */
 package org.apache.camel.component.jolt;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ResourceHelper;
 import org.junit.Test;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Unit test based on the first sample test from the JOLT project.
  */
@@ -46,9 +51,19 @@ public class JoltFirstSampleTest extends CamelTestSupport {
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
+        final Processor processor = new Processor() {
+            public void process(Exchange exchange) {
+                Map<String, String> contextMap = new HashMap<>();
+                contextMap.put("contextB", "bb");
+
+                exchange.getIn().setHeader(JoltConstants.JOLT_CONTEXT, 
contextMap);
+            }
+        };
+
         return new RouteBuilder() {
             public void configure() {
                 from("direct://start")
+                        .process(processor)
                     
.to("jolt:org/apache/camel/component/jolt/firstSample/spec.json?inputType=JsonString&outputType=JsonString")
                     .to("mock:result");
             }
diff --git 
a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json
 
b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json
index 093bb81..7b7e8fc 100644
--- 
a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json
+++ 
b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json
@@ -1 +1 @@
-{"~a":"aa","~id":"id","~z":"zz","Rating":3,"RatingRange":5,"SecondaryRatings":{"quality":{"Id":"quality","Range":7,"Value":3},"sharpness":{"Id":"sharpness","Range":5,"Value":5}},"zz":"zz"}
\ No newline at end of file
+{"~a":"aa","~id":"id","~z":"zz","Rating":3,"RatingRange":5,"SecondaryRatings":{"quality":{"Id":"quality","Range":7,"Value":3},"sharpness":{"Id":"sharpness","Range":5,"Value":5}},"b":"bb","zz":"zz"}
\ No newline at end of file
diff --git 
a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json
 
b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json
index d5b39b6..eed7bee 100644
--- 
a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json
+++ 
b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json
@@ -35,6 +35,12 @@
             }
         },
         {
+          "operation": "modify-overwrite-beta",
+          "spec": {
+            "b": "^contextB"
+          }
+        },
+        {
             // last operation is to sort the JSON
             "operation": "sort"
         }

-- 
To stop receiving notification emails like this one, please contact
ond...@apache.org.

Reply via email to