Skip to content

Commit 2a662d0

Browse files
authored
Allow the union function to concatenate more than two collections (#889)
1 parent 894efe1 commit 2a662d0

5 files changed

Lines changed: 15 additions & 8 deletions

File tree

accesscontroltool-bundle/src/main/java/biz/netcentric/cq/tools/actool/configreader/YamlMacroElEvaluator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
import java.beans.FeatureDescriptor;
1818
import java.lang.reflect.Method;
1919
import java.util.ArrayList;
20+
import java.util.Arrays;
2021
import java.util.Collection;
2122
import java.util.Collections;
2223
import java.util.HashMap;
2324
import java.util.Iterator;
2425
import java.util.List;
2526
import java.util.Map;
2627
import java.util.stream.Collectors;
27-
import java.util.stream.Stream;
2828

2929
import org.apache.commons.lang3.ArrayUtils;
3030
import org.apache.commons.lang3.StringEscapeUtils;
@@ -162,7 +162,7 @@ public ElFunctionMapper() {
162162
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("keys", new Class<?>[] { Map.class }),
163163
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("values", new Class<?>[] { Map.class }),
164164
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("escapeXml", new Class<?>[] { String.class }),
165-
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("union", new Class<?>[] { Collection.class, Collection.class })
165+
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("union", new Class<?>[] { Collection[].class })
166166
};
167167
for (Method method : exportedMethods) {
168168
functionMap.put(method.getName(), method);
@@ -205,8 +205,9 @@ public static String escapeXml(String input) {
205205
return StringEscapeUtils.escapeXml10(input);
206206
}
207207

208-
public static List<Object> union(Collection<String> collection1, Collection<String> collection2){
209-
return Stream.concat(collection1.stream(),collection2.stream()).collect(Collectors.toList());
208+
@SafeVarargs
209+
public static List<Object> union(Collection<String>... collections){
210+
return Arrays.stream(collections).flatMap(Collection::stream).collect(Collectors.toList());
210211
}
211212
}
212213

accesscontroltool-bundle/src/test/java/biz/netcentric/cq/tools/actool/configreader/YamlMacroElEvaluatorTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ void testFunctions() {
4949
assertEquals("foo", evaluateSimpleExpression("defaultIfBlank(\" \",\"foo\")"));
5050
assertEquals("bar", evaluateSimpleExpression("defaultIfBlank(\"bar\",\"foo\")"));
5151

52-
Map<String,Object> lists= ImmutableMap.of("list1",Arrays.asList("foo","bar"), "list2",Arrays.asList("fizz","buzz"));
52+
Map<String,Object> lists= ImmutableMap.of("list1",Arrays.asList("foo","bar"), "list2",Arrays.asList("fizz","buzz"), "list3",Arrays.asList("ping","pong"));
5353
assertIterableEquals(Arrays.asList("foo","bar","fizz","buzz"), (Iterable)evaluateSimpleExpression("union(list1,list2)",lists));
54+
assertIterableEquals(Arrays.asList("foo","bar","fizz","buzz","ping","pong"), (Iterable)evaluateSimpleExpression("union(list1,list2,list3)",lists));
5455
assertIterableEquals(Arrays.asList("item1"),(Iterable) evaluateSimpleExpression("keys(list)",Collections.singletonMap("list", ImmutableMap.of("item1","value"))));
5556

5657
}

accesscontroltool-bundle/src/test/java/biz/netcentric/cq/tools/actool/configreader/YamlMacroProcessorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ public void testUnionFunction() throws Exception {
483483
yamlList = yamlMacroProcessor.processMacros(yamlList, globalVariables, installLog, session);
484484

485485
AuthorizablesConfig groups = readGroupConfigs(yamlList);
486-
assertEquals(9, groups.size(), "Number of ACEs expected to be 9");
486+
assertEquals(12, groups.size(), "Number of ACEs expected to be 12");
487487
}
488488

489489
@Test

accesscontroltool-bundle/src/test/resources/test-array-union-function.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,18 @@
1616
- US
1717
- Mexico
1818

19+
- DEF countriesAPAC=:
20+
- Japan
21+
- China
22+
- South Korea
23+
1924
- group_config:
2025

2126
- FOR country IN ${countriesEU}:
2227
- group-${country}-europe:
2328
- path: /home/groups/netcentric
2429

25-
- FOR country IN ${union(countriesEU,countriesNA)}:
30+
- FOR country IN ${union(countriesEU,countriesNA,countriesAPAC)}:
2631
- group-${country}-global:
2732
- path: /home/groups/netcentric
2833

docs/AdvancedFeatures.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Function Signature | Description
1414
`containsAllItems(List<String> list, List<String> items)`| Returns `true` if all of the items are contained in the given list (independent of their order). | 2.6.1
1515
`containsAnyItem(List<String> list, List<String> items)`| Returns `true` if any of the items is contained in the given list. | 2.6.1
1616
`containsItem(List<String> list, String item)`| Returns `true` if the item is contained in the given list. | 2.2.0
17-
`union(Collection<String> list, Collection<String> list)`| Concatenates two collections. | 3.6.3
17+
`union(Collection<String>... lists)`| Concatenates two or more collections. | 3.6.3
1818
`defaultIfBlank(String str, String default)` | [`StringUtils.defaultIfBlank(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#defaultIfBlank(T,%20T)) | 3.3.0
1919
`defaultIfEmpty(String str, String default)` | [`StringUtils.defaultIfEmpty(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#defaultIfEmpty(T,%20T)) | 2.5.0
2020
`endsWith(String str, String suffix)`| [`StringUtils.endsWith(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#endsWith(java.lang.CharSequence,%20java.lang.CharSequence)) | 1.8.0

0 commit comments

Comments
 (0)