PageRenderTime 56ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/plugin/src/main/java/com/atlassian/developer/calliope/plugin/macro/TemplateRendererMacro.java

https://bitbucket.org/rtalusan/calliope
Java | 65 lines | 54 code | 10 blank | 1 comment | 0 complexity | 8709e6a5ce923827816660fb41644d84 MD5 | raw file
  1. package com.atlassian.developer.calliope.plugin.macro;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.io.StringWriter;
  5. import java.io.Writer;
  6. import java.util.Map;
  7. import com.atlassian.renderer.RenderContext;
  8. import com.atlassian.renderer.v2.RenderMode;
  9. import com.atlassian.renderer.v2.macro.BaseMacro;
  10. import com.atlassian.renderer.v2.macro.MacroException;
  11. import com.atlassian.templaterenderer.TemplateRenderer;
  12. import com.google.common.collect.ImmutableMap;
  13. import static com.atlassian.renderer.v2.RenderMode.F_LINEBREAKS;
  14. import static com.atlassian.renderer.v2.RenderMode.F_PARAGRAPHS;
  15. import static com.atlassian.renderer.v2.RenderMode.suppress;
  16. import static com.google.common.base.Preconditions.checkNotNull;
  17. public abstract class TemplateRendererMacro extends BaseMacro
  18. {
  19. private final TemplateRenderer renderer;
  20. private final String path;
  21. protected TemplateRendererMacro(TemplateRenderer renderer, String path)
  22. {
  23. this.renderer = renderer;
  24. this.path = path;
  25. }
  26. public boolean hasBody()
  27. {
  28. return true;
  29. }
  30. public RenderMode getBodyRenderMode()
  31. {
  32. return suppress(F_LINEBREAKS | F_PARAGRAPHS);
  33. }
  34. @SuppressWarnings("unchecked")
  35. public final String execute(final Map parameters, String body, RenderContext renderContext) throws MacroException
  36. {
  37. Writer writer = new StringWriter();
  38. try
  39. {
  40. renderer.render(path, getTemplateRendererContext(parameters, body), writer);
  41. }
  42. catch (IOException e)
  43. {
  44. PrintWriter printWriter = new PrintWriter(writer);
  45. e.printStackTrace(printWriter);
  46. printWriter.close();
  47. }
  48. return writer.toString();
  49. }
  50. // TODO: terrible api design for subclasses; fix.
  51. protected Map<String, Object> getTemplateRendererContext(Map<String, String> parameters, String body)
  52. {
  53. return ImmutableMap.<String, Object> of("body", checkNotNull(body, "body"));
  54. }
  55. }