You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2013/10/24 16:31:48 UTC

svn commit: r1535391 - in /karaf/trunk: bundle/command/src/main/java/org/apache/karaf/bundle/command/Diag.java package/command/src/main/java/org/apache/karaf/packages/command/Exports.java

Author: cschneider
Date: Thu Oct 24 14:31:47 2013
New Revision: 1535391

URL: http://svn.apache.org/r1535391
Log:
KARAF-2527 move duplicate package reporting to package:exports

Modified:
    karaf/trunk/bundle/command/src/main/java/org/apache/karaf/bundle/command/Diag.java
    karaf/trunk/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java

Modified: karaf/trunk/bundle/command/src/main/java/org/apache/karaf/bundle/command/Diag.java
URL: http://svn.apache.org/viewvc/karaf/trunk/bundle/command/src/main/java/org/apache/karaf/bundle/command/Diag.java?rev=1535391&r1=1535390&r2=1535391&view=diff
==============================================================================
--- karaf/trunk/bundle/command/src/main/java/org/apache/karaf/bundle/command/Diag.java (original)
+++ karaf/trunk/bundle/command/src/main/java/org/apache/karaf/bundle/command/Diag.java Thu Oct 24 14:31:47 2013
@@ -16,20 +16,13 @@
  */
 package org.apache.karaf.bundle.command;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
 
 import org.apache.karaf.bundle.core.BundleInfo;
 import org.apache.karaf.bundle.core.BundleState;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.util.ShellUtil;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.Version;
-import org.osgi.framework.wiring.BundleCapability;
-import org.osgi.framework.wiring.BundleRevision;
 
 @Command(scope = "bundle", name = "diag", description = "Displays diagnostic information why a bundle is not Active")
 public class Diag extends BundlesCommand {
@@ -39,7 +32,6 @@ public class Diag extends BundlesCommand
     }
 
     protected void doExecute(List<Bundle> bundles) throws Exception {
-        checkDuplicateExports();
         for (Bundle bundle : bundles) {
             BundleInfo info = bundleService.getInfo(bundle);
             if (info.getState() == BundleState.Failure || info.getState() == BundleState.Waiting
@@ -54,48 +46,4 @@ public class Diag extends BundlesCommand
         }
     }
 
-    private void checkDuplicateExports() {
-        Bundle[] bundles = bundleContext.getBundles();
-        SortedMap<String, PackageVersion> packageVersionMap = new TreeMap<String, Diag.PackageVersion>();
-        for (Bundle bundle : bundles) {
-            BundleRevision rev = bundle.adapt(BundleRevision.class);
-            if (rev!=null) {
-                List<BundleCapability> caps = rev.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE);
-                for (BundleCapability cap : caps) {
-                    Map<String, Object> attr = cap.getAttributes();
-                    String packageName = (String)attr.get(BundleRevision.PACKAGE_NAMESPACE);
-                    Version version = (Version)attr.get("version");
-                    String key = packageName + ":" + version.toString();
-                    PackageVersion pVer = packageVersionMap.get(key);
-                    if (pVer == null) {
-                        pVer = new PackageVersion();
-                        pVer.packageName = packageName;
-                        pVer.version = version;
-                        packageVersionMap.put(key, pVer);
-                    }
-                    pVer.bundles.add(bundle);
-                }
-            }
-        }
-        String title = "Same Package/Version exported by more than one bundle:";
-        System.out.println(title);
-        System.out.println(ShellUtil.getUnderlineString(title));
-        for (String key : packageVersionMap.keySet()) {
-            PackageVersion pVer = packageVersionMap.get(key);
-            if (pVer.bundles.size() > 1) {
-                System.out.print(pVer.packageName + ":" + pVer.version.toString() + " exported by ");
-                for (Bundle bundle : pVer.bundles) {
-                    System.out.print(bundle.getBundleId() + " ");
-                }
-                System.out.println();
-            }
-        }
-        System.out.println();
-    }
-
-    class PackageVersion {
-        String packageName;
-        Version version;
-        List<Bundle> bundles = new ArrayList<Bundle>();
-    }
 }

Modified: karaf/trunk/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java
URL: http://svn.apache.org/viewvc/karaf/trunk/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java?rev=1535391&r1=1535390&r2=1535391&view=diff
==============================================================================
--- karaf/trunk/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java (original)
+++ karaf/trunk/package/command/src/main/java/org/apache/karaf/packages/command/Exports.java Thu Oct 24 14:31:47 2013
@@ -16,20 +16,31 @@
  */
 package org.apache.karaf.packages.command;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.SortedMap;
+import java.util.TreeMap;
 
 import org.apache.karaf.packages.core.PackageService;
 import org.apache.karaf.packages.core.PackageVersion;
 import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
 import org.apache.karaf.shell.table.Col;
 import org.apache.karaf.shell.table.ShellTable;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+import org.osgi.framework.wiring.BundleCapability;
+import org.osgi.framework.wiring.BundleRevision;
 
 @Command(scope = "package", name = "exports", description = "Lists exported packages and the bundles that export them")
 public class Exports extends OsgiCommandSupport {
 
     private PackageService packageService;
+    
+    @Option(name = "-d", description = "Only show packages that are exported by more than one bundle", required = false, multiValued = false)
+    private boolean onlyDuplicates;
 
     public Exports(PackageService packageService) {
         super();
@@ -37,7 +48,16 @@ public class Exports extends OsgiCommand
     }
 
     protected Object doExecute() throws Exception {
-        SortedMap<String, PackageVersion> exports = packageService.getExports();
+    	if (onlyDuplicates) {
+    		checkDuplicateExports();
+    	} else {
+    		showExports();
+    	}
+        return null;
+    }
+
+	private void showExports() {
+		SortedMap<String, PackageVersion> exports = packageService.getExports();
         ShellTable table = new ShellTable();
         table.column(new Col("Package Name"));
         table.column(new Col("Version"));
@@ -51,7 +71,55 @@ public class Exports extends OsgiCommand
             }
         }
         table.print(System.out);
-        return null;
+	}
+    
+    private void checkDuplicateExports() {
+        Bundle[] bundles = bundleContext.getBundles();
+        SortedMap<String, PackageVersion> packageVersionMap = getDuplicatePackages(bundles);
+        ShellTable table = new ShellTable();
+        table.column(new Col("Package Name"));
+        table.column(new Col("Version"));
+        table.column(new Col("Exporting bundles (ID)"));
+       
+        for (String key : packageVersionMap.keySet()) {
+            PackageVersion pVer = packageVersionMap.get(key);
+            if (pVer.getBundles().size() > 1) {
+            	String pBundles = getBundlesSt(pVer.getBundles());
+            	table.addRow().addContent(pVer.getPackageName(), pVer.getVersion().toString(), pBundles); 
+            }
+        }
+        table.print(System.out);
     }
 
+	private String getBundlesSt(Set<Bundle> bundles) {
+		StringBuilder st = new StringBuilder();
+		for (Bundle bundle : bundles) {
+            st.append(bundle.getBundleId() + " ");
+        }
+		return st.toString();
+	}
+
+	private SortedMap<String, PackageVersion> getDuplicatePackages(
+			Bundle[] bundles) {
+		SortedMap<String, PackageVersion> packageVersionMap = new TreeMap<String, PackageVersion>();
+        for (Bundle bundle : bundles) {
+            BundleRevision rev = bundle.adapt(BundleRevision.class);
+            if (rev!=null) {
+                List<BundleCapability> caps = rev.getDeclaredCapabilities(BundleRevision.PACKAGE_NAMESPACE);
+                for (BundleCapability cap : caps) {
+                    Map<String, Object> attr = cap.getAttributes();
+                    String packageName = (String)attr.get(BundleRevision.PACKAGE_NAMESPACE);
+                    Version version = (Version)attr.get("version");
+                    String key = packageName + ":" + version.toString();
+                    PackageVersion pVer = packageVersionMap.get(key);
+                    if (pVer == null) {
+                        pVer = new PackageVersion(packageName, version);
+                        packageVersionMap.put(key, pVer);
+                    }
+                    pVer.addBundle(bundle);
+                }
+            }
+        }
+		return packageVersionMap;
+	}
 }