You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/03/12 06:18:38 UTC

[camel] 03/11: CAMEL-17571: camel-dsl - Allow to register custom annotation processors that can do custom logic after a DSL has compiled source into Java object.

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

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

commit 1e2f796c5eba327aa6e03afb20e0752e278c856e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 11 11:01:16 2022 +0100

    CAMEL-17571: camel-dsl - Allow to register custom annotation processors that can do custom logic after a DSL has compiled source into Java object.
---
 ...PreProcessor.java => CompilePostProcessor.java} | 19 ++++++++++++++-----
 .../dsl/support/RouteBuilderLoaderSupport.java     | 22 +++++++++++-----------
 .../dsl/java/joor/JavaRoutesBuilderLoader.java     | 19 +++++++++----------
 .../apache/camel/main/SpringAnnotationSupport.java |  8 ++++----
 4 files changed, 38 insertions(+), 30 deletions(-)

diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/AnnotationPreProcessor.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/CompilePostProcessor.java
similarity index 64%
rename from dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/AnnotationPreProcessor.java
rename to dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/CompilePostProcessor.java
index 2c0499a..021a97f 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/AnnotationPreProcessor.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/CompilePostProcessor.java
@@ -19,15 +19,24 @@ package org.apache.camel.dsl.support;
 import org.apache.camel.CamelContext;
 
 /**
- * Allows to plugin custom annotation pre-processors that are processed after the DSL has loaded the source and compiled
- * into a Java object.
+ * Allows to plugin custom post processors that are processed after the DSL has loaded the source and compiled into a
+ * Java object.
  * <p/>
- * This is used to detect and handle {@link org.apache.camel.BindToRegistry} and {@link org.apache.camel.TypeConverter}
+ * This is used to detect and handle {@link org.apache.camel.BindToRegistry} and {@link org.apache.camel.Converter}
  * classes.
  */
-public interface AnnotationPreProcessor {
+public interface CompilePostProcessor {
 
-    void handleAnnotation(
+    /**
+     * Invoked after the class has been compiled
+     *
+     * @param  camelContext the camel context
+     * @param  name         the name of the resource/class
+     * @param  clazz        the class
+     * @param  instance     the object created as instance of the class (if any)
+     * @throws Exception    is thrown if error during post-processing
+     */
+    void postCompile(
             CamelContext camelContext, String name,
             Class<?> clazz, Object instance)
             throws Exception;
diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
index 5e93d15..0b3dae8 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
@@ -39,7 +39,7 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
     private final String extension;
 
     private StartupStepRecorder recorder;
-    private final List<AnnotationPreProcessor> annotationPreProcessors = new ArrayList<>();
+    private final List<CompilePostProcessor> compilePostProcessors = new ArrayList<>();
 
     protected RouteBuilderLoaderSupport(String extension) {
         this.extension = extension;
@@ -52,18 +52,18 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
     }
 
     /**
-     * Gets the registered {@link AnnotationPreProcessor}.
+     * Gets the registered {@link CompilePostProcessor}.
      */
-    public List<AnnotationPreProcessor> getAnnotationPreProcessors() {
-        return annotationPreProcessors;
+    public List<CompilePostProcessor> getCompilePostProcessors() {
+        return compilePostProcessors;
     }
 
     /**
-     * Add a custom {@link AnnotationPreProcessor} to handle specific annotations after compiling the source into a Java
-     * object.
+     * Add a custom {@link CompilePostProcessor} to handle specific post-processing after compiling the source into a
+     * Java object.
      */
-    public void addAnnotationPreProcessor(AnnotationPreProcessor preProcessor) {
-        this.annotationPreProcessors.add(preProcessor);
+    public void addCompilePostProcessor(CompilePostProcessor preProcessor) {
+        this.compilePostProcessors.add(preProcessor);
     }
 
     @Override
@@ -81,10 +81,10 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
 
         if (getCamelContext() != null) {
             // discover optional pre-processors to be used
-            Set<AnnotationPreProcessor> pres = getCamelContext().getRegistry().findByType(AnnotationPreProcessor.class);
+            Set<CompilePostProcessor> pres = getCamelContext().getRegistry().findByType(CompilePostProcessor.class);
             if (pres != null && !pres.isEmpty()) {
-                for (AnnotationPreProcessor pre : pres) {
-                    addAnnotationPreProcessor(pre);
+                for (CompilePostProcessor pre : pres) {
+                    addCompilePostProcessor(pre);
                 }
             }
         }
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
index baad4ee..a407559 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
@@ -31,7 +31,7 @@ import org.apache.camel.LoggingLevel;
 import org.apache.camel.TypeConverterExists;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.dsl.support.AnnotationPreProcessor;
+import org.apache.camel.dsl.support.CompilePostProcessor;
 import org.apache.camel.dsl.support.RouteBuilderLoaderSupport;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Resource;
@@ -53,8 +53,8 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
     public JavaRoutesBuilderLoader() {
         super(EXTENSION);
 
-        addAnnotationPreProcessor(new ConverterAnnotationPreProcessor());
-        addAnnotationPreProcessor(new BindToRegistryAnnotationPreProcessor());
+        addCompilePostProcessor(new ConverterCompilePostProcessor());
+        addCompilePostProcessor(new BindToRegistryCompilePostProcessor());
     }
 
     @Override
@@ -75,8 +75,8 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
             }
 
             // not a route builder but we support annotation scan to register custom beans, type converters, etc.
-            for (AnnotationPreProcessor pre : getAnnotationPreProcessors()) {
-                pre.handleAnnotation(getCamelContext(), name, clazz, obj);
+            for (CompilePostProcessor pre : getCompilePostProcessors()) {
+                pre.postCompile(getCamelContext(), name, clazz, obj);
             }
 
             return null;
@@ -98,10 +98,10 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
                 : name;
     }
 
-    private static class ConverterAnnotationPreProcessor implements AnnotationPreProcessor {
+    private static class ConverterCompilePostProcessor implements CompilePostProcessor {
 
         @Override
-        public void handleAnnotation(CamelContext camelContext, String name, Class<?> clazz, Object instance) {
+        public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
             if (clazz.getAnnotation(Converter.class) != null) {
                 TypeConverterRegistry tcr = camelContext.getTypeConverterRegistry();
                 TypeConverterExists exists = tcr.getTypeConverterExists();
@@ -119,11 +119,10 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
         }
     }
 
-    private static class BindToRegistryAnnotationPreProcessor implements AnnotationPreProcessor {
+    private static class BindToRegistryCompilePostProcessor implements CompilePostProcessor {
 
         @Override
-        public void handleAnnotation(CamelContext camelContext, String name, Class<?> clazz, Object instance)
-                throws Exception {
+        public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
             BindToRegistry bir = instance.getClass().getAnnotation(BindToRegistry.class);
             Configuration cfg = instance.getClass().getAnnotation(Configuration.class);
             if (bir != null || cfg != null || instance instanceof CamelConfiguration) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java
index 22a185b..26392b0 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java
@@ -18,7 +18,7 @@ package org.apache.camel.main;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.dsl.support.AnnotationPreProcessor;
+import org.apache.camel.dsl.support.CompilePostProcessor;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.util.ObjectHelper;
 import org.springframework.stereotype.Component;
@@ -30,13 +30,13 @@ public final class SpringAnnotationSupport {
     }
 
     public static void registerSpringSupport(CamelContext context) {
-        context.getRegistry().bind("SpringAnnotationPreProcessor", new SpringAnnotationPreProcessor());
+        context.getRegistry().bind("SpringAnnotationCompilePostProcessor", new SpringAnnotationCompilePostProcessor());
     }
 
-    private static class SpringAnnotationPreProcessor implements AnnotationPreProcessor {
+    private static class SpringAnnotationCompilePostProcessor implements CompilePostProcessor {
 
         @Override
-        public void handleAnnotation(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
+        public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
             // @Component and @Service are the same
             Component comp = clazz.getAnnotation(Component.class);
             Service service = clazz.getAnnotation(Service.class);