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 <[email protected]> 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);
