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

[camel] branch master updated: CAMEL-15887: add support for java.util.Properties

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ab6eef0  CAMEL-15887: add support for java.util.Properties
ab6eef0 is described below

commit ab6eef03992e3185816653c1aacd28cda65fa0c0
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Tue Nov 24 13:27:15 2020 +0100

    CAMEL-15887: add support for java.util.Properties
---
 .../PropertyBindingSupportPropertiesTest.java      | 119 +++++++++++++++++++++
 .../camel/support/PropertyBindingSupport.java      |  23 ++--
 2 files changed, 136 insertions(+), 6 deletions(-)

diff --git a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportPropertiesTest.java b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportPropertiesTest.java
new file mode 100644
index 0000000..8f1f0c9
--- /dev/null
+++ b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportPropertiesTest.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.support;
+
+import java.util.Locale;
+import java.util.Properties;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.spi.PropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Unit test for PropertyBindingSupport
+ */
+public class PropertyBindingSupportPropertiesTest extends ContextTestSupport {
+    @Test
+    public void testProperties() {
+        Bar bar = new Bar();
+
+        PropertyBindingSupport.build()
+                .withCamelContext(context)
+                .withReflection(true)
+                .withTarget(bar)
+                .withProperty("works[acme]", "company1")
+                .withProperty("works[burger]", "company2")
+                .bind();
+
+        assertEquals("company1", bar.getWorks().getProperty("acme"));
+        assertEquals("company2", bar.getWorks().getProperty("burger"));
+    }
+
+    @Test
+    public void testPropertiesWithConfigurer() {
+        Bar bar = new Bar();
+
+        PropertyBindingSupport.build()
+                .withCamelContext(context)
+                .withReflection(false)
+                .withConfigurer(new BarConfigurer())
+                .withTarget(bar)
+                .withProperty("works[acme]", "company1")
+                .withProperty("works[burger]", "company2")
+                .bind();
+
+        assertEquals("company1", bar.getWorks().getProperty("acme"));
+        assertEquals("company2", bar.getWorks().getProperty("burger"));
+    }
+
+    public static class Bar {
+        private Properties works;
+
+        public Properties getWorks() {
+            return works;
+        }
+
+        public void setWorks(Properties works) {
+            this.works = works;
+        }
+    }
+
+    private static class BarConfigurer implements PropertyConfigurer, PropertyConfigurerGetter {
+        @Override
+        public boolean configure(CamelContext camelContext, Object target, String name, Object value, boolean ignoreCase) {
+            if (ignoreCase) {
+                name = name.toLowerCase(Locale.ENGLISH);
+            }
+            if (target instanceof PropertyBindingSupportPropertiesTest.Bar) {
+                PropertyBindingSupportPropertiesTest.Bar bar = (PropertyBindingSupportPropertiesTest.Bar) target;
+                if ("works".equals(name)) {
+                    bar.setWorks((Properties) value);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public Class<?> getOptionType(String name, boolean ignoreCase) {
+            if ("works".equals(name)) {
+                return Properties.class;
+            }
+
+            return null;
+        }
+
+        @Override
+        public Object getOptionValue(Object target, String name, boolean ignoreCase) {
+            if (ignoreCase) {
+                name = name.toLowerCase(Locale.ENGLISH);
+            }
+            if (target instanceof PropertyBindingSupportPropertiesTest.Bar) {
+                PropertyBindingSupportPropertiesTest.Bar bar = (PropertyBindingSupportPropertiesTest.Bar) target;
+                if ("works".equals(name)) {
+                    return bar.getWorks();
+                }
+            }
+            return null;
+        }
+    }
+
+}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index 0755855..735cf47 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -30,6 +30,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Properties;
 import java.util.Set;
 import java.util.TreeMap;
 
@@ -331,8 +332,10 @@ public final class PropertyBindingSupport {
         if (method != null) {
             Class<?> parameterType = method.getParameterTypes()[0];
             Object obj = null;
-            // special for map/list/array
-            if (Map.class.isAssignableFrom(parameterType)) {
+            // special for properties/map/list/array
+            if (Properties.class.isAssignableFrom(parameterType)) {
+                obj = new Properties();
+            } else if (Map.class.isAssignableFrom(parameterType)) {
                 obj = new LinkedHashMap<>();
             } else if (Collection.class.isAssignableFrom(parameterType)) {
                 obj = new ArrayList<>();
@@ -368,8 +371,10 @@ public final class PropertyBindingSupport {
         }
         if (parameterType != null) {
             Object obj = null;
-            // special for map/list/array
-            if (Map.class.isAssignableFrom(parameterType)) {
+            // special for properties/map/list/array
+            if (Properties.class.isAssignableFrom(parameterType)) {
+                obj = new Properties();
+            } else if (Map.class.isAssignableFrom(parameterType)) {
                 obj = new LinkedHashMap<>();
             } else if (Collection.class.isAssignableFrom(parameterType)) {
                 obj = new ArrayList<>();
@@ -483,7 +488,9 @@ public final class PropertyBindingSupport {
             if (getter != null) {
                 // what type does it have
                 Class<?> returnType = getter.getReturnType();
-                if (Map.class.isAssignableFrom(returnType)) {
+                if (Properties.class.isAssignableFrom(returnType)) {
+                    obj = new Properties();
+                } else if (Map.class.isAssignableFrom(returnType)) {
                     obj = new LinkedHashMap<>();
                 } else if (Collection.class.isAssignableFrom(returnType)) {
                     obj = new ArrayList<>();
@@ -514,6 +521,7 @@ public final class PropertyBindingSupport {
         }
 
         if (obj instanceof Map) {
+            // this supports both Map and Properties
             Map map = (Map) obj;
             map.put(lookupKey, value);
             return true;
@@ -593,7 +601,9 @@ public final class PropertyBindingSupport {
             if (returnType == null) {
                 return false;
             }
-            if (Map.class.isAssignableFrom(returnType)) {
+            if (Properties.class.isAssignableFrom(returnType)) {
+                obj = new Properties();
+            } else if (Map.class.isAssignableFrom(returnType)) {
                 obj = new LinkedHashMap<>();
             } else if (Collection.class.isAssignableFrom(returnType)) {
                 obj = new ArrayList<>();
@@ -619,6 +629,7 @@ public final class PropertyBindingSupport {
         }
 
         if (obj instanceof Map) {
+            // this supports both Map and Properties
             Map map = (Map) obj;
             map.put(lookupKey, value);
             return true;