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 private final TemplateRenderer templateRenderer;
20 private final OutputStreamWriter writer;
21 private final HttpContext httpContext;
22 private final HttpServletRequest httpServletRequest;
23 private final HttpServletResponse httpServletResponse;
24
25 RendererImpl(final TemplateRenderer templateRenderer, final OutputStreamWriter writer,
26 final HttpContext httpContext, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
27 this.templateRenderer = Preconditions.checkNotNull(templateRenderer);
28 this.writer = Preconditions.checkNotNull(writer);
29 this.httpContext = Preconditions.checkNotNull(httpContext);
30 this.httpServletRequest = httpServletRequest;
31 this.httpServletResponse = httpServletResponse;
32 }
33
34 public void render(final Object model, final String template) throws IOException {
35 final Map<String, Object> context = Maps.newHashMap();
36 context.put("it", model);
37 context.put("renderer", this);
38 context.put("httpContext", httpContext);
39 context.put("request", httpServletRequest);
40 context.put("response", httpServletResponse);
41
42 templateRenderer.render(getAbsolutePath(model.getClass(), template), context, writer);
43 }
44
45 private String getAbsolutePath(final Class<?> resourceClass, String path) {
46
47 if (StringUtils.startsWith(path, "/")) {
48 return path;
49 }
50
51
52 if (StringUtils.isEmpty(path) || StringUtils.equals(path, "/")) {
53 path = "index";
54 }
55
56 return getAbsolutePath(resourceClass) + '/' + path;
57 }
58
59 private String getAbsolutePath(final Class<?> resourceClass) {
60 return '/' + resourceClass.getName().replace('.', '/').replace('$', '/');
61 }
62 }