Author: thomas.diesler(a)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(a)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(a)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)"