/plugin/src/main/java/com/atlassian/plugin/remotable/plugin/module/jira/searchrequestview/RemoteSearchRequestViewModuleDescriptor.java

https://bitbucket.org/rodogu/remotable-plugins · Java · 134 lines · 117 code · 14 blank · 3 comment · 2 complexity · fb8e58a880972db2ad9c35b28f74f420 MD5 · raw file

  1. package com.atlassian.plugin.remotable.plugin.module.jira.searchrequestview;
  2. import com.atlassian.jira.issue.views.util.SearchRequestViewBodyWriterUtil;
  3. import com.atlassian.jira.plugin.searchrequestview.SearchRequestURLHandler;
  4. import com.atlassian.jira.plugin.searchrequestview.SearchRequestView;
  5. import com.atlassian.jira.plugin.searchrequestview.SearchRequestViewModuleDescriptor;
  6. import com.atlassian.jira.plugin.searchrequestview.SearchRequestViewModuleDescriptorImpl;
  7. import com.atlassian.jira.plugin.webfragment.descriptors.ConditionDescriptorFactory;
  8. import com.atlassian.jira.security.JiraAuthenticationContext;
  9. import com.atlassian.plugin.ModuleDescriptor;
  10. import com.atlassian.plugin.Plugin;
  11. import com.atlassian.plugin.PluginParseException;
  12. import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
  13. import com.atlassian.plugin.module.ModuleFactory;
  14. import com.atlassian.plugin.remotable.plugin.integration.plugins.DescriptorToRegister;
  15. import com.atlassian.plugin.remotable.plugin.integration.plugins.DynamicDescriptorRegistration;
  16. import com.atlassian.sal.api.ApplicationProperties;
  17. import com.atlassian.templaterenderer.TemplateRenderer;
  18. import com.atlassian.util.concurrent.NotNull;
  19. import org.dom4j.Element;
  20. import java.net.URI;
  21. import static com.atlassian.jira.ComponentManager.getComponent;
  22. import static com.atlassian.plugin.remotable.spi.util.Dom4jUtils.getOptionalAttribute;
  23. import static com.atlassian.plugin.remotable.spi.util.Dom4jUtils.getRequiredUriAttribute;
  24. import static com.google.common.base.Preconditions.checkNotNull;
  25. /**
  26. * Generates a search request where the browser is redirected to a remote url
  27. */
  28. public final class RemoteSearchRequestViewModuleDescriptor extends AbstractModuleDescriptor<Void>
  29. {
  30. private final DynamicDescriptorRegistration dynamicDescriptorRegistration;
  31. private final ApplicationProperties applicationProperties;
  32. private final SearchRequestViewBodyWriterUtil searchRequestViewBodyWriterUtil;
  33. private final TemplateRenderer templateRenderer;
  34. private final ConditionDescriptorFactory conditionDescriptorFactory;
  35. private Element descriptor;
  36. private URI url;
  37. private DynamicDescriptorRegistration.Registration registration;
  38. public RemoteSearchRequestViewModuleDescriptor(
  39. ModuleFactory moduleFactory,
  40. DynamicDescriptorRegistration dynamicDescriptorRegistration,
  41. ApplicationProperties applicationProperties,
  42. SearchRequestViewBodyWriterUtil searchRequestViewBodyWriterUtil,
  43. TemplateRenderer templateRenderer, ConditionDescriptorFactory conditionDescriptorFactory)
  44. {
  45. super(moduleFactory);
  46. this.dynamicDescriptorRegistration = checkNotNull(dynamicDescriptorRegistration);
  47. this.applicationProperties = checkNotNull(applicationProperties);
  48. this.searchRequestViewBodyWriterUtil = checkNotNull(searchRequestViewBodyWriterUtil);
  49. this.templateRenderer = checkNotNull(templateRenderer);
  50. this.conditionDescriptorFactory = checkNotNull(conditionDescriptorFactory);
  51. }
  52. @Override
  53. public Void getModule()
  54. {
  55. return null;
  56. }
  57. @Override
  58. public void init(@NotNull Plugin plugin, @NotNull Element element) throws PluginParseException
  59. {
  60. super.init(plugin, element);
  61. this.descriptor = element;
  62. this.url = getRequiredUriAttribute(element, "url");
  63. }
  64. @Override
  65. public void enabled()
  66. {
  67. super.enabled();
  68. final String moduleKey = "search-request-view-" + getKey();
  69. Element desc = descriptor.createCopy();
  70. desc.addAttribute("key", moduleKey);
  71. desc.addAttribute("class", SearchRequestView.class.getName());
  72. desc.addAttribute("order", getOptionalAttribute(descriptor, "weight", 1000));
  73. desc.addAttribute("contentType", "text/html");
  74. desc.addAttribute("fileExtension", "html");
  75. SearchRequestViewModuleDescriptor moduleDescriptor = createDescriptor(desc);
  76. this.registration = dynamicDescriptorRegistration.registerDescriptors(getPlugin(), new DescriptorToRegister(moduleDescriptor));
  77. }
  78. @Override
  79. public void disabled()
  80. {
  81. super.disabled();
  82. if (registration != null)
  83. {
  84. registration.unregister();
  85. }
  86. }
  87. private SearchRequestViewModuleDescriptor createDescriptor(Element element)
  88. {
  89. final String title = getName();
  90. try
  91. {
  92. element.addAttribute("system", "true");
  93. ModuleFactory moduleFactory = new ModuleFactory()
  94. {
  95. @Override
  96. public <T> T createModule(String name, ModuleDescriptor<T> moduleDescriptor) throws
  97. PluginParseException
  98. {
  99. return (T) new RemoteSearchRequestView(applicationProperties,
  100. searchRequestViewBodyWriterUtil,
  101. templateRenderer,
  102. getPluginKey(),
  103. url,
  104. title);
  105. }
  106. };
  107. SearchRequestViewModuleDescriptor descriptor = new SearchRequestViewModuleDescriptorImpl(
  108. getComponent(JiraAuthenticationContext.class),
  109. getComponent(SearchRequestURLHandler.class),
  110. moduleFactory,
  111. conditionDescriptorFactory);
  112. descriptor.init(getPlugin(), element);
  113. return descriptor;
  114. }
  115. catch (Exception ex)
  116. {
  117. throw new PluginParseException(ex);
  118. }
  119. }
  120. }