Changed dataformats
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3a34d258 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3a34d258 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3a34d258 Branch: refs/heads/master Commit: 3a34d2584f0379843be7702351dd8b1ab364e1d6 Parents: 59a7130 Author: Nicola Ferraro <ni.ferr...@gmail.com> Authored: Thu Jul 28 10:37:20 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Jul 28 15:24:18 2016 +0200 ---------------------------------------------------------------------- .../BindyCsvDataFormatAutoConfiguration.java | 2 +- ...yFixedLengthDataFormatAutoConfiguration.java | 2 +- ...KeyValuePairDataFormatAutoConfiguration.java | 2 +- .../GsonDataFormatAutoConfiguration.java | 2 +- .../JacksonDataFormatAutoConfiguration.java | 2 +- .../JohnzonDataFormatAutoConfiguration.java | 2 +- .../SnakeYAMLDataFormatAutoConfiguration.java | 2 +- .../JsonDataFormatAutoConfiguration.java | 2 +- .../ZipFileDataFormatAutoConfiguration.java | 2 +- .../SpringBootAutoConfigurationMojo.java | 66 +++++++++++--------- 10 files changed, 46 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatAutoConfiguration.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatAutoConfiguration.java index ea18818..5126a88 100644 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatAutoConfiguration.java +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/springboot/BindyCsvDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(BindyCsvDataFormatConfiguration.class) public class BindyCsvDataFormatAutoConfiguration { - @Bean(name = "bindy-dataformat") + @Bean(name = "bindy-csv-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(BindyCsvDataFormat.class) public BindyCsvDataFormat configureBindyCsvDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java index aa52652..b29c731 100644 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/springboot/BindyFixedLengthDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(BindyFixedLengthDataFormatConfiguration.class) public class BindyFixedLengthDataFormatAutoConfiguration { - @Bean(name = "bindy-dataformat") + @Bean(name = "bindy-fixed-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(BindyFixedLengthDataFormat.class) public BindyFixedLengthDataFormat configureBindyFixedLengthDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java index 434eca5..e2a986f 100644 --- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java +++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/springboot/BindyKeyValuePairDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(BindyKeyValuePairDataFormatConfiguration.class) public class BindyKeyValuePairDataFormatAutoConfiguration { - @Bean(name = "bindy-dataformat") + @Bean(name = "bindy-kvp-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(BindyKeyValuePairDataFormat.class) public BindyKeyValuePairDataFormat configureBindyKeyValuePairDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-gson/src/main/java/org/apache/camel/component/gson/springboot/GsonDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-gson/src/main/java/org/apache/camel/component/gson/springboot/GsonDataFormatAutoConfiguration.java b/components/camel-gson/src/main/java/org/apache/camel/component/gson/springboot/GsonDataFormatAutoConfiguration.java index 125133e..c3c66df 100644 --- a/components/camel-gson/src/main/java/org/apache/camel/component/gson/springboot/GsonDataFormatAutoConfiguration.java +++ b/components/camel-gson/src/main/java/org/apache/camel/component/gson/springboot/GsonDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(GsonDataFormatConfiguration.class) public class GsonDataFormatAutoConfiguration { - @Bean(name = "json-dataformat") + @Bean(name = "json-gson-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(GsonDataFormat.class) public GsonDataFormat configureGsonDataFormat(CamelContext camelContext, http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatAutoConfiguration.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatAutoConfiguration.java index f9dbaf4..279fc73 100644 --- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatAutoConfiguration.java +++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(JacksonDataFormatConfiguration.class) public class JacksonDataFormatAutoConfiguration { - @Bean(name = "json-dataformat") + @Bean(name = "json-jackson-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(JacksonDataFormat.class) public JacksonDataFormat configureJacksonDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/springboot/JohnzonDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/springboot/JohnzonDataFormatAutoConfiguration.java b/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/springboot/JohnzonDataFormatAutoConfiguration.java index 15b4183..ae1eb60 100644 --- a/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/springboot/JohnzonDataFormatAutoConfiguration.java +++ b/components/camel-johnzon/src/main/java/org/apache/camel/component/johnzon/springboot/JohnzonDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(JohnzonDataFormatConfiguration.class) public class JohnzonDataFormatAutoConfiguration { - @Bean(name = "json-dataformat") + @Bean(name = "json-johnzon-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(JohnzonDataFormat.class) public JohnzonDataFormat configureJohnzonDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/springboot/SnakeYAMLDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/springboot/SnakeYAMLDataFormatAutoConfiguration.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/springboot/SnakeYAMLDataFormatAutoConfiguration.java index a8df7f7..b51fc19 100644 --- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/springboot/SnakeYAMLDataFormatAutoConfiguration.java +++ b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/springboot/SnakeYAMLDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(SnakeYAMLDataFormatConfiguration.class) public class SnakeYAMLDataFormatAutoConfiguration { - @Bean(name = "yaml-dataformat") + @Bean(name = "yaml-snakeyaml-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(SnakeYAMLDataFormat.class) public SnakeYAMLDataFormat configureSnakeYAMLDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/springboot/JsonDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/springboot/JsonDataFormatAutoConfiguration.java b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/springboot/JsonDataFormatAutoConfiguration.java index 69c7046..9e52328 100644 --- a/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/springboot/JsonDataFormatAutoConfiguration.java +++ b/components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/springboot/JsonDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(JsonDataFormatConfiguration.class) public class JsonDataFormatAutoConfiguration { - @Bean(name = "json-dataformat") + @Bean(name = "json-xstream-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(JsonDataFormat.class) public JsonDataFormat configureJsonDataFormat(CamelContext camelContext, http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/springboot/ZipFileDataFormatAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/springboot/ZipFileDataFormatAutoConfiguration.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/springboot/ZipFileDataFormatAutoConfiguration.java index 8871e47..59ada4e 100644 --- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/springboot/ZipFileDataFormatAutoConfiguration.java +++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/springboot/ZipFileDataFormatAutoConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties(ZipFileDataFormatConfiguration.class) public class ZipFileDataFormatAutoConfiguration { - @Bean(name = "zipFile-dataformat") + @Bean(name = "zipfile-dataformat") @ConditionalOnClass(CamelContext.class) @ConditionalOnMissingBean(ZipFileDataFormat.class) public ZipFileDataFormat configureZipFileDataFormat( http://git-wip-us.apache.org/repos/asf/camel/blob/3a34d258/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 164f870..4a299b7 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 @@ -160,21 +160,6 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { } - /* - // only create source code if the component has options that can be used in auto configuration - if (!model.getComponentOptions().isEmpty()) { - - // use springboot as sub package name so the code is not in normal - // package so the Spring Boot JARs can be optional at runtime - int pos = model.getJavaType().lastIndexOf("."); - String pkg = model.getJavaType().substring(0, pos) + ".springboot"; - - createComponentConfigurationSource(pkg, model, overrideComponentName); - createComponentAutoConfigurationSource(pkg, model, Collections.singletonList(componentName)); - createComponentSpringFactorySource(pkg, model); - } - */ - } } @@ -189,25 +174,44 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { // create auto configuration for the components if (!dataFormatNames.isEmpty()) { getLog().debug("Found " + dataFormatNames.size() + " dataformats"); + + List<DataFormatModel> allModels = new LinkedList<>(); for (String dataFormatName : dataFormatNames) { String json = loadDataFormaatJson(jsonFiles, dataFormatName); if (json != null) { DataFormatModel model = generateDataFormatModel(dataFormatName, json); + allModels.add(model); + } + } + + // Group the models by implementing classes + Map<String, List<DataFormatModel>> grModels = allModels.stream().collect(Collectors.groupingBy(m -> m.getJavaType())); + for (String dataFormatClass : grModels.keySet()) { + List<DataFormatModel> dfModels = grModels.get(dataFormatClass); + DataFormatModel model = dfModels.get(0); // They should be equivalent + List<String> aliases = dfModels.stream().map(m -> m.getName()).sorted().collect(Collectors.toList()); - // only create source code if the component has options that can be used in auto configuration - if (!model.getDataFormatOptions().isEmpty()) { + // only create source code if the data format has options that can be used in auto configuration + if (!model.getDataFormatOptions().isEmpty()) { - // use springboot as sub package name so the code is not in normal - // package so the Spring Boot JARs can be optional at runtime - int pos = model.getJavaType().lastIndexOf("."); - String pkg = model.getJavaType().substring(0, pos) + ".springboot"; + // use springboot as sub package name so the code is not in normal + // package so the Spring Boot JARs can be optional at runtime + int pos = model.getJavaType().lastIndexOf("."); + String pkg = model.getJavaType().substring(0, pos) + ".springboot"; - createDataFormatConfigurationSource(pkg, model); - createDataFormatAutoConfigurationSource(pkg, model); - createDataFormatSpringFactorySource(pkg, model); + String overrideDataformatName = null; + if (aliases.size() > 1) { + // determine component name when there are multiple ones + overrideDataformatName = model.getArtifactId().replace("camel-", ""); } + + createDataFormatConfigurationSource(pkg, model, overrideDataformatName); + createDataFormatAutoConfigurationSource(pkg, model, aliases); + createDataFormatSpringFactorySource(pkg, model); } + } + } } @@ -292,7 +296,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { } } - private void createDataFormatConfigurationSource(String packageName, DataFormatModel model) throws MojoFailureException { + private void createDataFormatConfigurationSource(String packageName, DataFormatModel model, String overrideDataFormatName) throws MojoFailureException { final JavaClassSource javaClass = Roaster.create(JavaClassSource.class); int pos = model.getJavaType().lastIndexOf("."); @@ -306,7 +310,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { } javaClass.getJavaDoc().setFullText(doc); - String prefix = "camel.dataformat." + model.getName(); + String prefix = "camel.dataformat." + (overrideDataFormatName != null ? overrideDataFormatName : model.getName()); // make sure prefix is in lower case prefix = prefix.toLowerCase(Locale.US); javaClass.addAnnotation("org.springframework.boot.context.properties.ConfigurationProperties").setStringValue("prefix", prefix); @@ -451,7 +455,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { } } - private void createDataFormatAutoConfigurationSource(String packageName, DataFormatModel model) throws MojoFailureException { + private void createDataFormatAutoConfigurationSource(String packageName, DataFormatModel model, List<String> dataFormatAliases) throws MojoFailureException { final JavaClassSource javaClass = Roaster.create(JavaClassSource.class); int pos = model.getJavaType().lastIndexOf("."); @@ -490,9 +494,13 @@ public class SpringBootAutoConfigurationMojo extends AbstractMojo { method.addParameter("CamelContext", "camelContext"); method.addParameter(configurationName, "configuration"); + + // Determine all the aliases // adding the '-dataformat' suffix to prevent collision with component names - method.addAnnotation(Bean.class).setStringValue("name", model.getModelName() + "-dataformat"); - ; + String[] springBeanAliases = dataFormatAliases.stream().map(alias -> alias + "-dataformat").toArray(size -> new String[size]); + + method.addAnnotation(Bean.class).setStringArrayValue("name", springBeanAliases); + method.addAnnotation(ConditionalOnClass.class).setLiteralValue("value", "CamelContext.class"); method.addAnnotation(ConditionalOnMissingBean.class).setLiteralValue("value", model.getShortJavaType() + ".class");