CAMEL-14263: Make property configurer for component and endpoints into only class.
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.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 @@
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 @@
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.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 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 @@
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 @@
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 @@
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 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 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();
+
+}