You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/02/12 02:45:24 UTC

[camel] 14/18: Remove reflection calls used for merging rest configurations

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 <gn...@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() {