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 61afeca3c12d142a6a0de3093a222333614d5f96
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Apr 8 14:31:33 2020 +0200

    CAMEL-14864: Be able to generate configurer for any pojo. WIP
---
 core/camel-core-engine/pom.xml                     |  18 +
 .../camel/ExtendedCamelContextConfigurer.java      | 375 +++++++++++++++++++++
 .../apache/camel/configurer/ExtendedCamelContext   |   2 +
 .../camel/tooling/model/BaseOptionModel.java       |  18 +
 .../org/apache/camel/tooling/model/JsonMapper.java |   4 +
 .../maven/packaging/GenerateConfigurerMojo.java    |  77 +++--
 .../packaging/PropertyConfigurerGenerator.java     |  12 +-
 7 files changed, 482 insertions(+), 24 deletions(-)

diff --git a/core/camel-core-engine/pom.xml b/core/camel-core-engine/pom.xml
index 4a5d85d..54c2ee1 100644
--- a/core/camel-core-engine/pom.xml
+++ b/core/camel-core-engine/pom.xml
@@ -120,6 +120,24 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                        <!-- we want to have configurer for 
ExtendedCamelContext in camel-core-engine -->
+                        <configuration>
+                            <discoverClasses>false</discoverClasses>
+                            
<classes>org.apache.camel.ExtendedCamelContext</classes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-bundle-plugin</artifactId>
                 <configuration>
                     <instructions>
diff --git 
a/core/camel-core-engine/src/generated/java/org/apache/camel/ExtendedCamelContextConfigurer.java
 
b/core/camel-core-engine/src/generated/java/org/apache/camel/ExtendedCamelContextConfigurer.java
new file mode 100644
index 0000000..6858b66
--- /dev/null
+++ 
b/core/camel-core-engine/src/generated/java/org/apache/camel/ExtendedCamelContextConfigurer.java
@@ -0,0 +1,375 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.ExtendedCamelContext;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class ExtendedCamelContextConfigurer extends 
org.apache.camel.support.component.PropertyConfigurerSupport implements 
GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String 
name, Object value, boolean ignoreCase) {
+        org.apache.camel.ExtendedCamelContext target = 
(org.apache.camel.ExtendedCamelContext) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "allowuseoriginalmessage":
+        case "AllowUseOriginalMessage": 
target.setAllowUseOriginalMessage(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "applicationcontextclassloader":
+        case "ApplicationContextClassLoader": 
target.setApplicationContextClassLoader(property(camelContext, 
java.lang.ClassLoader.class, value)); return true;
+        case "asyncprocessorawaitmanager":
+        case "AsyncProcessorAwaitManager": 
target.setAsyncProcessorAwaitManager(property(camelContext, 
org.apache.camel.spi.AsyncProcessorAwaitManager.class, value)); return true;
+        case "autostartup":
+        case "AutoStartup": target.setAutoStartup(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "backlogtracing":
+        case "BacklogTracing": target.setBacklogTracing(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "beanintrospection":
+        case "BeanIntrospection": 
target.setBeanIntrospection(property(camelContext, 
org.apache.camel.spi.BeanIntrospection.class, value)); return true;
+        case "caseinsensitiveheaders":
+        case "CaseInsensitiveHeaders": 
target.setCaseInsensitiveHeaders(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "classresolver":
+        case "ClassResolver": target.setClassResolver(property(camelContext, 
org.apache.camel.spi.ClassResolver.class, value)); return true;
+        case "componentnameresolver":
+        case "ComponentNameResolver": 
target.setComponentNameResolver(property(camelContext, 
org.apache.camel.spi.ComponentNameResolver.class, value)); return true;
+        case "componentresolver":
+        case "ComponentResolver": 
target.setComponentResolver(property(camelContext, 
org.apache.camel.spi.ComponentResolver.class, value)); return true;
+        case "configurerresolver":
+        case "ConfigurerResolver": 
target.setConfigurerResolver(property(camelContext, 
org.apache.camel.spi.ConfigurerResolver.class, value)); return true;
+        case "dataformatresolver":
+        case "DataFormatResolver": 
target.setDataFormatResolver(property(camelContext, 
org.apache.camel.spi.DataFormatResolver.class, value)); return true;
+        case "debugger":
+        case "Debugger": target.setDebugger(property(camelContext, 
org.apache.camel.spi.Debugger.class, value)); return true;
+        case "debugging":
+        case "Debugging": target.setDebugging(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "delayer":
+        case "Delayer": target.setDelayer(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "errorhandlerfactory":
+        case "ErrorHandlerFactory": 
target.setErrorHandlerFactory(property(camelContext, 
org.apache.camel.ErrorHandlerFactory.class, value)); return true;
+        case "eventnotificationapplicable":
+        case "EventNotificationApplicable": 
target.setEventNotificationApplicable(property(camelContext, boolean.class, 
value)); return true;
+        case "executorservicemanager":
+        case "ExecutorServiceManager": 
target.setExecutorServiceManager(property(camelContext, 
org.apache.camel.spi.ExecutorServiceManager.class, value)); return true;
+        case "factoryfinderresolver":
+        case "FactoryFinderResolver": 
target.setFactoryFinderResolver(property(camelContext, 
org.apache.camel.spi.FactoryFinderResolver.class, value)); return true;
+        case "globaloptions":
+        case "GlobalOptions": target.setGlobalOptions(property(camelContext, 
java.util.Map.class, value)); return true;
+        case "headersmapfactory":
+        case "HeadersMapFactory": 
target.setHeadersMapFactory(property(camelContext, 
org.apache.camel.spi.HeadersMapFactory.class, value)); return true;
+        case "inflightrepository":
+        case "InflightRepository": 
target.setInflightRepository(property(camelContext, 
org.apache.camel.spi.InflightRepository.class, value)); return true;
+        case "injector":
+        case "Injector": target.setInjector(property(camelContext, 
org.apache.camel.spi.Injector.class, value)); return true;
+        case "languageresolver":
+        case "LanguageResolver": 
target.setLanguageResolver(property(camelContext, 
org.apache.camel.spi.LanguageResolver.class, value)); return true;
+        case "loadtypeconverters":
+        case "LoadTypeConverters": 
target.setLoadTypeConverters(property(camelContext, java.lang.Boolean.class, 
value)); return true;
+        case "logexhaustedmessagebody":
+        case "LogExhaustedMessageBody": 
target.setLogExhaustedMessageBody(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "logmask":
+        case "LogMask": target.setLogMask(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "mdcloggingkeyspattern":
+        case "MDCLoggingKeysPattern": 
target.setMDCLoggingKeysPattern(property(camelContext, java.lang.String.class, 
value)); return true;
+        case "managementname":
+        case "ManagementName": target.setManagementName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "managementnamestrategy":
+        case "ManagementNameStrategy": 
target.setManagementNameStrategy(property(camelContext, 
org.apache.camel.spi.ManagementNameStrategy.class, value)); return true;
+        case "managementstrategy":
+        case "ManagementStrategy": 
target.setManagementStrategy(property(camelContext, 
org.apache.camel.spi.ManagementStrategy.class, value)); return true;
+        case "messagehistory":
+        case "MessageHistory": target.setMessageHistory(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "messagehistoryfactory":
+        case "MessageHistoryFactory": 
target.setMessageHistoryFactory(property(camelContext, 
org.apache.camel.spi.MessageHistoryFactory.class, value)); return true;
+        case "modeljaxbcontextfactory":
+        case "ModelJAXBContextFactory": 
target.setModelJAXBContextFactory(property(camelContext, 
org.apache.camel.spi.ModelJAXBContextFactory.class, value)); return true;
+        case "modeltoxmldumper":
+        case "ModelToXMLDumper": 
target.setModelToXMLDumper(property(camelContext, 
org.apache.camel.spi.ModelToXMLDumper.class, value)); return true;
+        case "name":
+        case "Name": target.setName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "namestrategy":
+        case "NameStrategy": target.setNameStrategy(property(camelContext, 
org.apache.camel.spi.CamelContextNameStrategy.class, value)); return true;
+        case "nodeidfactory":
+        case "NodeIdFactory": target.setNodeIdFactory(property(camelContext, 
org.apache.camel.spi.NodeIdFactory.class, value)); return true;
+        case "packagescanclassresolver":
+        case "PackageScanClassResolver": 
target.setPackageScanClassResolver(property(camelContext, 
org.apache.camel.spi.PackageScanClassResolver.class, value)); return true;
+        case "packagescanresourceresolver":
+        case "PackageScanResourceResolver": 
target.setPackageScanResourceResolver(property(camelContext, 
org.apache.camel.spi.PackageScanResourceResolver.class, value)); return true;
+        case "processorfactory":
+        case "ProcessorFactory": 
target.setProcessorFactory(property(camelContext, 
org.apache.camel.spi.ProcessorFactory.class, value)); return true;
+        case "propertiescomponent":
+        case "PropertiesComponent": 
target.setPropertiesComponent(property(camelContext, 
org.apache.camel.spi.PropertiesComponent.class, value)); return true;
+        case "reactiveexecutor":
+        case "ReactiveExecutor": 
target.setReactiveExecutor(property(camelContext, 
org.apache.camel.spi.ReactiveExecutor.class, value)); return true;
+        case "registry":
+        case "Registry": target.setRegistry(property(camelContext, 
org.apache.camel.spi.Registry.class, value)); return true;
+        case "restbindingjaxbdataformatfactory":
+        case "RestBindingJaxbDataFormatFactory": 
target.setRestBindingJaxbDataFormatFactory(property(camelContext, 
org.apache.camel.spi.RestBindingJaxbDataFormatFactory.class, value)); return 
true;
+        case "restconfiguration":
+        case "RestConfiguration": 
target.setRestConfiguration(property(camelContext, 
org.apache.camel.spi.RestConfiguration.class, value)); return true;
+        case "restregistry":
+        case "RestRegistry": target.setRestRegistry(property(camelContext, 
org.apache.camel.spi.RestRegistry.class, value)); return true;
+        case "routecontroller":
+        case "RouteController": 
target.setRouteController(property(camelContext, 
org.apache.camel.spi.RouteController.class, value)); return true;
+        case "runtimecamelcatalog":
+        case "RuntimeCamelCatalog": 
target.setRuntimeCamelCatalog(property(camelContext, 
org.apache.camel.catalog.RuntimeCamelCatalog.class, value)); return true;
+        case "runtimeendpointregistry":
+        case "RuntimeEndpointRegistry": 
target.setRuntimeEndpointRegistry(property(camelContext, 
org.apache.camel.spi.RuntimeEndpointRegistry.class, value)); return true;
+        case "sslcontextparameters":
+        case "SSLContextParameters": 
target.setSSLContextParameters(property(camelContext, 
org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true;
+        case "shutdownroute":
+        case "ShutdownRoute": target.setShutdownRoute(property(camelContext, 
org.apache.camel.ShutdownRoute.class, value)); return true;
+        case "shutdownrunningtask":
+        case "ShutdownRunningTask": 
target.setShutdownRunningTask(property(camelContext, 
org.apache.camel.ShutdownRunningTask.class, value)); return true;
+        case "shutdownstrategy":
+        case "ShutdownStrategy": 
target.setShutdownStrategy(property(camelContext, 
org.apache.camel.spi.ShutdownStrategy.class, value)); return true;
+        case "streamcaching":
+        case "StreamCaching": target.setStreamCaching(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "streamcachingstrategy":
+        case "StreamCachingStrategy": 
target.setStreamCachingStrategy(property(camelContext, 
org.apache.camel.spi.StreamCachingStrategy.class, value)); return true;
+        case "tracer":
+        case "Tracer": target.setTracer(property(camelContext, 
org.apache.camel.spi.Tracer.class, value)); return true;
+        case "tracing":
+        case "Tracing": target.setTracing(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "tracingpattern":
+        case "TracingPattern": target.setTracingPattern(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "typeconverterregistry":
+        case "TypeConverterRegistry": 
target.setTypeConverterRegistry(property(camelContext, 
org.apache.camel.spi.TypeConverterRegistry.class, value)); return true;
+        case "typeconverterstatisticsenabled":
+        case "TypeConverterStatisticsEnabled": 
target.setTypeConverterStatisticsEnabled(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "unitofworkfactory":
+        case "UnitOfWorkFactory": 
target.setUnitOfWorkFactory(property(camelContext, 
org.apache.camel.spi.UnitOfWorkFactory.class, value)); return true;
+        case "usebreadcrumb":
+        case "UseBreadcrumb": target.setUseBreadcrumb(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "usedatatype":
+        case "UseDataType": target.setUseDataType(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "usemdclogging":
+        case "UseMDCLogging": target.setUseMDCLogging(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "uuidgenerator":
+        case "UuidGenerator": target.setUuidGenerator(property(camelContext, 
org.apache.camel.spi.UuidGenerator.class, value)); return true;
+        case "xmlroutesdefinitionloader":
+        case "XMLRoutesDefinitionLoader": 
target.setXMLRoutesDefinitionLoader(property(camelContext, 
org.apache.camel.spi.XMLRoutesDefinitionLoader.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("AllowUseOriginalMessage", java.lang.Boolean.class);
+        answer.put("ApplicationContextClassLoader", 
java.lang.ClassLoader.class);
+        answer.put("AsyncProcessorAwaitManager", 
org.apache.camel.spi.AsyncProcessorAwaitManager.class);
+        answer.put("AutoStartup", java.lang.Boolean.class);
+        answer.put("BacklogTracing", java.lang.Boolean.class);
+        answer.put("BeanIntrospection", 
org.apache.camel.spi.BeanIntrospection.class);
+        answer.put("CaseInsensitiveHeaders", java.lang.Boolean.class);
+        answer.put("ClassResolver", org.apache.camel.spi.ClassResolver.class);
+        answer.put("ComponentNameResolver", 
org.apache.camel.spi.ComponentNameResolver.class);
+        answer.put("ComponentResolver", 
org.apache.camel.spi.ComponentResolver.class);
+        answer.put("ConfigurerResolver", 
org.apache.camel.spi.ConfigurerResolver.class);
+        answer.put("DataFormatResolver", 
org.apache.camel.spi.DataFormatResolver.class);
+        answer.put("Debugger", org.apache.camel.spi.Debugger.class);
+        answer.put("Debugging", java.lang.Boolean.class);
+        answer.put("Delayer", java.lang.Long.class);
+        answer.put("ErrorHandlerFactory", 
org.apache.camel.ErrorHandlerFactory.class);
+        answer.put("EventNotificationApplicable", boolean.class);
+        answer.put("ExecutorServiceManager", 
org.apache.camel.spi.ExecutorServiceManager.class);
+        answer.put("FactoryFinderResolver", 
org.apache.camel.spi.FactoryFinderResolver.class);
+        answer.put("GlobalOptions", java.util.Map.class);
+        answer.put("HeadersMapFactory", 
org.apache.camel.spi.HeadersMapFactory.class);
+        answer.put("InflightRepository", 
org.apache.camel.spi.InflightRepository.class);
+        answer.put("Injector", org.apache.camel.spi.Injector.class);
+        answer.put("LanguageResolver", 
org.apache.camel.spi.LanguageResolver.class);
+        answer.put("LoadTypeConverters", java.lang.Boolean.class);
+        answer.put("LogExhaustedMessageBody", java.lang.Boolean.class);
+        answer.put("LogMask", java.lang.Boolean.class);
+        answer.put("MDCLoggingKeysPattern", java.lang.String.class);
+        answer.put("ManagementName", java.lang.String.class);
+        answer.put("ManagementNameStrategy", 
org.apache.camel.spi.ManagementNameStrategy.class);
+        answer.put("ManagementStrategy", 
org.apache.camel.spi.ManagementStrategy.class);
+        answer.put("MessageHistory", java.lang.Boolean.class);
+        answer.put("MessageHistoryFactory", 
org.apache.camel.spi.MessageHistoryFactory.class);
+        answer.put("ModelJAXBContextFactory", 
org.apache.camel.spi.ModelJAXBContextFactory.class);
+        answer.put("ModelToXMLDumper", 
org.apache.camel.spi.ModelToXMLDumper.class);
+        answer.put("Name", java.lang.String.class);
+        answer.put("NameStrategy", 
org.apache.camel.spi.CamelContextNameStrategy.class);
+        answer.put("NodeIdFactory", org.apache.camel.spi.NodeIdFactory.class);
+        answer.put("PackageScanClassResolver", 
org.apache.camel.spi.PackageScanClassResolver.class);
+        answer.put("PackageScanResourceResolver", 
org.apache.camel.spi.PackageScanResourceResolver.class);
+        answer.put("ProcessorFactory", 
org.apache.camel.spi.ProcessorFactory.class);
+        answer.put("PropertiesComponent", 
org.apache.camel.spi.PropertiesComponent.class);
+        answer.put("ReactiveExecutor", 
org.apache.camel.spi.ReactiveExecutor.class);
+        answer.put("Registry", org.apache.camel.spi.Registry.class);
+        answer.put("RestBindingJaxbDataFormatFactory", 
org.apache.camel.spi.RestBindingJaxbDataFormatFactory.class);
+        answer.put("RestConfiguration", 
org.apache.camel.spi.RestConfiguration.class);
+        answer.put("RestRegistry", org.apache.camel.spi.RestRegistry.class);
+        answer.put("RouteController", 
org.apache.camel.spi.RouteController.class);
+        answer.put("RuntimeCamelCatalog", 
org.apache.camel.catalog.RuntimeCamelCatalog.class);
+        answer.put("RuntimeEndpointRegistry", 
org.apache.camel.spi.RuntimeEndpointRegistry.class);
+        answer.put("SSLContextParameters", 
org.apache.camel.support.jsse.SSLContextParameters.class);
+        answer.put("ShutdownRoute", org.apache.camel.ShutdownRoute.class);
+        answer.put("ShutdownRunningTask", 
org.apache.camel.ShutdownRunningTask.class);
+        answer.put("ShutdownStrategy", 
org.apache.camel.spi.ShutdownStrategy.class);
+        answer.put("StreamCaching", java.lang.Boolean.class);
+        answer.put("StreamCachingStrategy", 
org.apache.camel.spi.StreamCachingStrategy.class);
+        answer.put("Tracer", org.apache.camel.spi.Tracer.class);
+        answer.put("Tracing", java.lang.Boolean.class);
+        answer.put("TracingPattern", java.lang.String.class);
+        answer.put("TypeConverterRegistry", 
org.apache.camel.spi.TypeConverterRegistry.class);
+        answer.put("TypeConverterStatisticsEnabled", java.lang.Boolean.class);
+        answer.put("UnitOfWorkFactory", 
org.apache.camel.spi.UnitOfWorkFactory.class);
+        answer.put("UseBreadcrumb", java.lang.Boolean.class);
+        answer.put("UseDataType", java.lang.Boolean.class);
+        answer.put("UseMDCLogging", java.lang.Boolean.class);
+        answer.put("UuidGenerator", org.apache.camel.spi.UuidGenerator.class);
+        answer.put("XMLRoutesDefinitionLoader", 
org.apache.camel.spi.XMLRoutesDefinitionLoader.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.ExtendedCamelContext target = 
(org.apache.camel.ExtendedCamelContext) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "allowuseoriginalmessage":
+        case "AllowUseOriginalMessage": return 
target.isAllowUseOriginalMessage();
+        case "applicationcontextclassloader":
+        case "ApplicationContextClassLoader": return 
target.getApplicationContextClassLoader();
+        case "asyncprocessorawaitmanager":
+        case "AsyncProcessorAwaitManager": return 
target.getAsyncProcessorAwaitManager();
+        case "autostartup":
+        case "AutoStartup": return target.isAutoStartup();
+        case "backlogtracing":
+        case "BacklogTracing": return target.isBacklogTracing();
+        case "beanintrospection":
+        case "BeanIntrospection": return target.getBeanIntrospection();
+        case "caseinsensitiveheaders":
+        case "CaseInsensitiveHeaders": return 
target.isCaseInsensitiveHeaders();
+        case "classresolver":
+        case "ClassResolver": return target.getClassResolver();
+        case "componentnameresolver":
+        case "ComponentNameResolver": return target.getComponentNameResolver();
+        case "componentresolver":
+        case "ComponentResolver": return target.getComponentResolver();
+        case "configurerresolver":
+        case "ConfigurerResolver": return target.getConfigurerResolver();
+        case "dataformatresolver":
+        case "DataFormatResolver": return target.getDataFormatResolver();
+        case "debugger":
+        case "Debugger": return target.getDebugger();
+        case "debugging":
+        case "Debugging": return target.isDebugging();
+        case "delayer":
+        case "Delayer": return target.getDelayer();
+        case "errorhandlerfactory":
+        case "ErrorHandlerFactory": return target.getErrorHandlerFactory();
+        case "eventnotificationapplicable":
+        case "EventNotificationApplicable": return 
target.isEventNotificationApplicable();
+        case "executorservicemanager":
+        case "ExecutorServiceManager": return 
target.getExecutorServiceManager();
+        case "factoryfinderresolver":
+        case "FactoryFinderResolver": return target.getFactoryFinderResolver();
+        case "globaloptions":
+        case "GlobalOptions": return target.getGlobalOptions();
+        case "headersmapfactory":
+        case "HeadersMapFactory": return target.getHeadersMapFactory();
+        case "inflightrepository":
+        case "InflightRepository": return target.getInflightRepository();
+        case "injector":
+        case "Injector": return target.getInjector();
+        case "languageresolver":
+        case "LanguageResolver": return target.getLanguageResolver();
+        case "loadtypeconverters":
+        case "LoadTypeConverters": return target.isLoadTypeConverters();
+        case "logexhaustedmessagebody":
+        case "LogExhaustedMessageBody": return 
target.isLogExhaustedMessageBody();
+        case "logmask":
+        case "LogMask": return target.isLogMask();
+        case "mdcloggingkeyspattern":
+        case "MDCLoggingKeysPattern": return target.getMDCLoggingKeysPattern();
+        case "managementname":
+        case "ManagementName": return target.getManagementName();
+        case "managementnamestrategy":
+        case "ManagementNameStrategy": return 
target.getManagementNameStrategy();
+        case "managementstrategy":
+        case "ManagementStrategy": return target.getManagementStrategy();
+        case "messagehistory":
+        case "MessageHistory": return target.isMessageHistory();
+        case "messagehistoryfactory":
+        case "MessageHistoryFactory": return target.getMessageHistoryFactory();
+        case "modeljaxbcontextfactory":
+        case "ModelJAXBContextFactory": return 
target.getModelJAXBContextFactory();
+        case "modeltoxmldumper":
+        case "ModelToXMLDumper": return target.getModelToXMLDumper();
+        case "name":
+        case "Name": return target.getName();
+        case "namestrategy":
+        case "NameStrategy": return target.getNameStrategy();
+        case "nodeidfactory":
+        case "NodeIdFactory": return target.getNodeIdFactory();
+        case "packagescanclassresolver":
+        case "PackageScanClassResolver": return 
target.getPackageScanClassResolver();
+        case "packagescanresourceresolver":
+        case "PackageScanResourceResolver": return 
target.getPackageScanResourceResolver();
+        case "processorfactory":
+        case "ProcessorFactory": return target.getProcessorFactory();
+        case "propertiescomponent":
+        case "PropertiesComponent": return target.getPropertiesComponent();
+        case "reactiveexecutor":
+        case "ReactiveExecutor": return target.getReactiveExecutor();
+        case "registry":
+        case "Registry": return target.getRegistry();
+        case "restbindingjaxbdataformatfactory":
+        case "RestBindingJaxbDataFormatFactory": return 
target.getRestBindingJaxbDataFormatFactory();
+        case "restconfiguration":
+        case "RestConfiguration": return target.getRestConfiguration();
+        case "restregistry":
+        case "RestRegistry": return target.getRestRegistry();
+        case "routecontroller":
+        case "RouteController": return target.getRouteController();
+        case "runtimecamelcatalog":
+        case "RuntimeCamelCatalog": return target.getRuntimeCamelCatalog();
+        case "runtimeendpointregistry":
+        case "RuntimeEndpointRegistry": return 
target.getRuntimeEndpointRegistry();
+        case "sslcontextparameters":
+        case "SSLContextParameters": return target.getSSLContextParameters();
+        case "shutdownroute":
+        case "ShutdownRoute": return target.getShutdownRoute();
+        case "shutdownrunningtask":
+        case "ShutdownRunningTask": return target.getShutdownRunningTask();
+        case "shutdownstrategy":
+        case "ShutdownStrategy": return target.getShutdownStrategy();
+        case "streamcaching":
+        case "StreamCaching": return target.isStreamCaching();
+        case "streamcachingstrategy":
+        case "StreamCachingStrategy": return target.getStreamCachingStrategy();
+        case "tracer":
+        case "Tracer": return target.getTracer();
+        case "tracing":
+        case "Tracing": return target.isTracing();
+        case "tracingpattern":
+        case "TracingPattern": return target.getTracingPattern();
+        case "typeconverterregistry":
+        case "TypeConverterRegistry": return target.getTypeConverterRegistry();
+        case "typeconverterstatisticsenabled":
+        case "TypeConverterStatisticsEnabled": return 
target.isTypeConverterStatisticsEnabled();
+        case "unitofworkfactory":
+        case "UnitOfWorkFactory": return target.getUnitOfWorkFactory();
+        case "usebreadcrumb":
+        case "UseBreadcrumb": return target.isUseBreadcrumb();
+        case "usedatatype":
+        case "UseDataType": return target.isUseDataType();
+        case "usemdclogging":
+        case "UseMDCLogging": return target.isUseMDCLogging();
+        case "uuidgenerator":
+        case "UuidGenerator": return target.getUuidGenerator();
+        case "xmlroutesdefinitionloader":
+        case "XMLRoutesDefinitionLoader": return 
target.getXMLRoutesDefinitionLoader();
+        default: return null;
+        }
+    }
+}
+
diff --git 
a/core/camel-core-engine/src/generated/resources/META-INF/services/org/apache/camel/configurer/ExtendedCamelContext
 
b/core/camel-core-engine/src/generated/resources/META-INF/services/org/apache/camel/configurer/ExtendedCamelContext
new file mode 100644
index 0000000..4d22c93
--- /dev/null
+++ 
b/core/camel-core-engine/src/generated/resources/META-INF/services/org/apache/camel/configurer/ExtendedCamelContext
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.ExtendedCamelContextConfigurer
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
index 1aff346..30d8746 100644
--- 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java
@@ -41,6 +41,8 @@ public abstract class BaseOptionModel {
     protected Object defaultValue;
     protected String defaultValueNote;
     protected boolean asPredicate;
+    protected String setterMethod; // optional and currently only used by 
configurer
+    protected String getterMethod; // optional and currently only used by 
configurer
     protected String configurationClass;
     protected String configurationField;
     protected String description;
@@ -200,6 +202,22 @@ public abstract class BaseOptionModel {
         this.asPredicate = asPredicate;
     }
 
+    public String getSetterMethod() {
+        return setterMethod;
+    }
+
+    public void setSetterMethod(String setterMethod) {
+        this.setterMethod = setterMethod;
+    }
+
+    public String getGetterMethod() {
+        return getterMethod;
+    }
+
+    public void setGetterMethod(String getterMethod) {
+        this.getterMethod = getterMethod;
+    }
+
     public String getConfigurationClass() {
         return configurationClass;
     }
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
index 493aa17..2375ff4 100644
--- 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
@@ -392,6 +392,8 @@ public final class JsonMapper {
         option.setConfigurationClass(mp.getString("configurationClass"));
         option.setConfigurationField(mp.getString("configurationField"));
         option.setDescription(mp.getString("description"));
+        option.setGetterMethod(mp.getString("getterMethod"));
+        option.setSetterMethod(mp.getString("setterMethod"));
     }
 
     private static void parseGroup(JsonObject mp, MainGroupModel option) {
@@ -428,6 +430,8 @@ public final class JsonMapper {
         prop.put("configurationClass", option.getConfigurationClass());
         prop.put("configurationField", option.getConfigurationField());
         prop.put("description", option.getDescription());
+        prop.put("getterMethod", option.getGetterMethod());
+        prop.put("setterMethod", option.getSetterMethod());
         prop.entrySet().removeIf(e -> e.getValue() == null);
         prop.remove("prefix", "");
         prop.remove("optionalPrefix", "");
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
index 74c574b..d5be300 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateConfigurerMojo.java
@@ -27,6 +27,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -63,14 +64,27 @@ public class GenerateConfigurerMojo extends 
AbstractGeneratorMojo {
     @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
     protected File resourcesOutputDir;
 
+    /**
+     * Whether to discover configurer classes from classpath by scanning for 
@Configurer annotations.
+     */
+    @Parameter(defaultValue = "true")
+    protected boolean discoverClasses = true;
+
+    /**
+     * To generate configurer for these classes.
+     */
+    @Parameter
+    protected String[] classes;
+
     private DynamicClassLoader projectClassLoader;
 
     private static class Option extends BaseOptionModel {
 
-        public Option(String name, Class type) {
+        public Option(String name, Class type, String getter) {
             // we just use name, type
             setName(name);
             setJavaType(type.getName());
+            setGetterMethod(getter);
         }
     }
 
@@ -99,28 +113,39 @@ public class GenerateConfigurerMojo extends 
AbstractGeneratorMojo {
         });
         projectClassLoader = DynamicClassLoader.createDynamicClassLoader(cp);
 
-        Path output = Paths.get(project.getBuild().getOutputDirectory());
-        Index index;
-        try (InputStream is = 
Files.newInputStream(output.resolve("META-INF/jandex.idx"))) {
-            index = new IndexReader(is).read();
-        } catch (IOException e) {
-            throw new MojoExecutionException("IOException: " + e.getMessage(), 
e);
+        Set<String> set = new LinkedHashSet<>();
+
+        if (discoverClasses) {
+            Path output = Paths.get(project.getBuild().getOutputDirectory());
+            Index index;
+            try (InputStream is = 
Files.newInputStream(output.resolve("META-INF/jandex.idx"))) {
+                index = new IndexReader(is).read();
+            } catch (IOException e) {
+                throw new MojoExecutionException("IOException: " + 
e.getMessage(), e);
+            }
+
+            // discover all classes annotated with @Configurer
+            List<AnnotationInstance> annotations = 
index.getAnnotations(CONFIGURER);
+            annotations.stream()
+                    .filter(annotation -> annotation.target().kind() == 
AnnotationTarget.Kind.CLASS)
+                    .filter(annotation -> 
annotation.target().asClass().nestingType() == ClassInfo.NestingType.TOP_LEVEL)
+                    .filter(annotation -> asBooleanDefaultTrue(annotation, 
"generateConfigurer"))
+                    .forEach(annotation -> {
+                        String currentClass = 
annotation.target().asClass().name().toString();
+                        set.add(currentClass);
+                    });
         }
 
-        Set<String> classes = new LinkedHashSet<>();
+        // additional classes
+        if (classes != null) {
+            set.addAll(Arrays.asList(classes));
+        }
 
-        // discover all classes annotated with @Configurer
-        List<AnnotationInstance> annotations = 
index.getAnnotations(CONFIGURER);
-        annotations.stream()
-                .filter(annotation -> annotation.target().kind() == 
AnnotationTarget.Kind.CLASS)
-                .filter(annotation -> 
annotation.target().asClass().nestingType() == ClassInfo.NestingType.TOP_LEVEL)
-                .filter(annotation -> asBooleanDefaultTrue(annotation, 
"generateConfigurer"))
-                .forEach(annotation -> {
-                    String currentClass = 
annotation.target().asClass().name().toString();
-                    classes.add(currentClass);
-                });
+        if (getLog().isDebugEnabled()) {
+            getLog().debug("Generating configuers for the following classes: " 
+ set);
+        }
 
-        for (String fqn : classes) {
+        for (String fqn : set) {
             try {
                 List<Option> options = processClass(fqn);
                 generateConfigurer(fqn, options);
@@ -141,8 +166,19 @@ public class GenerateConfigurerMojo extends 
AbstractGeneratorMojo {
             setter &= Modifier.isPublic(m.getModifiers()) && 
m.getParameterCount() == 1;
             setter &= filterSetter(m);
             if (setter) {
+                String getter = "get" + 
Character.toUpperCase(m.getName().charAt(3)) + m.getName().substring(4);
+                Class type = m.getParameterTypes()[0];
+                if (boolean.class == type || Boolean.class == type) {
+                    try {
+                        String isGetter = "is" + getter.substring(3);
+                        clazz.getMethod(isGetter, null);
+                        getter = isGetter;
+                    } catch (Exception e) {
+                        // ignore as its then assumed to be get
+                    }
+                }
                 String t = Character.toUpperCase(m.getName().charAt(3)) + 
m.getName().substring(3 + 1);
-                answer.add(new Option(t, m.getParameterTypes()[0]));
+                answer.add(new Option(t, type, getter));
             }
         });
 
@@ -171,7 +207,6 @@ public class GenerateConfigurerMojo extends 
AbstractGeneratorMojo {
         String psn = 
"org.apache.camel.support.component.PropertyConfigurerSupport";
 
         StringWriter sw = new StringWriter();
-//        PropertyMainConfigurerGenerator.generatePropertyConfigurer(pn, cn, 
en, pfqn, psn, options, sw);
         PropertyConfigurerGenerator.generatePropertyConfigurer(pn, cn, en, 
pfqn, psn,
                 false, false, options, sw);
 
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 a02d964..81f3e52 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
@@ -121,7 +121,7 @@ public final class PropertyConfigurerGenerator {
                 for (BaseOptionModel option : options) {
                     String getOrSet = option.getName();
                     getOrSet = Character.toUpperCase(getOrSet.charAt(0)) + 
getOrSet.substring(1);
-                    String getterLambda = getterLambda(getOrSet, 
option.getJavaType(), option.getConfigurationField(), component);
+                    String getterLambda = getterLambda(getOrSet, 
option.getJavaType(), option.getGetterMethod(), option.getConfigurationField(), 
component);
                     if 
(!option.getName().toLowerCase().equals(option.getName())) {
                         w.write(String.format("        case \"%s\":\n", 
option.getName().toLowerCase()));
                     }
@@ -166,8 +166,14 @@ public final class PropertyConfigurerGenerator {
         return String.format("%s(property(camelContext, %s.class, value))", 
getOrSet, type);
     }
 
-    private static String getterLambda(String getOrSet, String type, String 
configurationField, boolean component) {
-        String prefix = "boolean".equals(type) ? "is" : "get";
+    private static String getterLambda(String getOrSet, String type, String 
getterMethod, String configurationField, boolean component) {
+        String prefix;
+        if (getterMethod == null || getterMethod.isEmpty()) {
+            prefix = "boolean".equals(type) ? "is" : "get";
+        } else {
+            prefix = "";
+            getOrSet = getterMethod;
+        }
         if (configurationField != null) {
             if (component) {
                 getOrSet = "getOrCreateConfiguration(target)." + prefix + 
getOrSet;

Reply via email to