1 package com.atlassian.plugin.osgi.factory.transform.stage;
2
3 import com.atlassian.plugin.osgi.factory.transform.PluginTransformationException;
4 import com.atlassian.plugin.osgi.factory.transform.TransformContext;
5 import com.atlassian.plugin.osgi.factory.transform.TransformStage;
6 import com.atlassian.plugin.osgi.factory.transform.model.ComponentImport;
7 import com.atlassian.plugin.util.PluginUtils;
8 import org.dom4j.Document;
9 import org.dom4j.Element;
10
11
12
13
14
15
16 public class ComponentImportSpringStage implements TransformStage
17 {
18
19 private static final String SPRING_XML = "META-INF/spring/atlassian-plugins-component-imports.xml";
20
21 public void execute(TransformContext context) throws PluginTransformationException
22 {
23 if (SpringHelper.shouldGenerateFile(context, SPRING_XML))
24 {
25 Document springDoc = SpringHelper.createSpringDocument();
26 Element root = springDoc.getRootElement();
27
28 for (ComponentImport comp: context.getComponentImports().values())
29 {
30 if (!PluginUtils.doesModuleElementApplyToApplication(comp.getSource(), context.getApplicationKeys()))
31 {
32 continue;
33 }
34 Element osgiReference = root.addElement("osgi:reference");
35 osgiReference.addAttribute("id", comp.getKey());
36
37 if (comp.getFilter() != null)
38 {
39 osgiReference.addAttribute("filter", comp.getFilter());
40 }
41
42 Element interfaces = osgiReference.addElement("osgi:interfaces");
43 for (String infName : comp.getInterfaces())
44 {
45 context.getExtraImports().add(infName.substring(0, infName.lastIndexOf('.')));
46 Element e = interfaces.addElement("beans:value");
47 e.setText(infName);
48 }
49 }
50 if (root.elements().size() > 0)
51 {
52 context.setShouldRequireSpring(true);
53 context.getFileOverrides().put(SPRING_XML, SpringHelper.documentToBytes(springDoc));
54 }
55 }
56 }
57 }