1 package com.atlassian.refapp.decorator;
2
3 import com.atlassian.templaterenderer.TemplateRenderer;
4
5 import javax.servlet.Filter;
6 import javax.servlet.FilterChain;
7 import javax.servlet.FilterConfig;
8 import javax.servlet.ServletException;
9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import java.io.IOException;
14 import java.util.HashMap;
15 import java.util.Map;
16
17 public class DecoratorServletFilter implements Filter {
18 private final TemplateRenderer templateRenderer;
19
20 public DecoratorServletFilter(TemplateRenderer templateRenderer) {
21 this.templateRenderer = templateRenderer;
22 }
23
24 public void init(FilterConfig filterConfig) throws ServletException {
25 }
26
27 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
28 throws IOException, ServletException {
29 if (!(servletRequest instanceof HttpServletRequest)) {
30 filterChain.doFilter(servletRequest, servletResponse);
31 return;
32 }
33 HttpServletRequest request = (HttpServletRequest) servletRequest;
34 HttpServletResponse response = (HttpServletResponse) servletResponse;
35 if (request.getServletPath().equals("/index.jsp") && !request.getRequestURI().contains("index.jsp")) {
36
37 render("/templates/index.vm", request, response);
38 return;
39 }
40 if (request.getServletPath().equals("/admin")) {
41 render("/templates/admin.vm", request, response);
42 return;
43 }
44 filterChain.doFilter(servletRequest, servletResponse);
45 }
46
47 public void destroy() {
48 }
49
50 private void render(String template, HttpServletRequest request, HttpServletResponse response) throws
51 IOException {
52 response.setContentType("text/html");
53 templateRenderer.render(template, getContext(request), response.getWriter());
54 }
55
56 private Map<String, Object> getContext(HttpServletRequest request) {
57 Map<String, Object> context = new HashMap<String, Object>();
58 context.put("request", request);
59 return context;
60 }
61 }