This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 0fac7a1c168930a347278c90ca186815ac13b914
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Tue Feb 11 21:43:01 2020 +0100

    Remove reflection calls used for merging rest configurations
---
 .../apache/camel/component/rest/RestComponent.java | 76 +++++++++++++---------
 1 file changed, 44 insertions(+), 32 deletions(-)

diff --git 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
index 1e824d6..36df25f 100644
--- 
a/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
+++ 
b/components/camel-rest/src/main/java/org/apache/camel/component/rest/RestComponent.java
@@ -19,19 +19,16 @@ package org.apache.camel.component.rest;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.function.Consumer;
-import java.util.function.Supplier;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.component.extension.ComponentVerifierExtension;
-import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestConfiguration;
+import org.apache.camel.spi.RestConfiguration.RestBindingMode;
+import org.apache.camel.spi.RestConfiguration.RestHostNameResolver;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultComponent;
-import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
@@ -237,43 +234,58 @@ public class RestComponent extends DefaultComponent {
             return conf;
         }
         if (from != null) {
-            BeanIntrospection beanIntrospection = 
camelContext.adapt(ExtendedCamelContext.class).getBeanIntrospection();
-            Map<String, Object> map = new HashMap<>();
-            beanIntrospection.getProperties(from, map, null, false);
-
-            // Remove properties as they need to be manually managed
-            map.entrySet().removeIf(entry -> entry.getValue() instanceof Map);
-
-            // Copy common options, will override those in conf
-            PropertyBindingSupport.bindProperties(getCamelContext(), conf, 
map);
-
             // Merge properties
-            mergeProperties(conf::getComponentProperties, 
from::getComponentProperties, conf::setComponentProperties);
-            mergeProperties(conf::getEndpointProperties, 
from::getEndpointProperties, conf::setEndpointProperties);
-            mergeProperties(conf::getConsumerProperties, 
from::getConsumerProperties, conf::setConsumerProperties);
-            mergeProperties(conf::getDataFormatProperties, 
from::getDataFormatProperties, conf::setDataFormatProperties);
-            mergeProperties(conf::getApiProperties, from::getApiProperties, 
conf::setApiProperties);
-            mergeProperties(conf::getCorsHeaders, from::getCorsHeaders, 
conf::setCorsHeaders);
+            conf.setComponent(or(conf.getComponent(), from.getComponent()));
+            conf.setApiComponent(or(conf.getApiComponent(), 
from.getApiComponent()));
+            conf.setProducerComponent(or(conf.getProducerComponent(), 
from.getProducerComponent()));
+            conf.setProducerApiDoc(or(conf.getProducerApiDoc(), 
from.getProducerApiDoc()));
+            conf.setScheme(or(conf.getScheme(), from.getScheme()));
+            conf.setHost(or(conf.getHost(), from.getHost()));
+            conf.setUseXForwardHeaders(or(conf.isUseXForwardHeaders(), 
from.isUseXForwardHeaders()));
+            conf.setContextPath(or(conf.getContextPath(), 
from.getContextPath()));
+            conf.setApiContextPath(or(conf.getApiContextPath(), 
from.getApiContextPath()));
+            conf.setApiContextRouteId(or(conf.getApiContextRouteId(), 
from.getApiContextRouteId()));
+            conf.setApiContextIdPattern(or(conf.getApiContextIdPattern(), 
from.getApiContextIdPattern()));
+            conf.setApiContextListing(or(conf.isApiContextListing(), 
from.isApiContextListing()));
+            conf.setApiVendorExtension(or(conf.isApiVendorExtension(), 
from.isApiVendorExtension()));
+            conf.setHostNameResolver(or(conf.getHostNameResolver(), 
from.getHostNameResolver(), RestHostNameResolver.allLocalIp));
+            conf.setBindingMode(or(conf.getBindingMode(), 
from.getBindingMode(), RestBindingMode.off));
+            conf.setSkipBindingOnErrorCode(or(conf.isSkipBindingOnErrorCode(), 
from.isSkipBindingOnErrorCode()));
+            
conf.setClientRequestValidation(or(conf.isClientRequestValidation(), 
from.isClientRequestValidation()));
+            conf.setEnableCORS(or(conf.isEnableCORS(), from.isEnableCORS()));
+            conf.setJsonDataFormat(or(conf.getJsonDataFormat(), 
from.getJsonDataFormat()));
+            conf.setXmlDataFormat(or(conf.getXmlDataFormat(), 
from.getXmlDataFormat()));
+            
conf.setComponentProperties(mergeProperties(conf.getComponentProperties(), 
from.getComponentProperties()));
+            
conf.setEndpointProperties(mergeProperties(conf.getEndpointProperties(), 
from.getEndpointProperties()));
+            
conf.setConsumerProperties(mergeProperties(conf.getConsumerProperties(), 
from.getConsumerProperties()));
+            
conf.setDataFormatProperties(mergeProperties(conf.getDataFormatProperties(), 
from.getDataFormatProperties()));
+            conf.setApiProperties(mergeProperties(conf.getApiProperties(), 
from.getApiProperties()));
+            conf.setCorsHeaders(mergeProperties(conf.getCorsHeaders(), 
from.getCorsHeaders()));
         }
 
         return conf;
     }
 
-    private <T> void mergeProperties(Supplier<Map<String, T>> base, 
Supplier<Map<String, T>> addons, Consumer<Map<String, T>> consumer) {
-        Map<String, T> baseMap = base.get();
-        Map<String, T> addonsMap = addons.get();
+    private <T> T or(T t1, T t2) {
+        return t2 != null ? t2 : t1;
+    }
 
-        if (baseMap != null || addonsMap != null) {
-            HashMap<String, T> result = new HashMap<>();
-            if (baseMap != null) {
-                result.putAll(baseMap);
+    private <T> T or(T t1, T t2, T def) {
+        return t2 != null && t2 != def ? t2 : t1;
+    }
+
+    private <T> Map<String, T> mergeProperties(Map<String, T> base, 
Map<String, T> addons) {
+        if (base != null || addons != null) {
+            Map<String, T> result = new HashMap<>();
+            if (base != null) {
+                result.putAll(base);
             }
-            if (addonsMap != null) {
-                result.putAll(addonsMap);
+            if (addons != null) {
+                result.putAll(addons);
             }
-
-            consumer.accept(result);
+            return result;
         }
+        return base;
     }
 
     public ComponentVerifierExtension getVerifier() {

Reply via email to