DELTASPIKE-1335 DELTASPIKE-1277 fix reportChangeListener

Also implement the config change callback in the new 
ConfigurableTestConfigSource


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/0ec1c1e5
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/0ec1c1e5
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/0ec1c1e5

Branch: refs/heads/master
Commit: 0ec1c1e5bca85141ddbe164d50743c13b572e73b
Parents: a629677
Author: Mark Struberg <strub...@apache.org>
Authored: Thu Apr 5 10:35:52 2018 +0200
Committer: Mark Struberg <strub...@apache.org>
Committed: Thu Apr 5 10:35:52 2018 +0200

----------------------------------------------------------------------
 .../deltaspike/core/impl/config/ConfigImpl.java | 13 ++++++++++--
 .../core/api/config/ConfigTransactionTest.java  | 21 +++++++++++++-------
 .../config/ConfigurableTestConfigSource.java    | 17 ++++++++++++++--
 3 files changed, 40 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0ec1c1e5/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java
 
b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java
index 9784c23..0296475 100644
--- 
a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java
+++ 
b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigImpl.java
@@ -157,17 +157,26 @@ public class ConfigImpl implements Config
     @Override
     public void addConfigSources(List<ConfigSource> configSourcesToAdd)
     {
+        if (configSourcesToAdd == null || configSourcesToAdd.isEmpty())
+        {
+            return;
+        }
+
         List<ConfigSource> allConfigSources = new ArrayList<>();
+        // start with all existing ConfigSources
         if (this.configSources != null)
         {
             for (ConfigSource configSource : this.configSources)
             {
-                configSource.setOnAttributeChange(this::onAttributeChange);
                 allConfigSources.add(configSource);
             }
         }
 
-        allConfigSources.addAll(configSourcesToAdd);
+        for (ConfigSource configSourceToAdd : configSourcesToAdd)
+        {
+            configSourceToAdd.setOnAttributeChange(this::onAttributeChange);
+            allConfigSources.add(configSourceToAdd);
+        }
 
         this.configSources = sortDescending(allConfigSources);
     }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0ec1c1e5/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigTransactionTest.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigTransactionTest.java
 
b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigTransactionTest.java
index e448ca6..57c7468 100644
--- 
a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigTransactionTest.java
+++ 
b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigTransactionTest.java
@@ -18,6 +18,9 @@
  */
 package org.apache.deltaspike.test.core.api.config;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.deltaspike.core.api.config.Config;
 import org.apache.deltaspike.core.api.config.ConfigResolver;
 import org.apache.deltaspike.core.api.config.ConfigTransaction;
@@ -41,14 +44,16 @@ public class ConfigTransactionTest
     @Test
     public void testConfigTx()
     {
+        Config cfg = ConfigResolver.getConfig();
         ConfigurableTestConfigSource configSource = 
ConfigurableTestConfigSource.instance();
         try
         {
-            configSource.set(HOST_KEY, "host1");
-            configSource.set(PORT1_KEY, "1");
-            configSource.set(PORT2_KEY, "1");
+            Map<String, String> newVals = new HashMap<>();
+            newVals.put(HOST_KEY, "host1");
+            newVals.put(PORT1_KEY, "1");
+            newVals.put(PORT2_KEY, "1");
+            configSource.setValues(newVals);
 
-            Config cfg = ConfigResolver.getConfig();
             hostCfg = cfg.resolve(HOST_KEY);
             port1Cfg = cfg.resolve(PORT1_KEY).as(Integer.class);
             port2Cfg = cfg.resolve(PORT2_KEY).as(Integer.class);
@@ -65,9 +70,11 @@ public class ConfigTransactionTest
             assertEquals(Integer.valueOf(1), 
configTransaction.getValue(port2Cfg));
 
             // and those values don't change, even if we modify the underlying 
ConfigSource!
-            configSource.set(HOST_KEY, "host2");
-            configSource.set(PORT1_KEY, "2");
-            configSource.set(PORT2_KEY, "2");
+            newVals.clear();
+            newVals.put(HOST_KEY, "host2");
+            newVals.put(PORT1_KEY, "2");
+            newVals.put(PORT2_KEY, "2");
+            configSource.setValues(newVals);
 
             assertEquals("host1", configTransaction.getValue(hostCfg));
             assertEquals(Integer.valueOf(1), 
configTransaction.getValue(port1Cfg));

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0ec1c1e5/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigurableTestConfigSource.java
----------------------------------------------------------------------
diff --git 
a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigurableTestConfigSource.java
 
b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigurableTestConfigSource.java
index 2c3a9db..c605dc9 100644
--- 
a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigurableTestConfigSource.java
+++ 
b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/ConfigurableTestConfigSource.java
@@ -23,7 +23,9 @@ import org.apache.deltaspike.core.spi.config.ConfigSource;
 
 import java.util.Arrays;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Consumer;
 
 /**
  * A ConfigSource which is backed by a ThreadLocal.
@@ -35,6 +37,8 @@ public class ConfigurableTestConfigSource implements 
ConfigSource
 {
     private static ThreadLocal<Map<String, String>> props = new 
ThreadLocal<>();
 
+    private Consumer<Set<String>> reportAttributeChange;
+
     @Override
     public int getOrdinal()
     {
@@ -84,8 +88,17 @@ public class ConfigurableTestConfigSource implements 
ConfigSource
         props.remove();
     }
 
-    public void set(String key, String value)
+    public void setValues(Map<String, String> values)
+    {
+        getProperties().putAll(values);
+
+        // now notify our Config that some values got changed
+        reportAttributeChange.accept(values.keySet());
+    }
+
+    @Override
+    public void setOnAttributeChange(Consumer<Set<String>> 
reportAttributeChange)
     {
-        getProperties().put(key, value);
+        this.reportAttributeChange = reportAttributeChange;
     }
 }

Reply via email to