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; } }