You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/04/07 07:35:00 UTC

svn commit: r1738091 - /sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java

Author: cziegeler
Date: Thu Apr  7 05:35:00 2016
New Revision: 1738091

URL: http://svn.apache.org/viewvc?rev=1738091&view=rev
Log:
SLING-5641 : Detection of system bundle fragment is incomplete

Modified:
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java?rev=1738091&r1=1738090&r2=1738091&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/bootstrapcommands/UninstallBundleCommand.java Thu Apr  7 05:35:00 2016
@@ -72,19 +72,26 @@ class UninstallBundleCommand implements
      * Gets the bundle's Fragment-Host header.
      */
     private static String getFragmentHostHeader(final Bundle b) {
-        return (String) b.getHeaders().get( Constants.FRAGMENT_HOST );
+        return b.getHeaders().get( Constants.FRAGMENT_HOST );
     }
 
-    private boolean isSystemBundleFragment(final Bundle installedBundle) {
-        final String fragmentHeader = (String) installedBundle.getHeaders().get(
-            Constants.FRAGMENT_HOST);
-        return fragmentHeader != null
-            && fragmentHeader.indexOf(Constants.EXTENSION_DIRECTIVE) > 0;
+    /**
+     * Check whether this is a system bundle fragment.
+     * In this case the symbolic name alias "system.bundle" is used.
+     * @param fragmentHeader The fragment header
+     * @return {@code true} if system bundle fragment.
+     */
+    private boolean isSystemBundleFragment(final String fragmentHeader) {
+        final int pos = fragmentHeader.indexOf(";");
+        final String symbolicName = (pos == -1 ? fragmentHeader : fragmentHeader.substring(0, pos));
+
+        return "system.bundle".equals(symbolicName.trim());
     }
 
     /**
      * @see org.apache.sling.launchpad.base.impl.bootstrapcommands.Command#execute(org.apache.felix.framework.Logger, org.osgi.framework.BundleContext)
      */
+    @Override
     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
@@ -96,7 +103,7 @@ class UninstallBundleCommand implements
                             this + ": uninstalling bundle version " + b.getVersion());
                     final String fragmentHostHeader = getFragmentHostHeader(b);
                     if (fragmentHostHeader != null) {
-                        if ( isSystemBundleFragment(b) ) {
+                        if ( isSystemBundleFragment(fragmentHostHeader) ) {
                             logger.log(Logger.LOG_INFO, this + ": Need to do a system bundle refresh");
                             refreshSystemBundle = true;
                         } else {
@@ -121,10 +128,10 @@ class UninstallBundleCommand implements
                 }
             }
             if ( bundles.size() > 0 ) {
-                final ServiceReference paRef = ctx.getServiceReference(PackageAdmin.class.getName());
+                final ServiceReference<PackageAdmin> paRef = ctx.getServiceReference(PackageAdmin.class);
                 if ( paRef != null ) {
                     try {
-                        final PackageAdmin pa = (PackageAdmin)ctx.getService(paRef);
+                        final PackageAdmin pa = ctx.getService(paRef);
                         if ( pa != null ) {
                             pa.refreshPackages(bundles.toArray(new Bundle[bundles.size()]));
                         }
@@ -137,6 +144,7 @@ class UninstallBundleCommand implements
         return refreshSystemBundle;
     }
 
+    @Override
     public Command parse(String commandLine) throws ParseException {
         if(commandLine.startsWith(CMD_PREFIX)) {
             final String [] s = commandLine.split(" ");