in src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java [94:135]
public boolean execute(final Logger logger, final BundleContext ctx) throws Exception {
final Set<String> refreshBundles = new HashSet<String>();
// Uninstall all instances of our bundle within our version range
boolean refreshSystemBundle = false;
for(final Bundle b : ctx.getBundles()) {
if (b.getSymbolicName().equals(bundleSymbolicName)) {
if (versionRange == null || versionRange.includes(b.getVersion())) {
logger.log(Logger.LOG_INFO,
this + ": uninstalling bundle version " + b.getVersion());
final String fragmentHostHeader = getFragmentHostHeader(b);
if (fragmentHostHeader != null) {
if ( isSystemBundleFragment(fragmentHostHeader) ) {
logger.log(Logger.LOG_INFO, this + ": Need to do a system bundle refresh");
refreshSystemBundle = true;
} else {
logger.log(Logger.LOG_INFO, this + ": Need to do a refresh of the bundle's host: " + fragmentHostHeader);
refreshBundles.add(fragmentHostHeader);
}
}
b.uninstall();
} else {
logger.log(Logger.LOG_INFO,
this + ": bundle version (" + b.getVersion()+ " not in range, ignored");
}
}
}
if ( refreshBundles.size() > 0 ) {
final List<Bundle> bundles = new ArrayList<Bundle>();
for(final Bundle b : ctx.getBundles() ) {
if ( refreshBundles.contains(b.getSymbolicName()) ) {
logger.log(Logger.LOG_INFO, this + ": Found host bundle to refresh " + b.getBundleId());
bundles.add(b);
}
}
if ( bundles.size() > 0 ) {
final FrameworkWiring fw = ctx.getBundle().adapt(FrameworkWiring.class);
fw.refreshBundles(bundles);
}
}
return refreshSystemBundle;
}