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