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 <[email protected]> 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) {
