You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by va...@apache.org on 2020/10/17 08:48:43 UTC

[camel-kafka-connector] branch master updated: Reneamed a method to better understanding, added a test and javadoc as well.

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

valdar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git


The following commit(s) were added to refs/heads/master by this push:
     new 0361f55  Reneamed a method to better understanding, added a test and javadoc as well.
0361f55 is described below

commit 0361f55c61e2e73ac1ad6a05b0871b054c39b50d
Author: Andrea Tarocchi <an...@gmail.com>
AuthorDate: Sat Oct 17 09:35:12 2020 +0200

    Reneamed a method to better understanding, added a test and javadoc as well.
---
 .../apache/camel/kafkaconnector/CamelSinkTask.java |  2 +-
 .../camel/kafkaconnector/CamelSourceTask.java      |  2 +-
 .../camel/kafkaconnector/utils/TaskHelper.java     | 46 +++++++++++++++++++++-
 .../camel/kafkaconnector/utils/TaskHelperTest.java | 26 ++++++++++--
 4 files changed, 69 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java
index e64ee16..f410c50 100644
--- a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java
+++ b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSinkTask.java
@@ -68,7 +68,7 @@ public class CamelSinkTask extends SinkTask {
     public void start(Map<String, String> props) {
         try {
             LOG.info("Starting CamelSinkTask connector task");
-            Map<String, String> actualProps = TaskHelper.mergeProperties(getDefaultConfig(), props);
+            Map<String, String> actualProps = TaskHelper.combineDefaultAndLoadedProperties(getDefaultConfig(), props);
             CamelSinkConnectorConfig config = getCamelSinkConnectorConfig(actualProps);
 
             try {
diff --git a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java
index 247edd3..9845013 100644
--- a/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java
+++ b/core/src/main/java/org/apache/camel/kafkaconnector/CamelSourceTask.java
@@ -69,7 +69,7 @@ public class CamelSourceTask extends SourceTask {
     public void start(Map<String, String> props) {
         try {
             LOG.info("Starting CamelSourceTask connector task");
-            Map<String, String> actualProps = TaskHelper.mergeProperties(getDefaultConfig(), props);
+            Map<String, String> actualProps = TaskHelper.combineDefaultAndLoadedProperties(getDefaultConfig(), props);
             CamelSourceConnectorConfig config = getCamelSourceConnectorConfig(actualProps);
 
             try {
diff --git a/core/src/main/java/org/apache/camel/kafkaconnector/utils/TaskHelper.java b/core/src/main/java/org/apache/camel/kafkaconnector/utils/TaskHelper.java
index e7f8c83..87f545e 100644
--- a/core/src/main/java/org/apache/camel/kafkaconnector/utils/TaskHelper.java
+++ b/core/src/main/java/org/apache/camel/kafkaconnector/utils/TaskHelper.java
@@ -35,6 +35,18 @@ public final class TaskHelper {
     private TaskHelper() {
     }
 
+    /**
+     * Try to build a url of a Camel {@link org.apache.camel.Endpoint}.
+     *
+     * @param rcc RuntimeCamelCatalog used to build the url.
+     * @param props properties used to build the url in the form of a key -> value {@link Map}.
+     * @param componentSchema the schema name of the Camel {@link org.apache.camel.Component} used to build the Camel {@link org.apache.camel.Endpoint} url.
+     * @param endpointPropertiesPrefix prefix of all the Camel {@link org.apache.camel.Endpoint} properties.
+     * @param pathPropertiesPrefix prefix of all the properties used in the Camel {@link org.apache.camel.Endpoint} path.
+     *
+     * @return A String representing the built url.
+     * @throws {@link URISyntaxException} in case of uri build failure.
+     */
     public static String buildUrl(RuntimeCamelCatalog rcc, Map<String, String> props, String componentSchema, String endpointPropertiesPrefix, String pathPropertiesPrefix) throws URISyntaxException {
         ComponentModel cm = null;
         if (componentSchema != null) {
@@ -65,7 +77,39 @@ public final class TaskHelper {
         return rcc.asEndpointUri(componentSchema, filteredProps, false);
     }
 
-    public static Map<String, String> mergeProperties(Map<String, String> defaultProps, Map<String, String> loadedProps) {
+    /**
+     * Combines default properties with loaded properties with the following logic:
+     * 1) loaded properties overwrite default properties.
+     * 2) default properties that starts with a loaded property are removed.
+     *
+     * Example:
+     * default properties:
+     *   defaultProperty=defaultValue
+     *   overwrittenDefaultProperty=defaultValue
+     *   camel.component.x.objectProperty=#class:my.package.MyClass
+     *   camel.component.x.objectProperty.removedDefaultField=defaultValue
+     *   camel.component.x.defaultProperty=defaultValue
+     *
+     * loaded properties:
+     *   overwrittenDefaultProperty=loadedValue
+     *   camel.component.x.objectProperty=#class:my.package.MyOtherClass
+     *   camel.component.x.objectProperty.loadedField=loadedValue
+     *   camel.component.x.loadedProperty=loadedValue
+     *
+     * will result in:
+     *   defaultProperty=defaultValue
+     *   overwrittenDefaultProperty=loadedValue
+     *   camel.component.x.objectProperty=#class:my.package.MyOtherClass
+     *   camel.component.x.objectProperty.anotherField=loadedValue
+     *   camel.component.x.loadedProperty=loadedValue
+     *   camel.component.x.defaultProperty=defaultValue
+     *
+     * See org.apache.camel.kafkaconnector.utils.TaskHelperTests for some examples.
+     *
+     * @param defaultProps RuntimeCamelCatalog used to build the url.
+     * @param loadedProps properties used to build the url in the form of a key -> value {@link Map}.
+     */
+    public static Map<String, String> combineDefaultAndLoadedProperties(Map<String, String> defaultProps, Map<String, String> loadedProps) {
         if (loadedProps == null && defaultProps == null) {
             return Collections.emptyMap();
         } else if (loadedProps == null) {
diff --git a/core/src/test/java/org/apache/camel/kafkaconnector/utils/TaskHelperTest.java b/core/src/test/java/org/apache/camel/kafkaconnector/utils/TaskHelperTest.java
index 26ca86e..1f53322 100644
--- a/core/src/test/java/org/apache/camel/kafkaconnector/utils/TaskHelperTest.java
+++ b/core/src/test/java/org/apache/camel/kafkaconnector/utils/TaskHelperTest.java
@@ -43,7 +43,7 @@ public class TaskHelperTest {
 
     @Test
     public void testMergePropertiesNull() {
-        Map<String, String> result = TaskHelper.mergeProperties(null, null);
+        Map<String, String> result = TaskHelper.combineDefaultAndLoadedProperties(null, null);
 
         assertEquals(Collections.EMPTY_MAP, result);
     }
@@ -52,7 +52,7 @@ public class TaskHelperTest {
     public void testMergePropertiesDefaultAreAdded() {
         Map<String, String> defaults = mapOf("property", "defaultValue");
         Map<String, String> loaded = mapOf("anotherProperty", "loadedValue");
-        Map<String, String> result = TaskHelper.mergeProperties(defaults, loaded);
+        Map<String, String> result = TaskHelper.combineDefaultAndLoadedProperties(defaults, loaded);
 
         assertTrue(result.containsKey("property"));
         assertTrue(result.containsKey("anotherProperty"));
@@ -64,7 +64,7 @@ public class TaskHelperTest {
     public void testMergePropertiesLoadedHavePrecedence() {
         Map<String, String> defaults = mapOf("property", "defaultValue");
         Map<String, String> loaded = mapOf("property", "loadedValue");
-        Map<String, String> result = TaskHelper.mergeProperties(defaults, loaded);
+        Map<String, String> result = TaskHelper.combineDefaultAndLoadedProperties(defaults, loaded);
 
         assertTrue(result.containsKey("property"));
         assertEquals("loadedValue", result.get("property"));
@@ -84,7 +84,7 @@ public class TaskHelperTest {
             "camel.component.x.normalProperty", "loadedValue"
         );
 
-        Map<String, String> result = TaskHelper.mergeProperties(defaults, loaded);
+        Map<String, String> result = TaskHelper.combineDefaultAndLoadedProperties(defaults, loaded);
 
         assertEquals("defaultValue", result.get("property"));
         assertEquals("#class:my.package.MyOtherClass", result.get("camel.component.x.objectProperty"));
@@ -94,6 +94,24 @@ public class TaskHelperTest {
     }
 
     @Test
+    public void testMergePropertiesLoadedAndDefaultMergesIfNoPrefixFiltering() {
+        Map<String, String> defaults = mapOf(
+                "camel.component.x.objectProperty", "#class:my.package.MyClass",
+                "camel.component.x.objectProperty.field", "defaultValue"
+        );
+
+        Map<String, String> loaded = mapOf(
+                "camel.component.x.objectProperty.anotherField", "loadedValue"
+        );
+
+        Map<String, String> result = TaskHelper.combineDefaultAndLoadedProperties(defaults, loaded);
+
+        assertEquals("#class:my.package.MyClass", result.get("camel.component.x.objectProperty"));
+        assertEquals("defaultValue", result.get("camel.component.x.objectProperty.field"));
+        assertEquals("loadedValue", result.get("camel.component.x.objectProperty.anotherField"));
+    }
+
+    @Test
     public void testBuildUrlWithRuntimeCatalog() throws URISyntaxException {
         DefaultCamelContext dcc = new DefaultCamelContext();
         RuntimeCamelCatalog rcc = dcc.adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog();