You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2009/08/06 23:07:10 UTC

svn commit: r801818 - /felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/InspectCommandImpl.java

Author: rickhall
Date: Thu Aug  6 21:07:10 2009
New Revision: 801818

URL: http://svn.apache.org/viewvc?rev=801818&view=rev
Log:
Tried to improve naming further using "requirement/capability"
instead of "require/provide". (FELIX-1151)

Modified:
    felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/InspectCommandImpl.java

Modified: felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/InspectCommandImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/InspectCommandImpl.java?rev=801818&r1=801817&r2=801818&view=diff
==============================================================================
--- felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/InspectCommandImpl.java (original)
+++ felix/trunk/shell/src/main/java/org/apache/felix/shell/impl/InspectCommandImpl.java Thu Aug  6 21:07:10 2009
@@ -24,6 +24,7 @@
 import org.apache.felix.shell.Command;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.packageadmin.ExportedPackage;
 import org.osgi.service.packageadmin.PackageAdmin;
@@ -36,8 +37,8 @@
     public static final String FRAGMENT_TYPE = "fragment";
     public static final String SERVICE_TYPE = "service";
 
-    public static final String PROVIDE_DIRECTION = "provide";
-    public static final String REQUIRE_DIRECTION = "require";
+    public static final String CAPABILITY = "capability";
+    public static final String REQUIREMENT = "requirement";
 
     private final BundleContext m_context;
     private ServiceReference m_ref = null;
@@ -54,7 +55,7 @@
 
     public String getUsage()
     {
-        return "inspect (package|bundle|fragment|service) (require|provide) <id> ...";
+        return "inspect (package|bundle|fragment|service) (capability|requirement) <id> ...";
     }
 
     public String getShortDescription()
@@ -92,7 +93,7 @@
                 // Now determine what needs to be printed.
                 if (PACKAGE_TYPE.startsWith(type))
                 {
-                    if (PROVIDE_DIRECTION.startsWith(direction))
+                    if (CAPABILITY.startsWith(direction))
                     {
                         printExportedPackages(ids, out, err);
                     }
@@ -103,7 +104,7 @@
                 }
                 else if (BUNDLE_TYPE.startsWith(type))
                 {
-                    if (PROVIDE_DIRECTION.startsWith(direction))
+                    if (CAPABILITY.startsWith(direction))
                     {
                         printRequiringBundles(ids, out, err);
                     }
@@ -114,18 +115,18 @@
                 }
                 else if (FRAGMENT_TYPE.startsWith(type))
                 {
-                    if (PROVIDE_DIRECTION.startsWith(direction))
+                    if (CAPABILITY.startsWith(direction))
                     {
-                        out.println("Fragment inspection not yet implemented.");
+                        printFragmentHosts(ids, out, err);
                     }
                     else
                     {
-                        out.println("Fragment inspection not yet implemented.");
+                        printHostedFragments(ids, out, err);
                     }
                 }
                 else
                 {
-                    if (PROVIDE_DIRECTION.startsWith(direction))
+                    if (CAPABILITY.startsWith(direction))
                     {
                         printExportedServices(ids, out, err);
                     }
@@ -165,7 +166,7 @@
                         {
                             out.println("");
                         }
-                        String title = bundle + " provides packages:";
+                        String title = bundle + " exports packages:";
                         out.println(title);
                         out.println(Util.getUnderlineString(title));
                         if ((exports != null) && (exports.length > 0))
@@ -244,7 +245,7 @@
         else
         {
             ExportedPackage[] exports = pa.getExportedPackages((Bundle) null);
-            String title = bundle + " requires packages:";
+            String title = bundle + " imports packages:";
             out.println(title);
             out.println(Util.getUnderlineString(title));
             boolean found = false;
@@ -296,7 +297,7 @@
                                 {
                                     out.println("");
                                 }
-                                String title = bundle + " required by bundles:";
+                                String title = bundle + " is required by:";
                                 out.println(title);
                                 out.println(Util.getUnderlineString(title));
                                 if ((rbs[rbIdx].getRequiringBundles() != null)
@@ -403,6 +404,124 @@
         }
     }
 
+    private void printFragmentHosts(String[] ids, PrintStream out, PrintStream err)
+    {
+        PackageAdmin pa = getPackageAdmin();
+        if (pa == null)
+        {
+            out.println("PackageAdmin service is unavailable.");
+        }
+        else
+        {
+            for (int idIdx = 0; idIdx < ids.length; idIdx++)
+            {
+                // Print a separator for some whitespace.
+                if (idIdx > 0)
+                {
+                    out.println("");
+                }
+
+                try
+                {
+                    long l = Long.parseLong(ids[idIdx]);
+                    Bundle bundle = m_context.getBundle(l);
+                    if ((bundle != null) && isFragment(bundle))
+                    {
+                        String title = bundle + " is attached to:";
+                        out.println(title);
+                        out.println(Util.getUnderlineString(title));
+                        Bundle[] hosts = pa.getHosts(bundle);
+                        for (int hostIdx = 0;
+                            (hosts != null) && (hostIdx < hosts.length);
+                            hostIdx++)
+                        {
+                            out.println(hosts[hostIdx]);
+                        }
+                        if ((hosts == null) || (hosts.length == 0))
+                        {
+                            out.println("Nothing");
+                        }
+                    }
+                    else if ((bundle != null) && !isFragment(bundle))
+                    {
+                        out.println("Bundle " + bundle + " is not a fragment.");
+                    }
+                    else
+                    {
+                        err.println("Bundle ID " + ids[idIdx] + " is invalid.");
+                    }
+                }
+                catch (NumberFormatException ex)
+                {
+                    err.println("Unable to parse id '" + ids[idIdx] + "'.");
+                }
+                catch (Exception ex)
+                {
+                    err.println(ex.toString());
+                }
+            }
+        }
+    }
+
+    private void printHostedFragments(String[] ids, PrintStream out, PrintStream err)
+    {
+        PackageAdmin pa = getPackageAdmin();
+        if (pa == null)
+        {
+            out.println("PackageAdmin service is unavailable.");
+        }
+        else
+        {
+            for (int idIdx = 0; idIdx < ids.length; idIdx++)
+            {
+                // Print a separator for some whitespace.
+                if (idIdx > 0)
+                {
+                    out.println("");
+                }
+
+                try
+                {
+                    long l = Long.parseLong(ids[idIdx]);
+                    Bundle bundle = m_context.getBundle(l);
+                    if ((bundle != null) && !isFragment(bundle))
+                    {
+                        String title = bundle + " hosts:";
+                        out.println(title);
+                        out.println(Util.getUnderlineString(title));
+                        Bundle[] fragments = pa.getFragments(bundle);
+                        for (int fragIdx = 0;
+                            (fragments != null) && (fragIdx < fragments.length);
+                            fragIdx++)
+                        {
+                            out.println(fragments[fragIdx]);
+                        }
+                        if ((fragments == null) || (fragments.length == 0))
+                        {
+                            out.println("Nothing");
+                        }
+                    }
+                    else if ((bundle != null) && isFragment(bundle))
+                    {
+                        out.println("Bundle " + bundle + " is a fragment.");
+                    }
+                    else
+                    {
+                        err.println("Bundle ID " + ids[idIdx] + " is invalid.");
+                    }
+                }
+                catch (NumberFormatException ex)
+                {
+                    err.println("Unable to parse id '" + ids[idIdx] + "'.");
+                }
+                catch (Exception ex)
+                {
+                    err.println(ex.toString());
+                }
+            }
+        }
+    }
+
     public void printExportedServices(String[] ids, PrintStream out, PrintStream err)
     {
         for (int i = 0; i < ids.length; i++)
@@ -547,7 +666,12 @@
         return
             (((PACKAGE_TYPE.startsWith(type) || BUNDLE_TYPE.startsWith(type)
                 || FRAGMENT_TYPE.startsWith(type) || SERVICE_TYPE.startsWith(type)))
-            && (PROVIDE_DIRECTION.startsWith(direction)
-                || REQUIRE_DIRECTION.startsWith(direction)));
+            && (CAPABILITY.startsWith(direction)
+                || REQUIREMENT.startsWith(direction)));
+    }
+
+    private static boolean isFragment(Bundle bundle)
+    {
+        return bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null;
     }
 }
\ No newline at end of file