1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.beans.config;
35
36 import java.util.regex.Matcher;
37 import java.util.regex.Pattern;
38
39 import org.apache.commons.lang.StringUtils;
40
41
42
43
44 public class HostBasedRegexpVirtualURIMapping extends HostBasedVirtualURIMapping implements QueryAwareVirtualURIMapping {
45
46 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(HostBasedRegexpVirtualURIMapping.class);
47 protected Pattern regexp;
48
49 @Override
50 public MappingResult mapURI(String uri) {
51 return this.mapURI(uri, null);
52 }
53
54 @Override
55 public MappingResult mapURI(final String uri, String queryString) {
56
57 if (regexp != null) {
58 final Matcher matcher;
59 if (queryString != null) {
60 matcher = regexp.matcher(uri + "?" + queryString);
61 } else {
62 matcher = regexp.matcher(uri);
63 }
64
65 if (matcher.find()) {
66 final MappingResult r = new MappingResult();
67 String hostMappping = this.tryToMapHost();
68 String replaced;
69 try {
70 if (StringUtils.isNotEmpty(hostMappping)) {
71 replaced = matcher.replaceAll(hostMappping);
72 } else {
73 replaced = matcher.replaceAll(toURI);
74 }
75
76 r.setLevel(matcher.groupCount() + 1);
77 r.setToURI(replaced);
78 return r;
79 } catch (IndexOutOfBoundsException e) {
80 log.warn("{} misconfigured: {}", toString(), e.getMessage());
81 }
82 }
83 }
84 return null;
85 }
86
87 @Override
88 public void setFromURI(String fromURI) {
89 this.fromURI = fromURI;
90 this.regexp = Pattern.compile(fromURI);
91 }
92
93 }