camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From lburgazz...@apache.org
Subject [32/38] camel git commit: CAMEL-11291: spring boot starters: allow to hook into auto configuration process
Date Fri, 19 May 2017 12:35:42 GMT
http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatConfiguration.java b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatConfiguration.java
index 5c3db44..0e28cc9 100644
--- a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.camel.dataformat.bindy.csv.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.model.dataformat.BindyType;
+import org.apache.camel.spring.boot.DataFormatConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -27,7 +28,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.dataformat.bindy-csv")
-public class BindyCsvDataFormatConfiguration {
+public class BindyCsvDataFormatConfiguration
+        extends
+            DataFormatConfigurationPropertiesCommon {
 
     /**
      * Whether to use csv fixed or key value pairs mode.

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java
index 50cd7cf..8a371b4 100644
--- a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.bindy.fixed.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
@@ -24,40 +25,74 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dataformat.bindy.fixed.BindyFixedLengthDataFormat;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatCustomizer;
 import org.apache.camel.spi.DataFormatFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.DataFormatConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BindyFixedLengthDataFormatAutoConfiguration.Condition.class)
 @AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(BindyFixedLengthDataFormatConfiguration.class)
-public class BindyFixedLengthDataFormatAutoConfiguration {
+@EnableConfigurationProperties({DataFormatConfigurationProperties.class,
+        BindyFixedLengthDataFormatConfiguration.class})
+public class BindyFixedLengthDataFormatAutoConfiguration
+        extends
+            AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BindyFixedLengthDataFormatAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<DataFormatCustomizer<BindyFixedLengthDataFormat>> customizers;
+    @Autowired
+    private DataFormatConfigurationProperties globalConfiguration;
+    @Autowired
+    private BindyFixedLengthDataFormatConfiguration dataformatConfiguration;
+
+    public BindyFixedLengthDataFormatAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.dataformat", "camel.dataformat.bindy-fixed");
+        }
+    }
 
     @Bean(name = "bindy-fixed-dataformat-factory")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BindyFixedLengthDataFormat.class)
-    public DataFormatFactory configureBindyFixedLengthDataFormatFactory(
-            final CamelContext camelContext,
-            final BindyFixedLengthDataFormatConfiguration configuration) {
+    public DataFormatFactory configureBindyFixedLengthDataFormatFactory()
+            throws Exception {
         return new DataFormatFactory() {
             public DataFormat newInstance() {
                 BindyFixedLengthDataFormat dataformat = new BindyFixedLengthDataFormat();
@@ -71,7 +106,7 @@ public class BindyFixedLengthDataFormatAutoConfiguration {
                 }
                 try {
                     Map<String, Object> parameters = new HashMap<>();
-                    IntrospectionSupport.getProperties(configuration,
+                    IntrospectionSupport.getProperties(dataformatConfiguration,
                             parameters, null, false);
                     IntrospectionSupport.setProperties(camelContext,
                             camelContext.getTypeConverter(), dataformat,
@@ -79,34 +114,19 @@ public class BindyFixedLengthDataFormatAutoConfiguration {
                 } catch (Exception e) {
                     throw new RuntimeCamelException(e);
                 }
+                boolean useConfigurers = globalConfiguration.getConfigurer()
+                        .isEnabled()
+                        && dataformatConfiguration.getConfigurer().isEnabled();
+                if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+                    for (DataFormatCustomizer<BindyFixedLengthDataFormat> configurer : customizers) {
+                        LOGGER.debug(
+                                "Configure dataformat {}, with configurer {}",
+                                dataformat, configurer);
+                        configurer.customize(dataformat);
+                    }
+                }
                 return dataformat;
             }
         };
     }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.dataformat.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.dataformat.bindy-fixed");
-            if (isEnabled(conditionContext, "camel.dataformat.bindy-fixed.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
-            }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
-        }
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatConfiguration.java b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatConfiguration.java
index 0292d8f..7c87a0f 100644
--- a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.camel.dataformat.bindy.fixed.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.model.dataformat.BindyType;
+import org.apache.camel.spring.boot.DataFormatConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -27,7 +28,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.dataformat.bindy-fixed")
-public class BindyFixedLengthDataFormatConfiguration {
+public class BindyFixedLengthDataFormatConfiguration
+        extends
+            DataFormatConfigurationPropertiesCommon {
 
     /**
      * Whether to use csv fixed or key value pairs mode.

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java
index 77de985..f4074b1 100644
--- a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.bindy.kvp.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
@@ -24,40 +25,74 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dataformat.bindy.kvp.BindyKeyValuePairDataFormat;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatCustomizer;
 import org.apache.camel.spi.DataFormatFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.DataFormatConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BindyKeyValuePairDataFormatAutoConfiguration.Condition.class)
 @AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(BindyKeyValuePairDataFormatConfiguration.class)
-public class BindyKeyValuePairDataFormatAutoConfiguration {
+@EnableConfigurationProperties({DataFormatConfigurationProperties.class,
+        BindyKeyValuePairDataFormatConfiguration.class})
+public class BindyKeyValuePairDataFormatAutoConfiguration
+        extends
+            AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BindyKeyValuePairDataFormatAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<DataFormatCustomizer<BindyKeyValuePairDataFormat>> customizers;
+    @Autowired
+    private DataFormatConfigurationProperties globalConfiguration;
+    @Autowired
+    private BindyKeyValuePairDataFormatConfiguration dataformatConfiguration;
+
+    public BindyKeyValuePairDataFormatAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.dataformat", "camel.dataformat.bindy-kvp");
+        }
+    }
 
     @Bean(name = "bindy-kvp-dataformat-factory")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BindyKeyValuePairDataFormat.class)
-    public DataFormatFactory configureBindyKeyValuePairDataFormatFactory(
-            final CamelContext camelContext,
-            final BindyKeyValuePairDataFormatConfiguration configuration) {
+    public DataFormatFactory configureBindyKeyValuePairDataFormatFactory()
+            throws Exception {
         return new DataFormatFactory() {
             public DataFormat newInstance() {
                 BindyKeyValuePairDataFormat dataformat = new BindyKeyValuePairDataFormat();
@@ -71,7 +106,7 @@ public class BindyKeyValuePairDataFormatAutoConfiguration {
                 }
                 try {
                     Map<String, Object> parameters = new HashMap<>();
-                    IntrospectionSupport.getProperties(configuration,
+                    IntrospectionSupport.getProperties(dataformatConfiguration,
                             parameters, null, false);
                     IntrospectionSupport.setProperties(camelContext,
                             camelContext.getTypeConverter(), dataformat,
@@ -79,34 +114,19 @@ public class BindyKeyValuePairDataFormatAutoConfiguration {
                 } catch (Exception e) {
                     throw new RuntimeCamelException(e);
                 }
+                boolean useConfigurers = globalConfiguration.getConfigurer()
+                        .isEnabled()
+                        && dataformatConfiguration.getConfigurer().isEnabled();
+                if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+                    for (DataFormatCustomizer<BindyKeyValuePairDataFormat> configurer : customizers) {
+                        LOGGER.debug(
+                                "Configure dataformat {}, with configurer {}",
+                                dataformat, configurer);
+                        configurer.customize(dataformat);
+                    }
+                }
                 return dataformat;
             }
         };
     }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.dataformat.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.dataformat.bindy-kvp");
-            if (isEnabled(conditionContext, "camel.dataformat.bindy-kvp.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
-            }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
-        }
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatConfiguration.java b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatConfiguration.java
index f812e60..474355c 100644
--- a/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bindy-starter/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.camel.dataformat.bindy.kvp.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.model.dataformat.BindyType;
+import org.apache.camel.spring.boot.DataFormatConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -27,7 +28,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.dataformat.bindy-kvp")
-public class BindyKeyValuePairDataFormatConfiguration {
+public class BindyKeyValuePairDataFormatConfiguration
+        extends
+            DataFormatConfigurationPropertiesCommon {
 
     /**
      * Whether to use csv fixed or key value pairs mode.

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentAutoConfiguration.java
index 8bfa8d8..454d173 100644
--- a/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.bonita.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.bonita.BonitaComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BonitaComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class BonitaComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        BonitaComponentConfiguration.class})
+public class BonitaComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BonitaComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<BonitaComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private BonitaComponentConfiguration componentConfiguration;
+
+    public BonitaComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.bonita");
+        }
+    }
 
     @Lazy
     @Bean(name = "bonita-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BonitaComponent.class)
-    public BonitaComponent configureBonitaComponent(CamelContext camelContext)
-            throws Exception {
+    public BonitaComponent configureBonitaComponent() throws Exception {
         BonitaComponent component = new BonitaComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.bonita");
-            if (isEnabled(conditionContext, "camel.component.bonita.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<BonitaComponent> configurer : customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentConfiguration.java
index b034922..e3f9d23 100644
--- a/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-bonita-starter/src/main/java/org/apache/camel/component/bonita/springboot/BonitaComponentConfiguration.java
@@ -16,15 +16,20 @@
  */
 package org.apache.camel.component.bonita.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
- * Camel Bonita support
+ * Used for communicating with a remote Bonita BPM process engine.
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.bonita")
-public class BonitaComponentConfiguration {
+public class BonitaComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatAutoConfiguration.java
index e4b60ac..fd0ecd0 100644
--- a/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatAutoConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.boon.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
@@ -24,40 +25,71 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.boon.BoonDataFormat;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatCustomizer;
 import org.apache.camel.spi.DataFormatFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.DataFormatConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BoonDataFormatAutoConfiguration.Condition.class)
 @AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(BoonDataFormatConfiguration.class)
-public class BoonDataFormatAutoConfiguration {
+@EnableConfigurationProperties({DataFormatConfigurationProperties.class,
+        BoonDataFormatConfiguration.class})
+public class BoonDataFormatAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BoonDataFormatAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<DataFormatCustomizer<BoonDataFormat>> customizers;
+    @Autowired
+    private DataFormatConfigurationProperties globalConfiguration;
+    @Autowired
+    private BoonDataFormatConfiguration dataformatConfiguration;
+
+    public BoonDataFormatAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.dataformat", "camel.dataformat.boon");
+        }
+    }
 
     @Bean(name = "boon-dataformat-factory")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BoonDataFormat.class)
-    public DataFormatFactory configureBoonDataFormatFactory(
-            final CamelContext camelContext,
-            final BoonDataFormatConfiguration configuration) {
+    public DataFormatFactory configureBoonDataFormatFactory() throws Exception {
         return new DataFormatFactory() {
             public DataFormat newInstance() {
                 BoonDataFormat dataformat = new BoonDataFormat();
@@ -71,7 +103,7 @@ public class BoonDataFormatAutoConfiguration {
                 }
                 try {
                     Map<String, Object> parameters = new HashMap<>();
-                    IntrospectionSupport.getProperties(configuration,
+                    IntrospectionSupport.getProperties(dataformatConfiguration,
                             parameters, null, false);
                     IntrospectionSupport.setProperties(camelContext,
                             camelContext.getTypeConverter(), dataformat,
@@ -79,34 +111,19 @@ public class BoonDataFormatAutoConfiguration {
                 } catch (Exception e) {
                     throw new RuntimeCamelException(e);
                 }
+                boolean useConfigurers = globalConfiguration.getConfigurer()
+                        .isEnabled()
+                        && dataformatConfiguration.getConfigurer().isEnabled();
+                if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+                    for (DataFormatCustomizer<BoonDataFormat> configurer : customizers) {
+                        LOGGER.debug(
+                                "Configure dataformat {}, with configurer {}",
+                                dataformat, configurer);
+                        configurer.customize(dataformat);
+                    }
+                }
                 return dataformat;
             }
         };
     }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.dataformat.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.dataformat.boon");
-            if (isEnabled(conditionContext, "camel.dataformat.boon.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
-            }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
-        }
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatConfiguration.java b/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatConfiguration.java
index 0531b94..466cc5f 100644
--- a/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-boon-starter/src/main/java/org/apache/camel/component/boon/springboot/BoonDataFormatConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.boon.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.DataFormatConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.dataformat.boon")
-public class BoonDataFormatConfiguration {
+public class BoonDataFormatConfiguration
+        extends
+            DataFormatConfigurationPropertiesCommon {
 
     /**
      * Class name of the java type to use when unarmshalling

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentAutoConfiguration.java
index d5e4c15..66aa8ff 100644
--- a/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentAutoConfiguration.java
@@ -17,49 +17,81 @@
 package org.apache.camel.component.box.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.box.BoxComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BoxComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(BoxComponentConfiguration.class)
-public class BoxComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        BoxComponentConfiguration.class})
+public class BoxComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BoxComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<BoxComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private BoxComponentConfiguration componentConfiguration;
+
+    public BoxComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.box");
+        }
+    }
 
     @Lazy
     @Bean(name = "box-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BoxComponent.class)
-    public BoxComponent configureBoxComponent(CamelContext camelContext,
-            BoxComponentConfiguration configuration) throws Exception {
+    public BoxComponent configureBoxComponent() throws Exception {
         BoxComponent component = new BoxComponent();
         component.setCamelContext(camelContext);
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
         for (Map.Entry<String, Object> entry : parameters.entrySet()) {
             Object value = entry.getValue();
             Class<?> paramClass = value.getClass();
@@ -82,32 +114,16 @@ public class BoxComponentAutoConfiguration {
         }
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), component, parameters);
-        return component;
-    }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.box");
-            if (isEnabled(conditionContext, "camel.component.box.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<BoxComponent> configurer : customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentConfiguration.java
index e65b88f..9e69543 100644
--- a/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-box-starter/src/main/java/org/apache/camel/component/box/springboot/BoxComponentConfiguration.java
@@ -20,6 +20,7 @@ import java.util.Map;
 import javax.annotation.Generated;
 import com.box.sdk.IAccessTokenCache;
 import org.apache.camel.component.box.internal.BoxApiName;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.apache.camel.util.jsse.SSLContextParameters;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.NestedConfigurationProperty;
@@ -32,7 +33,9 @@ import org.springframework.boot.context.properties.NestedConfigurationProperty;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.box")
-public class BoxComponentConfiguration {
+public class BoxComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * To use the shared configuration

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentAutoConfiguration.java
index 74c6170..8eecaab 100644
--- a/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentAutoConfiguration.java
@@ -17,50 +17,81 @@
 package org.apache.camel.component.braintree.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.braintree.BraintreeComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BraintreeComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(BraintreeComponentConfiguration.class)
-public class BraintreeComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        BraintreeComponentConfiguration.class})
+public class BraintreeComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BraintreeComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<BraintreeComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private BraintreeComponentConfiguration componentConfiguration;
+
+    public BraintreeComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.braintree");
+        }
+    }
 
     @Lazy
     @Bean(name = "braintree-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BraintreeComponent.class)
-    public BraintreeComponent configureBraintreeComponent(
-            CamelContext camelContext,
-            BraintreeComponentConfiguration configuration) throws Exception {
+    public BraintreeComponent configureBraintreeComponent() throws Exception {
         BraintreeComponent component = new BraintreeComponent();
         component.setCamelContext(camelContext);
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
         for (Map.Entry<String, Object> entry : parameters.entrySet()) {
             Object value = entry.getValue();
             Class<?> paramClass = value.getClass();
@@ -83,32 +114,16 @@ public class BraintreeComponentAutoConfiguration {
         }
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), component, parameters);
-        return component;
-    }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.braintree");
-            if (isEnabled(conditionContext, "camel.component.braintree.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<BraintreeComponent> configurer : customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentConfiguration.java
index 036509e..2570d74 100644
--- a/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-braintree-starter/src/main/java/org/apache/camel/component/braintree/springboot/BraintreeComponentConfiguration.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.braintree.springboot;
 import java.util.logging.Level;
 import javax.annotation.Generated;
 import org.apache.camel.component.braintree.internal.BraintreeApiName;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -29,7 +30,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.braintree")
-public class BraintreeComponentConfiguration {
+public class BraintreeComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * To use the shared configuration

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentAutoConfiguration.java
index cb42905..242281e 100644
--- a/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentAutoConfiguration.java
@@ -17,49 +17,81 @@
 package org.apache.camel.component.cache.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.cache.CacheComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(CacheComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(CacheComponentConfiguration.class)
-public class CacheComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        CacheComponentConfiguration.class})
+public class CacheComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(CacheComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<CacheComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private CacheComponentConfiguration componentConfiguration;
+
+    public CacheComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.cache");
+        }
+    }
 
     @Lazy
     @Bean(name = "cache-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(CacheComponent.class)
-    public CacheComponent configureCacheComponent(CamelContext camelContext,
-            CacheComponentConfiguration configuration) throws Exception {
+    public CacheComponent configureCacheComponent() throws Exception {
         CacheComponent component = new CacheComponent();
         component.setCamelContext(camelContext);
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
         for (Map.Entry<String, Object> entry : parameters.entrySet()) {
             Object value = entry.getValue();
             Class<?> paramClass = value.getClass();
@@ -82,32 +114,16 @@ public class CacheComponentAutoConfiguration {
         }
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), component, parameters);
-        return component;
-    }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.cache");
-            if (isEnabled(conditionContext, "camel.component.cache.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<CacheComponent> configurer : customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentConfiguration.java
index 57a9ae5..8c3d695 100644
--- a/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-cache-starter/src/main/java/org/apache/camel/component/cache/springboot/CacheComponentConfiguration.java
@@ -21,6 +21,7 @@ import net.sf.ehcache.store.MemoryStoreEvictionPolicy;
 import org.apache.camel.component.cache.CacheEventListenerRegistry;
 import org.apache.camel.component.cache.CacheLoaderRegistry;
 import org.apache.camel.component.cache.CacheManagerFactory;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
 import org.springframework.boot.context.properties.NestedConfigurationProperty;
@@ -33,7 +34,9 @@ import org.springframework.boot.context.properties.NestedConfigurationProperty;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.cache")
-public class CacheComponentConfiguration {
+public class CacheComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * To use the given CacheManagerFactory for creating the CacheManager. By

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentAutoConfiguration.java
index 041ba28..775e232 100644
--- a/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.cassandra.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.cassandra.CassandraComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(CassandraComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class CassandraComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        CassandraComponentConfiguration.class})
+public class CassandraComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(CassandraComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<CassandraComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private CassandraComponentConfiguration componentConfiguration;
+
+    public CassandraComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.cql");
+        }
+    }
 
     @Lazy
     @Bean(name = "cql-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(CassandraComponent.class)
-    public CassandraComponent configureCassandraComponent(
-            CamelContext camelContext) throws Exception {
+    public CassandraComponent configureCassandraComponent() throws Exception {
         CassandraComponent component = new CassandraComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.cql");
-            if (isEnabled(conditionContext, "camel.component.cql.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<CassandraComponent> configurer : customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentConfiguration.java
index 8d55aa9..8d20367 100644
--- a/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-cassandraql-starter/src/main/java/org/apache/camel/component/cassandra/springboot/CassandraComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.cassandra.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -24,8 +26,11 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.cql")
-public class CassandraComponentConfiguration {
+public class CassandraComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-castor-starter/src/main/java/org/apache/camel/dataformat/castor/springboot/CastorDataFormatAutoConfiguration.java
----------------------------------------------------------------------
diff --git a/platforms/spring-boot/components-starter/camel-castor-starter/src/main/java/org/apache/camel/dataformat/castor/springboot/CastorDataFormatAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-castor-starter/src/main/java/org/apache/camel/dataformat/castor/springboot/CastorDataFormatAutoConfiguration.java
index 22c6cb0..a103829 100644
--- a/platforms/spring-boot/components-starter/camel-castor-starter/src/main/java/org/apache/camel/dataformat/castor/springboot/CastorDataFormatAutoConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-castor-starter/src/main/java/org/apache/camel/dataformat/castor/springboot/CastorDataFormatAutoConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.castor.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
@@ -24,40 +25,72 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dataformat.castor.CastorDataFormat;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatCustomizer;
 import org.apache.camel.spi.DataFormatFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.DataFormatConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = "org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(CastorDataFormatAutoConfiguration.Condition.class)
 @AutoConfigureAfter(name = "org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(CastorDataFormatConfiguration.class)
-public class CastorDataFormatAutoConfiguration {
+@EnableConfigurationProperties({DataFormatConfigurationProperties.class,
+        CastorDataFormatConfiguration.class})
+public class CastorDataFormatAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(CastorDataFormatAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<DataFormatCustomizer<CastorDataFormat>> customizers;
+    @Autowired
+    private DataFormatConfigurationProperties globalConfiguration;
+    @Autowired
+    private CastorDataFormatConfiguration dataformatConfiguration;
+
+    public CastorDataFormatAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.dataformat", "camel.dataformat.castor");
+        }
+    }
 
     @Bean(name = "castor-dataformat-factory")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(CastorDataFormat.class)
-    public DataFormatFactory configureCastorDataFormatFactory(
-            final CamelContext camelContext,
-            final CastorDataFormatConfiguration configuration) {
+    public DataFormatFactory configureCastorDataFormatFactory()
+            throws Exception {
         return new DataFormatFactory() {
             public DataFormat newInstance() {
                 CastorDataFormat dataformat = new CastorDataFormat();
@@ -71,7 +104,7 @@ public class CastorDataFormatAutoConfiguration {
                 }
                 try {
                     Map<String, Object> parameters = new HashMap<>();
-                    IntrospectionSupport.getProperties(configuration,
+                    IntrospectionSupport.getProperties(dataformatConfiguration,
                             parameters, null, false);
                     IntrospectionSupport.setProperties(camelContext,
                             camelContext.getTypeConverter(), dataformat,
@@ -79,34 +112,19 @@ public class CastorDataFormatAutoConfiguration {
                 } catch (Exception e) {
                     throw new RuntimeCamelException(e);
                 }
+                boolean useConfigurers = globalConfiguration.getConfigurer()
+                        .isEnabled()
+                        && dataformatConfiguration.getConfigurer().isEnabled();
+                if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+                    for (DataFormatCustomizer<CastorDataFormat> configurer : customizers) {
+                        LOGGER.debug(
+                                "Configure dataformat {}, with configurer {}",
+                                dataformat, configurer);
+                        configurer.customize(dataformat);
+                    }
+                }
                 return dataformat;
             }
         };
     }
-
-    @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.dataformat.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.dataformat.castor");
-            if (isEnabled(conditionContext, "camel.dataformat.castor.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
-            }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, defaultValue);
-        }
-    }
 }
\ No newline at end of file


Mime
View raw message