You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2017/04/12 09:11:57 UTC

camel git commit: HeaderSelectorProducer to support suppliers for header key and default value

Repository: camel
Updated Branches:
  refs/heads/master b7df95775 -> 5fa7a8a4b


HeaderSelectorProducer to support suppliers for header key and default value


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5fa7a8a4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5fa7a8a4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5fa7a8a4

Branch: refs/heads/master
Commit: 5fa7a8a4b23b51a9f7226adf83f322600103dc32
Parents: b7df957
Author: lburgazzoli <lb...@gmail.com>
Authored: Wed Apr 12 11:11:37 2017 +0200
Committer: lburgazzoli <lb...@gmail.com>
Committed: Wed Apr 12 11:11:45 2017 +0200

----------------------------------------------------------------------
 .../camel/impl/HeaderSelectorProducer.java      | 40 +++++++++++++++-----
 1 file changed, 31 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5fa7a8a4/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java b/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java
index 09d59c6..f91f032 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/HeaderSelectorProducer.java
@@ -20,6 +20,7 @@ import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Supplier;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
@@ -28,6 +29,7 @@ import org.apache.camel.InvokeOnHeaders;
 import org.apache.camel.Message;
 import org.apache.camel.NoSuchHeaderException;
 import org.apache.camel.Processor;
+import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -38,28 +40,43 @@ import org.slf4j.LoggerFactory;
 public class HeaderSelectorProducer extends BaseSelectorProducer {
     private static final Logger LOGGER = LoggerFactory.getLogger(HeaderSelectorProducer.class);
 
-    private final String header;
-    private final String defaultHeaderValue;
+    private final Supplier<String> headerSupplier;
+    private final Supplier<String> defaultHeaderValueSupplier;
     private final Object target;
     private Map<String, Processor> handlers;
 
+    public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier) {
+        this(endpoint, headerSupplier, () -> null, null);
+    }
     public HeaderSelectorProducer(Endpoint endpoint, String header) {
-        this(endpoint, header, null, null);
+        this(endpoint, () -> header, () -> null, null);
     }
 
     public HeaderSelectorProducer(Endpoint endpoint, String header, Object target) {
-        this(endpoint, header, null, target);
+        this(endpoint, () -> header, () -> null, target);
+    }
+
+    public HeaderSelectorProducer(Endpoint endpoint,  Supplier<String> headerSupplier, Object target) {
+        this(endpoint, headerSupplier, () -> null, target);
     }
 
     public HeaderSelectorProducer(Endpoint endpoint, String header, String defaultHeaderValue) {
-        this(endpoint, header, defaultHeaderValue, null);
+        this(endpoint, () -> header, () -> defaultHeaderValue, null);
+    }
+
+    public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier, Supplier<String> defaultHeaderValueSupplier) {
+        this(endpoint, headerSupplier, defaultHeaderValueSupplier, null);
     }
 
     public HeaderSelectorProducer(Endpoint endpoint, String header, String defaultHeaderValue, Object target) {
+        this(endpoint, () -> header, () -> defaultHeaderValue, target);
+    }
+
+    public HeaderSelectorProducer(Endpoint endpoint, Supplier<String> headerSupplier, Supplier<String> defaultHeaderValueSupplier, Object target) {
         super(endpoint);
 
-        this.header = header;
-        this.defaultHeaderValue = defaultHeaderValue;
+        this.headerSupplier = ObjectHelper.notNull(headerSupplier, "headerSupplier");
+        this.defaultHeaderValueSupplier = ObjectHelper.notNull(defaultHeaderValueSupplier, "defaultHeaderValueSupplier");
         this.target = target != null ? target : this;
         this.handlers = new HashMap<>();
     }
@@ -84,7 +101,12 @@ public class HeaderSelectorProducer extends BaseSelectorProducer {
 
     @Override
     protected Processor getProcessor(Exchange exchange) throws Exception {
-        final String action = exchange.getIn().getHeader(header, defaultHeaderValue, String.class);
+        String header = headerSupplier.get();
+        String action = exchange.getIn().getHeader(headerSupplier.get(), String.class);
+
+        if (action == null) {
+            action = defaultHeaderValueSupplier.get();
+        }
         if (action == null) {
             throw new NoSuchHeaderException(exchange, header, String.class);
         }
@@ -94,7 +116,7 @@ public class HeaderSelectorProducer extends BaseSelectorProducer {
 
     protected void onMissingProcessor(Exchange exchange) throws Exception {
         throw new IllegalStateException(
-            "Unsupported operation " + exchange.getIn().getHeader(header)
+            "Unsupported operation " + exchange.getIn().getHeader(headerSupplier.get())
         );
     }