public boolean execute()

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;
    }