1 package com.atlassian.plugins.rest.module.template;
2
3 import java.io.IOException;
4 import java.io.OutputStreamWriter;
5 import java.util.Map;
6
7 import org.apache.commons.lang.StringUtils;
8
9 import com.atlassian.templaterenderer.TemplateRenderer;
10 import com.atlassian.plugins.rest.common.template.Renderer;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.Maps;
13 import com.sun.jersey.api.core.HttpContext;
14
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17
18 public class RendererImpl implements Renderer
19 {
20 private final TemplateRenderer templateRenderer;
21 private final OutputStreamWriter writer;
22 private final HttpContext httpContext;
23 private final HttpServletRequest httpServletRequest;
24 private final HttpServletResponse httpServletResponse;
25
26 RendererImpl(final TemplateRenderer templateRenderer, final OutputStreamWriter writer,
27 final HttpContext httpContext, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
28 {
29 this.templateRenderer = Preconditions.checkNotNull(templateRenderer);
30 this.writer = Preconditions.checkNotNull(writer);
31 this.httpContext = Preconditions.checkNotNull(httpContext);
32 this.httpServletRequest = httpServletRequest;
33 this.httpServletResponse = httpServletResponse;
34 }
35
36 public void render(final Object model, final String template) throws IOException
37 {
38 final Map<String, Object> context = Maps.newHashMap();
39 context.put("it", model);
40 context.put("renderer", this);
41 context.put("httpContext", httpContext);
42 context.put("request", httpServletRequest);
43 context.put("response", httpServletResponse);
44
45 templateRenderer.render(getAbsolutePath(model.getClass(), template), context, writer);
46 }
47
48 private String getAbsolutePath(final Class<?> resourceClass, String path)
49 {
50
51 if (StringUtils.startsWith(path, "/"))
52 {
53 return path;
54 }
55
56
57 if (StringUtils.isEmpty(path) || StringUtils.equals(path, "/"))
58 {
59 path = "index";
60 }
61
62 return getAbsolutePath(resourceClass) + '/' + path;
63 }
64
65 private String getAbsolutePath(final Class<?> resourceClass)
66 {
67 return '/' + resourceClass.getName().replace('.', '/').replace('$', '/');
68 }
69 }