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.context.MgnlContext;
37 import info.magnolia.context.WebContext;
38
39 import java.util.ArrayList;
40 import java.util.Iterator;
41 import java.util.List;
42
43 import org.apache.commons.lang3.StringUtils;
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 @Deprecated
84 public class HostBasedVirtualURIMapping extends DefaultVirtualURIMapping {
85
86 protected ArrayList<HostURIMapping> hosts;
87
88
89
90
91 public HostBasedVirtualURIMapping() {
92 hosts = new ArrayList<HostURIMapping>();
93 }
94
95
96 public List<HostURIMapping> getMappings() {
97 return null;
98 }
99
100
101
102
103
104
105 public void addMapping(HostURIMapping mapping) {
106 if (mapping.getHost() != null && mapping.getToURI() != null) {
107 synchronized (hosts) {
108 hosts.add(mapping);
109 }
110 }
111 }
112
113
114
115 @Deprecated
116 public List<String> getHosts() {
117 return null;
118 }
119
120
121
122
123
124
125 @Deprecated
126 public void addHost(String mapping) {
127 String[] hostToPath = StringUtils.split(mapping, "=");
128 if (hostToPath != null && hostToPath.length == 2) {
129 synchronized (hosts) {
130 hosts.add(new HostURIMapping(hostToPath[0], hostToPath[1]));
131 }
132 }
133 }
134
135 @Override
136 public MappingResult mapURI(String uri) {
137
138 MappingResult result = super.mapURI(uri);
139
140 if (result != null) {
141 String destination = toURI;
142 String hostMapping = this.tryToMapHost();
143 if (hostMapping != null) {
144 destination = hostMapping;
145 }
146 result.setToURI(destination);
147 return result;
148 }
149
150 return null;
151 }
152
153
154
155
156
157
158 protected String tryToMapHost() {
159 final int NO_MATCHED_MAPPINGS = -1;
160 int bestMatchValue = NO_MATCHED_MAPPINGS;
161 String toURI = null;
162
163 if (hosts != null && !hosts.isEmpty()) {
164 String requestHost = ((WebContext) MgnlContext.getInstance()).getRequest().getServerName();
165
166 Iterator<HostURIMapping> hostIt = hosts.iterator();
167
168 while (hostIt.hasNext()) {
169 HostURIMapping hk = hostIt.next();
170 if (hk.isValid() && requestHost.endsWith(hk.getHost())) {
171 int matchValue = (requestHost.length() - hk.getHost().length());
172 if (bestMatchValue == NO_MATCHED_MAPPINGS || matchValue < bestMatchValue) {
173 bestMatchValue = matchValue;
174 toURI = hk.getToURI();
175 }
176 }
177 }
178 }
179 return toURI;
180 }
181
182 @Override
183 public String toString() {
184 return "[" + super.toString() + "[hosts:" + hosts.toString() + "]]";
185 }
186
187 @Override
188 public boolean isValid() {
189 if (this.getClass().equals(HostBasedVirtualURIMapping.class)) {
190 return StringUtils.isNotEmpty(getFromURI()) && hosts.stream()
191 .anyMatch(HostURIMapping::isValid);
192 }
193 return true;
194 }
195
196
197
198
199 public static class HostURIMapping {
200
201
202 public HostURIMapping() {
203 }
204
205 public HostURIMapping(String host, String toURI) {
206 this.host = host;
207 this.toURI = toURI;
208 }
209
210 private String host;
211
212 private String toURI;
213
214 public String getHost() {
215 return this.host;
216 }
217
218 public void setHost(String host) {
219 this.host = host;
220 }
221
222 public String getToURI() {
223 return this.toURI;
224 }
225
226 public void setToURI(String toURI) {
227 this.toURI = toURI;
228 }
229
230 public boolean isValid() {
231 return StringUtils.isNotEmpty(host) && StringUtils.isNotEmpty(toURI);
232 }
233
234 @Override
235 public String toString() {
236 return getHost() + "=" + getToURI();
237
238 }
239 }
240
241 }