This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit c5a95fe117c44cd43560257699aafdcbe2846549 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Aug 17 16:49:19 2020 +0200 CAMEL-15160: Configurer - Generate details what type Map/List contains --- .../apache/camel/spi/PropertyConfigurerGetter.java | 14 ++++++++++ .../camel/impl/ExtendedCamelContextConfigurer.java | 9 +++++++ .../camel/impl/RestConfigurationConfigurer.java | 19 +++++++++++++ ...ToleranceConfigurationDefinitionConfigurer.java | 7 +++++ .../HystrixConfigurationDefinitionConfigurer.java | 7 +++++ ...ilience4jConfigurationDefinitionConfigurer.java | 7 +++++ ...ToleranceConfigurationPropertiesConfigurer.java | 7 +++++ ...althCheckConfigurationPropertiesConfigurer.java | 7 +++++ .../HealthConfigurationPropertiesConfigurer.java | 9 +++++++ .../HystrixConfigurationPropertiesConfigurer.java | 7 +++++ .../main/LraConfigurationPropertiesConfigurer.java | 7 +++++ .../MainConfigurationPropertiesConfigurer.java | 11 ++++++++ ...ilience4jConfigurationPropertiesConfigurer.java | 7 +++++ .../RestConfigurationPropertiesConfigurer.java | 19 +++++++++++++ ...hreadPoolConfigurationPropertiesConfigurer.java | 9 +++++++ .../apache/camel/main/MySecondBarConfigurer.java | 9 +++++++ .../apache/camel/main/MySecondFooConfigurer.java | 9 +++++++ .../DefaultExchangeFormatterConfigurer.java | 7 +++++ .../packaging/AbstractGenerateConfigurerMojo.java | 31 ++++++++++++++++++++-- .../packaging/PropertyConfigurerGenerator.java | 28 +++++++++++++++++++ 20 files changed, 228 insertions(+), 2 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java index c0d24f9..b50c141 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/PropertyConfigurerGetter.java @@ -38,6 +38,20 @@ public interface PropertyConfigurerGetter { Map<String, Object> getAllOptions(Object target); /** + * Gets the nested class type an option supports (such as list, map, or arrays) + * + * For maps, then the nested type returned is the type of the value in the map (not the map key type). + * + * @param target the target instance such as {@link org.apache.camel.Endpoint} or {@link org.apache.camel.Component}. + * @param name the property name + * @param ignoreCase whether to ignore case for matching the property name + * @return the nested class type, or <tt>null</tt> if the option does not has nested types or not possible to resolve. + */ + default Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + return null; + } + + /** * Gets the property value * * @param target the target instance such as {@link org.apache.camel.Endpoint} or {@link org.apache.camel.Component}. diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java index 2ba64b3..5a9386a 100644 --- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java +++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java @@ -371,5 +371,14 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "globaloptions": + case "GlobalOptions": return java.lang.String.class; + default: return null; + } + } } diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java index 003e3ad..6b5ce20 100644 --- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java +++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/RestConfigurationConfigurer.java @@ -176,5 +176,24 @@ public class RestConfigurationConfigurer extends org.apache.camel.support.compon default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "apiproperties": + case "ApiProperties": return java.lang.Object.class; + case "componentproperties": + case "ComponentProperties": return java.lang.Object.class; + case "consumerproperties": + case "ConsumerProperties": return java.lang.Object.class; + case "corsheaders": + case "CorsHeaders": return java.lang.String.class; + case "dataformatproperties": + case "DataFormatProperties": return java.lang.Object.class; + case "endpointproperties": + case "EndpointProperties": return java.lang.Object.class; + default: return null; + } + } } diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java index 9d2c49d..3733dbe 100644 --- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java +++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/FaultToleranceConfigurationDefinitionConfigurer.java @@ -106,5 +106,12 @@ public class FaultToleranceConfigurationDefinitionConfigurer extends org.apache. default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java index c2bc575..3072426 100644 --- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java +++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/HystrixConfigurationDefinitionConfigurer.java @@ -196,5 +196,12 @@ public class HystrixConfigurationDefinitionConfigurer extends org.apache.camel.s default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java index f397b9c..6e7b4ed 100644 --- a/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java +++ b/core/camel-core-engine/src/generated/java/org/apache/camel/model/Resilience4jConfigurationDefinitionConfigurer.java @@ -136,5 +136,12 @@ public class Resilience4jConfigurationDefinitionConfigurer extends org.apache.ca default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java index 2bd6e3e..f96afdd 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/FaultToleranceConfigurationPropertiesConfigurer.java @@ -101,5 +101,12 @@ public class FaultToleranceConfigurationPropertiesConfigurer extends org.apache. default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java index 8e03776..9acf78b 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/HealthCheckConfigurationPropertiesConfigurer.java @@ -56,5 +56,12 @@ public class HealthCheckConfigurationPropertiesConfigurer extends org.apache.cam default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java index 6aa5c20..0437f56 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/HealthConfigurationPropertiesConfigurer.java @@ -61,5 +61,14 @@ public class HealthConfigurationPropertiesConfigurer extends org.apache.camel.su default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "config": + case "Config": return org.apache.camel.main.HealthCheckConfigurationProperties.class; + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java index 166ddad..495f967 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/HystrixConfigurationPropertiesConfigurer.java @@ -191,5 +191,12 @@ public class HystrixConfigurationPropertiesConfigurer extends org.apache.camel.s default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java index 700c5d7..ad5fade 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/LraConfigurationPropertiesConfigurer.java @@ -56,5 +56,12 @@ public class LraConfigurationPropertiesConfigurer extends org.apache.camel.suppo default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java index 102d328..c861558 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/MainConfigurationPropertiesConfigurer.java @@ -451,5 +451,16 @@ public class MainConfigurationPropertiesConfigurer extends org.apache.camel.supp default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "configurations": + case "Configurations": return java.lang.Object.class; + case "routesbuilders": + case "RoutesBuilders": return org.apache.camel.RoutesBuilder.class; + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java index 1bb5386..4227b05 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/Resilience4jConfigurationPropertiesConfigurer.java @@ -131,5 +131,12 @@ public class Resilience4jConfigurationPropertiesConfigurer extends org.apache.ca default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java index 275583b..be282d2 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/RestConfigurationPropertiesConfigurer.java @@ -176,5 +176,24 @@ public class RestConfigurationPropertiesConfigurer extends org.apache.camel.supp default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "apiproperties": + case "ApiProperties": return java.lang.Object.class; + case "componentproperties": + case "ComponentProperties": return java.lang.Object.class; + case "consumerproperties": + case "ConsumerProperties": return java.lang.Object.class; + case "corsheaders": + case "CorsHeaders": return java.lang.String.class; + case "dataformatproperties": + case "DataFormatProperties": return java.lang.Object.class; + case "endpointproperties": + case "EndpointProperties": return java.lang.Object.class; + default: return null; + } + } } diff --git a/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java b/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java index a78e807..d7b70c4 100644 --- a/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java +++ b/core/camel-main/src/generated/java/org/apache/camel/main/ThreadPoolConfigurationPropertiesConfigurer.java @@ -76,5 +76,14 @@ public class ThreadPoolConfigurationPropertiesConfigurer extends org.apache.came default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "config": + case "Config": return org.apache.camel.main.ThreadPoolProfileConfigurationProperties.class; + default: return null; + } + } } diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java index d31f486..323fb8e 100644 --- a/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java +++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondBarConfigurer.java @@ -41,5 +41,14 @@ public class MySecondBarConfigurer extends org.apache.camel.support.component.Pr default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "names": + case "Names": return java.lang.String.class; + default: return null; + } + } } diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java index 5044c1f..b14c7df 100644 --- a/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java +++ b/core/camel-main/src/test/java/org/apache/camel/main/MySecondFooConfigurer.java @@ -41,5 +41,14 @@ public class MySecondFooConfigurer extends org.apache.camel.support.component.Pr default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + case "bars": + case "Bars": return org.apache.camel.main.MySecondBar.class; + default: return null; + } + } } diff --git a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java index a1d77ec..0126166 100644 --- a/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java +++ b/core/camel-support/src/generated/java/org/apache/camel/support/processor/DefaultExchangeFormatterConfigurer.java @@ -121,5 +121,12 @@ public class DefaultExchangeFormatterConfigurer extends org.apache.camel.support default: return null; } } + + @Override + public Object getOptionNestedType(Object target, String name, boolean ignoreCase) { + switch (ignoreCase ? name.toLowerCase() : name) { + default: return null; + } + } } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java index 12fc5a5..2a69649 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateConfigurerMojo.java @@ -39,6 +39,7 @@ import java.util.Set; import org.apache.camel.tooling.model.BaseOptionModel; import org.apache.camel.tooling.util.ReflectionHelper; +import org.apache.camel.tooling.util.Strings; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.resolver.filter.ArtifactFilter; @@ -102,6 +103,11 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo } setGetterMethod(getter); } + + public void setNestedType(String nestedType) { + // trick to use deprecation note for nested type + setDeprecationNote(nestedType); + } } public AbstractGenerateConfigurerMojo() { @@ -303,9 +309,12 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo // ignore as its then assumed to be get } } + + Option option = null; String t = Character.toUpperCase(m.getName().charAt(3)) + m.getName().substring(3 + 1); if (names.add(t)) { - answer.add(new Option(t, type, getter)); + option = new Option(t, type, getter); + answer.add(option); } else { boolean replace = false; // try to find out what the real type is of the correspondent field so we chose among the clash @@ -316,7 +325,25 @@ public abstract class AbstractGenerateConfigurerMojo extends AbstractGeneratorMo } if (replace) { answer.removeIf(o -> o.getName().equals(t)); - answer.add(new Option(t, type, getter)); + option = new Option(t, type, getter); + answer.add(option); + } + } + + if (option != null) { + String desc = type.isArray() ? type.getComponentType().getName() : m.toGenericString(); + if (desc.contains("<") && desc.contains(">")) { + desc = Strings.between(desc, "<", ">"); + // if its a map then it has a key/value, so we only want the last part + int pos = desc.indexOf(','); + if (pos != -1) { + desc = desc.substring(pos + 1); + } + desc = desc.replace('$', '.'); + desc = desc.trim(); + if (!desc.isEmpty()) { + option.setNestedType(desc); + } } } } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java index fdf60c0..f22f94e 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PropertyConfigurerGenerator.java @@ -135,6 +135,34 @@ public final class PropertyConfigurerGenerator { w.write(" }\n"); } w.write(" }\n"); + + // nested type was stored in deprecation note as we use BaseOptionModel to hold the option data + boolean hasNestedTypes = options.stream().map(BaseOptionModel::getDeprecationNote).anyMatch(s -> s != null && !s.trim().isEmpty()); + if (hasNestedTypes) { + w.write("\n"); + w.write(" @Override\n"); + w.write(" public Object getOptionNestedType(Object target, String name, boolean ignoreCase) {\n"); + if (!options.isEmpty()) { + w.write(" switch (ignoreCase ? name.toLowerCase() : name) {\n"); + for (BaseOptionModel option : options) { + String nestedType = option.getDeprecationNote(); + if (nestedType != null && !nestedType.isEmpty()) { + nestedType = nestedType.replace('$', '.'); + if (!option.getName().toLowerCase().equals(option.getName())) { + w.write(String.format(" case \"%s\":\n", option.getName().toLowerCase())); + } + w.write(String.format(" case \"%s\": return %s.class;\n", option.getName(), nestedType)); + } + } + if (hasSuper) { + w.write(" default: return super.getOptionNestedType(target, name, ignoreCase);\n"); + } else { + w.write(" default: return null;\n"); + } + w.write(" }\n"); + } + w.write(" }\n"); + } } w.write("}\n");