You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2022/08/09 09:47:12 UTC
[felix-dev] branch master updated: FELIX-6560 : Interpolation of embedded arrays does not work
This is an automated email from the ASF dual-hosted git repository.
cziegeler 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 6603d69977 FELIX-6560 : Interpolation of embedded arrays does not work
6603d69977 is described below
commit 6603d69977f4cea8b9b9dd2faf5d320906b43368
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Tue Aug 9 11:47:05 2022 +0200
FELIX-6560 : Interpolation of embedded arrays does not work
---
.../InterpolationConfigurationPlugin.java | 22 +++++++++++++++++-----
.../InterpolationConfigurationPluginTest.java | 14 ++++++++++++++
.../plugin/interpolation/InterpolatorTest.java | 1 -
3 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
index f2e7b67372..30435f407a 100644
--- a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
+++ b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
@@ -20,6 +20,7 @@ import static java.util.stream.Collectors.toList;
import java.io.File;
import java.io.IOException;
+import java.lang.reflect.Array;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.ArrayList;
@@ -136,19 +137,30 @@ class InterpolationConfigurationPlugin implements ConfigurationPlugin {
}
} else if (val instanceof String[]) {
String[] array = (String[]) val;
- String[] newArray = null;
+ List<String> newArray = null;
for (int i = 0; i < array.length; i++) {
Object newVal = getNewValue(key, array[i], pid, properties);
if (newVal != null && !newVal.equals(array[i])) {
if (newArray == null) {
- newArray = new String[array.length];
- System.arraycopy(array, 0, newArray, 0, array.length);
+ newArray = new ArrayList<>();
+ for(int m=0;m<i;m++) {
+ newArray.add(array[m]);
+ }
}
- newArray[i] = newVal.toString();
+ if ( newVal.getClass().isArray() ) {
+ for(int m=0;m<Array.getLength(newVal);m++ ) {
+ newArray.add(Array.get(newVal, m).toString());
+ }
+ } else {
+ newArray.add(newVal.toString());
+ }
+ } else if ( newArray != null ) {
+ newArray.add(array[i]);
}
}
if (newArray != null) {
- properties.put(key, newArray);
+ final String[] update = newArray.toArray(new String[newArray.size()]);
+ properties.put(key, update);
getLog().info("Replaced value of configuration property '{}' for PID {}", key, pid);
}
}
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 4fdeab038d..1e996647c3 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
@@ -306,4 +306,18 @@ public class InterpolationConfigurationPluginTest {
obj = plugin.convertType("String", "a,b", ",");
assertEquals("a,b", obj);
}
+
+ @Test
+ public void testModifyConfigurationWithArrayInArray() throws Exception {
+ BundleContext bc = Mockito.mock(BundleContext.class);
+ Mockito.when(bc.getProperty("foo")).thenReturn("2000,3000");
+ InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc::getProperty, null, null);
+
+ Dictionary<String, Object> dict = new Hashtable<>();
+ dict.put("array", new String[] {"1000", "$[prop:foo;type=String[];delimiter=,]", "4000"});
+ plugin.modifyConfiguration(null, dict);
+
+ assertEquals(1, dict.size());
+ assertArrayEquals(new String[] {"1000", "2000", "3000", "4000"}, (String[])dict.get("array"));
+ }
}
diff --git a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
index 74c892c973..05132a9167 100755
--- a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
+++ b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
@@ -18,7 +18,6 @@ package org.apache.felix.configadmin.plugin.interpolation;
import static org.junit.Assert.assertEquals;
-import java.util.HashMap;
import java.util.Map;
import org.apache.felix.configadmin.plugin.interpolation.Interpolator.Provider;