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  {
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          // absolute path
51          if (StringUtils.startsWith(path, "/"))
52          {
53              return path;
54          }
55  
56          // undefined, defaults to index
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  }