Review the usage of AllNestedConditions for components-starter code auto generation
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/545f3f79 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/545f3f79 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/545f3f79 Branch: refs/heads/master Commit: 545f3f791c03f48906361e00197266f5ade7c768 Parents: c3d7668 Author: lburgazzoli <[email protected]> Authored: Sat May 20 18:36:32 2017 +0200 Committer: lburgazzoli <[email protected]> Committed: Sat May 20 18:37:43 2017 +0200 ---------------------------------------------------------------------- ...OnCamelContextAndAutoConfigurationBeans.java | 36 ++++++ .../SpringBootAutoConfigurationMojo.java | 119 +++++-------------- 2 files changed, 63 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/545f3f79/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/util/ConditionalOnCamelContextAndAutoConfigurationBeans.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/util/ConditionalOnCamelContextAndAutoConfigurationBeans.java b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/util/ConditionalOnCamelContextAndAutoConfigurationBeans.java new file mode 100644 index 0000000..c7ee1b0 --- /dev/null +++ b/components/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/util/ConditionalOnCamelContextAndAutoConfigurationBeans.java @@ -0,0 +1,36 @@ +/** + * 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.spring.boot.util; + +import org.apache.camel.CamelContext; +import org.apache.camel.spring.boot.CamelAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.AllNestedConditions; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; + +public class ConditionalOnCamelContextAndAutoConfigurationBeans extends AllNestedConditions { + public ConditionalOnCamelContextAndAutoConfigurationBeans() { + super(ConfigurationPhase.REGISTER_BEAN); + } + + @ConditionalOnBean(CamelContext.class) + static class OnCamelContext { + } + + @ConditionalOnBean(CamelAutoConfiguration.class) + static class OnCamelAutoConfiguration { + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/545f3f79/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootAutoConfigurationMojo.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootAutoConfigurationMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootAutoConfigurationMojo.java index da7ecb8..50c3b61 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootAutoConfigurationMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootAutoConfigurationMojo.java @@ -69,8 +69,8 @@ import org.jboss.forge.roaster.model.source.PropertySource; import org.jboss.forge.roaster.model.util.Formatter; import org.jboss.forge.roaster.model.util.Strings; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.AllNestedConditions; import org.springframework.boot.autoconfigure.condition.ConditionMessage; import org.springframework.boot.autoconfigure.condition.ConditionOutcome; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -1180,17 +1180,17 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { String name = model.getJavaType().substring(pos + 1); name = name.replace("Component", "ComponentAutoConfiguration"); + String configurationName = name.replace("ComponentAutoConfiguration", "ComponentConfiguration"); + javaClass.setPackage(packageName).setName(name); String doc = "Generated by camel-package-maven-plugin - do not edit this file!"; javaClass.getJavaDoc().setFullText(doc); - javaClass.extendSuperType(AllNestedConditions.class); javaClass.addAnnotation(Generated.class).setStringValue("value", SpringBootAutoConfigurationMojo.class.getName()); javaClass.addAnnotation(Configuration.class); - javaClass.addAnnotation(Conditional.class).setLiteralValue(name + ".Condition.class"); + javaClass.addAnnotation(Conditional.class).setLiteralValue( + "{ ConditionalOnCamelContextAndAutoConfigurationBeans.class, " + name + ".GroupConditions.class }"); javaClass.addAnnotation(AutoConfigureAfter.class).setLiteralValue("CamelAutoConfiguration.class"); - - String configurationName = name.replace("ComponentAutoConfiguration", "ComponentConfiguration"); javaClass.addAnnotation(EnableConfigurationProperties.class).setLiteralValue( "{ ComponentConfigurationProperties.class, " + configurationName + ".class }" ); @@ -1207,6 +1207,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { javaClass.addImport("org.apache.camel.spi.ComponentCustomizer"); javaClass.addImport("org.apache.camel.spring.boot.CamelAutoConfiguration"); javaClass.addImport("org.apache.camel.spring.boot.ComponentConfigurationProperties"); + javaClass.addImport("org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans"); javaClass.addImport("org.apache.camel.spring.boot.util.GroupCondition"); javaClass.addImport("org.apache.camel.util.ObjectHelper"); @@ -1242,34 +1243,14 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { .setType(configurationName) .addAnnotation(Autowired.class); - javaClass.addMethod() - .setConstructor(true) - .setPublic() - .setBody("super(ConfigurationPhase.REGISTER_BEAN);"); - - javaClass.addNestedType( - Roaster.create(JavaClassSource.class) - .setName("OnCamelContext") - .setStatic(true) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelContext.class") - .getOrigin() - ); - javaClass.addNestedType( - Roaster.create(JavaClassSource.class) - .setName("OnCamelAutoConfiguration") - .setStatic(true) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelAutoConfiguration.class") - .getOrigin() - ); javaClass.addNestedType( Roaster.create(JavaClassSource.class) - .setName("Condition") + .setName("GroupConditions") .setStatic(true) + .setPackagePrivate() .extendSuperType(Roaster.create(JavaClassSource.class).setName("GroupCondition")) .addMethod() - .setName("Condition") + .setName("GroupConditions") .setConstructor(true) .setPublic() .setBody("super(\"camel.component\", \"camel.component." + (overrideComponentName != null ? overrideComponentName : model.getScheme()).toLowerCase(Locale.US) + "\");") @@ -1292,7 +1273,6 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { method.addAnnotation(Lazy.class); method.addAnnotation(Bean.class).setStringArrayValue("name", springBeanAliases); - method.addAnnotation(ConditionalOnClass.class).setLiteralValue("CamelContext.class"); method.addAnnotation(ConditionalOnMissingBean.class).setLiteralValue(model.getShortJavaType() + ".class"); sortImports(javaClass); @@ -1310,17 +1290,16 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { String name = model.getJavaType().substring(pos + 1); name = name.replace("DataFormat", "DataFormatAutoConfiguration"); + String configurationName = name.replace("DataFormatAutoConfiguration", "DataFormatConfiguration"); javaClass.setPackage(packageName).setName(name); String doc = "Generated by camel-package-maven-plugin - do not edit this file!"; javaClass.getJavaDoc().setFullText(doc); - javaClass.extendSuperType(AllNestedConditions.class); javaClass.addAnnotation(Generated.class).setStringValue("value", SpringBootAutoConfigurationMojo.class.getName()); javaClass.addAnnotation(Configuration.class); - javaClass.addAnnotation(Conditional.class).setLiteralValue(name + ".Condition.class"); + javaClass.addAnnotation(Conditional.class).setLiteralValue( + "{ ConditionalOnCamelContextAndAutoConfigurationBeans.class, " + name + ".GroupConditions.class }"); javaClass.addAnnotation(AutoConfigureAfter.class).setStringValue("name", "org.apache.camel.spring.boot.CamelAutoConfiguration"); - - String configurationName = name.replace("DataFormatAutoConfiguration", "DataFormatConfiguration"); javaClass.addAnnotation(EnableConfigurationProperties.class).setLiteralValue( "{ DataFormatConfigurationProperties.class, " + configurationName + ".class }" ); @@ -1337,6 +1316,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { javaClass.addImport("org.apache.camel.CamelContextAware"); javaClass.addImport("org.apache.camel.spring.boot.CamelAutoConfiguration"); javaClass.addImport("org.apache.camel.spring.boot.DataFormatConfigurationProperties"); + javaClass.addImport("org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans"); javaClass.addImport("org.apache.camel.spring.boot.util.GroupCondition"); javaClass.addImport("org.apache.camel.util.ObjectHelper"); javaClass.addImport("org.apache.camel.RuntimeCamelException"); @@ -1377,37 +1357,14 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { .setType(configurationName) .addAnnotation(Autowired.class); - javaClass.addMethod() - .setConstructor(true) - .setPublic() - .setBody("super(ConfigurationPhase.REGISTER_BEAN);"); - - javaClass.addNestedType( - Roaster.create(JavaClassSource.class) - .setName("OnCamelContext") - .setStatic(true) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelContext.class") - .getOrigin() - ); javaClass.addNestedType( Roaster.create(JavaClassSource.class) - .setName("OnCamelAutoConfiguration") - .setStatic(true) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelAutoConfiguration.class") - .getOrigin() - ); - javaClass.addNestedType( - Roaster.create(JavaClassSource.class) - .setName("Condition") + .setName("GroupConditions") .setStatic(true) + .setPackagePrivate() .extendSuperType(Roaster.create(JavaClassSource.class).setName("GroupCondition")) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelAutoConfiguration.class") - .getOrigin() .addMethod() - .setName("Condition") + .setName("GroupConditions") .setConstructor(true) .setPublic() .setBody("super(\"camel.dataformat\", \"camel.dataformat." + (overrideDataFormatName != null ? overrideDataFormatName : model.getName()).toLowerCase(Locale.US) + "\");") @@ -1430,7 +1387,6 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { String[] springBeanAliases = dataFormatAliases.stream().map(alias -> alias + "-dataformat-factory").toArray(size -> new String[size]); method.addAnnotation(Bean.class).setStringArrayValue("name", springBeanAliases); - method.addAnnotation(ConditionalOnClass.class).setLiteralValue("value", "CamelContext.class"); method.addAnnotation(ConditionalOnMissingBean.class).setLiteralValue("value", model.getShortJavaType() + ".class"); sortImports(javaClass); @@ -1448,17 +1404,17 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { String name = model.getJavaType().substring(pos + 1); name = name.replace("Language", "LanguageAutoConfiguration"); + String configurationName = name.replace("LanguageAutoConfiguration", "LanguageConfiguration"); + javaClass.setPackage(packageName).setName(name); String doc = "Generated by camel-package-maven-plugin - do not edit this file!"; javaClass.getJavaDoc().setFullText(doc); - javaClass.extendSuperType(AllNestedConditions.class); javaClass.addAnnotation(Generated.class).setStringValue("value", SpringBootAutoConfigurationMojo.class.getName()); javaClass.addAnnotation(Configuration.class); - javaClass.addAnnotation(Conditional.class).setLiteralValue(name + ".Condition.class"); + javaClass.addAnnotation(Conditional.class).setLiteralValue( + "{ ConditionalOnCamelContextAndAutoConfigurationBeans.class, " + name + ".GroupConditions.class }"); javaClass.addAnnotation(AutoConfigureAfter.class).setLiteralValue("CamelAutoConfiguration.class"); - - String configurationName = name.replace("LanguageAutoConfiguration", "LanguageConfiguration"); javaClass.addAnnotation(EnableConfigurationProperties.class).setLiteralValue( "{ LanguageConfigurationProperties.class, " + configurationName + ".class }" ); @@ -1469,12 +1425,14 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { javaClass.addImport(model.getJavaType()); javaClass.addImport(List.class); javaClass.addImport(ConditionalOnBean.class); + javaClass.addImport(ConfigurableBeanFactory.class); javaClass.addImport("org.slf4j.Logger"); javaClass.addImport("org.slf4j.LoggerFactory"); javaClass.addImport("org.apache.camel.CamelContext"); javaClass.addImport("org.apache.camel.CamelContextAware"); javaClass.addImport("org.apache.camel.spring.boot.CamelAutoConfiguration"); javaClass.addImport("org.apache.camel.spring.boot.LanguageConfigurationProperties"); + javaClass.addImport("org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans"); javaClass.addImport("org.apache.camel.spring.boot.util.GroupCondition"); javaClass.addImport("org.apache.camel.util.ObjectHelper"); javaClass.addImport("org.apache.camel.spi.LanguageCustomizer"); @@ -1511,37 +1469,14 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { .setType(configurationName) .addAnnotation(Autowired.class); - javaClass.addMethod() - .setConstructor(true) - .setPublic() - .setBody("super(ConfigurationPhase.REGISTER_BEAN);"); - javaClass.addNestedType( Roaster.create(JavaClassSource.class) - .setName("OnCamelContext") - .setStatic(true) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelContext.class") - .getOrigin() - ); - javaClass.addNestedType( - Roaster.create(JavaClassSource.class) - .setName("OnCamelAutoConfiguration") - .setStatic(true) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelAutoConfiguration.class") - .getOrigin() - ); - javaClass.addNestedType( - Roaster.create(JavaClassSource.class) - .setName("Condition") + .setName("GroupConditions") .setStatic(true) + .setPackagePrivate() .extendSuperType(Roaster.create(JavaClassSource.class).setName("GroupCondition")) - .addAnnotation(ConditionalOnBean.class) - .setLiteralValue("CamelAutoConfiguration.class") - .getOrigin() .addMethod() - .setName("Condition") + .setName("GroupConditions") .setConstructor(true) .setPublic() .setBody("super(\"camel.component\", \"camel.component." + (overrideLanguageName != null ? overrideLanguageName : model.getName()).toLowerCase(Locale.US) + "\");") @@ -1563,8 +1498,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { String[] springBeanAliases = languageAliases.stream().map(alias -> alias + "-language").toArray(size -> new String[size]); method.addAnnotation(Bean.class).setStringArrayValue("name", springBeanAliases); - method.addAnnotation(Scope.class).setStringValue("prototype"); - method.addAnnotation(ConditionalOnClass.class).setLiteralValue("value", "CamelContext.class"); + method.addAnnotation(Scope.class).setLiteralValue("ConfigurableBeanFactory.SCOPE_PROTOTYPE"); method.addAnnotation(ConditionalOnMissingBean.class).setLiteralValue("value", model.getShortJavaType() + ".class"); sortImports(javaClass); @@ -1641,6 +1575,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { private static String createDataFormatBody(String shortJavaType) { StringBuilder sb = new StringBuilder(); sb.append("return new DataFormatFactory() {\n"); + sb.append(" @Override\n"); sb.append(" public DataFormat newInstance() {\n"); sb.append(" ").append(shortJavaType).append(" dataformat = new ").append(shortJavaType).append("();").append("\n"); sb.append(" if (CamelContextAware.class.isAssignableFrom(").append(shortJavaType).append(".class)) {\n");
