01: /*
02: * Title: VelocityDecoratorServlet
03: * Description:
04: *
05: * This software is published under the terms of the OpenSymphony Software
06: * License version 1.1, of which a copy has been included with this
07: * distribution in the LICENSE.txt file.
08: */
09:
10: package com.opensymphony.module.sitemesh.velocity;
11:
12: import com.opensymphony.module.sitemesh.*;
13: import com.opensymphony.module.sitemesh.util.OutputConverter;
14:
15: import org.apache.velocity.Template;
16: import org.apache.velocity.context.Context;
17: import org.apache.velocity.tools.view.servlet.VelocityViewServlet;
18:
19: import javax.servlet.http.HttpServletRequest;
20: import javax.servlet.http.HttpServletResponse;
21: import java.io.StringWriter;
22:
23: /**
24: * Servlet that allows Velocity templates to be used as decorators.
25: *
26: * @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
27: * @version $Revision: 1.9 $
28: */
29: public class VelocityDecoratorServlet extends VelocityViewServlet {
30: public Template handleRequest(HttpServletRequest request,
31: HttpServletResponse response, Context context)
32: throws Exception {
33: HTMLPage htmlPage = (HTMLPage) request
34: .getAttribute(RequestConstants.PAGE);
35: String template;
36:
37: context.put("base", request.getContextPath());
38:
39: // For backwards compatability with apps that used the old VelocityDecoratorServlet
40: // that extended VelocityServlet instead of VelocityViewServlet
41: context.put("req", request);
42: context.put("res", response);
43:
44: if (htmlPage == null) {
45: context.put("title", "Title?");
46: context.put("body", "<p>Body?</p>");
47: context.put("head", "<!-- head -->");
48: template = request.getServletPath();
49: } else {
50: context.put("title", OutputConverter.convert(htmlPage
51: .getTitle()));
52: {
53: StringWriter buffer = new StringWriter();
54: htmlPage.writeBody(OutputConverter.getWriter(buffer));
55: context.put("body", buffer.toString());
56: }
57: {
58: StringWriter buffer = new StringWriter();
59: htmlPage.writeHead(OutputConverter.getWriter(buffer));
60: context.put("head", buffer.toString());
61: }
62: context.put("page", htmlPage);
63: DecoratorMapper decoratorMapper = getDecoratorMapper();
64: Decorator decorator = decoratorMapper.getDecorator(request,
65: htmlPage);
66: template = decorator.getPage();
67: }
68:
69: return getTemplate(template);
70: }
71:
72: private DecoratorMapper getDecoratorMapper() {
73: Factory factory = Factory.getInstance(new Config(
74: getServletConfig()));
75: DecoratorMapper decoratorMapper = factory.getDecoratorMapper();
76: return decoratorMapper;
77: }
78: }
|