1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package io.wcm.handler.url.suffix;
21
22 import static io.wcm.handler.url.suffix.impl.UrlSuffixUtil.splitSuffix;
23
24 import java.util.ArrayList;
25 import java.util.List;
26 import java.util.function.Predicate;
27
28 import org.apache.sling.api.SlingHttpServletRequest;
29 import org.jetbrains.annotations.NotNull;
30 import org.osgi.annotation.versioning.ProviderType;
31
32
33
34
35
36 @ProviderType
37 public final class FilteringSuffixStateStrategy implements SuffixStateKeepingStrategy {
38
39 private final Predicate<String> suffixPartFilter;
40
41
42
43
44 public FilteringSuffixStateStrategy(Predicate<String> suffixPartFilter) {
45 this.suffixPartFilter = suffixPartFilter;
46 }
47
48 @Override
49 public @NotNull List<String> getSuffixPartsToKeep(@NotNull SlingHttpServletRequest request) {
50
51
52 String existingSuffix = request.getRequestPathInfo().getSuffix();
53 String[] suffixPartArray = splitSuffix(existingSuffix);
54
55
56 List<String> suffixPartsToKeep = new ArrayList<>();
57 for (int i = 0; i < suffixPartArray.length; i++) {
58 String nextPart = suffixPartArray[i];
59
60
61 if (suffixPartFilter == null || suffixPartFilter.test(nextPart)) {
62 suffixPartsToKeep.add(nextPart);
63 }
64 }
65
66 return suffixPartsToKeep;
67 }
68
69 }