This is an automated email from the ASF dual-hosted git repository. davidb pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/master by this push: new 0e8c8da FELIX-6384 support empty directive values new 0b07b35 Merge pull request #69 from kwin/feature/support-empty-default-values 0e8c8da is described below commit 0e8c8da91122ed8b0bae0d0c38818d77a097dbc5 Author: Konrad Windszus <k...@apache.org> AuthorDate: Tue Feb 2 13:25:46 2021 +0100 FELIX-6384 support empty directive values In addition support "=" within directive values --- configadmin-plugins/interpolation/README.md | 3 +++ .../felix/configadmin/plugin/interpolation/Interpolator.java | 7 ++++--- .../interpolation/InterpolationConfigurationPluginTest.java | 11 ++++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/configadmin-plugins/interpolation/README.md b/configadmin-plugins/interpolation/README.md index d1a7f10..868ea0f 100644 --- a/configadmin-plugins/interpolation/README.md +++ b/configadmin-plugins/interpolation/README.md @@ -61,10 +61,13 @@ It is possible to specify a default value as part of the placeholder, for exampl ``` "port" : "$[env:PORT;default=8080]" +"label" : "$[env:LABEL;default=]" ``` Without a default, the placeholder is left in the value if no value can be found. With a default, the default is used instead. +The default value may contain all alphanumeric and punctuation characters and space except for a `;`. It may even be left out which leads to replacing the placeholder with the empty string. + ## Type Support A placeholder can contain additional information like the type the value should be converted to. diff --git a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java index cb98fd6..ceddb92 100755 --- a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java +++ b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java @@ -114,9 +114,10 @@ public class Interpolator { directives = new HashMap<>(); for (String dir : postfix.substring(dirPos + 1).split(";")) { - String[] kv = dir.split("="); - if (kv.length == 2) { - directives.put(kv[0], kv[1]); + String[] kv = dir.split("=", 2); + if (kv.length > 0) { + final String directiveValue = kv.length == 2 ? kv[1] : ""; + directives.put(kv[0], directiveValue); } } } diff --git a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java index bdbf173..7a38573 100644 --- a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java +++ b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java @@ -138,10 +138,19 @@ public class InterpolationConfigurationPluginTest { Dictionary<String, Object> dict = new Hashtable<>(); dict.put("defaulted", "$[env:notset;default=foo]"); - + dict.put("defaulted2", "$[env:notset;default=]"); + dict.put("defaulted3", "$[env:notset;default=foo=bar]"); + dict.put("defaulted4", "$[env:notset;default=foo;=bar]"); + dict.put("defaulted5", "$[env:notset;default= ]"); + dict.put("defaulted6", "$[env:notset;default"); plugin.modifyConfiguration(null, dict); assertEquals("foo", dict.get("defaulted")); + assertEquals("", dict.get("defaulted2")); + assertEquals("foo=bar", dict.get("defaulted3")); + assertEquals("foo", dict.get("defaulted4")); // semicolon is not supported in values + assertEquals(" ", dict.get("defaulted5")); + assertEquals("$[env:notset;default", dict.get("defaulted6")); } @Test