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 <lburgazz...@gmail.com>
Authored: Wed Apr 12 11:11:37 2017 +0200
Committer: lburgazzoli <lburgazz...@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())
         );
     }
 

Reply via email to