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

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

commit 003666df9faf4d9e2335637d2167e62a9070f9ed
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri Dec 6 06:11:52 2019 +0100

    CAMEL-14263: Make property configurer for component and endpoints into only 
class.
---
 .../apt/ComponentPropertyConfigurerGenerator.java  | 169 ---------------------
 .../tools/apt/EndpointAnnotationProcessor.java     |  25 +--
 ...rator.java => PropertyConfigurerGenerator.java} |  27 ++--
 .../camel/tools/apt/model/ComponentOption.java     |   2 +-
 .../camel/tools/apt/model/EndpointOption.java      |   2 +-
 .../camel/tools/apt/model/PropertyOption.java      |  27 ++++
 6 files changed, 55 insertions(+), 197 deletions(-)

diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java
deleted file mode 100644
index 6685cf5..0000000
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentPropertyConfigurerGenerator.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-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.TypeElement;
-import javax.tools.Diagnostic;
-import javax.tools.FileObject;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardLocation;
-
-import org.apache.camel.tools.apt.helper.IOHelper;
-import org.apache.camel.tools.apt.model.ComponentOption;
-
-import static 
org.apache.camel.tools.apt.AnnotationProcessorHelper.dumpExceptionToErrorFile;
-
-// TODO: ComponentPropertyConfigurerGenerator and 
EndpointPropertyConfigurerGenerator can be merged to one
-// TODO: Add support for ignore case
-
-public final class ComponentPropertyConfigurerGenerator {
-
-    private ComponentPropertyConfigurerGenerator() {
-    }
-
-    public static void generateExtendConfigurer(ProcessingEnvironment 
processingEnv, TypeElement parent,
-                                                String pn, String cn, String 
fqn) {
-
-        Writer w = null;
-        try {
-            JavaFileObject src = 
processingEnv.getFiler().createSourceFile(fqn, parent);
-            w = src.openWriter();
-
-            w.write("/* Generated by org.apache.camel:apt */\n");
-            w.write("package " + pn + ";\n");
-            w.write("\n");
-            w.write("import " + parent.getQualifiedName().toString() + ";\n");
-            w.write("\n");
-            w.write("/**\n");
-            w.write(" * Source code generated by org.apache.camel:apt\n");
-            w.write(" */\n");
-            w.write("public class " + cn + " extends " + 
parent.getSimpleName().toString() + " {\n");
-            w.write("\n");
-            w.write("}\n");
-            w.write("\n");
-        } catch (Exception e) {
-            processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, 
"Unable to generate source code file: " + fqn + ": " + e.getMessage());
-            dumpExceptionToErrorFile("camel-apt-error.log", "Unable to 
generate source code file: " + fqn, e);
-        } finally {
-            IOHelper.close(w);
-        }
-    }
-
-    public static void generatePropertyConfigurer(ProcessingEnvironment 
processingEnv, TypeElement parent,
-                                                  String pn, String cn, String 
fqn, String en,
-                                                  Set<ComponentOption> 
options) {
-
-        Writer w = null;
-        try {
-            JavaFileObject src = 
processingEnv.getFiler().createSourceFile(fqn, parent);
-            w = src.openWriter();
-
-            int size = options.size();
-
-            w.write("/* Generated by org.apache.camel:apt */\n");
-            w.write("package " + pn + ";\n");
-            w.write("\n");
-            w.write("import java.util.HashMap;\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.spi.GeneratedPropertyConfigurer;\n");
-            w.write("import 
org.apache.camel.support.component.PropertyConfigurerSupport;\n");
-            w.write("\n");
-            w.write("/**\n");
-            w.write(" * Source code generated by org.apache.camel:apt\n");
-            w.write(" */\n");
-            w.write("@SuppressWarnings(\"unchecked\")\n");
-            w.write("public class " + cn + " extends PropertyConfigurerSupport 
implements GeneratedPropertyConfigurer {\n");
-            w.write("\n");
-            w.write("    @Override\n");
-            w.write("    public boolean configure(CamelContext camelContext, 
Object component, String name, Object value, boolean ignoreCase) {\n");
-            w.write("        if (ignoreCase) {\n");
-            w.write("            return doConfigureIgnoreCase(camelContext, 
component, name, value);\n");
-            w.write("        } else {\n");
-            w.write("            return doConfigure(camelContext, component, 
name, value);\n");
-            w.write("        }\n");
-            w.write("    }\n");
-            w.write("\n");
-            w.write("    private static boolean doConfigure(CamelContext 
camelContext, Object component, String name, Object value) {\n");
-            w.write("        switch (name) {\n");
-            for (ComponentOption option : options) {
-                String getOrSet = option.getName();
-                getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
-                String setterLambda = setterLambda(en, getOrSet, 
option.getType(), option.getConfigurationField());
-                w.write(String.format("        case \"%s\": %s; return 
true;\n", option.getName(), setterLambda));
-            }
-            w.write("            default: return false;\n");
-            w.write("        }\n");
-            w.write("    }\n");
-            w.write("\n");
-            w.write("    private static boolean 
doConfigureIgnoreCase(CamelContext camelContext, Object component, String name, 
Object value) {\n");
-            w.write("        switch (name.toLowerCase()) {\n");
-            for (ComponentOption option : options) {
-                String getOrSet = option.getName();
-                getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
-                String setterLambda = setterLambda(en, getOrSet, 
option.getType(), option.getConfigurationField());
-                w.write(String.format("        case \"%s\": %s; return 
true;\n", option.getName().toLowerCase(), setterLambda));
-            }
-            w.write("            default: return false;\n");
-            w.write("        }\n");
-            w.write("    }\n");
-            w.write("\n");
-            w.write("}\n");
-            w.write("\n");
-        } catch (Exception e) {
-            processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, 
"Unable to generate source code file: " + fqn + ": " + e.getMessage());
-            dumpExceptionToErrorFile("camel-apt-error.log", "Unable to 
generate source code file: " + fqn, e);
-        } finally {
-            IOHelper.close(w);
-        }
-    }
-
-    private static String setterLambda(String en, String getOrSet, String 
type, String configurationField) {
-        // type may contain generics so remove those
-        if (type.indexOf('<') != -1) {
-            type = type.substring(0, type.indexOf('<'));
-        }
-        if (configurationField != null) {
-            getOrSet = "get" + 
Character.toUpperCase(configurationField.charAt(0)) + 
configurationField.substring(1) + "().set" + getOrSet;
-        } else {
-            getOrSet = "set" + getOrSet;
-        }
-
-        // ((LogEndpoint) endpoint).setGroupSize(property(camelContext, 
java.lang.Integer.class, value))
-        return String.format("((%s) component).%s(property(camelContext, 
%s.class, value))", en, getOrSet, type);
-    }
-
-    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);
-        }
-    }
-
-}
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 2505e26..0d840bc 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
@@ -52,10 +52,7 @@ import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.tools.apt.helper.EndpointHelper;
 import org.apache.camel.tools.apt.helper.JsonSchemaHelper;
 import org.apache.camel.tools.apt.helper.Strings;
-import org.apache.camel.tools.apt.model.ComponentModel;
-import org.apache.camel.tools.apt.model.ComponentOption;
-import org.apache.camel.tools.apt.model.EndpointOption;
-import org.apache.camel.tools.apt.model.EndpointPath;
+import org.apache.camel.tools.apt.model.*;
 import org.apache.camel.util.json.JsonObject;
 import org.apache.camel.util.json.Jsoner;
 
@@ -206,13 +203,15 @@ public class EndpointAnnotationProcessor extends 
AbstractCamelAnnotationProcesso
         String fqClassName = packageName + "." + className;
 
         if ("activemq".equals(scheme) || "amqp".equals(scheme)) {
-            
ComponentPropertyConfigurerGenerator.generateExtendConfigurer(processingEnv, 
parent, packageName, className, fqClassName);
-            
ComponentPropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-component", fqClassName);
+            
PropertyConfigurerGenerator.generateExtendConfigurer(processingEnv, parent, 
packageName, className, fqClassName);
+            
PropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-component", fqClassName);
         } else if (uriEndpoint.generateConfigurer() && 
!componentOptions.isEmpty()) {
             // only generate this once for the first scheme
             if (schemes == null || schemes[0].equals(scheme)) {
-                
ComponentPropertyConfigurerGenerator.generatePropertyConfigurer(processingEnv, 
parent, packageName, className, fqClassName, componentClassName, 
componentOptions);
-                
ComponentPropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-component", fqClassName);
+                Set<PropertyOption> set = new LinkedHashSet<>();
+                set.addAll(componentOptions);
+                
PropertyConfigurerGenerator.generatePropertyConfigurer(processingEnv, parent, 
packageName, className, fqClassName, componentClassName, set);
+                
PropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-component", fqClassName);
             }
         }
     }
@@ -233,13 +232,15 @@ public class EndpointAnnotationProcessor extends 
AbstractCamelAnnotationProcesso
         String fqClassName = packageName + "." + className;
 
         if ("activemq".equals(scheme) || "amqp".equals(scheme)) {
-            
EndpointPropertyConfigurerGenerator.generateExtendConfigurer(processingEnv, 
parent, packageName, className, fqClassName);
-            
EndpointPropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-endpoint", fqClassName);
+            
PropertyConfigurerGenerator.generateExtendConfigurer(processingEnv, parent, 
packageName, className, fqClassName);
+            
PropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-endpoint", fqClassName);
         } else if (uriEndpoint.generateConfigurer() && 
!endpointOptions.isEmpty()) {
             // only generate this once for the first scheme
             if (schemes == null || schemes[0].equals(scheme)) {
-                
EndpointPropertyConfigurerGenerator.generatePropertyConfigurer(processingEnv, 
parent, packageName, className, fqClassName, endpointClassName, 
endpointOptions);
-                
EndpointPropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-endpoint", fqClassName);
+                Set<PropertyOption> set = new LinkedHashSet<>();
+                set.addAll(endpointOptions);
+                
PropertyConfigurerGenerator.generatePropertyConfigurer(processingEnv, parent, 
packageName, className, fqClassName, endpointClassName, set);
+                
PropertyConfigurerGenerator.generateMetaInfConfigurer(processingEnv, 
componentModel.getScheme() + "-endpoint", fqClassName);
             }
         }
     }
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/PropertyConfigurerGenerator.java
similarity index 89%
rename from 
tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointPropertyConfigurerGenerator.java
rename to 
tooling/apt/src/main/java/org/apache/camel/tools/apt/PropertyConfigurerGenerator.java
index 54ef7c0..6c8af09 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/PropertyConfigurerGenerator.java
@@ -28,15 +28,13 @@ import javax.tools.JavaFileObject;
 import javax.tools.StandardLocation;
 
 import org.apache.camel.tools.apt.helper.IOHelper;
-import org.apache.camel.tools.apt.model.EndpointOption;
+import org.apache.camel.tools.apt.model.PropertyOption;
 
 import static 
org.apache.camel.tools.apt.AnnotationProcessorHelper.dumpExceptionToErrorFile;
 
-// TODO: ComponentPropertyConfigurerGenerator and 
EndpointPropertyConfigurerGenerator can be merged to one
+public final class PropertyConfigurerGenerator {
 
-public final class EndpointPropertyConfigurerGenerator {
-
-    private EndpointPropertyConfigurerGenerator() {
+    private PropertyConfigurerGenerator() {
     }
 
     public static void generateExtendConfigurer(ProcessingEnvironment 
processingEnv, TypeElement parent,
@@ -69,7 +67,7 @@ public final class EndpointPropertyConfigurerGenerator {
 
     public static void generatePropertyConfigurer(ProcessingEnvironment 
processingEnv, TypeElement parent,
                                                   String pn, String cn, String 
fqn, String en,
-                                                  Set<EndpointOption> options) 
{
+                                                  Set<PropertyOption> options) 
{
 
         Writer w = null;
         try {
@@ -95,17 +93,17 @@ public final class EndpointPropertyConfigurerGenerator {
             w.write("public class " + cn + " extends PropertyConfigurerSupport 
implements GeneratedPropertyConfigurer {\n");
             w.write("\n");
             w.write("    @Override\n");
-            w.write("    public boolean configure(CamelContext camelContext, 
Object endpoint, String name, Object value, boolean ignoreCase) {\n");
+            w.write("    public boolean configure(CamelContext camelContext, 
Object target, String name, Object value, boolean ignoreCase) {\n");
             w.write("        if (ignoreCase) {\n");
-            w.write("            return doConfigureIgnoreCase(camelContext, 
endpoint, name, value);\n");
+            w.write("            return doConfigureIgnoreCase(camelContext, 
target, name, value);\n");
             w.write("        } else {\n");
-            w.write("            return doConfigure(camelContext, endpoint, 
name, value);\n");
+            w.write("            return doConfigure(camelContext, target, 
name, value);\n");
             w.write("        }\n");
             w.write("    }\n");
             w.write("\n");
-            w.write("    private static boolean doConfigure(CamelContext 
camelContext, Object endpoint, String name, Object value) {\n");
+            w.write("    private static boolean doConfigure(CamelContext 
camelContext, Object target, String name, Object value) {\n");
             w.write("        switch (name) {\n");
-            for (EndpointOption option : options) {
+            for (PropertyOption option : options) {
                 String getOrSet = option.getName();
                 getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
                 String setterLambda = setterLambda(en, getOrSet, 
option.getType(), option.getConfigurationField());
@@ -115,9 +113,9 @@ public final class EndpointPropertyConfigurerGenerator {
             w.write("        }\n");
             w.write("    }\n");
             w.write("\n");
-            w.write("    private static boolean 
doConfigureIgnoreCase(CamelContext camelContext, Object endpoint, String name, 
Object value) {\n");
+            w.write("    private static boolean 
doConfigureIgnoreCase(CamelContext camelContext, Object target, String name, 
Object value) {\n");
             w.write("        switch (name.toLowerCase()) {\n");
-            for (EndpointOption option : options) {
+            for (PropertyOption option : options) {
                 String getOrSet = option.getName();
                 getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
                 String setterLambda = setterLambda(en, getOrSet, 
option.getType(), option.getConfigurationField());
@@ -148,7 +146,8 @@ public final class EndpointPropertyConfigurerGenerator {
             getOrSet = "set" + getOrSet;
         }
 
-        return String.format("((%s) endpoint).%s(property(camelContext, 
%s.class, value))", en, getOrSet, type);
+        // ((LogComponent) target).setGroupSize(property(camelContext, 
java.lang.Integer.class, value))
+        return String.format("((%s) target).%s(property(camelContext, 
%s.class, value))", en, getOrSet, type);
     }
 
     public static void generateMetaInfConfigurer(ProcessingEnvironment 
processingEnv, String name, String fqn) {
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/ComponentOption.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/ComponentOption.java
index 537594b..dd77337 100644
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/ComponentOption.java
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/ComponentOption.java
@@ -20,7 +20,7 @@ import java.util.Set;
 
 import static org.apache.camel.tools.apt.helper.Strings.isNullOrEmpty;
 
-public final class ComponentOption {
+public final class ComponentOption implements PropertyOption {
 
     private String name;
     private String displayName;
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/EndpointOption.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/EndpointOption.java
index a225e1d..c44ef4f 100644
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/EndpointOption.java
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/EndpointOption.java
@@ -20,7 +20,7 @@ import java.util.Set;
 
 import static org.apache.camel.tools.apt.helper.Strings.isNullOrEmpty;
 
-public final class EndpointOption {
+public final class EndpointOption implements PropertyOption {
 
     private String name;
     private String displayName;
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/PropertyOption.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/PropertyOption.java
new file mode 100644
index 0000000..3bcfc77
--- /dev/null
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/model/PropertyOption.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.tools.apt.model;
+
+public interface PropertyOption {
+
+    String getName();
+
+    String getType();
+
+    String getConfigurationField();
+
+}

Reply via email to