You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2021/02/16 14:03:47 UTC
[felix-dev] branch master updated: FELIX-6384 support empty
directive values
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 <kw...@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