1 package it.com.atlassian.plugin.osgi.spring;
2
3 import java.io.File;
4
5 import com.atlassian.plugin.JarPluginArtifact;
6 import com.atlassian.plugin.osgi.PluginInContainerTestBase;
7 import com.atlassian.plugin.test.PluginJarBuilder;
8
9 public class TestApplicationContextPreProcessor extends PluginInContainerTestBase
10 {
11 public void testCustomPreProcessor() throws Exception
12 {
13 new PluginJarBuilder("testPreProcessor")
14 .addFormattedResource("atlassian-plugin.xml",
15 "<atlassian-plugin name='Test' key='test.pre.plugin' pluginsVersion='2'>",
16 " <plugin-info>",
17 " <version>1.0</version>",
18 " </plugin-info>",
19 " <component key='obj' class='my.CustomProcessor' public='true' interface='com.atlassian.plugin.osgi.spring.external.ApplicationContextPreProcessor'/>",
20 "</atlassian-plugin>")
21 .addFormattedJava("my.StaticFieldBeanFactoryPostProcessor",
22 "package my;",
23 "import org.springframework.beans.BeansException;",
24 "import org.springframework.beans.factory.config.BeanDefinition;",
25 "import org.springframework.beans.factory.config.BeanFactoryPostProcessor;",
26 "import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;",
27 "public class StaticFieldBeanFactoryPostProcessor implements BeanFactoryPostProcessor {",
28 " public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {",
29 " String[] names = beanFactory.getBeanDefinitionNames();" +
30 " for (int x=0; x<names.length; x++) {",
31 " BeanDefinition def = beanFactory.getBeanDefinition(names[x]);",
32 " try {",
33 " Class clazz = beanFactory.getBeanClassLoader().loadClass(def.getBeanClassName());",
34 " if (clazz.getField('name') != null) {",
35 " clazz.getField('name').set(clazz, 'changed');",
36 " }",
37 " }",
38 " catch (Exception e) {",
39 " throw new RuntimeException(e);",
40 " }",
41 " }",
42 " }",
43 "}")
44 .addFormattedJava("my.CustomProcessor",
45 "package my;",
46 "import com.atlassian.plugin.osgi.spring.external.ApplicationContextPreProcessor;",
47 "import org.osgi.framework.Bundle;",
48 "import org.springframework.context.ConfigurableApplicationContext;",
49 "public class CustomProcessor implements ApplicationContextPreProcessor {",
50 " public boolean isSpringPoweredBundle(Bundle bundle) { return true; }",
51 " public void process(Bundle bundle, ConfigurableApplicationContext applicationContext) {",
52 " applicationContext.addBeanFactoryPostProcessor(new StaticFieldBeanFactoryPostProcessor());",
53 " }",
54 "}")
55 .build(pluginsDir);
56 initPluginManager();
57
58 File plugin = new PluginJarBuilder("testPreProcessor")
59 .addFormattedResource("atlassian-plugin.xml",
60 "<atlassian-plugin name='Test' key='test.pre.client' pluginsVersion='2'>",
61 " <plugin-info>",
62 " <version>1.0</version>",
63 " </plugin-info>",
64 " <component key='obj' class='my.Foo' />",
65 "</atlassian-plugin>")
66 .addFormattedJava("my.Foo",
67 "package my;",
68 "public class Foo {",
69 " public volatile static String name = 'original';",
70 "}")
71 .build();
72 pluginManager.installPlugin(new JarPluginArtifact(plugin));
73
74 Class<Object> fooClass = pluginManager.getPlugin("test.pre.client").loadClass("my.Foo", null);
75 assertEquals("changed", fooClass.getField("name").get(fooClass));
76 }
77 }