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 2019/08/20 19:05:24 UTC

[camel] 04/12: CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.

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

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

commit 6c3447ff272ae76bb26bd344aee4062a75017c3b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Aug 20 11:19:03 2019 +0200

    CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.
---
 .../org/apache/camel/support/DefaultComponent.java     |  4 ++--
 .../camel/tools/apt/EndpointAnnotationProcessor.java   |  1 +
 .../tools/apt/EndpointPropertyConfigurerGenerator.java | 18 ++++++++++++++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
index eecb64c..866f9a6 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultComponent.java
@@ -57,7 +57,7 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone
      */
     private static final Pattern RAW_PATTERN = Pattern.compile("RAW[({].*&&.*[)}]");
 
-    private static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/component/";
+    private static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/configurer/";
 
     private volatile Class endpointPropertyConfigurerClass;
 
@@ -335,7 +335,7 @@ public abstract class DefaultComponent extends ServiceSupport implements Compone
             String name = ann.value();
             try {
                 Optional<Class<?>> clazz = getCamelContext().getExtension(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH)
-                        .findOptionalClass(name, "endpoint-property-configurer-");
+                        .findOptionalClass(name + "-endpoint", null);
                 clazz.ifPresent(aClass -> endpointPropertyConfigurerClass = aClass);
             } catch (NoFactoryAvailableException e) {
                 // ignore
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index e8d2f01..361bcef 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -181,6 +181,7 @@ public class EndpointAnnotationProcessor extends AbstractCamelAnnotationProcesso
         String fqn = pn + "." + cn;
 
         EndpointPropertyConfigurerGenerator.generatePropertyConfigurer(processingEnv, parent, pn, cn, fqn, en, fqen, endpointPaths, endpointOptions);
+        EndpointPropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, componentModel.getScheme() + "-endpoint", fqn);
     }
 
     public String createParameterJsonSchema(ComponentModel componentModel, Set<ComponentOption> componentOptions,
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
index fb3001a..6e4e236 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
@@ -16,13 +16,18 @@
  */
 package org.apache.camel.tools.apt;
 
+import java.io.IOException;
 import java.io.Writer;
 import java.util.Set;
 import javax.annotation.processing.ProcessingEnvironment;
+import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.TypeElement;
 import javax.tools.Diagnostic;
+import javax.tools.FileObject;
 import javax.tools.JavaFileObject;
+import javax.tools.StandardLocation;
 
+import org.apache.camel.spi.annotations.SubServiceFactory;
 import org.apache.camel.tools.apt.helper.IOHelper;
 import org.apache.camel.tools.apt.model.EndpointOption;
 import org.apache.camel.tools.apt.model.EndpointPath;
@@ -128,4 +133,17 @@ public final class EndpointPropertyConfigurerGenerator {
         return sb.toString();
     }
 
+    public static void generateMetaInfConfigurer(ProcessingEnvironment processingEnv, String name, String fqn) {
+        try {
+            FileObject resource = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "",
+                    "META-INF/services/org/apache/camel/configurer/" + name);
+            try (Writer w = resource.openWriter()) {
+                w.append("# Generated by camel annotation processor\n");
+                w.append("class=").append(fqn).append("\n");
+            }
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
 }