This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git
commit f0bc0ef13c0cdccfabfbc20526d9d93f6965ec03 Author: Luca Burgazzoli <lburgazz...@gmail.com> AuthorDate: Wed Sep 16 18:15:25 2020 +0200 Generate Configurer to bind properties SourceLoader.Interceptor without the need for reflection --- .../quarkus/deployment/DeploymentProcessor.java | 14 ++---- .../core/quarkus/deployment/DeploymentSupport.java | 52 ++++++++++++++++++++ .../main/java/org/apache/camel/k/Constants.java | 2 + .../org/apache/camel/k/support/RuntimeSupport.java | 3 +- camel-k-runtime-cron/pom.xml | 38 +++++++++++++++ .../CronSourceLoaderInterceptorConfigurer.java | 55 ++++++++++++++++++++++ ...apache.camel.k.cron.CronSourceLoaderInterceptor | 2 + .../camel/k/cron/CronSourceLoaderInterceptor.java | 2 + ...k.loader.knative.KnativeSourceLoaderInterceptor | 2 + 9 files changed, 159 insertions(+), 11 deletions(-) diff --git a/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentProcessor.java b/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentProcessor.java index 8091756..d34c875 100644 --- a/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentProcessor.java +++ b/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentProcessor.java @@ -29,6 +29,7 @@ import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem; import org.apache.camel.k.Constants; import org.apache.camel.k.ContextCustomizer; import org.apache.camel.k.SourceDefinition; +import org.apache.camel.k.SourceLoader; import org.apache.camel.k.core.quarkus.RuntimeRecorder; import org.apache.camel.quarkus.core.deployment.spi.CamelContextCustomizerBuildItem; import org.apache.camel.quarkus.core.deployment.spi.CamelServiceDestination; @@ -54,21 +55,14 @@ public class DeploymentProcessor { true, Constants.SOURCE_LOADER_INTERCEPTOR_RESOURCE_PATH + "/*") ); - } @BuildStep List<ReflectiveClassBuildItem> registerClasses(CombinedIndexBuildItem index) { return List.of( - new ReflectiveClassBuildItem( - true, - false, - SourceDefinition.class), - new ReflectiveClassBuildItem( - true, - false, - getAllKnownImplementors(index.getIndex(), ContextCustomizer.class, ci -> ci.name().toString()) - .toArray(String[]::new)) + reflectiveClassBuildItem(SourceDefinition.class), + reflectiveClassBuildItem(getAllKnownImplementors(index.getIndex(), ContextCustomizer.class)), + reflectiveClassBuildItem(getAllKnownImplementors(index.getIndex(), SourceLoader.Interceptor.class)) ); } diff --git a/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java b/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java index 768fd26..a3170e9 100644 --- a/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java +++ b/camel-k-quarkus/camel-k-quarkus-core/deployment/src/main/java/org/apache/camel/k/core/quarkus/deployment/DeploymentSupport.java @@ -16,6 +16,7 @@ */ package org.apache.camel.k.core.quarkus.deployment; +import java.util.Collection; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -104,6 +105,13 @@ public final class DeploymentSupport { return stream(getAnnotated(view, type)).map(mapper).collect(Collectors.toList()); } + public static ReflectiveClassBuildItem reflectiveClassBuildItem(Class<?>... classes) { + return new ReflectiveClassBuildItem(true, false, classes); + } + + public static ReflectiveClassBuildItem reflectiveClassBuildItem(boolean methods, boolean fields, Class<?>... classes) { + return new ReflectiveClassBuildItem(methods, fields, classes); + } public static ReflectiveClassBuildItem reflectiveClassBuildItem(ClassInfo... classInfos) { return classInfos.length == 1 @@ -121,6 +129,28 @@ public final class DeploymentSupport { ); } + public static ReflectiveClassBuildItem reflectiveClassBuildItem(Collection<ClassInfo> classInfos) { + return new ReflectiveClassBuildItem( + true, + false, + classInfos.stream() + .map(ClassInfo::name) + .map(DotName::toString) + .toArray(String[]::new) + ); + } + + public static ReflectiveClassBuildItem reflectiveClassBuildItem(Iterable<ClassInfo> classInfos) { + return new ReflectiveClassBuildItem( + true, + false, + stream(classInfos) + .map(ClassInfo::name) + .map(DotName::toString) + .toArray(String[]::new) + ); + } + public static ReflectiveClassBuildItem reflectiveClassBuildItem(boolean methods, boolean fields, ClassInfo... classInfos) { return new ReflectiveClassBuildItem( methods, @@ -132,6 +162,28 @@ public final class DeploymentSupport { ); } + public static ReflectiveClassBuildItem reflectiveClassBuildItem(boolean methods, boolean fields, Collection<ClassInfo> classInfos) { + return new ReflectiveClassBuildItem( + methods, + fields, + classInfos.stream() + .map(ClassInfo::name) + .map(DotName::toString) + .toArray(String[]::new) + ); + } + + public static ReflectiveClassBuildItem reflectiveClassBuildItem(boolean methods, boolean fields, Iterable<ClassInfo> classInfos) { + return new ReflectiveClassBuildItem( + methods, + fields, + stream(classInfos) + .map(ClassInfo::name) + .map(DotName::toString) + .toArray(String[]::new) + ); + } + public static <T> Stream<T> stream(Iterable<T> iterable) { return StreamSupport.stream(iterable.spliterator(), false); } diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Constants.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Constants.java index ed848fd..83df4f7 100644 --- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Constants.java +++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Constants.java @@ -56,6 +56,8 @@ public final class Constants { public static final String CUSTOMIZER_PREFIX = "camel.k.customizer."; public static final String CUSTOMIZER_PREFIX_FALLBACK = "customizer."; + public static final String LOADER_INTERCEPTOR_PREFIX = "camel.k.loader.interceptor."; + public static final String LOADER_INTERCEPTOR_PREFIX_FALLBACK = "loader.interceptor."; private Constants() { diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java index 411a32e..4c9da08 100644 --- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java +++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java @@ -240,7 +240,8 @@ public final class RuntimeSupport { LOGGER.debug("Found source loader interceptor {} from registry", id); } - PropertiesSupport.bindProperties(context, interceptor, "loader.interceptor." + id + "."); + PropertiesSupport.bindProperties(context, interceptor, Constants.LOADER_INTERCEPTOR_PREFIX + id + "."); + PropertiesSupport.bindProperties(context, interceptor, Constants.LOADER_INTERCEPTOR_PREFIX_FALLBACK + id + "."); answer.add(interceptor); } catch (Exception e) { diff --git a/camel-k-runtime-cron/pom.xml b/camel-k-runtime-cron/pom.xml index f005895..743e269 100644 --- a/camel-k-runtime-cron/pom.xml +++ b/camel-k-runtime-cron/pom.xml @@ -108,6 +108,44 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.apache.camel</groupId> + <artifactId>camel-package-maven-plugin</artifactId> + <version>${camel-version}</version> + <executions> + <execution> + <id>generate-configurer</id> + <phase>process-classes</phase> + <goals> + <goal>generate-configurer</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <version>${build-helper-maven-plugin-version}</version> + <executions> + <execution> + <phase>generate-sources</phase> + <goals> + <goal>add-source</goal> + <goal>add-resource</goal> + </goals> + <configuration> + <sources> + <source>src/generated/java</source> + </sources> + <resources> + <resource> + <directory>src/generated/resources</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> diff --git a/camel-k-runtime-cron/src/generated/java/org/apache/camel/k/cron/CronSourceLoaderInterceptorConfigurer.java b/camel-k-runtime-cron/src/generated/java/org/apache/camel/k/cron/CronSourceLoaderInterceptorConfigurer.java new file mode 100644 index 0000000..bbb5edb --- /dev/null +++ b/camel-k-runtime-cron/src/generated/java/org/apache/camel/k/cron/CronSourceLoaderInterceptorConfigurer.java @@ -0,0 +1,55 @@ +/* Generated by camel build tools - do NOT edit this file! */ +package org.apache.camel.k.cron; + +import java.util.Map; + +import org.apache.camel.CamelContext; +import org.apache.camel.spi.GeneratedPropertyConfigurer; +import org.apache.camel.spi.PropertyConfigurerGetter; +import org.apache.camel.util.CaseInsensitiveMap; +import org.apache.camel.k.cron.CronSourceLoaderInterceptor; + +/** + * Generated by camel build tools - do NOT edit this file! + */ +@SuppressWarnings("unchecked") +public class CronSourceLoaderInterceptorConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter { + + @Override + public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) { + org.apache.camel.k.cron.CronSourceLoaderInterceptor target = (org.apache.camel.k.cron.CronSourceLoaderInterceptor) obj; + switch (ignoreCase ? name.toLowerCase() : name) { + case "overridablecomponents": + case "OverridableComponents": target.setOverridableComponents(property(camelContext, java.lang.String.class, value)); return true; + case "runtime": + case "Runtime": target.setRuntime(property(camelContext, org.apache.camel.k.Runtime.class, value)); return true; + case "timeruri": + case "TimerUri": target.setTimerUri(property(camelContext, java.lang.String.class, value)); return true; + default: return false; + } + } + + @Override + public Map<String, Object> getAllOptions(Object target) { + Map<String, Object> answer = new CaseInsensitiveMap(); + answer.put("OverridableComponents", java.lang.String.class); + answer.put("Runtime", org.apache.camel.k.Runtime.class); + answer.put("TimerUri", java.lang.String.class); + return answer; + } + + @Override + public Object getOptionValue(Object obj, String name, boolean ignoreCase) { + org.apache.camel.k.cron.CronSourceLoaderInterceptor target = (org.apache.camel.k.cron.CronSourceLoaderInterceptor) obj; + switch (ignoreCase ? name.toLowerCase() : name) { + case "overridablecomponents": + case "OverridableComponents": return target.getOverridableComponents(); + case "runtime": + case "Runtime": return target.getRuntime(); + case "timeruri": + case "TimerUri": return target.getTimerUri(); + default: return null; + } + } +} + diff --git a/camel-k-runtime-cron/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.k.cron.CronSourceLoaderInterceptor b/camel-k-runtime-cron/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.k.cron.CronSourceLoaderInterceptor new file mode 100644 index 0000000..5f58309 --- /dev/null +++ b/camel-k-runtime-cron/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.k.cron.CronSourceLoaderInterceptor @@ -0,0 +1,2 @@ +# Generated by camel build tools - do NOT edit this file! +class=org.apache.camel.k.cron.CronSourceLoaderInterceptorConfigurer diff --git a/camel-k-runtime-cron/src/main/java/org/apache/camel/k/cron/CronSourceLoaderInterceptor.java b/camel-k-runtime-cron/src/main/java/org/apache/camel/k/cron/CronSourceLoaderInterceptor.java index 2eb29d4..d3026d1 100644 --- a/camel-k-runtime-cron/src/main/java/org/apache/camel/k/cron/CronSourceLoaderInterceptor.java +++ b/camel-k-runtime-cron/src/main/java/org/apache/camel/k/cron/CronSourceLoaderInterceptor.java @@ -28,11 +28,13 @@ import org.apache.camel.k.annotation.LoaderInterceptor; import org.apache.camel.k.support.RuntimeSupport; import org.apache.camel.model.RouteDefinition; import org.apache.camel.spi.CamelEvent; +import org.apache.camel.spi.Configurer; import org.apache.camel.support.EventNotifierSupport; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Configurer @LoaderInterceptor("cron") public class CronSourceLoaderInterceptor implements SourceLoader.Interceptor, RuntimeAware { diff --git a/camel-k-runtime-knative/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.k.loader.knative.KnativeSourceLoaderInterceptor b/camel-k-runtime-knative/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.k.loader.knative.KnativeSourceLoaderInterceptor new file mode 100644 index 0000000..50833dc --- /dev/null +++ b/camel-k-runtime-knative/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.k.loader.knative.KnativeSourceLoaderInterceptor @@ -0,0 +1,2 @@ +# Generated by camel build tools - do NOT edit this file! +class=org.apache.camel.k.loader.knative.KnativeSourceLoaderInterceptorConfigurer