Skip to content

Commit 37f0c8b

Browse files
aemDispatcherFilter Helper: Allow to set empty strings for selectors, extension, suffix (#238)
1 parent 72a6dd0 commit 37f0c8b

File tree

4 files changed

+85
-29
lines changed

4 files changed

+85
-29
lines changed

changes.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
2525
<body>
2626

27+
<release version="2.23.2" date="not released">
28+
<action type="update" dev="sseifert" issue="238">
29+
aemDispatcherFilter Helper: Allow to set empty strings for selectors, extension, suffix.
30+
</action>
31+
</release>
32+
2733
<release version="2.23.0" date="2025-09-25">
2834
<action type="update" dev="sseifert">
2935
Switch to Java 17.

conga-aem-plugin/src/main/java/io/wcm/devops/conga/plugins/aem/handlebars/helper/AemDispatcherFilterHelper.java

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -46,41 +46,51 @@ protected String generateFilter(Map<String, Object> filterMap, Options options)
4646
DispatcherFilter filter = new DispatcherFilter(filterMap);
4747

4848
StringBuilder sb = new StringBuilder()
49-
.append("{ ")
50-
.append("/type \"").append(filter.getType()).append("\" ");
49+
.append("{ ");
5150

52-
if (StringUtils.isNotEmpty(filter.getMethod())) {
53-
sb.append("/method '").append(filter.getMethod()).append("' ");
54-
}
55-
if (StringUtils.isNotEmpty(filter.getUrl())) {
56-
sb.append("/url '").append(filter.getUrl()).append("' ");
57-
}
58-
if (StringUtils.isNotEmpty(filter.getQuery())) {
59-
sb.append("/query '").append(filter.getQuery()).append("' ");
60-
}
61-
if (StringUtils.isNotEmpty(filter.getProtocol())) {
62-
sb.append("/protocol '").append(filter.getProtocol()).append("' ");
63-
}
51+
applySimpleValue(sb, "type", filter.getType().toString());
6452

65-
if (StringUtils.isNotEmpty(filter.getPath())) {
66-
sb.append("/path '").append(filter.getPath()).append("' ");
67-
}
68-
if (StringUtils.isNotEmpty(filter.getSelectors())) {
69-
sb.append("/selectors '").append(filter.getSelectors()).append("' ");
70-
}
71-
if (StringUtils.isNotEmpty(filter.getExtension())) {
72-
sb.append("/extension '").append(filter.getExtension()).append("' ");
73-
}
74-
if (StringUtils.isNotEmpty(filter.getSuffix())) {
75-
sb.append("/suffix '").append(filter.getSuffix()).append("' ");
76-
}
53+
applyRegexValue(sb, "method", filter.getMethod());
54+
applyRegexValue(sb, "url", filter.getUrl());
55+
applyRegexValue(sb, "query", filter.getQuery());
56+
applyRegexValue(sb, "protocol", filter.getProtocol());
7757

78-
if (StringUtils.isNotEmpty(filter.getGlob())) {
79-
sb.append("/glob '").append(filter.getGlob()).append("' ");
80-
}
58+
applyRegexValue(sb, "path", filter.getPath());
59+
applyRegexValueEmptyStringAllowed(sb, "selectors", filter.getSelectors());
60+
applyRegexValueEmptyStringAllowed(sb, "extension", filter.getExtension());
61+
applyRegexValueEmptyStringAllowed(sb, "suffix", filter.getSuffix());
62+
63+
applyRegexValue(sb, "glob", filter.getGlob());
8164

8265
sb.append("}");
8366
return sb.toString();
8467
}
8568

69+
/**
70+
* Append filter parameter as simple fixed string (enclosed in "").
71+
*/
72+
private void applySimpleValue(StringBuilder sb, String key, String value) {
73+
if (StringUtils.isNotEmpty(value)) {
74+
sb.append("/").append(key).append(" \"").append(value).append("\" ");
75+
}
76+
}
77+
78+
/**
79+
* Append filter parameter as string that may be a regex (enclosed in ''). Empty string are ignored.
80+
*/
81+
private void applyRegexValue(StringBuilder sb, String key, String value) {
82+
if (StringUtils.isNotEmpty(value)) {
83+
sb.append("/").append(key).append(" '").append(value).append("' ");
84+
}
85+
}
86+
87+
/**
88+
* Append filter parameter as string that may be a regex (enclosed in ''). Empty strings are left as-is.
89+
*/
90+
private void applyRegexValueEmptyStringAllowed(StringBuilder sb, String key, String value) {
91+
if (value != null) {
92+
sb.append("/").append(key).append(" '").append(value).append("' ");
93+
}
94+
}
95+
8696
}

conga-aem-plugin/src/test/java/io/wcm/devops/conga/plugins/aem/handlebars/helper/AemDispatcherFilterHelperTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,40 @@ void testAll() throws Exception {
6565
helper, map, new MockOptions());
6666
}
6767

68+
@Test
69+
void testSelectorExtensionSuffix() throws Exception {
70+
Map<String, Object> map = new HashMap<>();
71+
map.put("type", "deny");
72+
map.put("path", "path1");
73+
map.put("selectors", "selector1");
74+
map.put("extension", "extension1");
75+
map.put("suffix", "suffix1");
76+
assertHelper("{ /type \"deny\" /path 'path1' /selectors 'selector1' /extension 'extension1' /suffix 'suffix1' }",
77+
helper, map, new MockOptions());
78+
}
79+
80+
@Test
81+
void testSelectorExtensionSuffix_EmptyString() throws Exception {
82+
Map<String, Object> map = new HashMap<>();
83+
map.put("type", "deny");
84+
map.put("path", "path1");
85+
map.put("selectors", "");
86+
map.put("extension", "");
87+
map.put("suffix", "");
88+
assertHelper("{ /type \"deny\" /path 'path1' /selectors '' /extension '' /suffix '' }",
89+
helper, map, new MockOptions());
90+
}
91+
92+
@Test
93+
void testSelectorExtensionSuffix_Null() throws Exception {
94+
Map<String, Object> map = new HashMap<>();
95+
map.put("type", "deny");
96+
map.put("path", "path1");
97+
map.put("selectors", null);
98+
map.put("extension", null);
99+
map.put("suffix", null);
100+
assertHelper("{ /type \"deny\" /path 'path1' }",
101+
helper, map, new MockOptions());
102+
}
103+
68104
}

tooling/conga-aem-maven-plugin/src/it/wcmio-archetype-cloud/config-definition/src/main/environments/cloud.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ nodes:
2525
extension: json
2626
selectors: model
2727
type: allow
28+
- url: /test(/.*)?
29+
extension: json
30+
suffix: ""
31+
type: allow
2832

2933

3034
config:

0 commit comments

Comments
 (0)