Skip to content

Commit 71ccfd8

Browse files
Expose isEmpty and isBlank for EL evaluation (#752)
This closes #751
1 parent 4c4ae9e commit 71ccfd8

File tree

14 files changed

+47
-36
lines changed

14 files changed

+47
-36
lines changed

accesscontroltool-apps-package/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<parent>
1616
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1717
<artifactId>accesscontroltool</artifactId>
18-
<version>3.2.1-SNAPSHOT</version>
18+
<version>3.3.0-SNAPSHOT</version>
1919
</parent>
2020

2121
<!-- ====================================================================== -->

accesscontroltool-bundle/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1313
<artifactId>accesscontroltool</artifactId>
14-
<version>3.2.1-SNAPSHOT</version>
14+
<version>3.3.0-SNAPSHOT</version>
1515
</parent>
1616

1717
<!-- ====================================================================== -->

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ public ElFunctionMapper() {
136136
StringUtils.class.getMethod("replace", new Class<?>[] { String.class, String.class, String.class }),
137137
StringUtils.class.getMethod("length", new Class<?>[] { CharSequence.class }),
138138
StringUtils.class.getMethod("defaultIfEmpty", new Class<?>[] { CharSequence.class, CharSequence.class }),
139+
StringUtils.class.getMethod("defaultIfBlank", new Class<?>[] { CharSequence.class, CharSequence.class }),
140+
StringUtils.class.getMethod("isEmpty", new Class<?>[] { CharSequence.class }),
141+
StringUtils.class.getMethod("isBlank", new Class<?>[] { CharSequence.class }),
139142

140143
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("containsItem", new Class<?>[] { List.class, String.class }),
141144
YamlMacroElEvaluator.ElFunctionMapper.class.getMethod("containsAllItems", new Class<?>[] { List.class, List.class }),

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,15 @@ public void setUp() {
3434

3535
@Test
3636
void testFunctions() {
37+
assertEquals(true, evaluateSimpleExpression("isBlank(\"\")"));
38+
assertEquals(true, evaluateSimpleExpression("isBlank(\" \")"));
39+
assertEquals(true, evaluateSimpleExpression("isEmpty(\"\")"));
40+
assertEquals(false, evaluateSimpleExpression("isEmpty(\" \")"));
3741
assertEquals("bread&amp;butter", evaluateSimpleExpression("escapeXml(\"bread&butter\")"));
3842
assertEquals("Test", evaluateSimpleExpression("capitalize(\"test\")"));
3943
assertEquals("item1,item2", evaluateSimpleExpression("join(var1, \",\")", Collections.singletonMap("var1", new Object[] {"item1", "item2"})));
44+
assertEquals("foo", evaluateSimpleExpression("defaultIfBlank(\" \",\"foo\")"));
45+
assertEquals("bar", evaluateSimpleExpression("defaultIfBlank(\"bar\",\"foo\")"));
4046
}
4147

4248
@Test

accesscontroltool-content-package/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<parent>
1616
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1717
<artifactId>accesscontroltool</artifactId>
18-
<version>3.2.1-SNAPSHOT</version>
18+
<version>3.3.0-SNAPSHOT</version>
1919
</parent>
2020

2121
<!-- ====================================================================== -->

accesscontroltool-exampleconfig-package/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<parent>
1616
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1717
<artifactId>accesscontroltool</artifactId>
18-
<version>3.2.1-SNAPSHOT</version>
18+
<version>3.3.0-SNAPSHOT</version>
1919
</parent>
2020

2121
<!-- ====================================================================== -->

accesscontroltool-oakindex-package/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<parent>
1616
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1717
<artifactId>accesscontroltool</artifactId>
18-
<version>3.2.1-SNAPSHOT</version>
18+
<version>3.3.0-SNAPSHOT</version>
1919
</parent>
2020

2121
<!-- ====================================================================== -->

accesscontroltool-package/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<parent>
1616
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1717
<artifactId>accesscontroltool</artifactId>
18-
<version>3.2.1-SNAPSHOT</version>
18+
<version>3.3.0-SNAPSHOT</version>
1919
</parent>
2020

2121
<!-- ====================================================================== -->

accesscontroltool-startuphook-bundle/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>biz.netcentric.cq.tools.accesscontroltool</groupId>
1313
<artifactId>accesscontroltool</artifactId>
14-
<version>3.2.1-SNAPSHOT</version>
14+
<version>3.3.0-SNAPSHOT</version>
1515
</parent>
1616

1717
<!-- ====================================================================== -->

docs/AdvancedFeatures.md

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,33 @@ Expressions are evaluated using the [Jakarta Expression Language 4.0](https://ja
77
The following utility functions are made available to any EL expression used in YAML.
88
They can either be used standalone or combined with the [default EL operators](https://docs.oracle.com/javaee/6/tutorial/doc/bnaik.html).
99

10-
Function Signature | Description
11-
---|---
12-
`split(String str, String separator)`|[`StringUtils.split(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#split(java.lang.String,%20java.lang.String))
13-
`join(Object[] array, String separator)`|[`StringUtils.join(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#join(java.lang.Object[],%20java.lang.String))
14-
`subarray(String array, startIndexInclusive,endIndexExclusive)`| [`ArrayUtils.subarray(...)`](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ArrayUtils.html#subarray-T:A-int-int-)
15-
`upperCase(String str)`|[`StringUtils.upperCase(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#upperCase(java.lang.String))
16-
`lowerCase(String str)`|[`StringUtils.lowerCase(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#lowerCase(java.lang.String))
17-
`capitalize(String str)`|[`StringUtils.capitalize(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#capitalize(java.lang.String))
18-
`replace(String text, String searchString, String replacement)`|[`StringUtils.replace(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#replace(java.lang.String,%20java.lang.String,%20java.lang.String))
19-
`substringAfter(String str, String separator)`|[`StringUtils.substringAfter(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringAfter(java.lang.String,%20java.lang.String))
20-
`substringBefore(String str, String separator)`|[`StringUtils.substringBefore(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringBefore(java.lang.String,%20java.lang.String))
21-
`substringAfterLast(String str, String separator)`|[`StringUtils.substringAfterLast(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringAfterLast(java.lang.String,%20java.lang.String))
22-
`substringBeforeLast(String str, String separator)`|[`StringUtils.substringBeforeLast(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringBeforeLast(java.lang.String,%20java.lang.String))
23-
`contains(String str, String fragmentStr)`|[`StringUtils.contains(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#contains(java.lang.CharSequence,%20java.lang.CharSequence))
24-
`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))
25-
`startsWith(String str, String prefix)`| [`StringUtils.startsWith(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#startsWith(java.lang.CharSequence,%20java.lang.CharSequence))
26-
`length(String string)`| [`StringUtils.length(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#length(java.lang.CharSequence))
27-
`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))
28-
`escapeXml(String str)` | [`StringEscapeUtils.escapeXml10(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringEscapeUtils.html#escapeXml10(java.lang.String)), useful for escaping values within `initialContent` which uses [enhanced JCR DocView syntax (an XML 1.0 language)](https://jackrabbit.apache.org/filevault/docview.html).
29-
`containsItem(List<String> list, String item)`| Returns `true` if the item is contained in the given list.
30-
`containsAnyItem(List<String> list, List<String> items)`| Returns `true` if any of the items is contained in the given list.
31-
`containsAllItems(List<String> list, List<String> items)`| Returns `true` if all of the items are contained in the given list (independent of their order).
32-
`keys(Map<Object, Object> map)`| Returns the list of keys for the given map. The order is non-predictable.
33-
`values(Map<Object, Object> map)`| Returns all values for the given map. The order is non-predictable.
34-
10+
Function Signature | Description | Since
11+
---|---|---
12+
`capitalize(String str)`| [`StringUtils.capitalize(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#capitalize(java.lang.String)) | 3.1.0
13+
`contains(String str, String fragmentStr)`| [`StringUtils.contains(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#contains(java.lang.CharSequence,%20java.lang.CharSequence)) | 1.8.0
14+
`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
15+
`containsAnyItem(List<String> list, List<String> items)`| Returns `true` if any of the items is contained in the given list. | 2.6.1
16+
`containsItem(List<String> list, String item)`| Returns `true` if the item is contained in the given list. | 2.2.0
17+
`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
18+
`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
19+
`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
20+
`escapeXml(String str)` | [`StringEscapeUtils.escapeXml10(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringEscapeUtils.html#escapeXml10(java.lang.String)), useful for escaping values within `initialContent` which uses [enhanced JCR DocView syntax (an XML 1.0 language)](https://jackrabbit.apache.org/filevault/docview.html) | 3.1.0
21+
`isBlank(String str)` | [`StringUtils.isBlank(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#isBlank(java.lang.CharSequence)) | 3.3.0
22+
`isEmpty(String str)` | [`StringUtils.isEmpty(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#isEmpty(java.lang.CharSequence)) | 3.3.0
23+
`join(Object[] array, String separator)`| [`StringUtils.join(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#join(java.lang.Object[],%20java.lang.String)) | 1.8.0
24+
`keys(Map<Object, Object> map)`| Returns the list of keys for the given map. The order is non-predictable. | 2.6.0
25+
`length(String string)`| [`StringUtils.length(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#length(java.lang.CharSequence)) | 2.0.6
26+
`lowerCase(String str)`| [`StringUtils.lowerCase(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#lowerCase(java.lang.String)) | 1.8.0
27+
`upperCase(String str)`| [`StringUtils.upperCase(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#upperCase(java.lang.String)) | 1.8.0
28+
`replace(String text, String searchString, String replacement)`| [`StringUtils.replace(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#replace(java.lang.String,%20java.lang.String,%20java.lang.String)) | 1.9.3
29+
`split(String str, String separator)`| [`StringUtils.split(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#split(java.lang.String,%20java.lang.String)) | 1.8.0
30+
`subarray(String array, startIndexInclusive,endIndexExclusive)`| [`ArrayUtils.subarray(...)`](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ArrayUtils.html#subarray-T:A-int-int-) | 1.8.0
31+
`substringAfter(String str, String separator)`| [`StringUtils.substringAfter(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringAfter(java.lang.String,%20java.lang.String)) | 1.8.0
32+
`substringAfterLast(String str, String separator)`| [`StringUtils.substringAfterLast(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringAfterLast(java.lang.String,%20java.lang.String)) | 1.8.0
33+
`substringBefore(String str, String separator)`| [`StringUtils.substringBefore(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringBefore(java.lang.String,%20java.lang.String)) | 1.8.0
34+
`substringBeforeLast(String str, String separator)`| [`StringUtils.substringBeforeLast(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#substringBeforeLast(java.lang.String,%20java.lang.String)) | 1.8.0
35+
`startsWith(String str, String prefix)`| [`StringUtils.startsWith(...)`](https://commons.apache.org/proper/commons-lang/javadocs/api-3.3/org/apache/commons/lang3/StringUtils.html#startsWith(java.lang.CharSequence,%20java.lang.CharSequence)) | 1.8.0
36+
`values(Map<Object, Object> map)`| Returns all values for the given map. The order is non-predictable. | 2.6.0
3537

3638
## Variables
3739

0 commit comments

Comments
 (0)