Repository: camel
Updated Branches:
  refs/heads/master ed85770f3 -> 1ca7a4260


http://git-wip-us.apache.org/repos/asf/camel/blob/1ca7a426/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 50c3b61..7230dfe 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
@@ -82,6 +82,7 @@ import org.springframework.boot.bind.RelaxedPropertyResolver;
 import 
org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
 import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.boot.context.properties.NestedConfigurationProperty;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
@@ -1174,18 +1175,15 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
     private void createComponentAutoConfigurationSource(
         String packageName, ComponentModel model, List<String> 
componentAliases, String overrideComponentName) throws MojoFailureException {
 
-        final JavaClassSource javaClass = 
Roaster.create(JavaClassSource.class);
-
-        int pos = model.getJavaType().lastIndexOf(".");
-        String name = model.getJavaType().substring(pos + 1);
-        name = name.replace("Component", "ComponentAutoConfiguration");
-
-        String configurationName = name.replace("ComponentAutoConfiguration", 
"ComponentConfiguration");
+        final String name = 
model.getJavaType().substring(model.getJavaType().lastIndexOf(".") + 
1).replace("Component", "ComponentAutoConfiguration");
+        final String configurationName = 
name.replace("ComponentAutoConfiguration", "ComponentConfiguration");
+        final String componentName = (overrideComponentName != null ? 
overrideComponentName : model.getScheme()).toLowerCase(Locale.US);
 
-        javaClass.setPackage(packageName).setName(name);
+        final JavaClassSource javaClass = 
Roaster.create(JavaClassSource.class);
 
-        String doc = "Generated by camel-package-maven-plugin - do not edit 
this file!";
-        javaClass.getJavaDoc().setFullText(doc);
+        javaClass.setPackage(packageName);
+        javaClass.setName(name);
+        javaClass.getJavaDoc().setFullText("Generated by 
camel-package-maven-plugin - do not edit this file!");
         javaClass.addAnnotation(Generated.class).setStringValue("value", 
SpringBootAutoConfigurationMojo.class.getName());
         javaClass.addAnnotation(Configuration.class);
         javaClass.addAnnotation(Conditional.class).setLiteralValue(
@@ -1196,10 +1194,9 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         );
 
         javaClass.addImport(HashMap.class);
-        javaClass.addImport(Map.class);
-        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
-        javaClass.addImport(model.getJavaType());
         javaClass.addImport(List.class);
+        javaClass.addImport(Map.class);
+        javaClass.addImport(ApplicationContext.class);
         javaClass.addImport(ConditionalOnBean.class);
         javaClass.addImport("org.slf4j.Logger");
         javaClass.addImport("org.slf4j.LoggerFactory");
@@ -1209,7 +1206,11 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         
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.spring.boot.util.HierarchicalPropertiesEvaluator");
+        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
         javaClass.addImport("org.apache.camel.util.ObjectHelper");
+        javaClass.addImport("org.apache.camel.spi.HasId");
+        javaClass.addImport(model.getJavaType());
 
         javaClass.addField()
             .setPrivate()
@@ -1218,30 +1219,27 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
             .setName("LOGGER")
             .setType("Logger")
             .setLiteralInitializer("LoggerFactory.getLogger(" + name + 
".class)");
-
         javaClass.addField()
             .setPrivate()
-            .setName("camelContext")
-            .setType("CamelContext")
+            .setName("applicationContext")
+            .setType("ApplicationContext")
             .addAnnotation(Autowired.class);
-
         javaClass.addField()
             .setPrivate()
-            .setName("customizers")
-            .setType("List<ComponentCustomizer<" + model.getShortJavaType() + 
">>")
-            .addAnnotation(Autowired.class).setLiteralValue("required", 
"false");
-
-        javaClass.addField()
-            .setPrivate()
-            .setName("globalConfiguration")
-            .setType("ComponentConfigurationProperties")
+            .setName("camelContext")
+            .setType("CamelContext")
             .addAnnotation(Autowired.class);
-
         javaClass.addField()
             .setPrivate()
-            .setName("componentConfiguration")
+            .setName("configuration")
             .setType(configurationName)
             .addAnnotation(Autowired.class);
+        javaClass.addField()
+            .setPrivate()
+            .setName("customizers")
+            .setType("List<ComponentCustomizer<" + model.getShortJavaType() + 
">>")
+            .addAnnotation(Autowired.class)
+                .setLiteralValue("required", "false");
 
         javaClass.addNestedType(
             Roaster.create(JavaClassSource.class)
@@ -1253,12 +1251,12 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
                     .setName("GroupConditions")
                     .setConstructor(true)
                     .setPublic()
-                    .setBody("super(\"camel.component\", \"camel.component." + 
(overrideComponentName != null ? overrideComponentName : 
model.getScheme()).toLowerCase(Locale.US) + "\");")
+                    .setBody("super(\"camel.component\", \"camel.component." + 
componentName + "\");")
                     .getOrigin()
         );
 
         // add method for auto configure
-        String body = createComponentBody(model.getShortJavaType());
+        String body = createComponentBody(model.getShortJavaType(), 
componentName);
         String methodName = "configure" + model.getShortJavaType();
 
         MethodSource<JavaClassSource> method = javaClass.addMethod()
@@ -1284,17 +1282,15 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
     private void createDataFormatAutoConfigurationSource(
         String packageName, DataFormatModel model, List<String> 
dataFormatAliases, String overrideDataFormatName) throws MojoFailureException {
 
-        final JavaClassSource javaClass = 
Roaster.create(JavaClassSource.class);
+        final String name = 
model.getJavaType().substring(model.getJavaType().lastIndexOf(".") + 
1).replace("DataFormat", "DataFormatAutoConfiguration");
+        final String configurationName = 
name.replace("DataFormatAutoConfiguration", "DataFormatConfiguration");
+        final String dataformatName = (overrideDataFormatName != null ? 
overrideDataFormatName : model.getName()).toLowerCase(Locale.US);
 
-        int pos = model.getJavaType().lastIndexOf(".");
-        String name = model.getJavaType().substring(pos + 1);
-        name = name.replace("DataFormat", "DataFormatAutoConfiguration");
-
-        String configurationName = name.replace("DataFormatAutoConfiguration", 
"DataFormatConfiguration");
-        javaClass.setPackage(packageName).setName(name);
+        final JavaClassSource javaClass = 
Roaster.create(JavaClassSource.class);
 
-        String doc = "Generated by camel-package-maven-plugin - do not edit 
this file!";
-        javaClass.getJavaDoc().setFullText(doc);
+        javaClass.setPackage(packageName);
+        javaClass.setName(name);
+        javaClass.getJavaDoc().setFullText("Generated by 
camel-package-maven-plugin - do not edit this file!");
         javaClass.addAnnotation(Generated.class).setStringValue("value", 
SpringBootAutoConfigurationMojo.class.getName());
         javaClass.addAnnotation(Configuration.class);
         javaClass.addAnnotation(Conditional.class).setLiteralValue(
@@ -1305,10 +1301,9 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         );
 
         javaClass.addImport(HashMap.class);
-        javaClass.addImport(Map.class);
-        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
-        javaClass.addImport(model.getJavaType());
         javaClass.addImport(List.class);
+        javaClass.addImport(Map.class);
+        javaClass.addImport(ApplicationContext.class);
         javaClass.addImport(ConditionalOnBean.class);
         javaClass.addImport("org.slf4j.Logger");
         javaClass.addImport("org.slf4j.LoggerFactory");
@@ -1318,11 +1313,15 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         
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.spring.boot.util.HierarchicalPropertiesEvaluator");
+        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
         javaClass.addImport("org.apache.camel.util.ObjectHelper");
         javaClass.addImport("org.apache.camel.RuntimeCamelException");
         javaClass.addImport("org.apache.camel.spi.DataFormat");
         javaClass.addImport("org.apache.camel.spi.DataFormatCustomizer");
         javaClass.addImport("org.apache.camel.spi.DataFormatFactory");
+        javaClass.addImport("org.apache.camel.spi.HasId");
+        javaClass.addImport(model.getJavaType());
 
         javaClass.addField()
             .setPrivate()
@@ -1331,13 +1330,21 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
             .setName("LOGGER")
             .setType("Logger")
             .setLiteralInitializer("LoggerFactory.getLogger(" + name + 
".class)");
-
+        javaClass.addField()
+            .setPrivate()
+            .setName("applicationContext")
+            .setType("ApplicationContext")
+            .addAnnotation(Autowired.class);
         javaClass.addField()
             .setPrivate()
             .setName("camelContext")
             .setType("CamelContext")
             .addAnnotation(Autowired.class);
-
+        javaClass.addField()
+            .setPrivate()
+            .setName("configuration")
+            .setType(configurationName)
+            .addAnnotation(Autowired.class);
         javaClass.addField()
             .setPrivate()
             .setName("customizers")
@@ -1345,18 +1352,6 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
             .addAnnotation(Autowired.class)
                 .setLiteralValue("required", "false");
 
-        javaClass.addField()
-            .setPrivate()
-            .setName("globalConfiguration")
-            .setType("DataFormatConfigurationProperties")
-            .addAnnotation(Autowired.class);
-
-        javaClass.addField()
-            .setPrivate()
-            .setName("dataformatConfiguration")
-            .setType(configurationName)
-            .addAnnotation(Autowired.class);
-
         javaClass.addNestedType(
             Roaster.create(JavaClassSource.class)
                 .setName("GroupConditions")
@@ -1367,12 +1362,12 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
                     .setName("GroupConditions")
                     .setConstructor(true)
                     .setPublic()
-                    .setBody("super(\"camel.dataformat\", \"camel.dataformat." 
+ (overrideDataFormatName != null ? overrideDataFormatName : 
model.getName()).toLowerCase(Locale.US) + "\");")
+                    .setBody("super(\"camel.dataformat\", \"camel.dataformat." 
+ dataformatName + "\");")
                     .getOrigin()
         );
 
 
-        String body = createDataFormatBody(model.getShortJavaType());
+        String body = createDataFormatBody(model.getShortJavaType(), 
dataformatName);
         String methodName = "configure" + model.getShortJavaType() + "Factory";
 
         MethodSource<JavaClassSource> method = javaClass.addMethod()
@@ -1398,18 +1393,15 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
     private void createLanguageAutoConfigurationSource(
         String packageName, LanguageModel model, List<String> languageAliases, 
String overrideLanguageName) throws MojoFailureException {
 
-        final JavaClassSource javaClass = 
Roaster.create(JavaClassSource.class);
-
-        int pos = model.getJavaType().lastIndexOf(".");
-        String name = model.getJavaType().substring(pos + 1);
-        name = name.replace("Language", "LanguageAutoConfiguration");
-
-        String configurationName = name.replace("LanguageAutoConfiguration", 
"LanguageConfiguration");
+        final String name = 
model.getJavaType().substring(model.getJavaType().lastIndexOf(".") + 
1).replace("Language", "LanguageAutoConfiguration");
+        final String configurationName = 
name.replace("LanguageAutoConfiguration", "LanguageConfiguration");
+        final String languageName = (overrideLanguageName != null ? 
overrideLanguageName : model.getName()).toLowerCase(Locale.US);
 
-        javaClass.setPackage(packageName).setName(name);
+        final JavaClassSource javaClass = 
Roaster.create(JavaClassSource.class);
 
-        String doc = "Generated by camel-package-maven-plugin - do not edit 
this file!";
-        javaClass.getJavaDoc().setFullText(doc);
+        javaClass.setPackage(packageName);
+        javaClass.setName(name);
+        javaClass.getJavaDoc().setFullText("Generated by 
camel-package-maven-plugin - do not edit this file!");
         javaClass.addAnnotation(Generated.class).setStringValue("value", 
SpringBootAutoConfigurationMojo.class.getName());
         javaClass.addAnnotation(Configuration.class);
         javaClass.addAnnotation(Conditional.class).setLiteralValue(
@@ -1418,12 +1410,11 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         
javaClass.addAnnotation(EnableConfigurationProperties.class).setLiteralValue(
             "{ LanguageConfigurationProperties.class, " + configurationName + 
".class }"
         );
-        javaClass.addImport(HashMap.class);
-        javaClass.addImport(Map.class);
-        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
 
-        javaClass.addImport(model.getJavaType());
+        javaClass.addImport(HashMap.class);
         javaClass.addImport(List.class);
+        javaClass.addImport(Map.class);
+        javaClass.addImport(ApplicationContext.class);
         javaClass.addImport(ConditionalOnBean.class);
         javaClass.addImport(ConfigurableBeanFactory.class);
         javaClass.addImport("org.slf4j.Logger");
@@ -1434,8 +1425,12 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         
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.spring.boot.util.HierarchicalPropertiesEvaluator");
+        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
         javaClass.addImport("org.apache.camel.util.ObjectHelper");
+        javaClass.addImport("org.apache.camel.spi.HasId");
         javaClass.addImport("org.apache.camel.spi.LanguageCustomizer");
+        javaClass.addImport(model.getJavaType());
 
         javaClass.addField()
             .setPrivate()
@@ -1444,30 +1439,27 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
             .setName("LOGGER")
             .setType("Logger")
             .setLiteralInitializer("LoggerFactory.getLogger(" + name + 
".class)");
-
         javaClass.addField()
             .setPrivate()
-            .setName("camelContext")
-            .setType("CamelContext")
+            .setName("applicationContext")
+            .setType("ApplicationContext")
             .addAnnotation(Autowired.class);
-
-        javaClass.addField()
-            .setPrivate()
-            .setName("customizers")
-            .setType("List<LanguageCustomizer<" + model.getShortJavaType() + 
">>")
-            .addAnnotation(Autowired.class).setLiteralValue("required", 
"false");
-
         javaClass.addField()
             .setPrivate()
-            .setName("globalConfiguration")
-            .setType("LanguageConfigurationProperties")
+            .setName("camelContext")
+            .setType("CamelContext")
             .addAnnotation(Autowired.class);
-
         javaClass.addField()
             .setPrivate()
-            .setName("languageConfiguration")
+            .setName("configuration")
             .setType(configurationName)
             .addAnnotation(Autowired.class);
+        javaClass.addField()
+            .setPrivate()
+            .setName("customizers")
+            .setType("List<LanguageCustomizer<" + model.getShortJavaType() + 
">>")
+            .addAnnotation(Autowired.class)
+                .setLiteralValue("required", "false");
 
         javaClass.addNestedType(
             Roaster.create(JavaClassSource.class)
@@ -1479,11 +1471,11 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
                     .setName("GroupConditions")
                     .setConstructor(true)
                     .setPublic()
-                    .setBody("super(\"camel.component\", \"camel.component." + 
(overrideLanguageName != null ? overrideLanguageName : 
model.getName()).toLowerCase(Locale.US) + "\");")
+                    .setBody("super(\"camel.component\", \"camel.component." + 
languageName + "\");")
                     .getOrigin()
         );
 
-        String body = createLanguageBody(model.getShortJavaType());
+        String body = createLanguageBody(model.getShortJavaType(), 
languageName);
         String methodName = "configure" + model.getShortJavaType();
 
         MethodSource<JavaClassSource> method = javaClass.addMethod()
@@ -1531,13 +1523,13 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         writeComponentSpringFactorySource(packageName, name);
     }
 
-    private static String createComponentBody(String shortJavaType) {
+    private static String createComponentBody(String shortJavaType, String 
name) {
         StringBuilder sb = new StringBuilder();
         sb.append(shortJavaType).append(" component = new 
").append(shortJavaType).append("();").append("\n");
         sb.append("component.setCamelContext(camelContext);\n");
         sb.append("\n");
         sb.append("Map<String, Object> parameters = new HashMap<>();\n");
-        sb.append("IntrospectionSupport.getProperties(componentConfiguration, 
parameters, null, false);\n");
+        sb.append("IntrospectionSupport.getProperties(configuration, 
parameters, null, false);\n");
         sb.append("\n");
         sb.append("for (Map.Entry<String, Object> entry : 
parameters.entrySet()) {\n");
         sb.append("    Object value = entry.getValue();\n");
@@ -1558,12 +1550,24 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         sb.append("}\n");
         sb.append("IntrospectionSupport.setProperties(camelContext, 
camelContext.getTypeConverter(), component, parameters);\n");
         sb.append("\n");
-        sb.append("boolean useCustomizers = 
globalConfiguration.getCustomizer().isEnabled() && 
componentConfiguration.getCustomizer().isEnabled();\n");
-        sb.append("\n");
-        sb.append("if (useCustomizers && ObjectHelper.isNotEmpty(customizers)) 
{\n");
+        sb.append("if (ObjectHelper.isNotEmpty(customizers)) {\n");
         sb.append("    for 
(ComponentCustomizer<").append(shortJavaType).append("> customizer : 
customizers) {\n");
-        sb.append("        LOGGER.debug(\"Configure component {}, with 
customizer {}\", component, customizer);\n");
-        sb.append("        customizer.customize(component);\n");
+        sb.append("\n");
+        sb.append("        boolean useCustomizer = (customizer instanceof 
HasId)");
+        sb.append("            ? HierarchicalPropertiesEvaluator.evaluate(\n");
+        sb.append("                applicationContext.getEnvironment(),\n");
+        sb.append("               \"camel.component.customizer\",\n");
+        sb.append("               
\"camel.component.").append(name).append(".customizer\",\n");
+        sb.append("               ((HasId)customizer).getId())\n");
+        sb.append("            : HierarchicalPropertiesEvaluator.evaluate(\n");
+        sb.append("                applicationContext.getEnvironment(),\n");
+        sb.append("               \"camel.component.customizer\",\n");
+        sb.append("               
\"camel.component.").append(name).append(".customizer\");\n");
+        sb.append("\n");
+        sb.append("        if (useCustomizer) {\n");
+        sb.append("            LOGGER.debug(\"Configure component {}, with 
customizer {}\", component, customizer);\n");
+        sb.append("            customizer.customize(component);\n");
+        sb.append("        }\n");
         sb.append("    }\n");
         sb.append("}\n");
         sb.append("\n");
@@ -1572,7 +1576,7 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         return sb.toString();
     }
 
-    private static String createDataFormatBody(String shortJavaType) {
+    private static String createDataFormatBody(String shortJavaType, String 
name) {
         StringBuilder sb = new StringBuilder();
         sb.append("return new DataFormatFactory() {\n");
         sb.append("    @Override\n");
@@ -1587,28 +1591,41 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         sb.append("\n");
         sb.append("        try {\n");
         sb.append("            Map<String, Object> parameters = new 
HashMap<>();\n");
-        sb.append("            
IntrospectionSupport.getProperties(dataformatConfiguration, parameters, null, 
false);\n");
+        sb.append("            
IntrospectionSupport.getProperties(configuration, parameters, null, false);\n");
         sb.append("            
IntrospectionSupport.setProperties(camelContext, 
camelContext.getTypeConverter(), dataformat, parameters);\n");
         sb.append("        } catch (Exception e) {\n");
         sb.append("            throw new RuntimeCamelException(e);\n");
         sb.append("        }\n");
         sb.append("\n");
-        sb.append("boolean useCustomizers = 
globalConfiguration.getCustomizer().isEnabled() && 
dataformatConfiguration.getCustomizer().isEnabled();\n");
-        sb.append("\n");
-        sb.append("if (useCustomizers && ObjectHelper.isNotEmpty(customizers)) 
{\n");
+        sb.append("if (ObjectHelper.isNotEmpty(customizers)) {\n");
         sb.append("    for 
(DataFormatCustomizer<").append(shortJavaType).append("> customizer : 
customizers) {\n");
-        sb.append("        LOGGER.debug(\"Configure dataformat {}, with 
customizer {}\", dataformat, customizer);\n");
-        sb.append("        customizer.customize(dataformat);\n");
+        sb.append("\n");
+        sb.append("        boolean useCustomizer = (customizer instanceof 
HasId)");
+        sb.append("            ? HierarchicalPropertiesEvaluator.evaluate(\n");
+        sb.append("                applicationContext.getEnvironment(),\n");
+        sb.append("               \"camel.dataformat.customizer\",\n");
+        sb.append("               
\"camel.dataformat.").append(name).append(".customizer\",\n");
+        sb.append("               ((HasId)customizer).getId())\n");
+        sb.append("            : HierarchicalPropertiesEvaluator.evaluate(\n");
+        sb.append("                applicationContext.getEnvironment(),\n");
+        sb.append("               \"camel.dataformat.customizer\",\n");
+        sb.append("               
\"camel.dataformat.").append(name).append(".customizer\");\n");
+        sb.append("\n");
+        sb.append("        if (useCustomizer) {\n");
+        sb.append("            LOGGER.debug(\"Configure dataformat {}, with 
customizer {}\", dataformat, customizer);\n");
+        sb.append("            customizer.customize(dataformat);\n");
+        sb.append("        }\n");
         sb.append("    }\n");
         sb.append("}\n");
         sb.append("\n");
         sb.append("        return dataformat;\n");
         sb.append("    }\n");
         sb.append("};\n");
+
         return sb.toString();
     }
 
-    private static String createLanguageBody(String shortJavaType) {
+    private static String createLanguageBody(String shortJavaType, String 
name) {
         StringBuilder sb = new StringBuilder();
         sb.append(shortJavaType).append(" language = new 
").append(shortJavaType).append("();").append("\n");
         sb.append("if 
(CamelContextAware.class.isAssignableFrom(").append(shortJavaType).append(".class))
 {\n");
@@ -1619,19 +1636,33 @@ public class SpringBootAutoConfigurationMojo extends 
AbstractMojo {
         sb.append("}\n");
         sb.append("\n");
         sb.append("Map<String, Object> parameters = new HashMap<>();\n");
-        sb.append("IntrospectionSupport.getProperties(languageConfiguration, 
parameters, null, false);\n");
+        sb.append("IntrospectionSupport.getProperties(configuration, 
parameters, null, false);\n");
         sb.append("IntrospectionSupport.setProperties(camelContext, 
camelContext.getTypeConverter(), language, parameters);\n");
         sb.append("\n");
-        sb.append("boolean useCustomizers = 
globalConfiguration.getCustomizer().isEnabled() && 
languageConfiguration.getCustomizer().isEnabled();\n");
         sb.append("\n");
-        sb.append("if (useCustomizers && ObjectHelper.isNotEmpty(customizers)) 
{\n");
+        sb.append("if (ObjectHelper.isNotEmpty(customizers)) {\n");
         sb.append("    for 
(LanguageCustomizer<").append(shortJavaType).append("> customizer : 
customizers) {\n");
-        sb.append("        LOGGER.debug(\"Configure language {}, with 
customizer {}\", language, customizer);\n");
-        sb.append("        customizer.customize(language);\n");
+        sb.append("\n");
+        sb.append("        boolean useCustomizer = (customizer instanceof 
HasId)");
+        sb.append("            ? HierarchicalPropertiesEvaluator.evaluate(\n");
+        sb.append("                applicationContext.getEnvironment(),\n");
+        sb.append("               \"camel.language.customizer\",\n");
+        sb.append("               
\"camel.language.").append(name).append(".customizer\",\n");
+        sb.append("               ((HasId)customizer).getId())\n");
+        sb.append("            : HierarchicalPropertiesEvaluator.evaluate(\n");
+        sb.append("                applicationContext.getEnvironment(),\n");
+        sb.append("               \"camel.language.customizer\",\n");
+        sb.append("               
\"camel.language.").append(name).append(".customizer\");\n");
+        sb.append("\n");
+        sb.append("        if (useCustomizer) {\n");
+        sb.append("            LOGGER.debug(\"Configure language {}, with 
customizer {}\", language, customizer);\n");
+        sb.append("            customizer.customize(language);\n");
+        sb.append("        }\n");
         sb.append("    }\n");
         sb.append("}\n");
         sb.append("\n");
         sb.append("return language;");
+
         return sb.toString();
     }
 

Reply via email to