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 public void setHosts(List<String> hosts) {
81 String[] hostToPath = null;
82 for (String host : hosts) {
83 hostToPath = StringUtils.split(host, "=");
84 if (hostToPath != null && hostToPath.length == 2) {
85 this.hosts.put(hostToPath[0], hostToPath[1]);
86 }
87 }
88 }
89
90
91
92
93
94
95 public void addHost(String mapping) {
96 String[] hostToPath = StringUtils.split(mapping, "=");
97 if (hostToPath != null && hostToPath.length == 2) {
98 synchronized (hosts) {
99 hosts.put(hostToPath[0], hostToPath[1]);
100 }
101 }
102 }
103
104 @Override
105 public MappingResult mapURI(String uri) {
106
107 String destination = toURI;
108
109 if (pattern != null && pattern.match(uri)) {
110 String hostMapping = this.tryToMapHost();
111 if (hostMapping != null) {
112 destination = hostMapping;
113 }
114
115 MappingResult r = new MappingResult();
116 r.setLevel(pattern.getLength());
117 r.setToURI(destination);
118 return r;
119 }
120 return null;
121 }
122
123 protected String tryToMapHost() {
124 if (hosts != null && !hosts.isEmpty()) {
125 String requestHost = ((WebContext) MgnlContext.getInstance()).getRequest().getServerName();
126 Iterator<Map.Entry<String, String>> hostIt = hosts.entrySet().iterator();
127
128 while (hostIt.hasNext()) {
129
130 Map.Entry<String, String> hk = hostIt.next();
131 if (requestHost.endsWith(hk.getKey())) {
132 return hk.getValue();
133 }
134 }
135 }
136 return null;
137 }
138
139 @Override
140 public String toString() {
141 return "[" + super.toString() + "[hosts:" + hosts + "]]";
142 }
143
144 }