/src/main/java/com/atlassian/confluence/plugins/whotofollow/RecommendationsMacro.java

https://bitbucket.org/jhoarau/confluence-whotofollow · Java · 92 lines · 78 code · 14 blank · 0 comment · 2 complexity · 262f22f7e9ff10d068d5536ad1f9af13 MD5 · raw file

  1. package com.atlassian.confluence.plugins.whotofollow;
  2. import com.atlassian.confluence.content.render.xhtml.ConversionContext;
  3. import com.atlassian.confluence.macro.Macro;
  4. import com.atlassian.confluence.macro.MacroExecutionException;
  5. import com.atlassian.confluence.plugins.whotofollow.engine.AggregateRecommendationEngine;
  6. import com.atlassian.confluence.renderer.radeox.macros.MacroUtils;
  7. import com.atlassian.confluence.user.AuthenticatedUserThreadLocal;
  8. import com.atlassian.confluence.util.velocity.VelocityUtils;
  9. import com.atlassian.crowd.embedded.api.User;
  10. import com.atlassian.plugin.webresource.WebResourceManager;
  11. import com.atlassian.renderer.RenderContext;
  12. import com.atlassian.renderer.v2.RenderMode;
  13. import com.atlassian.renderer.v2.macro.BaseMacro;
  14. import com.atlassian.renderer.v2.macro.MacroException;
  15. import org.apache.commons.lang.StringUtils;
  16. import java.util.Collection;
  17. import java.util.Map;
  18. public class RecommendationsMacro extends BaseMacro implements Macro
  19. {
  20. private final WebResourceManager webResourceManager;
  21. private final AggregateRecommendationEngine recommendationEngine;
  22. public RecommendationsMacro(WebResourceManager webResourceManager, AggregateRecommendationEngine recommendationEngine)
  23. {
  24. this.webResourceManager = webResourceManager;
  25. this.recommendationEngine = recommendationEngine;
  26. }
  27. @Override
  28. public String execute(Map<String, String> parameters, String body, ConversionContext conversionContext) throws MacroExecutionException
  29. {
  30. try
  31. {
  32. return execute(parameters, body, (RenderContext) null);
  33. }
  34. catch (MacroException e)
  35. {
  36. throw new MacroExecutionException(e);
  37. }
  38. }
  39. @Override
  40. public BodyType getBodyType()
  41. {
  42. return BodyType.NONE;
  43. }
  44. @Override
  45. public OutputType getOutputType()
  46. {
  47. return OutputType.BLOCK;
  48. }
  49. @Override
  50. public boolean hasBody()
  51. {
  52. return true;
  53. }
  54. @Override
  55. public RenderMode getBodyRenderMode()
  56. {
  57. return RenderMode.NO_RENDER;
  58. }
  59. @Override
  60. public String execute(Map parameters, String body, RenderContext renderContext) throws MacroException
  61. {
  62. String username = (String) parameters.get("username");
  63. if (StringUtils.isBlank(username))
  64. {
  65. username = AuthenticatedUserThreadLocal.getUsername();
  66. }
  67. String theme = (String) parameters.get("theme");
  68. if (StringUtils.isBlank(theme))
  69. {
  70. theme = "big";
  71. }
  72. Map<String,Object> context = MacroUtils.defaultVelocityContext();
  73. Collection<User> users = recommendationEngine.recommendFollowings(username);
  74. context.put("recommendations", users);
  75. context.put("theme", theme);
  76. return VelocityUtils.getRenderedTemplate("/templates/recommendations-macro.vm", context);
  77. }
  78. }