You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2022/02/10 19:24:27 UTC
[camel] 01/03: (chores) camel-maven-package-plugin: refactoring
This is an automated email from the ASF dual-hosted git repository.
orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 905c23ac3d9d97118ff97d22288a71b669f9fbe0
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Feb 10 18:09:37 2022 +0100
(chores) camel-maven-package-plugin: refactoring
Break a few large methods EndpointDslMojo in smaller pieces for easier maintenance and future optimization
---
.../camel/maven/packaging/EndpointDslMojo.java | 559 +++++++++++----------
1 file changed, 303 insertions(+), 256 deletions(-)
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
index a495ea8..b63f506 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
@@ -229,25 +229,9 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
String componentClassName = model.getJavaType();
String builderName = getEndpointName(componentClassName);
- final JavaClass javaClass = new JavaClass(getProjectClassLoader());
- javaClass.setPackage(componentsFactoriesPackageName);
- javaClass.setName(builderName + "Factory");
- javaClass.setClass(false);
- javaClass.addImport("java.util.*");
- javaClass.addImport("java.util.concurrent.*");
- javaClass.addImport("java.util.function.*");
- javaClass.addImport("java.util.stream.*");
- javaClass.addImport("org.apache.camel.builder.EndpointConsumerBuilder");
- javaClass.addImport("org.apache.camel.builder.EndpointProducerBuilder");
- javaClass.addImport("org.apache.camel.builder.endpoint.AbstractEndpointBuilder");
+ final JavaClass javaClass = createJavaClass(builderName);
- boolean hasAdvanced = false;
- for (EndpointOptionModel option : model.getEndpointOptions()) {
- if (option.getLabel() != null && option.getLabel().contains("advanced")) {
- hasAdvanced = true;
- break;
- }
- }
+ boolean hasAdvanced = hasAdvancedCheck(model);
JavaClass consumerClass = null;
JavaClass advancedConsumerClass = null;
@@ -268,9 +252,11 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
generateDummyClass(advancedConsumerClass.getCanonicalName());
advancedConsumerClass.getJavaDoc()
.setText("Advanced builder for endpoint consumers for the " + model.getTitle() + " component.");
+
consumerClass.addMethod().setName("advanced").setReturnType(loadClass(advancedConsumerClass.getCanonicalName()))
.setDefault()
.setBody("return (Advanced" + consumerName + ") this;");
+
advancedConsumerClass.addMethod().setName("basic").setReturnType(loadClass(consumerClass.getCanonicalName()))
.setDefault()
.setBody("return (" + consumerName + ") this;");
@@ -346,162 +332,7 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
javaClass.addAnnotation(Generated.class).setStringValue("value", EndpointDslMojo.class.getName());
- for (EndpointOptionModel option : model.getEndpointOptions()) {
-
- // skip all @UriPath parameters as the endpoint DSL is for query
- // parameters
- if ("path".equals(option.getKind())) {
- continue;
- }
-
- List<JavaClass> targets = new ArrayList<>();
- String label = option.getLabel() != null ? option.getLabel() : "";
- if (label != null) {
- if (label.contains("producer")) {
- if (label.contains("advanced")) {
- targets.add(advancedProducerClass != null ? advancedProducerClass : advancedBuilderClass);
- } else {
- targets.add(producerClass != null ? producerClass : builderClass);
- }
- } else if (label.contains("consumer")) {
- if (label.contains("advanced")) {
- targets.add(advancedConsumerClass != null ? advancedConsumerClass : advancedBuilderClass);
- } else {
- targets.add(consumerClass != null ? consumerClass : builderClass);
- }
- } else {
- if (label.contains("advanced")) {
- targets.add(advancedConsumerClass);
- targets.add(advancedProducerClass);
- targets.add(advancedBuilderClass);
- } else {
- targets.add(consumerClass);
- targets.add(producerClass);
- targets.add(builderClass);
- }
- }
- }
-
- for (JavaClass target : targets) {
- if (target == null) {
- continue;
- }
-
- // basic description
- String baseDesc = option.getDescription();
- if (!Strings.isEmpty(baseDesc)) {
- // must xml encode description as in some rare cases it contains & chars which is invalid javadoc
- baseDesc = JavadocHelper.xmlEncode(baseDesc);
-
- if (!baseDesc.endsWith(".")) {
- baseDesc += ".";
- }
- baseDesc += "\n";
- baseDesc += "@@REPLACE_ME@@";
- if (option.isMultiValue()) {
- baseDesc += "\nThe option is multivalued, and you can use the " + option.getName()
- + "(String, Object) method to add a value (call the method multiple times to set more values).";
- }
- baseDesc += "\n";
- // the Endpoint DSL currently requires to provide the entire
- // context-path and not as individual options
- // so lets only mark query parameters that are required as
- // required
- if ("parameter".equals(option.getKind()) && option.isRequired()) {
- baseDesc += "\nRequired: true";
- }
- // include default value (if any)
- if (option.getDefaultValue() != null) {
- // must xml encode default value so its valid as javadoc
- String value = JavadocHelper.xmlEncode(option.getDefaultValue().toString());
- baseDesc += "\nDefault: " + value;
- }
- baseDesc += "\nGroup: " + option.getGroup();
- }
-
- boolean multiValued = option.isMultiValue();
- if (multiValued) {
- // multi value option that takes one value
- String desc = baseDesc.replace("@@REPLACE_ME@@",
- "\nThe option is a: <code>" + option.getJavaType().replace("<", "<").replace(">", ">")
- + "</code> type.");
- desc = JavadocHelper.xmlEncode(desc);
-
- Method fluent = target.addMethod().setDefault().setName(option.getName())
- .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
- .addParameter(new GenericType(String.class), "key")
- .addParameter(new GenericType(Object.class), "value")
- .setBody("doSetMultiValueProperty(\"" + option.getName() + "\", \"" + option.getPrefix()
- + "\" + key, value);",
- "return this;\n");
- if (option.isDeprecated()) {
- fluent.addAnnotation(Deprecated.class);
- }
-
- String text = desc;
- text += "\n\n@param key the option key";
- text += "\n@param value the option value";
- text += "\n@return the dsl builder\n";
- fluent.getJavaDoc().setText(text);
- // add multi value method that takes a Map
- fluent = target.addMethod().setDefault().setName(option.getName())
- .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
- .addParameter(new GenericType(Map.class), "values")
- .setBody("doSetMultiValueProperties(\"" + option.getName() + "\", \"" + option.getPrefix()
- + "\", values);",
- "return this;\n");
- if (option.isDeprecated()) {
- fluent.addAnnotation(Deprecated.class);
- }
- text = desc;
- text += "\n\n@param values the values";
- text += "\n@return the dsl builder\n";
- fluent.getJavaDoc().setText(text);
- } else {
- // regular option
- String desc = baseDesc.replace("@@REPLACE_ME@@",
- "\nThe option is a: <code>" + option.getJavaType().replace("<", "<").replace(">", ">")
- + "</code> type.");
- desc = JavadocHelper.xmlEncode(desc);
-
- Method fluent = target.addMethod().setDefault().setName(option.getName())
- .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
- .addParameter(optionJavaType(option), option.getName())
- .setBody("doSetProperty(\"" + option.getName() + "\", " + option.getName() + ");",
- "return this;\n");
- if (option.isDeprecated()) {
- fluent.addAnnotation(Deprecated.class);
- }
- String text = desc;
- text += "\n\n@param " + option.getName() + " the value to set";
- text += "\n@return the dsl builder\n";
- fluent.getJavaDoc().setText(text);
-
- if (!"String".equals(optionJavaType(option))) {
- // regular option by String parameter variant
- desc = baseDesc.replace("@@REPLACE_ME@@",
- "\nThe option will be converted to a <code>"
- + option.getJavaType().replace("<", "<").replace(">",
- ">")
- + "</code> type.");
- desc = JavadocHelper.xmlEncode(desc);
-
- fluent = target.addMethod().setDefault().setName(option.getName())
- .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
- .addParameter(new GenericType(String.class), option.getName())
- .setBody("doSetProperty(\"" + option.getName() + "\", " + option.getName() + ");",
- "return this;\n");
- if (option.isDeprecated()) {
- fluent.addAnnotation(Deprecated.class);
- }
- text = desc;
- text += "\n\n@param " + option.getName() + " the value to set";
- text += "\n@return the dsl builder\n";
- fluent.getJavaDoc().setText(text);
- }
- }
- }
- }
+ processEndpoints(model, consumerClass, advancedConsumerClass, producerClass, advancedProducerClass, builderClass, advancedBuilderClass);
javaClass.removeImport("T");
@@ -523,118 +354,334 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
}
if (aliases.size() == 1) {
- String desc = getMainDescription(model);
- String methodName = camelCaseLower(model.getScheme());
- method = dslClass.addMethod().setStatic().setName(methodName)
- .addParameter(String.class, "path")
- .setReturnType(new GenericType(loadClass(builderClass.getCanonicalName())))
- .setDefault()
- .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder",
- "\"" + model.getScheme() + "\", path");
- String javaDoc = desc;
- javaDoc += "\n\n@param path " + pathParameterJavaDoc(model);
- javaDoc += "\n@return the dsl builder\n";
- method.getJavaDoc().setText(javaDoc);
- if (model.isDeprecated()) {
- method.addAnnotation(Deprecated.class);
- }
+ processAliases(model, staticBuilders, javaClass, builderClass, dslClass);
+ } else {
+ processMasterScheme(aliases, staticBuilders, javaClass, builderClass, dslClass);
+ }
+
+ return writeSourceIfChanged(javaClass, componentsFactoriesPackageName.replace('.', '/'), builderName + "Factory.java",
+ false);
+ }
- // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
- method = method.copy();
- method.setPublic().setStatic();
- method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
- method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder",
- "\"" + model.getScheme() + "\", path");
- staticBuilders.add(method);
+ private void processMasterScheme(List<ComponentModel> aliases, List<Method> staticBuilders, JavaClass javaClass, JavaClass builderClass, JavaClass dslClass) {
+ Method method;
+ // we only want the first alias (master scheme) as static builders
+ boolean firstAlias = true;
+ for (ComponentModel componentModel : aliases) {
+ String desc = getMainDescription(componentModel);
+ String methodName = camelCaseLower(componentModel.getScheme());
method = dslClass.addMethod().setStatic().setName(methodName)
- .addParameter(String.class, "componentName")
.addParameter(String.class, "path")
.setReturnType(new GenericType(loadClass(builderClass.getCanonicalName())))
.setDefault()
- .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder", "componentName, path");
- javaDoc = desc;
- javaDoc += "\n\n@param componentName to use a custom component name for the endpoint instead of the default name";
- javaDoc += "\n@param path " + pathParameterJavaDoc(model);
+ .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder",
+ "\"" + componentModel.getScheme() + "\", path");
+ String javaDoc = desc;
+ javaDoc += "\n\n@param path " + pathParameterJavaDoc(componentModel);
javaDoc += "\n@return the dsl builder\n";
method.getJavaDoc().setText(javaDoc);
- if (model.isDeprecated()) {
+ if (componentModel.isDeprecated()) {
method.addAnnotation(Deprecated.class);
}
- // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
- method = method.copy();
- method.setPublic().setStatic();
- method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
- method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder", "componentName, path");
- staticBuilders.add(method);
- } else {
// we only want the first alias (master scheme) as static builders
- boolean firstAlias = true;
+ if (firstAlias) {
+ // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
+ method = method.copy();
+ method.setPublic().setStatic();
+ method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
+ method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder",
+ "\"" + componentModel.getScheme() + "\", path");
+ staticBuilders.add(method);
+ }
- for (ComponentModel componentModel : aliases) {
- String desc = getMainDescription(componentModel);
- String methodName = camelCaseLower(componentModel.getScheme());
+ // we only want first alias for variation with custom component name
+ if (firstAlias) {
method = dslClass.addMethod().setStatic().setName(methodName)
+ .addParameter(String.class, "componentName")
.addParameter(String.class, "path")
.setReturnType(new GenericType(loadClass(builderClass.getCanonicalName())))
.setDefault()
- .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder",
- "\"" + componentModel.getScheme() + "\", path");
- String javaDoc = desc;
- javaDoc += "\n\n@param path " + pathParameterJavaDoc(componentModel);
+ .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder", "componentName, path");
+ javaDoc = desc;
+ javaDoc += "\n\n@param componentName to use a custom component name for the endpoint instead of the default name";
+ javaDoc += "\n@param path " + pathParameterJavaDoc(componentModel);
javaDoc += "\n@return the dsl builder\n";
method.getJavaDoc().setText(javaDoc);
if (componentModel.isDeprecated()) {
method.addAnnotation(Deprecated.class);
}
+ }
- // we only want the first alias (master scheme) as static builders
- if (firstAlias) {
- // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
- method = method.copy();
- method.setPublic().setStatic();
- method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
- method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder",
- "\"" + componentModel.getScheme() + "\", path");
- staticBuilders.add(method);
- }
+ // we only want the first alias (master scheme) as static builders
+ if (firstAlias) {
+ // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
+ method = method.copy();
+ method.setPublic().setStatic();
+ method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
+ method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder",
+ "componentName, path");
+ staticBuilders.add(method);
+ }
- // we only want first alias for variation with custom component name
- if (firstAlias) {
- method = dslClass.addMethod().setStatic().setName(methodName)
- .addParameter(String.class, "componentName")
- .addParameter(String.class, "path")
- .setReturnType(new GenericType(loadClass(builderClass.getCanonicalName())))
- .setDefault()
- .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder", "componentName, path");
- javaDoc = desc;
- javaDoc += "\n\n@param componentName to use a custom component name for the endpoint instead of the default name";
- javaDoc += "\n@param path " + pathParameterJavaDoc(componentModel);
- javaDoc += "\n@return the dsl builder\n";
- method.getJavaDoc().setText(javaDoc);
- if (componentModel.isDeprecated()) {
- method.addAnnotation(Deprecated.class);
- }
- }
+ firstAlias = false;
+ }
+ }
- // we only want the first alias (master scheme) as static builders
- if (firstAlias) {
- // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
- method = method.copy();
- method.setPublic().setStatic();
- method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
- method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder",
- "componentName, path");
- staticBuilders.add(method);
+ private void processAliases(ComponentModel model, List<Method> staticBuilders, JavaClass javaClass, JavaClass builderClass, JavaClass dslClass) {
+ Method method;
+ String desc = getMainDescription(model);
+ String methodName = camelCaseLower(model.getScheme());
+ method = dslClass.addMethod().setStatic().setName(methodName)
+ .addParameter(String.class, "path")
+ .setReturnType(new GenericType(loadClass(builderClass.getCanonicalName())))
+ .setDefault()
+ .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder",
+ "\"" + model.getScheme() + "\", path");
+ String javaDoc = desc;
+ javaDoc += "\n\n@param path " + pathParameterJavaDoc(model);
+ javaDoc += "\n@return the dsl builder\n";
+ method.getJavaDoc().setText(javaDoc);
+ if (model.isDeprecated()) {
+ method.addAnnotation(Deprecated.class);
+ }
+
+ // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
+ method = method.copy();
+ method.setPublic().setStatic();
+ method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
+ method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder",
+ "\"" + model.getScheme() + "\", path");
+ staticBuilders.add(method);
+
+ method = dslClass.addMethod().setStatic().setName(methodName)
+ .addParameter(String.class, "componentName")
+ .addParameter(String.class, "path")
+ .setReturnType(new GenericType(loadClass(builderClass.getCanonicalName())))
+ .setDefault()
+ .setBodyF("return %s.%s(%s);", javaClass.getName(), "endpointBuilder", "componentName, path");
+ javaDoc = desc;
+ javaDoc += "\n\n@param componentName to use a custom component name for the endpoint instead of the default name";
+ javaDoc += "\n@param path " + pathParameterJavaDoc(model);
+ javaDoc += "\n@return the dsl builder\n";
+ method.getJavaDoc().setText(javaDoc);
+ if (model.isDeprecated()) {
+ method.addAnnotation(Deprecated.class);
+ }
+
+ // copy method for the static builders (which allows to use the endpoint-dsl from outside EndpointRouteBuilder)
+ method = method.copy();
+ method.setPublic().setStatic();
+ method.setReturnType(builderClass.getCanonicalName().replace('$', '.'));
+ method.setBodyF("return %s.%s(%s);", javaClass.getCanonicalName(), "endpointBuilder", "componentName, path");
+ staticBuilders.add(method);
+ }
+
+ private void processEndpoints(ComponentModel model, JavaClass consumerClass, JavaClass advancedConsumerClass, JavaClass producerClass, JavaClass advancedProducerClass, JavaClass builderClass, JavaClass advancedBuilderClass) {
+ for (EndpointOptionModel option : model.getEndpointOptions()) {
+
+ // skip all @UriPath parameters as the endpoint DSL is for query
+ // parameters
+ if ("path".equals(option.getKind())) {
+ continue;
+ }
+
+ List<JavaClass> targets = evalTargetsToProcess(consumerClass, advancedConsumerClass, producerClass, advancedProducerClass, builderClass, advancedBuilderClass, option);
+
+ for (JavaClass target : targets) {
+ processTarget(option, target);
+ }
+ }
+ }
+
+ private void processTarget(EndpointOptionModel option, JavaClass target) {
+ if (target == null) {
+ return;
+ }
+
+ // basic description
+ String baseDesc = option.getDescription();
+ if (!Strings.isEmpty(baseDesc)) {
+ baseDesc = createBaseDesc(option, baseDesc);
+ }
+
+ boolean multiValued = option.isMultiValue();
+ if (multiValued) {
+ createMultivaluedDesc(option, target, baseDesc);
+ } else {
+ // regular option
+ createRegularDesc(option, target, baseDesc);
+ }
+ }
+
+ private void createRegularDesc(EndpointOptionModel option, JavaClass target, String baseDesc) {
+ String desc = baseDesc.replace("@@REPLACE_ME@@",
+ "\nThe option is a: <code>" + option.getJavaType().replace("<", "<").replace(">", ">")
+ + "</code> type.");
+ desc = JavadocHelper.xmlEncode(desc);
+
+ Method fluent = target.addMethod().setDefault().setName(option.getName())
+ .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
+ .addParameter(optionJavaType(option), option.getName())
+ .setBody("doSetProperty(\"" + option.getName() + "\", " + option.getName() + ");",
+ "return this;\n");
+ if (option.isDeprecated()) {
+ fluent.addAnnotation(Deprecated.class);
+ }
+ String text = desc;
+ text += "\n\n@param " + option.getName() + " the value to set";
+ text += "\n@return the dsl builder\n";
+ fluent.getJavaDoc().setText(text);
+
+ if (!"String".equals(optionJavaType(option))) {
+ // regular option by String parameter variant
+ desc = baseDesc.replace("@@REPLACE_ME@@",
+ "\nThe option will be converted to a <code>"
+ + option.getJavaType().replace("<", "<").replace(">",
+ ">")
+ + "</code> type.");
+ desc = JavadocHelper.xmlEncode(desc);
+
+ fluent = target.addMethod().setDefault().setName(option.getName())
+ .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
+ .addParameter(new GenericType(String.class), option.getName())
+ .setBody("doSetProperty(\"" + option.getName() + "\", " + option.getName() + ");",
+ "return this;\n");
+ if (option.isDeprecated()) {
+ fluent.addAnnotation(Deprecated.class);
+ }
+ text = desc;
+ text += "\n\n@param " + option.getName() + " the value to set";
+ text += "\n@return the dsl builder\n";
+ fluent.getJavaDoc().setText(text);
+ }
+ }
+
+ private void createMultivaluedDesc(EndpointOptionModel option, JavaClass target, String baseDesc) {
+ // multi value option that takes one value
+ String desc = baseDesc.replace("@@REPLACE_ME@@",
+ "\nThe option is a: <code>" + option.getJavaType().replace("<", "<").replace(">", ">")
+ + "</code> type.");
+ desc = JavadocHelper.xmlEncode(desc);
+
+ Method fluent = target.addMethod().setDefault().setName(option.getName())
+ .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
+ .addParameter(new GenericType(String.class), "key")
+ .addParameter(new GenericType(Object.class), "value")
+ .setBody("doSetMultiValueProperty(\"" + option.getName() + "\", \"" + option.getPrefix()
+ + "\" + key, value);",
+ "return this;\n");
+ if (option.isDeprecated()) {
+ fluent.addAnnotation(Deprecated.class);
+ }
+
+ String text = desc;
+ text += "\n\n@param key the option key";
+ text += "\n@param value the option value";
+ text += "\n@return the dsl builder\n";
+ fluent.getJavaDoc().setText(text);
+ // add multi value method that takes a Map
+ fluent = target.addMethod().setDefault().setName(option.getName())
+ .setReturnType(new GenericType(loadClass(target.getCanonicalName())))
+ .addParameter(new GenericType(Map.class), "values")
+ .setBody("doSetMultiValueProperties(\"" + option.getName() + "\", \"" + option.getPrefix()
+ + "\", values);",
+ "return this;\n");
+ if (option.isDeprecated()) {
+ fluent.addAnnotation(Deprecated.class);
+ }
+ text = desc;
+ text += "\n\n@param values the values";
+ text += "\n@return the dsl builder\n";
+ fluent.getJavaDoc().setText(text);
+ }
+
+ private String createBaseDesc(EndpointOptionModel option, String baseDesc) {
+ // must xml encode description as in some rare cases it contains & chars which is invalid javadoc
+ baseDesc = JavadocHelper.xmlEncode(baseDesc);
+
+ if (!baseDesc.endsWith(".")) {
+ baseDesc += ".";
+ }
+ baseDesc += "\n";
+ baseDesc += "@@REPLACE_ME@@";
+ if (option.isMultiValue()) {
+ baseDesc += "\nThe option is multivalued, and you can use the " + option.getName()
+ + "(String, Object) method to add a value (call the method multiple times to set more values).";
+ }
+ baseDesc += "\n";
+ // the Endpoint DSL currently requires to provide the entire
+ // context-path and not as individual options
+ // so lets only mark query parameters that are required as
+ // required
+ if ("parameter".equals(option.getKind()) && option.isRequired()) {
+ baseDesc += "\nRequired: true";
+ }
+ // include default value (if any)
+ if (option.getDefaultValue() != null) {
+ // must xml encode default value so its valid as javadoc
+ String value = JavadocHelper.xmlEncode(option.getDefaultValue().toString());
+ baseDesc += "\nDefault: " + value;
+ }
+ baseDesc += "\nGroup: " + option.getGroup();
+ return baseDesc;
+ }
+
+ private List<JavaClass> evalTargetsToProcess(JavaClass consumerClass, JavaClass advancedConsumerClass, JavaClass producerClass, JavaClass advancedProducerClass, JavaClass builderClass, JavaClass advancedBuilderClass, EndpointOptionModel option) {
+ List<JavaClass> targets = new ArrayList<>();
+ String label = option.getLabel() != null ? option.getLabel() : "";
+ if (label != null) {
+ if (label.contains("producer")) {
+ if (label.contains("advanced")) {
+ targets.add(advancedProducerClass != null ? advancedProducerClass : advancedBuilderClass);
+ } else {
+ targets.add(producerClass != null ? producerClass : builderClass);
+ }
+ } else if (label.contains("consumer")) {
+ if (label.contains("advanced")) {
+ targets.add(advancedConsumerClass != null ? advancedConsumerClass : advancedBuilderClass);
+ } else {
+ targets.add(consumerClass != null ? consumerClass : builderClass);
+ }
+ } else {
+ if (label.contains("advanced")) {
+ targets.add(advancedConsumerClass);
+ targets.add(advancedProducerClass);
+ targets.add(advancedBuilderClass);
+ } else {
+ targets.add(consumerClass);
+ targets.add(producerClass);
+ targets.add(builderClass);
}
+ }
+ }
+ return targets;
+ }
- firstAlias = false;
+ private boolean hasAdvancedCheck(ComponentModel model) {
+ for (EndpointOptionModel option : model.getEndpointOptions()) {
+ if (option.getLabel() != null && option.getLabel().contains("advanced")) {
+ return true;
}
}
- return writeSourceIfChanged(javaClass, componentsFactoriesPackageName.replace('.', '/'), builderName + "Factory.java",
- false);
+ return false;
+ }
+
+ private JavaClass createJavaClass(String builderName) {
+ final JavaClass javaClass = new JavaClass(getProjectClassLoader());
+ javaClass.setPackage(componentsFactoriesPackageName);
+ javaClass.setName(builderName + "Factory");
+ javaClass.setClass(false);
+ javaClass.addImport("java.util.*");
+ javaClass.addImport("java.util.concurrent.*");
+ javaClass.addImport("java.util.function.*");
+ javaClass.addImport("java.util.stream.*");
+ javaClass.addImport("org.apache.camel.builder.EndpointConsumerBuilder");
+ javaClass.addImport("org.apache.camel.builder.EndpointProducerBuilder");
+ javaClass.addImport("org.apache.camel.builder.endpoint.AbstractEndpointBuilder");
+ return javaClass;
}
private static String optionJavaType(EndpointOptionModel option) {