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

davsclaus pushed a commit to branch on-header
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 30688cc45b26646e8c01b2f62af78c7867a0eeff
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Feb 4 13:55:57 2021 +0100

    CAMEL-16102: Source code generate @InvokeOnHeader for reflection free
---
 ...inispanRemoteProducerInvokeOnHeaderFactory.java | 27 +++++++++++++
 ...nent.infinispan.remote.InfinispanRemoteProducer |  2 +
 .../apache/camel/spi/InvokeOnHeaderStrategy.java   |  3 +-
 .../packaging/GenerateInvokeOnHeaderMojo.java      | 46 +++++++++++++++-------
 4 files changed, 62 insertions(+), 16 deletions(-)

diff --git 
a/components/camel-infinispan/camel-infinispan/src/generated/java/org/apache/camel/component/infinispan/remote/InfinispanRemoteProducerInvokeOnHeaderFactory.java
 
b/components/camel-infinispan/camel-infinispan/src/generated/java/org/apache/camel/component/infinispan/remote/InfinispanRemoteProducerInvokeOnHeaderFactory.java
new file mode 100644
index 0000000..ff5b63b
--- /dev/null
+++ 
b/components/camel-infinispan/camel-infinispan/src/generated/java/org/apache/camel/component/infinispan/remote/InfinispanRemoteProducerInvokeOnHeaderFactory.java
@@ -0,0 +1,27 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.infinispan.remote;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.InvokeOnHeaderStrategy;
+import org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class InfinispanRemoteProducerInvokeOnHeaderFactory implements 
InvokeOnHeaderStrategy {
+
+    @Override
+    public Object invoke(Object obj, String key, Exchange exchange) throws 
Exception {
+        org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer 
target = 
(org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer) obj;
+        switch (key) {
+        case "query":
+        case "QUERY": target.onQuery(exchange.getMessage()); return null;
+        case "stats":
+        case "STATS": target.onStats(exchange.getMessage()); return null;
+        default: return null;
+        }
+    }
+
+}
+
diff --git 
a/components/camel-infinispan/camel-infinispan/src/generated/resources/META-INF/services/org/apache/camel/invoke-on-header/org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer
 
b/components/camel-infinispan/camel-infinispan/src/generated/resources/META-INF/services/org/apache/camel/invoke-on-header/org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer
new file mode 100644
index 0000000..9273df4
--- /dev/null
+++ 
b/components/camel-infinispan/camel-infinispan/src/generated/resources/META-INF/services/org/apache/camel/invoke-on-header/org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.infinispan.remote.InfinispanRemoteProducer.InfinispanRemoteProducerInvokeOnHeaderFactory
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/InvokeOnHeaderStrategy.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/InvokeOnHeaderStrategy.java
index 2f11c57..1c1965f 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/InvokeOnHeaderStrategy.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/InvokeOnHeaderStrategy.java
@@ -28,10 +28,11 @@ public interface InvokeOnHeaderStrategy {
     /**
      * Invoke the method based on the header key
      *
+     * @param  target    the target such as HeaderSelectorProducer
      * @param  key       the header key
      * @param  exchange  the exchange
      * @return           option response from invoking the method, or 
<tt>null</tt> if the method is void
      * @throws Exception is thrown if error invoking the method.
      */
-    Object invoke(String key, Exchange exchange) throws Exception;
+    Object invoke(Object target, String key, Exchange exchange) throws 
Exception;
 }
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
index b0143ae..bfb9909 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
@@ -41,6 +41,7 @@ import org.jboss.jandex.AnnotationInstance;
 import org.jboss.jandex.DotName;
 import org.jboss.jandex.Index;
 import org.jboss.jandex.IndexReader;
+import org.jboss.jandex.Type;
 
 /**
  * Abstract class for @InvokeOnHeader/@InvokeOnHeaders factory generator.
@@ -67,6 +68,7 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
     private static class InvokeOnHeaderModel {
         private String key;
         private String methodName;
+        private boolean isVoid;
 
         public String getKey() {
             return key;
@@ -83,6 +85,14 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
         public void setMethodName(String methodName) {
             this.methodName = methodName;
         }
+
+        public boolean isVoid() {
+            return isVoid;
+        }
+
+        public void setVoid(boolean aVoid) {
+            isVoid = aVoid;
+        }
     }
 
     public GenerateInvokeOnHeaderMojo() {
@@ -117,10 +127,12 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
             String currentClass = 
a.target().asMethod().declaringClass().name().toString();
             String value = a.value().asString();
             String methodName = a.target().asMethod().name();
+            boolean isVoid = Type.Kind.VOID == 
a.target().asMethod().returnType().kind();
             Set<InvokeOnHeaderModel> set = 
classes.computeIfAbsent(currentClass, k -> new HashSet<>());
             InvokeOnHeaderModel model = new InvokeOnHeaderModel();
             model.setKey(value);
             model.setMethodName(methodName);
+            model.setVoid(isVoid);
             set.add(model);
         });
 
@@ -134,16 +146,15 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
     }
 
     protected void createInvokeOnHeaderFactory(String fqn, 
Set<InvokeOnHeaderModel> models) throws IOException {
-        generateInvokeOnHeaderFactory(fqn, models, sourcesOutputDir);
+        String tfqn = generateInvokeOnHeaderFactory(fqn, models, 
sourcesOutputDir);
         updateResource(resourcesOutputDir.toPath(),
                 "META-INF/services/org/apache/camel/invoke-on-header/" + fqn,
-                "# " + GENERATED_MSG + NL + "class=" + fqn + NL);
+                "# " + GENERATED_MSG + NL + "class=" + tfqn + NL);
     }
 
     @Deprecated
-    private void generateInvokeOnHeaderFactory(
-            String fqn, Set<InvokeOnHeaderModel> models, File outputDir)
-            throws IOException {
+    private String generateInvokeOnHeaderFactory(
+            String fqn, Set<InvokeOnHeaderModel> models, File outputDir) {
 
         int pos = fqn.lastIndexOf('.');
         String pn = fqn.substring(0, pos);
@@ -163,6 +174,7 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
         if (updated) {
             getLog().info("Updated " + fileName);
         }
+        return pfqn + "." + cn;
     }
 
     private void generateInvokeOnHeaderSource(
@@ -170,19 +182,15 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
         w.write("/* " + AbstractGeneratorMojo.GENERATED_MSG + " */\n");
         w.write("package " + pn + ";\n");
         w.write("\n");
-        w.write("import java.util.Map;\n");
-        w.write("\n");
-        w.write("import org.apache.camel.CamelContext;\n");
+        w.write("import org.apache.camel.Exchange;\n");
         w.write("import org.apache.camel.spi.InvokeOnHeaderStrategy;\n");
-        w.write("import org.apache.camel.util.CaseInsensitiveMap;\n");
         w.write("import " + pfqn + ";\n");
         w.write("\n");
         w.write("/**\n");
         w.write(" * " + AbstractGeneratorMojo.GENERATED_MSG + "\n");
         w.write(" */\n");
         w.write("@SuppressWarnings(\"unchecked\")\n");
-        w.write("public class " + cn + " extends " + psn
-                + " implements InvokeOnHeaderStrategy");
+        w.write("public class " + cn + " implements InvokeOnHeaderStrategy");
         w.write(" {\n");
         w.write("\n");
 
@@ -192,18 +200,26 @@ public class GenerateInvokeOnHeaderMojo extends 
AbstractGeneratorMojo {
         }
 
         w.write("    @Override\n");
-        w.write("    public Object invoke(String key, Exchange exchange) {\n");
+        w.write("    public Object invoke(Object obj, String key, Exchange 
exchange) throws Exception {\n");
+        w.write("        " + en + " target = (" + en + ") obj;\n");
         if (!models.isEmpty()) {
-            w.write("        switch (name) {\n");
+            w.write("        switch (key) {\n");
             for (InvokeOnHeaderModel option : models) {
-                String invoke = option.getMethodName() + 
"(exchange.getMessage());";
+                String invoke = "target." + option.getMethodName() + 
"(exchange.getMessage())";
                 if (!option.getKey().toLowerCase().equals(option.getKey())) {
                     w.write(String.format("        case \"%s\":\n", 
option.getKey().toLowerCase()));
                 }
-                w.write(String.format("        case \"%s\": return %s;\n", 
option.getKey(), invoke));
+                if (option.isVoid()) {
+                    w.write(String.format("        case \"%s\": %s; return 
null;\n", option.getKey(), invoke));
+                } else {
+                    w.write(String.format("        case \"%s\": return %s;\n", 
option.getKey(), invoke));
+                }
             }
+            w.write("        default: return null;\n");
+            w.write("        }\n");
         }
         w.write("    }\n");
+        w.write("\n");
 
         w.write("}\n");
         w.write("\n");

Reply via email to