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/sling-org-apache-sling-feature.git
The following commit(s) were added to refs/heads/master by this push:
new 9958526 SLING-9248 : Feature model variables are not resolved for
array elements
9958526 is described below
commit 9958526ed2b81f0a7fe7b5156903f6d86e936d16
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Wed Jul 1 09:14:16 2020 +0200
SLING-9248 : Feature model variables are not resolved for array elements
---
.../apache/sling/feature/builder/FeatureBuilder.java | 20 ++++++++++++--------
.../sling/feature/builder/FeatureBuilderTest.java | 15 +++++++++++++++
2 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
b/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
index d84481e..56012d0 100644
--- a/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
+++ b/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
@@ -231,12 +231,20 @@ public abstract class FeatureBuilder {
final Set<String> keys = new
HashSet<>(Collections.list(cfg.getProperties().keys()));
for(final String key : keys) {
final Object value = cfg.getProperties().get(key);
- cfg.getProperties().put(key, replaceVariables(value,
additionalVariables, feature));
+ if ( value instanceof String ) {
+ cfg.getProperties().put(key,
replaceVariables((String)value, additionalVariables, feature));
+ } else if ( value instanceof String[]) {
+ final String[] values = (String[]) value;
+ for(int i=0;i<values.length;i++) {
+ values[i] = replaceVariables(values[i],
additionalVariables, feature);
+ }
+ cfg.getProperties().put(key, values);
+ }
}
}
for(final Map.Entry<String, String> entry :
feature.getFrameworkProperties().entrySet()) {
// the value is always a string
- entry.setValue((String)replaceVariables(entry.getValue(),
additionalVariables, feature));
+ entry.setValue(replaceVariables(entry.getValue(),
additionalVariables, feature));
}
}
@@ -252,12 +260,8 @@ public abstract class FeatureBuilder {
* @param feature The feature containing variables
* @return The value with the variables substituted.
*/
- static Object replaceVariables(final Object value, final
Map<String,String> additionalVariables, final Feature feature) {
- if (!(value instanceof String)) {
- return value;
- }
-
- final String textWithVars = (String) value;
+ static String replaceVariables(final String value, final
Map<String,String> additionalVariables, final Feature feature) {
+ final String textWithVars = value;
final Matcher m = VARIABLE_PATTERN.matcher(textWithVars.toString());
final StringBuffer sb = new StringBuffer();
diff --git
a/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
b/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
index 4d0e5bd..11ab945 100644
--- a/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
+++ b/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
@@ -1112,6 +1112,21 @@ public class FeatureBuilderTest {
assertEquals("line2\nline3",
f.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT).getText());
}
+ @Test public void testReplaceVarInArray() {
+ final Feature f = new Feature(ArtifactId.parse("g/a/1"));
+ f.getVariables().put("key", "hello");
+ final Configuration c = new Configuration("pid");
+ c.getProperties().put("prop", new String[] {"${key}", "world"});
+ f.getConfigurations().add(c);
+
+ FeatureBuilder.resolveVariables(f, null);
+
+ String[] result = (String[]) c.getProperties().get("prop");
+ assertEquals(2, result.length);
+ assertEquals("hello", result[0]);
+ assertEquals("world", result[1]);
+ }
+
private static class MatchingRequirementImpl extends RequirementImpl
implements MatchingRequirement {
public MatchingRequirementImpl(Resource res, String ns, Map<String,
String> dirs, Map<String, Object> attrs) {