PageRenderTime 25ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/plugin/src/main/java/com/atlassian/plugin/remotable/plugin/module/jira/issuepanel/IssuePanelPageModuleDescriptor.java

https://bitbucket.org/rodogu/remotable-plugins
Java | 154 lines | 134 code | 17 blank | 3 comment | 4 complexity | 04a58d76ac33b50007bdf83d8cc30ebd MD5 | raw file
  1. package com.atlassian.plugin.remotable.plugin.module.jira.issuepanel;
  2. import com.atlassian.plugin.ModuleDescriptor;
  3. import com.atlassian.plugin.Plugin;
  4. import com.atlassian.plugin.PluginParseException;
  5. import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
  6. import com.atlassian.plugin.hostcontainer.HostContainer;
  7. import com.atlassian.plugin.module.ModuleFactory;
  8. import com.atlassian.plugin.remotable.plugin.integration.plugins.DescriptorToRegister;
  9. import com.atlassian.plugin.remotable.plugin.integration.plugins.DynamicDescriptorRegistration;
  10. import com.atlassian.plugin.remotable.plugin.module.ConditionProcessor;
  11. import com.atlassian.plugin.remotable.plugin.module.ContainingRemoteCondition;
  12. import com.atlassian.plugin.remotable.plugin.module.IFrameParamsImpl;
  13. import com.atlassian.plugin.remotable.plugin.module.IFrameRendererImpl;
  14. import com.atlassian.plugin.remotable.plugin.module.page.IFrameContextImpl;
  15. import com.atlassian.plugin.remotable.plugin.util.node.Dom4jNode;
  16. import com.atlassian.plugin.remotable.plugin.util.node.Node;
  17. import com.atlassian.plugin.remotable.spi.module.IFrameParams;
  18. import com.atlassian.plugin.remotable.spi.module.IFrameViewIssuePanel;
  19. import com.atlassian.plugin.web.Condition;
  20. import com.atlassian.plugin.web.WebInterfaceManager;
  21. import com.atlassian.plugin.web.descriptors.DefaultWebPanelModuleDescriptor;
  22. import com.atlassian.plugin.web.model.WebPanel;
  23. import com.atlassian.util.concurrent.NotNull;
  24. import org.dom4j.Element;
  25. import org.osgi.framework.BundleContext;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. import java.net.URI;
  29. import static com.atlassian.plugin.remotable.plugin.util.OsgiServiceUtils.getService;
  30. import static com.atlassian.plugin.remotable.spi.util.Dom4jUtils.getOptionalAttribute;
  31. import static com.atlassian.plugin.remotable.spi.util.Dom4jUtils.getRequiredAttribute;
  32. import static com.atlassian.plugin.remotable.spi.util.Dom4jUtils.getRequiredUriAttribute;
  33. import static com.atlassian.plugin.remotable.spi.util.Dom4jUtils.printNode;
  34. import static com.google.common.base.Preconditions.checkNotNull;
  35. /**
  36. * A view issue panel page that loads is contents from an iframe
  37. */
  38. public final class IssuePanelPageModuleDescriptor extends AbstractModuleDescriptor<Void>
  39. {
  40. private final IFrameRendererImpl iFrameRenderer;
  41. private final DynamicDescriptorRegistration dynamicDescriptorRegistration;
  42. private final HostContainer hostContainer;
  43. private final BundleContext bundleContext;
  44. private final ConditionProcessor conditionProcessor;
  45. private Element descriptor;
  46. private String weight;
  47. private String location = "atl.jira.view.issue.right.context";
  48. private URI url;
  49. private final static Logger log = LoggerFactory.getLogger(IssuePanelPageModuleDescriptor.class);
  50. private DynamicDescriptorRegistration.Registration registration;
  51. public IssuePanelPageModuleDescriptor(
  52. ModuleFactory moduleFactory,
  53. IFrameRendererImpl iFrameRenderer,
  54. DynamicDescriptorRegistration dynamicDescriptorRegistration,
  55. HostContainer hostContainer,
  56. BundleContext bundleContext,
  57. ConditionProcessor conditionProcessor)
  58. {
  59. super(moduleFactory);
  60. this.iFrameRenderer = checkNotNull(iFrameRenderer);
  61. this.dynamicDescriptorRegistration = checkNotNull(dynamicDescriptorRegistration);
  62. this.hostContainer = checkNotNull(hostContainer);
  63. this.bundleContext = checkNotNull(bundleContext);
  64. this.conditionProcessor = checkNotNull(conditionProcessor);
  65. }
  66. @Override
  67. public Void getModule()
  68. {
  69. return null;
  70. }
  71. @Override
  72. public void init(@NotNull Plugin plugin, @NotNull Element element) throws PluginParseException
  73. {
  74. super.init(plugin, element);
  75. this.descriptor = element;
  76. this.location = getOptionalAttribute(element, "location", location);
  77. this.weight = getOptionalAttribute(element, "weight", null);
  78. this.url = getRequiredUriAttribute(element, "url");
  79. }
  80. @Override
  81. public void enabled()
  82. {
  83. super.enabled();
  84. final String moduleKey = "issue-panel-" + getRequiredAttribute(descriptor, "key");
  85. final String panelName = getRequiredAttribute(descriptor, "name");
  86. Element desc = descriptor.createCopy();
  87. desc.addAttribute("key", moduleKey);
  88. desc.addAttribute("i18n-key", panelName);
  89. desc.addAttribute("location", location);
  90. if (weight != null)
  91. {
  92. desc.addAttribute("weight", weight);
  93. }
  94. desc.addElement("label").addAttribute("key", panelName);
  95. desc.addAttribute("class", IFrameViewIssuePanel.class.getName());
  96. Node node = new Dom4jNode(descriptor);
  97. Condition condition = conditionProcessor.process(node, desc, getPluginKey(), "#" + moduleKey);
  98. log.debug("generated web panel: " + printNode(desc));
  99. ModuleDescriptor<WebPanel> moduleDescriptor = createWebPanelModuleDescriptor(moduleKey, desc, condition, new IFrameParamsImpl(node));
  100. this.registration = dynamicDescriptorRegistration.registerDescriptors(getPlugin(), new DescriptorToRegister(moduleDescriptor));
  101. }
  102. @Override
  103. public void disabled()
  104. {
  105. super.disabled();
  106. if (registration != null)
  107. {
  108. registration.unregister();
  109. }
  110. }
  111. private ModuleDescriptor<WebPanel> createWebPanelModuleDescriptor(
  112. final String moduleKey,
  113. final Element desc,
  114. final Condition condition,
  115. final IFrameParams iFrameParams)
  116. {
  117. try
  118. {
  119. ModuleDescriptor<WebPanel> moduleDescriptor = new DefaultWebPanelModuleDescriptor(hostContainer, new ModuleFactory()
  120. {
  121. @Override
  122. public <T> T createModule(String name, ModuleDescriptor<T> moduleDescriptor) throws PluginParseException
  123. {
  124. return (T) new IFrameViewIssuePanel(
  125. iFrameRenderer,
  126. new IFrameContextImpl(getPluginKey(), url, moduleKey, iFrameParams), condition instanceof ContainingRemoteCondition);
  127. }
  128. }, getService(bundleContext, WebInterfaceManager.class));
  129. moduleDescriptor.init(conditionProcessor.getLoadablePlugin(getPlugin()), desc);
  130. return moduleDescriptor;
  131. }
  132. catch (Exception ex)
  133. {
  134. throw new PluginParseException(ex);
  135. }
  136. }
  137. }