\r
import static java.text.MessageFormat.format;\r
\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.argeo.eclipse.ui.ArgeoUiPlugin;\r
+import org.eclipse.core.runtime.Platform;\r
import org.osgi.framework.Bundle;\r
import org.osgi.framework.BundleContext;\r
+import org.osgi.framework.BundleException;\r
import org.osgi.framework.FrameworkUtil;\r
import org.osgi.framework.InvalidSyntaxException;\r
import org.osgi.util.tracker.ServiceTracker;\r
\r
/**\r
* @author Heiko Seeberger\r
+ * @author Mathieu Baudier\r
*/\r
-public class ApplicationContextTracker {\r
+class ApplicationContextTracker {\r
+ private final static Log log = LogFactory\r
+ .getLog(ApplicationContextTracker.class);\r
\r
private static final String FILTER = "(&(objectClass=org.springframework.context.ApplicationContext)" //$NON-NLS-1$\r
+ "(org.springframework.context.service.name={0}))"; //$NON-NLS-1$\r
\r
/**\r
* @param contributorBundle\r
- * OSGi bundle for which the Spring application context is to be\r
- * tracked. Must not be null!\r
+ * OSGi bundle for which the Spring application context is to be\r
+ * tracked. Must not be null!\r
* @param factoryBundleContext\r
- * BundleContext object which can be used to track services\r
+ * BundleContext object which can be used to track services\r
* @throws IllegalArgumentException\r
- * if the given bundle is null.\r
+ * if the given bundle is null.\r
*/\r
- public ApplicationContextTracker(final Bundle contributorBundle, final BundleContext factoryBundleContext) {\r
- final String filter = format(FILTER, contributorBundle.getSymbolicName());\r
+ public ApplicationContextTracker(final Bundle contributorBundle,\r
+ final BundleContext factoryBundleContext) {\r
+ final String filter = format(FILTER, contributorBundle\r
+ .getSymbolicName());\r
try {\r
applicationContextServiceTracker = new ServiceTracker(\r
- factoryBundleContext, FrameworkUtil.createFilter(filter), null);\r
+ factoryBundleContext, FrameworkUtil.createFilter(filter),\r
+ null);\r
applicationContextServiceTracker.open();\r
} catch (final InvalidSyntaxException e) {\r
e.printStackTrace();\r
close();\r
super.finalize();\r
}\r
+\r
+ static ApplicationContext getApplicationContext(String bundleSymbolicName) {\r
+ Bundle contributorBundle = Platform.getBundle(bundleSymbolicName);\r
+ return getApplicationContext(contributorBundle);\r
+ }\r
+\r
+ static ApplicationContext getApplicationContext(Bundle contributorBundle) {\r
+ if (log.isTraceEnabled())\r
+ log\r
+ .trace("Get application context for bundle "\r
+ + contributorBundle);\r
+\r
+ if (contributorBundle.getState() != Bundle.ACTIVE\r
+ && contributorBundle.getState() != Bundle.STARTING) {\r
+ try {\r
+ log.info("Starting bundle: "\r
+ + contributorBundle.getSymbolicName());\r
+ contributorBundle.start();\r
+ } catch (BundleException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ final ApplicationContextTracker applicationContextTracker = new ApplicationContextTracker(\r
+ contributorBundle, ArgeoUiPlugin.getDefault()\r
+ .getBundleContext());\r
+ ApplicationContext applicationContext = null;\r
+ try {\r
+ applicationContext = applicationContextTracker\r
+ .getApplicationContext();\r
+ } finally {\r
+ applicationContextTracker.close();\r
+ }\r
+ return applicationContext;\r
+ }\r
}\r