package org.argeo.init.a2; import org.argeo.init.osgi.OsgiBootUtils; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.Version; /** A running OSGi bundle context seen as a {@link AbstractProvisioningSource}. */ class OsgiContext extends AbstractProvisioningSource { private final BundleContext bc; public OsgiContext(BundleContext bc) { super(false); this.bc = bc; } public OsgiContext() { super(false); Bundle bundle = FrameworkUtil.getBundle(OsgiContext.class); if (bundle == null) throw new IllegalArgumentException( "OSGi Boot bundle must be started or a bundle context must be specified"); this.bc = bundle.getBundleContext(); } void load() { A2Contribution runtimeContribution = getOrAddContribution( A2Contribution.RUNTIME); for (Bundle bundle : bc.getBundles()) { // OsgiBootUtils.debug(bundle.getDataFile("/")); String componentId = bundle.getSymbolicName(); Version version = bundle.getVersion(); A2Component component = runtimeContribution.getOrAddComponent(componentId); A2Module module = component.getOrAddModule(version, bundle); if (OsgiBootUtils.isDebug()) OsgiBootUtils.debug("Registered " + module + " (location id: " + bundle.getLocation() + ")"); } } }