1 package com.atlassian.plugin.osgi.factory;
2
3 import com.atlassian.plugin.Application;
4 import com.atlassian.plugin.ModuleDescriptor;
5 import com.atlassian.plugin.ModuleDescriptorFactory;
6 import com.atlassian.plugin.Plugin;
7 import com.atlassian.plugin.PluginParseException;
8 import com.atlassian.plugin.parsers.XmlDescriptorParser;
9 import org.dom4j.Element;
10
11 import java.io.InputStream;
12 import java.util.Set;
13
14 import static com.google.common.base.Preconditions.checkNotNull;
15
16
17
18
19
20
21
22 public class OsgiPluginXmlDescriptorParser extends XmlDescriptorParser {
23
24
25
26
27
28 public OsgiPluginXmlDescriptorParser(final InputStream source, final Set<Application> applications) throws PluginParseException {
29 super(checkNotNull(source, "The descriptor source must not be null"), applications);
30 }
31
32
33
34
35
36
37
38
39
40
41 public OsgiPluginXmlDescriptorParser(final InputStream source, final Iterable<InputStream> supplementalSources,
42 final Set<Application> applications) throws PluginParseException {
43 super(source, supplementalSources, applications);
44 }
45
46
47
48
49
50
51
52
53
54
55
56 @Override
57 protected ModuleDescriptor<?> createModuleDescriptor(final Plugin plugin, final Element element,
58 final ModuleDescriptorFactory moduleDescriptorFactory) throws PluginParseException {
59 final ModuleDescriptor<?> descriptor = super.createModuleDescriptor(plugin, element, moduleDescriptorFactory);
60
61 passModuleDescriptorToPlugin(plugin, element, descriptor);
62
63 return descriptor;
64 }
65
66
67
68
69 @Override
70 public ModuleDescriptor<?> addModule(final ModuleDescriptorFactory moduleDescriptorFactory, final Plugin plugin,
71 final Element module) {
72 final ModuleDescriptor<?> descriptor = super.addModule(moduleDescriptorFactory, plugin, module);
73
74 passModuleDescriptorToPlugin(plugin, module, descriptor);
75
76 return descriptor;
77 }
78
79
80
81
82 private void passModuleDescriptorToPlugin(final Plugin plugin, final Element element, final ModuleDescriptor<?> descriptor) {
83 if (plugin instanceof OsgiPlugin) {
84 final String key;
85 if (descriptor == null) {
86 key = element.attributeValue("key");
87 } else {
88 key = descriptor.getKey();
89 }
90
91 ((OsgiPlugin) plugin).addModuleDescriptorElement(key, element);
92 }
93 }
94 }