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 info.magnolia.cms.util.UrlPattern;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.context.WebContext;
39
40 import java.util.HashMap;
41 import java.util.Iterator;
42 import java.util.List;
43 import java.util.Map;
44
45 import org.apache.commons.lang.StringUtils;
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 public class HostBasedVirtualURIMapping extends DefaultVirtualURIMapping {
63
64 private UrlPattern pattern;
65
66 protected Map<String, String> hosts = new HashMap<String, String>();
67
68
69
70
71 public HostBasedVirtualURIMapping() {
72 hosts = new HashMap<String, String>();
73 }
74
75
76 public List<String> getHosts() {
77 return null;
78 }
79
80
81
82
83
84
85 public void addHost(String mapping) {
86 String[] hostToPath = StringUtils.split(mapping, "=");
87 if (hostToPath != null && hostToPath.length == 2) {
88 synchronized (hosts) {
89 hosts.put(hostToPath[0], hostToPath[1]);
90 }
91 }
92 }
93
94 @Override
95 public MappingResult mapURI(String uri) {
96
97 String destination = toURI;
98
99 if (pattern != null && pattern.match(uri)) {
100 String hostMapping = this.tryToMapHost();
101 if (hostMapping != null) {
102 destination = hostMapping;
103 }
104
105 MappingResult r = new MappingResult();
106 r.setLevel(pattern.getLength());
107 r.setToURI(destination);
108 return r;
109 }
110 return null;
111 }
112
113 protected String tryToMapHost() {
114 if (hosts != null && !hosts.isEmpty()) {
115 String requestHost = ((WebContext) MgnlContext.getInstance()).getRequest().getServerName();
116 Iterator<Map.Entry<String, String>> hostIt = hosts.entrySet().iterator();
117
118 while (hostIt.hasNext()) {
119
120 Map.Entry<String, String> hk = hostIt.next();
121 if (requestHost.endsWith(hk.getKey())) {
122 return hk.getValue();
123 }
124 }
125 }
126 return null;
127 }
128
129 @Override
130 public String toString() {
131 return "[" + super.toString() + "[hosts:" + hosts + "]]";
132 }
133
134 }