View Javadoc

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          // absolute path
47          if (StringUtils.startsWith(path, "/")) {
48              return path;
49          }
50  
51          // undefined, defaults to index
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  }