1 package org.apache.turbine.util.uri;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import javax.servlet.http.HttpServletResponse;
25
26 import org.apache.commons.lang.StringUtils;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30
31 import org.apache.turbine.Turbine;
32 import org.apache.turbine.TurbineConstants;
33
34 import org.apache.turbine.util.RunData;
35 import org.apache.turbine.util.ServerData;
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public abstract class BaseURI
50 implements URI,
51 URIConstants
52 {
53
54 private static Log log = LogFactory.getLog(BaseURI.class);
55
56
57 private ServerData serverData =
58 new ServerData(null, HTTP_PORT, HTTP, null, null);
59
60
61 private boolean redirect = false;
62
63
64 private HttpServletResponse response = null;
65
66
67 private String reference = null;
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 public BaseURI()
83 {
84 init(Turbine.getDefaultServerData());
85 setResponse(null);
86 }
87
88
89
90
91
92
93 public BaseURI(RunData runData)
94 {
95 init(runData.getServerData());
96 setResponse(runData.getResponse());
97 }
98
99
100
101
102
103
104
105 public BaseURI(RunData runData, boolean redirect)
106 {
107 init(runData.getServerData());
108 setResponse(runData.getResponse());
109 setRedirect(redirect);
110 }
111
112
113
114
115
116
117 public BaseURI(ServerData serverData)
118 {
119 init(serverData);
120 setResponse(null);
121 }
122
123
124
125
126
127
128
129 public BaseURI(ServerData serverData, boolean redirect)
130 {
131 init(serverData);
132 setResponse(null);
133 setRedirect(redirect);
134 }
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 private void init(ServerData serverData)
152 {
153 log.debug("init(" + serverData + ")");
154
155 if(serverData != null)
156 {
157
158
159
160
161 this.serverData = (ServerData) serverData.clone();
162 }
163 else
164 {
165 log.error("Passed null ServerData object!");
166 }
167 reference = null;
168 }
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184 public void setRedirect(boolean redirect)
185 {
186 this.redirect = redirect;
187 }
188
189
190
191
192
193
194
195 public boolean isRedirect()
196 {
197 return redirect;
198 }
199
200
201
202
203
204
205 public String getScriptName()
206 {
207 return serverData.getScriptName();
208 }
209
210
211
212
213
214
215 public void setScriptName(String scriptName)
216 {
217 serverData.setScriptName(scriptName);
218 }
219
220
221
222
223
224
225 public String getContextPath()
226 {
227 return serverData.getContextPath();
228 }
229
230
231
232
233
234
235 public void setContextPath(String contextPath)
236 {
237 serverData.setContextPath(contextPath);
238 }
239
240
241
242
243
244
245 public String getServerName()
246 {
247 return serverData.getServerName();
248 }
249
250
251
252
253
254
255 public void setServerName(String serverName)
256 {
257 serverData.setServerName(serverName);
258 }
259
260
261
262
263
264
265 public int getServerPort()
266 {
267 int serverPort = serverData.getServerPort();
268
269 if (serverPort == 0)
270 {
271 if(getServerScheme().equals(HTTPS))
272 {
273 serverPort = HTTPS_PORT;
274 }
275 else
276 {
277 serverPort = HTTP_PORT;
278 }
279 }
280 return serverPort;
281 }
282
283
284
285
286
287
288 public void setServerPort(int serverPort)
289 {
290 serverData.setServerPort(serverPort);
291 }
292
293
294
295
296
297 public void setSecure()
298 {
299 setSecure(HTTPS_PORT);
300 }
301
302
303
304
305
306
307
308
309
310 public void setSecure(int port)
311 {
312 boolean useSSL =
313 Turbine.getConfiguration()
314 .getBoolean(TurbineConstants.USE_SSL_KEY,
315 TurbineConstants.USE_SSL_DEFAULT);
316
317 setServerScheme(useSSL ? HTTPS : HTTP);
318 setServerPort(port);
319 }
320
321
322
323
324
325
326 public void setServerScheme(String serverScheme)
327 {
328 serverData.setServerScheme(StringUtils.isNotEmpty(serverScheme)
329 ? serverScheme : "");
330 }
331
332
333
334
335
336
337
338 public String getServerScheme()
339 {
340 String serverScheme = serverData.getServerScheme();
341
342 return StringUtils.isNotEmpty(serverScheme) ? serverScheme : HTTP;
343 }
344
345
346
347
348
349
350 public void setReference(String reference)
351 {
352 this.reference = reference;
353 }
354
355
356
357
358
359
360 public String getReference()
361 {
362 return hasReference() ? reference : "";
363 }
364
365
366
367
368
369
370 public boolean hasReference()
371 {
372 return StringUtils.isNotEmpty(reference);
373 }
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389 protected void setResponse(HttpServletResponse response)
390 {
391 this.response = response;
392 }
393
394
395
396
397
398
399
400 protected HttpServletResponse getResponse()
401 {
402 return response;
403 }
404
405
406
407
408
409
410
411
412
413
414
415
416 protected void getContextAndScript(StringBuilder sb)
417 {
418 String context = getContextPath();
419
420 if(StringUtils.isNotEmpty(context))
421 {
422 if(context.charAt(0) != '/')
423 {
424 sb.append('/');
425 }
426 sb.append (context);
427 }
428
429
430 String script = getScriptName();
431
432 if(StringUtils.isNotEmpty(script))
433 {
434 if(script.charAt(0) != '/')
435 {
436 sb.append('/');
437 }
438 sb.append (script);
439 }
440 }
441
442
443
444
445
446
447
448
449
450
451
452
453 protected void getSchemeAndPort(StringBuilder sb)
454 {
455
456 sb.append(getServerScheme());
457 sb.append(URIConstants.URI_SCHEME_SEPARATOR);
458 sb.append(getServerName());
459
460
461 if ((getServerScheme().equals(HTTP)
462 && getServerPort() != HTTP_PORT)
463 || (getServerScheme().equals(HTTPS)
464 && getServerPort() != HTTPS_PORT))
465 {
466 sb.append(':');
467 sb.append(getServerPort());
468 }
469 }
470
471
472
473
474
475
476
477
478
479
480 protected String encodeResponse(String uri)
481 {
482 String res = uri;
483
484 HttpServletResponse response = getResponse();
485
486 if(response == null)
487 {
488 log.debug("No Response Object!");
489 }
490 else
491 {
492 try
493 {
494 if(isRedirect())
495 {
496 log.debug("Should Redirect");
497 res = response.encodeRedirectURL(uri);
498 }
499 else
500 {
501 res = response.encodeURL(uri);
502 }
503 }
504 catch(Exception e)
505 {
506 log.error("response" + response + ", uri: " + uri);
507 log.error("While trying to encode the URI: ", e);
508 }
509 }
510
511 log.debug("encodeResponse(): " + res);
512 return res;
513 }
514 }