[jboss-cvs] JBossAS SVN: r96384 - in projects/jboss-osgi/trunk/reactor/framework/src: main/java/org/jboss/osgi/framework/resolver/internal and 8 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Nov 15 07:09:36 EST 2009


Author: thomas.diesler at jboss.com
Date: 2009-11-15 07:09:35 -0500 (Sun, 15 Nov 2009)
New Revision: 96384

Added:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/
Removed:
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalrequirebundle/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/optionalrequirebundlefails/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundle/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundlefails/
Modified:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.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/ResolverMetadataTest.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/META-INF/MANIFEST.MF
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/META-INF/MANIFEST.MF
Log:
Add support for Require-Bundle in Resolver metadata

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java	2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -44,21 +44,21 @@
    VersionRange getVersion();
 
    /**
-    * The bundle symbolic name of the exporting bundle.
+    * The symbolic name of the exporting bundle.
     * 
     * @return null if this attribute is not set
     */
    String getBundleSymbolicName();
 
    /**
-    * The bundle version of the exporting bundle.
+    * The version range of the exporting bundle.
     * 
     * @return null if this attribute is not set
     */
    VersionRange getBundleVersion();
 
    /**
-    * Return true if this package import is marked optional 
+    * True if the resolution directive for this package import is 'optional' 
     */
    boolean isOptional();
    

Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,54 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver;
+
+import org.jboss.osgi.framework.metadata.VersionRange;
+
+/**
+ * An abstraction of a required bundle.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public interface RequiredBundle
+{
+   /**
+    * Get the bundle's symbolic name.
+    * 
+    * @return the symbolic name
+    */
+   String getSymbolicName();
+   
+   /**
+    * The version range of the required bundle.
+    * 
+    * @return null if this attribute is not set
+    */
+   VersionRange getVersion();
+   
+   /**
+    * True if the resolution directive for the given required bundle is 'optional' 
+    * 
+    * @return null if this attribute is not set
+    */
+   boolean isOptional();
+}
\ No newline at end of file


Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java	2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -84,6 +84,21 @@
    ImportPackage getImportPackage(String packageName);
    
    /**
+    * Get the list of required bundles.
+    * 
+    * @return The list of required bundles or an empty list.
+    */
+   List<RequiredBundle> getRequiredBundles();
+   
+   /**
+    * Get the required bundle by symbolic name.
+    * 
+    * @param symbolicName the required bundle's symbolic name
+    * @return null if there is no required bundle by this name
+    */
+   RequiredBundle getRequiredBundle(String symbolicName);
+   
+   /**
     * Return true if this resolvable is a singleton.
     * 
     * @return true when this is a singleton

Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,69 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.framework.resolver.internal;
+
+import org.jboss.osgi.framework.metadata.Parameter;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
+import org.jboss.osgi.framework.metadata.VersionRange;
+import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
+import org.osgi.framework.Constants;
+
+/**
+ * An abstraction of a required bundle. 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public class RequiredBundleImpl implements RequiredBundle
+{
+   private String symbolicName;
+   private ParameterizedAttribute attr;
+
+   public RequiredBundleImpl(ParameterizedAttribute attr)
+   {
+      this.symbolicName = attr.getAttribute();
+      this.attr = attr;
+   }
+
+   public String getSymbolicName()
+   {
+      return symbolicName;
+   }
+
+   public VersionRange getVersion()
+   {
+      String rangeStr = attr.getAttributeValue(Constants.BUNDLE_VERSION_ATTRIBUTE, String.class);
+      if (rangeStr != null)
+         return AbstractVersionRange.parseRangeSpec(rangeStr);
+      return null;
+   }
+
+   public boolean isOptional()
+   {
+      boolean optional = false;
+      Parameter param = attr.getDirective(Constants.RESOLUTION_DIRECTIVE);
+      if (param != null)
+         optional = Constants.RESOLUTION_OPTIONAL.equals(param.getValue());
+      return optional;
+   }
+}
\ No newline at end of file


Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java	2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -30,8 +30,10 @@
 import org.jboss.osgi.framework.bundle.OSGiBundleState;
 import org.jboss.osgi.framework.metadata.OSGiMetaData;
 import org.jboss.osgi.framework.metadata.PackageAttribute;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
 import org.jboss.osgi.framework.resolver.ExportPackage;
 import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
 import org.jboss.osgi.framework.resolver.Resolvable;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Version;
@@ -47,36 +49,48 @@
    private OSGiBundleState bundleState;
    private OSGiMetaData metaData;
    private boolean resolved;
-   
+
    private Map<String, ExportPackage> exportedPackages = new LinkedHashMap<String, ExportPackage>();
    private Map<String, ImportPackage> importedPackages = new LinkedHashMap<String, ImportPackage>();
-   
+   private Map<String, RequiredBundle> requiredBundles = new LinkedHashMap<String, RequiredBundle>();
+
    public ResolvableImpl(Bundle bundle)
    {
       this.bundleState = OSGiBundleState.assertBundleState(bundle);
       this.metaData = bundleState.getOSGiMetaData();
-      
+
       // Initialize exported packages
       List<PackageAttribute> exportPackages = metaData.getExportPackages();
       if (exportPackages != null)
       {
-         for (PackageAttribute attr: exportPackages)
+         for (PackageAttribute attr : exportPackages)
          {
             String packageName = attr.getPackageInfo().getName();
             exportedPackages.put(packageName, new ExportPackageImpl(this, packageName));
          }
       }
-      
+
       // Initialize imported packages
       List<PackageAttribute> importPackages = metaData.getImportPackages();
       if (importPackages != null)
       {
-         for (PackageAttribute attr: importPackages)
+         for (PackageAttribute attr : importPackages)
          {
             String packageName = attr.getPackageInfo().getName();
             importedPackages.put(packageName, new ImportPackageImpl(this, packageName));
          }
       }
+
+      // Initialize required bundles
+      List<ParameterizedAttribute> requireBundles = metaData.getRequireBundles();
+      if (requireBundles != null)
+      {
+         for (ParameterizedAttribute attr : requireBundles)
+         {
+            RequiredBundleImpl req = new RequiredBundleImpl(attr);
+            requiredBundles.put(req.getSymbolicName(), req);
+         }
+      }
    }
 
    public Bundle getBundle()
@@ -116,6 +130,17 @@
       return Collections.unmodifiableList(values);
    }
 
+   public List<RequiredBundle> getRequiredBundles()
+   {
+      List<RequiredBundle> values = new ArrayList<RequiredBundle>(requiredBundles.values());
+      return Collections.unmodifiableList(values);
+   }
+
+   public RequiredBundle getRequiredBundle(String symbolicName)
+   {
+      return requiredBundles.get(symbolicName);
+   }
+
    public boolean isResolved()
    {
       return resolved;

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-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -35,6 +35,7 @@
 import org.jboss.osgi.framework.resolver.Resolver;
 import org.jboss.test.osgi.classloader.support.a.A;
 import org.jboss.virtual.VirtualFile;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
 
@@ -51,7 +52,7 @@
    {
       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");
@@ -66,7 +67,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -108,7 +109,7 @@
       {
          // Resolve the installed bundles
          resolver.resolve(null);
-         
+
          // Verify resolvable for bundleA
          Resolvable resolvableA = resolver.getBundle(bundleA);
          assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -140,7 +141,7 @@
       {
          // Resolve the installed bundles
          resolver.resolve(null);
-         
+
          // Verify resolvable for bundleA
          Resolvable resolvableA = resolver.getBundle(bundleA);
          assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -177,7 +178,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -225,7 +226,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -267,7 +268,7 @@
       {
          // Resolve the installed bundles
          resolver.resolve(null);
-         
+
          // Verify resolvable for bundleA
          Resolvable resolvableA = resolver.getBundle(bundleA);
          assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -304,7 +305,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -314,7 +315,7 @@
             // Verify that bundleA is wired to an exporter
             ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
             assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
-            
+
             // Verify resolvable for bundleB
             Resolvable resolvableB = resolver.getBundle(bundleB);
             assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -346,7 +347,7 @@
       {
          // Resolve the installed bundles
          resolver.resolve(null);
-         
+
          // Bundle-SymbolicName: simpleexport
          // Export-Package: org.jboss.test.osgi.classloader.support.a
          VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
@@ -355,7 +356,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -365,7 +366,7 @@
             // Verify that bundleA is not wired to an exporter
             ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
             assertNull("Exporter null", exporter);
-            
+
             // Verify resolvable for bundleB
             Resolvable resolvableB = resolver.getBundle(bundleB);
             assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -388,7 +389,7 @@
    {
       Resolver resolver = getTestResolver();
       assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-      
+
       //Bundle-SymbolicName: bundlenameimport
       //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
       VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/bundlenameimport");
@@ -403,7 +404,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -436,7 +437,7 @@
    {
       Resolver resolver = getTestResolver();
       assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
-      
+
       //Bundle-SymbolicName: bundlenameimport
       //Import-Package: org.jboss.test.osgi.classloader.support.a;bundle-symbolic-name=bundlenameexport
       VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/bundlenameimport");
@@ -451,7 +452,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -493,7 +494,7 @@
       {
          // Resolve the installed bundles
          resolver.resolve(null);
-         
+
          // Bundle-SymbolicName: simpleexport
          // Export-Package: org.jboss.test.osgi.classloader.support.a
          VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
@@ -502,7 +503,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertTrue("BundleA resolved", resolvableA.isResolved());
@@ -512,7 +513,7 @@
             // Verify that bundleA is wired to an exporter
             ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
             assertEquals(bundleB.getSymbolicName(), exporter.getOwner().getSymbolicName());
-            
+
             // Verify resolvable for bundleB
             Resolvable resolvableB = resolver.getBundle(bundleB);
             assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -544,7 +545,7 @@
       {
          // Resolve the installed bundles
          resolver.resolve(null);
-         
+
          // Bundle-SymbolicName: simpleexport
          // Export-Package: org.jboss.test.osgi.classloader.support.a
          VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
@@ -553,7 +554,7 @@
          {
             // Resolve the installed bundles
             resolver.resolve(null);
-            
+
             // Verify resolvable for bundleA
             Resolvable resolvableA = resolver.getBundle(bundleA);
             assertFalse("BundleA not resolved", resolvableA.isResolved());
@@ -563,7 +564,7 @@
             // Verify that bundleA is not wired
             ExportPackage exporter = resolver.getExporter(bundleA, A.class.getPackage().getName());
             assertNull("Exporter null", exporter);
-            
+
             // Verify resolvable for bundleB
             Resolvable resolvableB = resolver.getBundle(bundleB);
             assertTrue("BundleB resolved", resolvableB.isResolved());
@@ -582,6 +583,71 @@
    }
 
    @Test
+   public void testRequireBundle() throws Exception
+   {
+      Resolver resolver = getTestResolver();
+      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+      //Bundle-SymbolicName: requirebundle
+      //Require-Bundle: simpleexport
+      VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundle");
+      Bundle bundleA = framework.installBundle(fileA);
+      try
+      {
+         // Bundle-SymbolicName: simpleexport
+         // Export-Package: org.jboss.test.osgi.classloader.support.a
+         VirtualFile fileB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+         Bundle bundleB = framework.installBundle(fileB);
+         try
+         {
+            // Resolve the installed bundles
+            resolver.resolve(null);
+
+            // Verify resolvable for bundleA
+            Resolvable resolvableA = resolver.getBundle(bundleA);
+            assertTrue("BundleA resolved", resolvableA.isResolved());
+
+            // Verify resolvable for bundleB
+            Resolvable resolvableB = resolver.getBundle(bundleB);
+            assertTrue("BundleB resolved", resolvableB.isResolved());
+         }
+         finally
+         {
+            bundleB.uninstall();
+         }
+      }
+      finally
+      {
+         bundleA.uninstall();
+      }
+   }
+
+   @Ignore
+   public void testRequireBundleFails() throws Exception
+   {
+      Resolver resolver = getTestResolver();
+      assertEquals("No bundles in resolver", 0, resolver.getBundles().size());
+
+      //Bundle-SymbolicName: requirebundle
+      //Require-Bundle: simpleexport
+      VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundle");
+      Bundle bundleA = framework.installBundle(fileA);
+      try
+      {
+         // Resolve the installed bundles
+         resolver.resolve(null);
+
+         // Verify resolvable for bundleA
+         Resolvable resolvableA = resolver.getBundle(bundleA);
+         assertFalse("BundleA not resolved", resolvableA.isResolved());
+      }
+      finally
+      {
+         bundleA.uninstall();
+      }
+   }
+
+   @Test
    public void testAttributeImportPackage() throws Exception
    {
    }

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java	2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java	2009-11-15 12:09:35 UTC (rev 96384)
@@ -33,6 +33,7 @@
 
 import org.jboss.osgi.framework.resolver.ExportPackage;
 import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.RequiredBundle;
 import org.jboss.osgi.framework.resolver.Resolvable;
 import org.jboss.osgi.framework.resolver.Resolver;
 import org.jboss.test.osgi.classloader.support.a.A;
@@ -147,4 +148,73 @@
          bundleA.uninstall();
       }
    }
+
+   @Test
+   public void testRequireBundle() throws Exception
+   {
+      //Bundle-SymbolicName: requirebundle
+      //Require-Bundle: simpleexport
+      VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundle");
+      Bundle bundleA = framework.installBundle(fileA);
+      try
+      {
+         Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+         List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+         assertEquals("RequiredBundles not null", 1, requiredBundles.size());
+         RequiredBundle reqBundle = requiredBundles.get(0);
+         assertEquals("simpleexport", reqBundle.getSymbolicName());
+         assertNull("Null version", reqBundle.getVersion());
+         assertFalse("Not optional", reqBundle.isOptional());
+      }
+      finally
+      {
+         bundleA.uninstall();
+      }
+   }
+
+   @Test
+   public void testRequireBundleOptional() throws Exception
+   {
+      //Bundle-SymbolicName: requirebundle
+      //Require-Bundle: simpleexport;resolution:=optional
+      VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleoptional");
+      Bundle bundleA = framework.installBundle(fileA);
+      try
+      {
+         Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+         List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+         assertEquals("RequiredBundles not null", 1, requiredBundles.size());
+         RequiredBundle reqBundle = requiredBundles.get(0);
+         assertEquals("simpleexport", reqBundle.getSymbolicName());
+         assertNull("Null version", reqBundle.getVersion());
+         assertTrue("Resolution optional", reqBundle.isOptional());
+      }
+      finally
+      {
+         bundleA.uninstall();
+      }
+   }
+
+   @Test
+   public void testRequireBundleVersion() throws Exception
+   {
+      //Bundle-SymbolicName: requirebundle
+      //Require-Bundle: simpleexport;bundle-version="[0.0.0,1.0.0]"
+      VirtualFile fileA = assembleBundle("bundleA", "/bundles/resolver/requirebundleversion");
+      Bundle bundleA = framework.installBundle(fileA);
+      try
+      {
+         Resolvable resolvableA = getTestResolver().getBundle(bundleA);
+         List<RequiredBundle> requiredBundles = resolvableA.getRequiredBundles();
+         assertEquals("RequiredBundles not null", 1, requiredBundles.size());
+         RequiredBundle reqBundle = requiredBundles.get(0);
+         assertEquals("simpleexport", reqBundle.getSymbolicName());
+         assertNotNull("Version not null", reqBundle.getVersion());
+         assertFalse("Not optional", reqBundle.isOptional());
+      }
+      finally
+      {
+         bundleA.uninstall();
+      }
+   }
 }
\ No newline at end of file

Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle (from rev 96383, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundle)

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundle/META-INF/MANIFEST.MF	2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundle/META-INF/MANIFEST.MF	2009-11-15 12:09:35 UTC (rev 96384)
@@ -1,3 +1,3 @@
 Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
-Require-Bundle: org.jboss.test.osgi.classloader.bundleA;bundle-version="[0.0.0,1.0.0]"
+Bundle-SymbolicName: requirebundle
+Require-Bundle: simpleexport

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleoptional/META-INF/MANIFEST.MF	2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: requirebundleoptional
+Require-Bundle: simpleexport;resolution:=optional

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversion/META-INF/MANIFEST.MF	2009-11-15 12:09:35 UTC (rev 96384)
@@ -0,0 +1,3 @@
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: requirebundleversion
+Require-Bundle: simpleexport;bundle-version="[0.0.0,1.0.0]"

Copied: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails (from rev 96383, projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundlefails)

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/versionrequirebundlefails/META-INF/MANIFEST.MF	2009-11-15 01:36:27 UTC (rev 96383)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/requirebundleversionfails/META-INF/MANIFEST.MF	2009-11-15 12:09:35 UTC (rev 96384)
@@ -1,3 +1,3 @@
 Bundle-ManifestVersion: 2
-Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
-Require-Bundle: org.jboss.test.osgi.classloader.bundleA;bundle-version="[0.0.0,1.0.0)"
+Bundle-SymbolicName: versionrequirebundlefails
+Require-Bundle: simpleexport;bundle-version="[1.0.0,2.0.0)"




More information about the jboss-cvs-commits mailing list