[jboss-osgi-commits] JBoss-OSGI SVN: r96647 - in projects/jboss-osgi/trunk/reactor/framework/src: test/java/org/jboss/test/osgi/resolver and 1 other directory.

jboss-osgi-commits at lists.jboss.org jboss-osgi-commits at lists.jboss.org
Fri Nov 20 12:16:42 EST 2009


Author: thomas.diesler at jboss.com
Date: 2009-11-20 12:16:41 -0500 (Fri, 20 Nov 2009)
New Revision: 96647

Modified:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
Log:
Implement PackageAdmin.getBundle()

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java	2009-11-20 16:42:40 UTC (rev 96646)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/service/internal/PackageAdminImpl.java	2009-11-20 17:16:41 UTC (rev 96647)
@@ -85,10 +85,28 @@
       }
    }
 
-   @SuppressWarnings("unchecked")
+   @SuppressWarnings("rawtypes")
    public Bundle getBundle(Class clazz)
    {
-      throw new NotImplementedException();
+      if (clazz == null)
+         throw new IllegalArgumentException("Null class");
+
+      Bundle retBundle = null;
+      ClassLoader classLoader = clazz.getClassLoader();
+      for (AbstractBundleState aux : bundleManager.getBundles())
+      {
+         if (aux instanceof OSGiBundleState)
+         {
+            OSGiBundleState bundleState = (OSGiBundleState)aux;
+            ClassLoader bundleLoader = bundleState.getDeploymentUnit().getClassLoader();
+            if(bundleLoader == classLoader)
+            {
+               retBundle = aux.getBundleInternal();
+               break;
+            }
+         }
+      }
+      return retBundle;
    }
 
    public int getBundleType(Bundle bundle)
@@ -109,12 +127,12 @@
    public ExportedPackage[] getExportedPackages(Bundle bundle)
    {
       AbstractBundleState abstractBundleState = bundleManager.getBundleState(bundle);
-      
+
       // [TODO] exported packages for the system bundle 
       if (abstractBundleState instanceof OSGiBundleState == false)
          throw new UnsupportedOperationException("FIXME: getExportedPackages for System bundle");
 
-      OSGiBundleState bundleState = (OSGiBundleState) abstractBundleState;
+      OSGiBundleState bundleState = (OSGiBundleState)abstractBundleState;
       DeploymentUnit unit = bundleState.getDeploymentUnit();
       ClassLoadingMetaData metaData = unit.getAttachment(ClassLoadingMetaData.class);
       if (metaData == null)
@@ -189,7 +207,7 @@
       List<OSGiBundleState> resolvableBundles = new ArrayList<OSGiBundleState>();
       for (ResolverBundle aux : bundleResolver.resolve(unresolvedBundles))
          resolvableBundles.add(OSGiBundleState.assertBundleState(aux.getBundle()));
-      
+
       boolean allResolved = resolvableBundles.containsAll(unresolvedBundles);
 
       int resolved = 1;

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java	2009-11-20 16:42:40 UTC (rev 96646)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java	2009-11-20 17:16:41 UTC (rev 96647)
@@ -40,6 +40,7 @@
 import org.jboss.virtual.VirtualFile;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
+import org.osgi.service.packageadmin.PackageAdmin;
 
 /**
  * An abstract {@link Resolver} test.
@@ -52,9 +53,6 @@
    @Test
    public void testSimpleImport() throws Exception
    {
-      Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-
       // Bundle-SymbolicName: simpleimport
       // Import-Package: org.jboss.test.osgi.classloader.support.a
       VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
@@ -68,23 +66,17 @@
          try
          {
             // Resolve the installed bundles
-            resolver.resolve(null);
+            PackageAdmin packageAdmin = getPackageAdmin();
+            packageAdmin.resolveBundles(null);
 
-            // Verify resBundle for bundleA
-            ResolverBundle resBundleA = resolver.getBundle(bundleA);
-            assertTrue("BundleA resolved", resBundleA.isResolved());
-            ImportPackage importPackage = resBundleA.getImportPackage(A.class.getPackage().getName());
-            assertNotNull("Exporter not null", importPackage.getExporter());
+            // Verify bundle states
+            assertEquals("BundleA RESOLVED", Bundle.RESOLVED, bundleA.getState());
+            assertEquals("BundleB RESOLVED", Bundle.RESOLVED, bundleB.getState());
 
-            // Verify that bundleA is wired to the exporter
-            ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
-            assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
-
-            // Verify resBundle for bundleB
-            ResolverBundle resBundleB = resolver.getBundle(bundleB);
-            assertTrue("BundleB resolved", resBundleB.isResolved());
-            ExportPackage exportPackage = resBundleB.getExportPackage(A.class.getPackage().getName());
-            assertEquals("Importers not null", 1, exportPackage.getImporters().size());
+            // Verify that the class was loaded from bundleB
+            Class<?> classA = bundleA.loadClass(A.class.getName());
+            Bundle loaderBundle = packageAdmin.getBundle(classA);
+            assertEquals(bundleB.getSymbolicName(), loaderBundle.getSymbolicName());
          }
          finally
          {
@@ -100,9 +92,6 @@
    @Test
    public void testSimpleImportPackageFails() throws Exception
    {
-      Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-
       // Bundle-SymbolicName: simpleimport
       // Import-Package: org.jboss.test.osgi.classloader.support.a
       VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
@@ -110,17 +99,11 @@
       try
       {
          // Resolve the installed bundles
-         resolver.resolve(null);
+         PackageAdmin packageAdmin = getPackageAdmin();
+         packageAdmin.resolveBundles(null);
 
-         // Verify resBundle for bundleA
-         ResolverBundle resBundleA = resolver.getBundle(bundleA);
-         assertFalse("BundleA not resolved", resBundleA.isResolved());
-         ImportPackage importPackage = resBundleA.getImportPackage(A.class.getPackage().getName());
-         assertNull("Exporter null", importPackage.getExporter());
-
-         // Verify that bundleA is not wired
-         ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
-         assertNull("Exporter null", exporter);
+         // Verify bundle states
+         assertEquals("BundleA INSTALLED", Bundle.INSTALLED, bundleA.getState());
       }
       finally
       {
@@ -132,7 +115,7 @@
    public void testExplicitBundleResolve() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       // Bundle-SymbolicName: simpleimport
       // Import-Package: org.jboss.test.osgi.classloader.support.a
@@ -176,7 +159,7 @@
    public void testSelfImportPackage() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       // Bundle-SymbolicName: selfimport
       // Export-Package: org.jboss.test.osgi.classloader.support.a
@@ -208,7 +191,7 @@
    public void testVersionImportPackage() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: packageimportversion
       //Import-Package: org.jboss.test.osgi.classloader.support.a;version="[0.0.0,1.0.0]"
@@ -256,7 +239,7 @@
    public void testVersionImportPackageFails() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: packageimportversionfails
       //Import-Package: org.jboss.test.osgi.classloader.support.a;version="[3.0,4.0)"
@@ -304,7 +287,7 @@
    public void testOptionalImportPackage() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: packageimportoptional
       //Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
@@ -335,7 +318,7 @@
    public void testOptionalImportPackageWired() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: packageimportoptional
       //Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
@@ -383,7 +366,7 @@
    public void testOptionalImportPackageNotWired() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: packageimportoptional
       //Import-Package: org.jboss.test.osgi.classloader.support.a;resolution:=optional
@@ -434,7 +417,7 @@
    public void testBundleNameImportPackage() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: bundlenameimport
       //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
@@ -482,7 +465,7 @@
    public void testBundleNameImportPackageFails() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: bundlenameimport
       //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=simpleexport
@@ -530,7 +513,7 @@
    public void testBundleVersionImportPackage() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: bundleversionimport
       //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-version="[0.0.0,1.0.0)"
@@ -581,7 +564,7 @@
    public void testBundleVersionImportPackageFails() throws Exception
    {
       Resolver resolver = getTestResolver();
-      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+      assertEquals("No bundles in framework", 1, getSystemContext().getBundles().length);
 
       //Bundle-SymbolicName: bundleversionimportfails
       //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-version="[1.0.0,2.0.0)"

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java	2009-11-20 16:42:40 UTC (rev 96646)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java	2009-11-20 17:16:41 UTC (rev 96647)
@@ -34,7 +34,10 @@
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
+import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
 
 /**
  * An abstract {@link Resolver} test.
@@ -88,4 +91,17 @@
       OSGiBundleManager bundleManager = framework.getBundleManager();
       return bundleManager.getPlugin(ResolverPlugin.class);
    }
+
+   protected PackageAdmin getPackageAdmin()
+   {
+      BundleContext sysContext = getSystemContext();
+      ServiceReference sref = sysContext.getServiceReference(PackageAdmin.class.getName());
+      return (PackageAdmin)sysContext.getService(sref);
+   }
+
+   protected BundleContext getSystemContext()
+   {
+      BundleContext sysContext = framework.getBundleContext();
+      return sysContext;
+   }
 }
\ No newline at end of file



More information about the jboss-osgi-commits mailing list