[jboss-cvs] JBossAS SVN: r96230 - in projects/jboss-osgi/trunk/reactor/framework: src/main/java/org/jboss/osgi/framework/bundle and 18 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Nov 10 14:32:58 EST 2009


Author: thomas.diesler at jboss.com
Date: 2009-11-10 14:32:57 -0500 (Tue, 10 Nov 2009)
New Revision: 96230

Added:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java
   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/RuleBasedResolverTest.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/
   projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF
Modified:
   projects/jboss-osgi/trunk/reactor/framework/pom.xml
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java
   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/ExportPackageImpl.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.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/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.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/META-INF/jboss-osgi-bootstrap.xml
Log:
Add initial rule based resolver

Modified: projects/jboss-osgi/trunk/reactor/framework/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/pom.xml	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/pom.xml	2009-11-10 19:32:57 UTC (rev 96230)
@@ -36,12 +36,14 @@
 
   <!-- Properties -->
   <properties>
+    <version.drools>5.0.1</version.drools>
     <version.jboss.aop>2.1.0.CR3</version.jboss.aop>
     <version.jboss.vfs>2.2.0-SNAPSHOT</version.jboss.vfs>
     <version.jboss.classloading>2.0.8-SNAPSHOT</version.jboss.classloading>
     <version.jboss.deployers>2.0.9-SNAPSHOT</version.jboss.deployers>
     <version.jboss.microcontainer>2.0.9.GA</version.jboss.microcontainer>
     <version.jboss.test>1.1.4.GA</version.jboss.test>
+    <surefire.system.args>${surefire.memory.args} ${surefire.jpda.args} ${surefire.profiler.args}</surefire.system.args>
   </properties>
 
   <dependencies>
@@ -50,6 +52,11 @@
       <artifactId>bnd</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+      <version>${version.drools}</version>
+    </dependency>
+    <dependency>
       <groupId>org.jboss.aop</groupId>
       <artifactId>jboss-aop</artifactId>
       <version>${version.jboss.aop}</version>
@@ -410,6 +417,7 @@
       <plugin>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
+          <argLine>${surefire.system.args}</argLine>
           <systemProperties>
             <property>
               <name>log4j.output.dir</name>
@@ -429,23 +437,4 @@
     </plugins>
   </build>
 
-  <!-- Repositories -->
-  <repositories>
-    <repository>
-      <id>repository.jboss.org</id>
-      <name>JBoss Repository</name>
-      <url>http://repository.jboss.org/maven2/</url>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
-
-  <!-- Subversion -->
-  <scm>
-    <connection>scm:svn:http://anonsvn.jboss.org/repos/jbossas/projects/jboss-osgi/trunk/reactor/framework</connection>
-    <developerConnection>scm:svn:https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/trunk/reactor/framework</developerConnection>
-    <url>http://fisheye.jboss.com/qsearch/JBossOSGi/projects/jboss-osgi/trunk/reactor/framework</url>
-  </scm>
-
 </project>

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/OSGiBundleManager.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -325,15 +325,28 @@
     */
    public void addPlugin(Plugin plugin)
    {
-      Class<? extends Plugin> clazz = plugin.getClass();
+      Class<?> clazz = plugin.getClass();
+      if (addPlugin(plugin, clazz) == false)
+      {
+         Class<?> superclass = clazz.getSuperclass();
+         if (Plugin.class.isAssignableFrom(superclass))
+            addPlugin(plugin, superclass);
+      }
+   }
+
+   private boolean addPlugin(Plugin plugin, Class<?> clazz)
+   {
+      boolean pluginAdded = false;
       for (Class<?> interf : clazz.getInterfaces())
       {
          if (Plugin.class.isAssignableFrom(interf))
          {
-            log.debug("Add plugin: " + clazz.getName());
+            log.debug("Add plugin: " + plugin.getClass().getName());
             plugins.put(interf, plugin);
+            pluginAdded = true;
          }
       }
+      return pluginAdded;
    }
 
    /**

Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,101 @@
+/*
+ * 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 java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+import org.jboss.osgi.framework.bundle.OSGiBundleState;
+import org.jboss.osgi.framework.plugins.ResolverPlugin;
+import org.jboss.osgi.framework.plugins.internal.AbstractPlugin;
+import org.jboss.osgi.framework.resolver.internal.ResolvableImpl;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
+
+/**
+ * An abstract resolver that maintains the {@link Resolvable} bundles.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public abstract class AbstractResolver extends AbstractPlugin implements ResolverPlugin
+{
+   private Map<OSGiBundleState, Resolvable> resolverBundleMap = new ConcurrentHashMap<OSGiBundleState, Resolvable>();
+
+   public AbstractResolver(OSGiBundleManager bundleManager)
+   {
+      super(bundleManager);
+   }
+
+   public List<Resolvable> getBundles()
+   {
+      List<Resolvable> values = new ArrayList<Resolvable>(resolverBundleMap.values());
+      return Collections.unmodifiableList(values);
+   }
+
+   public Resolvable getBundle(Bundle bundle)
+   {
+      if (bundle == null)
+         throw new IllegalArgumentException("Null bundle");
+      
+      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
+      return resolverBundleMap.get(bundleState);
+   }
+
+   public Resolvable getBundle(String symbolicName, Version version)
+   {
+      if (symbolicName == null)
+         throw new IllegalArgumentException("Null symbolicName");
+
+      if (version == null)
+         version = Version.emptyVersion;
+      
+      Resolvable retBundle = null;
+      for (Resolvable aux : resolverBundleMap.values())
+      {
+         if (aux.getSymbolicName().equals(symbolicName) && aux.getVersion().equals(version))
+         {
+            retBundle = aux;
+            break;
+         }
+      }
+      return retBundle;
+   }
+
+   public Resolvable addBundle(Bundle bundle)
+   {
+      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
+      ResolvableImpl resolvable = new ResolvableImpl(bundle);
+      resolverBundleMap.put(bundleState, resolvable);
+      return resolvable;
+   }
+
+   public Resolvable removeBundle(Bundle bundle)
+   {
+      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
+      return resolverBundleMap.remove(bundleState);
+   }
+}
\ No newline at end of file


Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/AbstractResolver.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/ExportPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -71,4 +71,14 @@
     * @return An empty set if there is no importer
     */
    Set<ImportPackage> getImporters();
+
+   /**
+    * Add an importer of this export package.
+    */
+   void addImporter(ImportPackage importer);
+   
+   /**
+    * Remove an importer of this export package.
+    */
+   void removeImporter(ImportPackage importer);
 }
\ No newline at end of file

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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -22,7 +22,6 @@
 package org.jboss.osgi.framework.resolver;
 
 import org.jboss.osgi.framework.metadata.VersionRange;
-import org.osgi.framework.Version;
 
 /**
  * An abstraction of a package import. 
@@ -61,11 +60,16 @@
     * The bundle version of the exporting bundle.
     * @return null if this attribute is not set
     */
-   Version getBundleVersion();
+   VersionRange getBundleVersion();
 
    /**
     * Get the exporter that this import  package is wired to.
     * @return Null if the import is not yet resolved. 
     */
    ExportPackage getExporter();
+   
+   /**
+    * Set the exporter that this import  package is wired to.
+    */
+   void setExporter(ExportPackage exporter);
 }
\ No newline at end of file

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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/Resolvable.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -84,12 +84,17 @@
    ImportPackage getImportPackage(String packageName);
    
    /**
-    * @return True if this resovable is a singleton bundle.
+    * Return true if this resolvable is a singleton.
     */
    boolean isSingleton();
    
    /**
-    * @return True if this resovable has been resolved.
+    * Return true if this resolvable has been resolved.
     */
    boolean isResolved();
+
+   /**
+    * Mark this resolvable as resolved.
+    */
+   void markResolved();
 }
\ No newline at end of file

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -32,7 +33,6 @@
 import org.jboss.osgi.framework.resolver.ExportPackage;
 import org.jboss.osgi.framework.resolver.ImportPackage;
 import org.jboss.osgi.framework.resolver.Resolvable;
-import org.jboss.osgi.spi.NotImplementedException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Version;
 
@@ -45,6 +45,7 @@
 public class ExportPackageImpl extends NamedPackageImpl implements ExportPackage
 {
    private PackageAttribute packageMetaData;
+   private Set<ImportPackage> importers = new HashSet<ImportPackage>();
    
    public ExportPackageImpl(Resolvable owner, String packageName)
    {
@@ -112,6 +113,23 @@
 
    public Set<ImportPackage> getImporters()
    {
-      throw new NotImplementedException();
+      return Collections.unmodifiableSet(importers);
    }
+   
+   public void addImporter(ImportPackage importer)
+   {
+      importers.add(importer);
+   }
+   
+   public void removeImporter(ImportPackage importer)
+   {
+      importers.remove(importer);
+   }
+   
+   @Override
+   public String toString()
+   {
+      String ownerStr = getOwner().getSymbolicName() + "-" + getOwner().getVersion();
+      return "ExportPackage[" + ownerStr + "[" + getName() + "-" + getVersion() + "]]";
+   }
 }
\ No newline at end of file

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -24,12 +24,11 @@
 import org.jboss.osgi.framework.metadata.PackageAttribute;
 import org.jboss.osgi.framework.metadata.Parameter;
 import org.jboss.osgi.framework.metadata.VersionRange;
+import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
 import org.jboss.osgi.framework.resolver.ExportPackage;
 import org.jboss.osgi.framework.resolver.ImportPackage;
 import org.jboss.osgi.framework.resolver.Resolvable;
-import org.jboss.osgi.spi.NotImplementedException;
 import org.osgi.framework.Constants;
-import org.osgi.framework.Version;
 
 /**
  * An abstraction of a package import. 
@@ -40,6 +39,7 @@
 public class ImportPackageImpl extends NamedPackageImpl implements ImportPackage
 {
    private PackageAttribute packageMetaData;
+   private ExportPackage exporter;
    
    public ImportPackageImpl(Resolvable owner, String packageName)
    {
@@ -67,7 +67,8 @@
 
    public VersionRange getVersion()
    {
-      throw new NotImplementedException();
+      Parameter version = getPackageMetaData().getAttribute(Constants.VERSION_ATTRIBUTE);
+      return (VersionRange)(version != null ? version.getValue() : AbstractVersionRange.valueOf("0.0.0"));
    }
    
    public String getBundleSymbolicName()
@@ -75,9 +76,10 @@
       return (String)getAttribute(Constants.BUNDLE_SYMBOLICNAME_ATTRIBUTE);
    }
 
-   public Version getBundleVersion()
+   public VersionRange getBundleVersion()
    {
-      return Version.parseVersion((String)getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE));
+      Parameter version = getPackageMetaData().getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
+      return (VersionRange)(version != null ? version.getValue() : AbstractVersionRange.valueOf("0.0.0"));
    }
 
    public Resolution getResolution()
@@ -88,6 +90,21 @@
 
    public ExportPackage getExporter()
    {
-      throw new NotImplementedException();
+      return exporter;
    }
+
+   public void setExporter(ExportPackage exporter)
+   {
+      this.exporter = exporter;
+      ExportPackageImpl exporterImpl = (ExportPackageImpl)exporter;
+      exporterImpl.addImporter(this);
+      
+   }
+
+   @Override
+   public String toString()
+   {
+      String ownerStr = getOwner().getSymbolicName() + "-" + getOwner().getVersion();
+      return "ImportPackage[" + ownerStr + "[" + getName() + " " + getVersion() + "]]";
+   }
 }
\ No newline at end of file

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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -121,13 +121,19 @@
       return resolved;
    }
 
-   public void setResolved(boolean resolved)
+   public void markResolved()
    {
-      this.resolved = resolved;
+      this.resolved = true;
    }
 
    public boolean isSingleton()
    {
       return metaData.isSingleton();
    }
+
+   @Override
+   public String toString()
+   {
+      return "Resolvable[" + getSymbolicName() + "-" + getVersion() + "]";
+   }
 }
\ No newline at end of file

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/basic/BasicResolverImpl.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -41,14 +41,11 @@
 import org.jboss.osgi.framework.classloading.OSGiPackageRequirement;
 import org.jboss.osgi.framework.metadata.OSGiMetaData;
 import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
-import org.jboss.osgi.framework.plugins.ResolverPlugin;
-import org.jboss.osgi.framework.plugins.internal.AbstractPlugin;
+import org.jboss.osgi.framework.resolver.AbstractResolver;
 import org.jboss.osgi.framework.resolver.ExportPackage;
 import org.jboss.osgi.framework.resolver.Resolvable;
-import org.jboss.osgi.framework.resolver.internal.ResolvableImpl;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
-import org.osgi.framework.Version;
 
 /**
  * The BundleResolver wires BundleRequirements to their corresponding BundleCapability.
@@ -56,12 +53,11 @@
  * @author thomas.diesler at jboss.com
  * @since 10-Sep-2009
  */
-public class BasicResolverImpl extends AbstractPlugin implements ResolverPlugin
+public class BasicResolverImpl extends AbstractResolver 
 {
    /** The log */
    private static final Logger log = Logger.getLogger(BasicResolverImpl.class);
 
-   private Map<OSGiBundleState, Resolvable> resolverBundleMap = new ConcurrentHashMap<OSGiBundleState, Resolvable>();
    private Map<OSGiBundleState, List<BundleCapability>> bundleCapabilitiesMap = new ConcurrentHashMap<OSGiBundleState, List<BundleCapability>>();
    private Map<OSGiBundleState, List<BundleRequirement>> bundleRequirementsMap = new ConcurrentHashMap<OSGiBundleState, List<BundleRequirement>>();
 
@@ -70,53 +66,30 @@
       super(bundleManager);
    }
 
-   public List<Resolvable> getBundles()
+   public Resolvable removeBundle(Bundle bundle)
    {
-      List<Resolvable> values = new ArrayList<Resolvable>(resolverBundleMap.values());
-      return Collections.unmodifiableList(values);
-   }
-
-   public Resolvable getBundle(Bundle bundle)
-   {
-      if (bundle == null)
-         throw new IllegalArgumentException("Null bundle");
+      Resolvable removedBundle = super.removeBundle(bundle);
       
       OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
-      return resolverBundleMap.get(bundleState);
-   }
+      bundleCapabilitiesMap.remove(bundleState);
 
-   public Resolvable getBundle(String symbolicName, Version version)
-   {
-      if (symbolicName == null)
-         throw new IllegalArgumentException("Null symbolicName");
-
-      if (version == null)
-         version = Version.emptyVersion;
-      
-      Resolvable retBundle = null;
-      for (Resolvable aux : resolverBundleMap.values())
+      List<BundleRequirement> bundleRequirements = bundleRequirementsMap.remove(bundleState);
+      if (bundleRequirements != null)
       {
-         if (aux.getSymbolicName().equals(symbolicName) && aux.getVersion().equals(version))
+         for (BundleRequirement requirement : bundleRequirements)
          {
-            retBundle = aux;
-            break;
+            requirement.unwireCapability();
          }
       }
-      return retBundle;
+      return removedBundle;
    }
 
-   public Resolvable addBundle(Bundle bundle)
-   {
-      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
-      return resolverBundleMap.put(bundleState, new ResolvableImpl(bundle));
-   }
-
    public List<Resolvable> resolve(List<Bundle> bundles)
    {
       List<Resolvable> resolvedBundles = new ArrayList<Resolvable>();
       for (OSGiBundleState aux : resolveBundles(bundles))
       {
-         Resolvable resBundle = resolverBundleMap.get(aux);
+         Resolvable resBundle = getBundle(aux);
          if (resBundle == null)
             throw new IllegalStateException("Cannot obtain bundle for: " + aux);
          resolvedBundles.add(resBundle);
@@ -201,24 +174,6 @@
       return resolvedBundles;
    }
 
-   public Resolvable removeBundle(Bundle bundle)
-   {
-      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
-
-      bundleCapabilitiesMap.remove(bundleState);
-
-      List<BundleRequirement> bundleRequirements = bundleRequirementsMap.remove(bundleState);
-      if (bundleRequirements != null)
-      {
-         for (BundleRequirement requirement : bundleRequirements)
-         {
-            requirement.unwireCapability();
-         }
-      }
-
-      return null;
-   }
-
    public ExportPackage getExporter(Bundle bundle, String importPackage)
    {
       OSGiBundleState bundleState = OSGiBundleState.assertBundleState(bundle);
@@ -227,7 +182,7 @@
          return null;
 
       OSGiBundleState exportingBundle = match.getExportingBundle();
-      Resolvable resolverBundle = resolverBundleMap.get(exportingBundle);
+      Resolvable resolverBundle = getBundle(exportingBundle);
       return resolverBundle.getExportPackage(importPackage);
    }
 

Added: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,117 @@
+/*
+ * 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.drools;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+import org.jboss.logging.Logger;
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+import org.jboss.osgi.framework.resolver.AbstractResolver;
+import org.jboss.osgi.framework.resolver.ExportPackage;
+import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.Resolvable;
+import org.osgi.framework.Bundle;
+
+/**
+ * The BundleResolver wires BundleRequirements to their corresponding BundleCapability.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public class RuleBasedResolverImpl extends AbstractResolver
+{
+   // Provide Logging
+   private static final Logger log = Logger.getLogger(RuleBasedResolverImpl.class);
+
+   private StatefulKnowledgeSession ksession;
+   private Map<Object, FactHandle> facts = new ConcurrentHashMap<Object, FactHandle>();
+
+   public RuleBasedResolverImpl(OSGiBundleManager bundleManager)
+   {
+      super(bundleManager);
+
+      KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+      kbuilder.add(ResourceFactory.newClassPathResource("META-INF/resolver-rules.drl", getClass()), ResourceType.DRL);
+      if (kbuilder.hasErrors())
+         throw new IllegalStateException("Cannot create knowledge base" + kbuilder.getErrors());
+
+      KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+      kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+      ksession = kbase.newStatefulKnowledgeSession();
+   }
+
+   @Override
+   public Resolvable addBundle(Bundle bundle)
+   {
+      Resolvable resolvable = super.addBundle(bundle);
+      facts.put(resolvable, ksession.insert(resolvable));
+      
+      for (ImportPackage aux : resolvable.getImportPackages())
+         facts.put(aux, ksession.insert(aux));
+      
+      for (ExportPackage aux : resolvable.getExportPackages())
+         facts.put(aux, ksession.insert(aux));
+      
+      ksession.fireAllRules();
+      
+      return resolvable;
+   }
+
+   @Override
+   public Resolvable removeBundle(Bundle bundle)
+   {
+      Resolvable resolvable = super.removeBundle(bundle);
+      ksession.retract(facts.get(resolvable));
+      
+      for (ImportPackage aux : resolvable.getImportPackages())
+         ksession.retract(facts.get(aux));
+      
+      for (ExportPackage aux : resolvable.getExportPackages())
+         ksession.retract(facts.get(aux));
+      
+      ksession.fireAllRules();
+      return resolvable;
+   }
+
+   public List<Resolvable> resolve(List<Bundle> bundles)
+   {
+      List<Resolvable> resolvedBundles = new ArrayList<Resolvable>();
+      return Collections.unmodifiableList(resolvedBundles);
+   }
+
+   public ExportPackage getExporter(Bundle bundle, String importPackage)
+   {
+      return null;
+   }
+}
\ No newline at end of file


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

Added: projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/resources/META-INF/resolver-rules.drl	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,65 @@
+package org.jboss.osgi.framework.resolver
+
+declare WireCandidate
+   name : String
+   importPackage : ImportPackage
+   exportPackage : ExportPackage
+end
+
+rule "Add ImportPackages"
+when
+    $owner : Resolvable( importPackages.size > 0, resolved == false )
+    not ImportPackage( owner == $owner )
+then
+    System.out.println("Add ImportPackages " + $owner);
+end
+
+rule "Add ExportPackages"
+when
+    $owner : Resolvable( exportPackages.size > 0, resolved == false )
+    not ExportPackage( owner == $owner )
+then
+    System.out.println("Add ExportPackages " + $owner);
+end
+
+rule "Add WireCandidate"
+when
+    $export : ExportPackage( )
+    $import : ImportPackage( name == $export.name, exporter == null )
+then
+    WireCandidate wc = new WireCandidate();
+    wc.setName( $import.getName() + "-" + $export.getVersion());
+    wc.setImportPackage( $import );
+    wc.setExportPackage( $export );
+    
+    System.out.println("Add WireCandidate " + wc.getImportPackage() + " --> " + wc.getExportPackage());
+    insert ( wc );
+end
+
+rule "Use WireCandidate"
+when
+    $import : ImportPackage( exporter == null )
+    $wc : WireCandidate( importPackage == $import )
+    not( WireCandidate( this != $wc, importPackage == $import ) )
+then
+    System.out.println("Use WireCandidate " + $wc.getImportPackage() + " --> " + $wc.getExportPackage());
+    modify ( $wc.getImportPackage() ) { setExporter( $wc.getExportPackage() ) };
+    retract ( $wc );
+end
+
+rule "Mark resolved"
+when
+    $owner : Resolvable( resolved == false )
+    not ImportPackage( owner == $owner, exporter == null )
+then
+    System.out.println("Resolved " + $owner);
+    modify ( $owner ) { markResolved ( ) };
+end
+
+rule "Report unresolved import"
+when
+    $import : ImportPackage( exporter == null )
+then
+    System.out.println("Unresolved " + $import );
+end
+

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestCase.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -35,7 +35,6 @@
 import org.jboss.osgi.framework.bundle.AbstractBundleState;
 import org.jboss.osgi.framework.bundle.OSGiBundleManager;
 import org.jboss.osgi.spi.util.ConstantsHelper;
-import org.jboss.test.AbstractTestDelegate;
 import org.jboss.test.kernel.junit.MicrocontainerTest;
 import org.jboss.virtual.AssembledDirectory;
 import org.jboss.virtual.VirtualFile;
@@ -73,17 +72,9 @@
       super(name);
    }
 
-   /**
-    * Get the AbstractTestDelegate
-    * 
-    * @param clazz the test class
-    * @return The AbstractTestDelegate
-    * @throws Exception for any error
-    */
-   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   public static FrameworkTestDelegate getDelegate(Class<?> clazz) throws Exception
    {
       FrameworkTestDelegate delegate = new FrameworkTestDelegate(clazz);
-      //delegate.enableSecurity = true;
       return delegate;
    }
 

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.java	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/FrameworkTestDelegate.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -23,17 +23,18 @@
 
 // $Id: $
 
+import java.lang.reflect.Method;
 import java.net.URL;
+import java.util.Collection;
 import java.util.Enumeration;
 
 import junit.framework.AssertionFailedError;
 
 import org.jboss.classloader.plugins.ClassLoaderUtils;
+import org.jboss.dependency.spi.ControllerState;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.osgi.framework.bundle.AbstractBundleState;
 import org.jboss.osgi.framework.bundle.OSGiBundleManager;
-import org.jboss.osgi.framework.launch.OSGiFramework;
-import org.jboss.osgi.spi.util.ServiceLoader;
 import org.jboss.test.kernel.junit.MicrocontainerTestDelegate;
 import org.jboss.virtual.AssembledDirectory;
 import org.jboss.virtual.VFS;
@@ -42,7 +43,6 @@
 import org.jboss.virtual.plugins.vfs.helpers.SuffixesExcludeFilter;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
-import org.osgi.framework.launch.FrameworkFactory;
 
 /**
  * A OSGiTestDelegate
@@ -50,7 +50,7 @@
  * @author <a href="baileyje at gmail.com">John Bailey</a>
  * @author Thomas.Diesler at jboss.com
  */
-class FrameworkTestDelegate extends MicrocontainerTestDelegate
+public class FrameworkTestDelegate extends MicrocontainerTestDelegate
 {
    private OSGiBundleManager bundleManager;
 
@@ -62,21 +62,84 @@
       super(clazz);
    }
    
-   OSGiBundleManager getBundleManager()
+   /**
+    * Deploys the jboss-osgi-bootstrap.xml bean descriptor to setup OSGi deployers
+    */
+   protected void deploy() throws Exception
    {
+      String common = "/META-INF/jboss-osgi-bootstrap.xml";
+      URL url = getClass().getResource(common);
+      if (url == null)
+         throw new IllegalStateException(common + " not found");
+      deploy(url);
+      try
+      {
+         super.deploy();
+         deployBundles();
+      }
+      catch (Throwable t)
+      {
+         undeploy();
+         if (t instanceof Exception)
+            throw (Exception) t;
+         if (t instanceof Error)
+            throw (Error) t;
+         throw new RuntimeException("Error during deploy", t);
+      }
+   }
+   
+   protected void undeploy()
+   {
+      undeployBundles();
+      super.undeploy();
+   }
+
+   protected void deployBundles() throws Exception
+   {
+      try
+      {
+         Method method = clazz.getMethod("deployBundles", new Class[] { FrameworkTestDelegate.class });
+         log.debug("Deploying Bundles...");
+         method.invoke(null, this);
+      }
+      catch (NoSuchMethodException e)
+      {
+         log.debug("No deployBundles() in " + clazz.getName());
+      }
+   }
+
+   protected void undeployBundles() 
+   {
+      OSGiBundleManager bundleManager = getBundleManager();
+      Collection<AbstractBundleState> bundles = bundleManager.getBundles();
+      for (AbstractBundleState bundleState : bundles)
+      {
+         try
+         {
+            if (bundleState.getBundleId() != 0)
+               bundleManager.uninstall(bundleState);
+         }
+         catch (Throwable t)
+         {
+            getLog().warn("Error undeploying bundle: " + bundleState, t);
+         }
+      }
+   }
+   
+   public OSGiBundleManager getBundleManager()
+   {
       if (bundleManager == null)
       {
-         FrameworkFactory factory = ServiceLoader.loadService(FrameworkFactory.class);
-         OSGiFramework framework = (OSGiFramework)factory.newFramework(null);
+         bundleManager = getBean("OSGiBundleManager", ControllerState.INSTALLED, OSGiBundleManager.class);
          try
          {
-            framework.start();
+            if (bundleManager.isActive() == false)
+               bundleManager.startFramework();
          }
          catch (BundleException ex)
          {
-            throw new IllegalStateException("Cannot start framework", ex);
+            throw new IllegalStateException("Cannot start bundle manager", ex);
          }
-         bundleManager = framework.getBundleManager();
       }
       return bundleManager;
    }
@@ -89,7 +152,7 @@
     * @return Bundle for the deployment
     * @throws Exception for any error
     */
-   Bundle addBundle(String root, String child) throws Exception
+   public Bundle addBundle(String root, String child) throws Exception
    {
       URL resourceRoot = getClass().getResource(root);
       if (resourceRoot == null)
@@ -106,7 +169,7 @@
     * @return Bundle for the deployment
     * @throws Exception for any error
     */
-   Bundle addBundle(VirtualFile file) throws Exception
+   public Bundle addBundle(VirtualFile file) throws Exception
    {
       AbstractBundleState bundleState = getBundleManager().install(file);
       return bundleState.getBundleInternal();
@@ -118,13 +181,13 @@
     * @param bundle the bundle to remove
     * @throws Exception for any error
     */
-   void uninstall(Bundle bundle) throws Exception
+   public void uninstall(Bundle bundle) throws Exception
    {
       if (bundle.getState() != Bundle.UNINSTALLED)
          getBundleManager().uninstall(bundle);
    }
    
-   DeploymentUnit getDeploymentUnit(Bundle bundle)
+   public DeploymentUnit getDeploymentUnit(Bundle bundle)
    {
       DeploymentUnit deploymentUnit = getBundleManager().getDeployment(bundle.getBundleId());
       if (deploymentUnit == null)
@@ -132,12 +195,12 @@
       return deploymentUnit;
    }
 
-   Bundle assembleBundle(String name, String resources, Class<?>... packages) throws Exception
+   public Bundle assembleBundle(String name, String resources, Class<?>... packages) throws Exception
    {
       return assembleBundle(name, new String[] { resources }, packages);
    }
 
-   Bundle assembleBundle(String name, String[] resourcePaths, Class<?>... packages) throws Exception
+   public Bundle assembleBundle(String name, String[] resourcePaths, Class<?>... packages) throws Exception
    {
       AssembledDirectory assembledDirectory = createAssembledDirectory(name, "");
       for (String path : resourcePaths)
@@ -147,23 +210,23 @@
       return addBundle(assembledDirectory);
    }
 
-   AssembledDirectory createAssembledDirectory(String name) throws Exception
+   public AssembledDirectory createAssembledDirectory(String name) throws Exception
    {
       return createAssembledDirectory(name, "");     
    }
 
-   AssembledDirectory createAssembledDirectory(String name, String rootName) throws Exception
+   public AssembledDirectory createAssembledDirectory(String name, String rootName) throws Exception
    {
       return AssembledDirectory.createAssembledDirectory(name, rootName);
    }
 
-   void addPackage(AssembledDirectory dir, Class<?> reference) throws Exception
+   public void addPackage(AssembledDirectory dir, Class<?> reference) throws Exception
    {
       String packagePath = ClassLoaderUtils.packageNameToPath(reference.getName());
       dir.addResources(reference, new String[] { packagePath + "/*.class" } , new String[0]);
    }
 
-   void addPath(final AssembledDirectory dir, String path, String name) throws Exception
+   public void addPath(final AssembledDirectory dir, String path, String name) throws Exception
    {
       URL url = getClass().getResource(path);
       if (url == null)
@@ -175,12 +238,12 @@
       dir.addPath(file, noJars);
    }
    
-   URL getBundleResource(Bundle bundle, String path)
+   public URL getBundleResource(Bundle bundle, String path)
    {
       return getDeploymentUnit(bundle).getResourceLoader().getResource(path);
    }
    
-   Enumeration<URL> getBundleResources(Bundle bundle, String path) throws Exception
+   public Enumeration<URL> getBundleResources(Bundle bundle, String path) throws Exception
    {
       return getDeploymentUnit(bundle).getResourceLoader().getResources(path);
    }

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,37 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2009, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.test.osgi.classloader.support.c;
+
+import org.jboss.test.osgi.classloader.support.a.A;
+
+/**
+ * CA.
+ * 
+ * @authorThomas.Diesler at jboss.com
+ * @version $Revision$
+ */
+public class CA
+{
+   public CA(A a)
+   {
+   }
+}


Property changes on: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/classloader/support/c/CA.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: 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	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractResolverTest.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,48 @@
+/*
+ * 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.test.osgi.resolver;
+
+// $Id$
+
+import org.jboss.osgi.framework.plugins.ResolverPlugin;
+import org.jboss.osgi.framework.resolver.Resolver;
+import org.jboss.test.osgi.FrameworkTestCase;
+
+/**
+ * An abstract {@link Resolver} test.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+abstract class AbstractResolverTest extends FrameworkTestCase
+{
+   public AbstractResolverTest(String name)
+   {
+      super(name);
+   }
+   
+   protected Resolver getResolver()
+   {
+      Resolver resolver = getBundleManager().getPlugin(ResolverPlugin.class);
+      return resolver;
+   }
+}
\ No newline at end of file


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

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-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/ResolverMetadataTest.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -25,12 +25,10 @@
 
 import java.util.List;
 
-import org.jboss.osgi.framework.plugins.ResolverPlugin;
 import org.jboss.osgi.framework.resolver.ExportPackage;
 import org.jboss.osgi.framework.resolver.ImportPackage;
 import org.jboss.osgi.framework.resolver.Resolvable;
 import org.jboss.osgi.framework.resolver.Resolver;
-import org.jboss.test.osgi.FrameworkTestCase;
 import org.jboss.test.osgi.classloader.support.a.A;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
@@ -40,9 +38,9 @@
  * Test {@link Resolver} metadata.
  * 
  * @author thomas.diesler at jboss.com
- * @since 27-Jul-2009
+ * @since 09-Nov-2009
  */
-public class ResolverMetadataTest extends FrameworkTestCase
+public class ResolverMetadataTest extends AbstractResolverTest
 {
    public ResolverMetadataTest(String name)
    {
@@ -50,19 +48,17 @@
    }
 
    @Test
-   public void testBasicExport() throws Exception
+   public void testSimpleExport() throws Exception
    {
-      //Bundle-Name: BundleA
-      //Bundle-Version: 1.0.0
-      //Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleA;test=x
-      //Export-Package: org.jboss.test.osgi.classloader.support.a;version=1.0.0;test=x
-      Bundle bundleA = assembleBundle("bundleA", "/bundles/classloader/bundleA", A.class);
+      // Bundle-SymbolicName: resolver-simpleexport
+      // Export-Package: org.jboss.test.osgi.classloader.support.a
+      Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/simpleexport", A.class);
       
-      Resolver resolver = getBundleManager().getPlugin(ResolverPlugin.class);
+      Resolver resolver = getResolver();
       assertEquals(1, resolver.getBundles().size());
       
       Resolvable resolvableA = resolver.getBundle(bundleA.getSymbolicName(), null);
-      assertNull("Resolvable null", resolvableA);
+      assertNotNull("Resolvable not null", resolvableA);
       
       resolvableA = resolver.getBundle(bundleA.getSymbolicName(), bundleA.getVersion());
       assertNotNull("Resolvable not null", resolvableA);
@@ -71,8 +67,8 @@
       assertNotNull("Resolvable not null", resolvableA);
       
       assertNotNull(resolvableA.getBundle());
-      assertEquals(bundleA.getSymbolicName(), resolvableA.getSymbolicName());
-      assertEquals(bundleA.getVersion(), resolvableA.getVersion());
+      assertEquals("resolver-simpleexport", resolvableA.getSymbolicName());
+      assertEquals(Version.emptyVersion, resolvableA.getVersion());
       
       List<ExportPackage> exportPackages = resolvableA.getExportPackages();
       assertNotNull("ExportPackages not null", exportPackages);
@@ -82,10 +78,9 @@
       assertNotNull("ExportPackage not null", exportPackage);
       assertEquals("org.jboss.test.osgi.classloader.support.a", exportPackage.getName());
 
-      assertEquals(Version.parseVersion("1.0.0"), exportPackage.getVersion());
+      assertEquals(Version.emptyVersion, exportPackage.getVersion());
       assertEquals(0, exportPackage.getUses().size());
       assertEquals(0, exportPackage.getMandatoryAttributes().size());
-      assertEquals("x", exportPackage.getAttribute("test"));
       assertNull("Null includes", exportPackage.getIncludes());
       assertNull("Null excludes", exportPackage.getExcludes());
       
@@ -96,4 +91,37 @@
       assertFalse("No sigleton", resolvableA.isSingleton());
       assertFalse("Not resolved", resolvableA.isResolved());
    }
+
+   @Test
+   public void testSimpleImport() throws Exception
+   {
+      // Bundle-SymbolicName: resolver-simpleimport
+      // Import-Package: org.jboss.test.osgi.classloader.support.a
+      Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
+      
+      Resolvable resolvableA = getResolver().getBundle(bundleA);
+      
+      List<ImportPackage> importPackages = resolvableA.getImportPackages();
+      assertNotNull("ImportPackages not null", importPackages);
+      assertEquals(1, importPackages.size());
+
+      ImportPackage importPackage = resolvableA.getImportPackage("org.jboss.test.osgi.classloader.support.a");
+      assertNotNull("ImportPackage not null", importPackage);
+      assertEquals("org.jboss.test.osgi.classloader.support.a", importPackage.getName());
+
+      assertEquals("[0.0.0,?)", importPackage.getVersion().toString());
+      assertNull("Null bundle-symbolic-name", importPackage.getBundleSymbolicName());
+      assertEquals("[0.0.0,?)", importPackage.getBundleVersion().toString());
+   }
+
+   @Test
+   public void testSingleton() throws Exception
+   {
+      // Bundle-SymbolicName: resolver-singleton;singleton:=true
+      // Export-Package: org.jboss.test.osgi.classloader.support.a
+      Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/singleton", A.class);
+      
+      Resolvable resolvableA = getResolver().getBundle(bundleA);
+      assertTrue("Sigleton", resolvableA.isSingleton());
+   }
 }
\ No newline at end of file

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/RuleBasedResolverTest.java	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,84 @@
+/*
+ * 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.test.osgi.resolver;
+
+// $Id$
+
+import org.jboss.osgi.framework.bundle.OSGiBundleManager;
+import org.jboss.osgi.framework.plugins.ResolverPlugin;
+import org.jboss.osgi.framework.resolver.ExportPackage;
+import org.jboss.osgi.framework.resolver.ImportPackage;
+import org.jboss.osgi.framework.resolver.Resolvable;
+import org.jboss.osgi.framework.resolver.Resolver;
+import org.jboss.osgi.framework.resolver.internal.drools.RuleBasedResolverImpl;
+import org.jboss.test.osgi.classloader.support.a.A;
+import org.osgi.framework.Bundle;
+
+/**
+ * Test the rule based {@link Resolver}
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 27-Jul-2009
+ */
+public class RuleBasedResolverTest extends AbstractResolverTest
+{
+   public RuleBasedResolverTest(String name)
+   {
+      super(name);
+   }
+
+   @Override
+   protected void setUp() throws Exception
+   {
+      super.setUp();
+      
+      OSGiBundleManager bundleManager = getBundleManager();
+      ResolverPlugin resolver = bundleManager.getPlugin(ResolverPlugin.class);
+      if ((resolver instanceof RuleBasedResolverImpl) == false)
+      {
+         bundleManager.removePlugin(resolver);
+         bundleManager.addPlugin(new RuleBasedResolverImpl(bundleManager));
+      }
+   }
+
+   public void testSimpleImport() throws Exception
+   {
+      // Bundle-SymbolicName: resolver-simpleimport
+      // Import-Package: org.jboss.test.osgi.classloader.support.a
+      Bundle bundleA = assembleBundle("bundleA", "/bundles/resolver/simpleimport");
+      
+      // Bundle-SymbolicName: resolver-simpleexport
+      // Import-Package: org.jboss.test.osgi.classloader.support.a
+      Bundle bundleB = assembleBundle("bundleB", "/bundles/resolver/simpleexport", A.class);
+      
+      Resolver resolver = getResolver();
+      Resolvable resolvableA = resolver.getBundle(bundleA);
+      assertTrue("BundleA resolved", resolvableA.isResolved());
+      ImportPackage importPackage = resolvableA.getImportPackage(A.class.getPackage().getName());
+      assertNotNull("Exporter not null", importPackage.getExporter());
+      
+      Resolvable resolvableB = resolver.getBundle(bundleB);
+      assertTrue("BundleB resolved", resolvableB.isResolved());
+      ExportPackage exportPackage = resolvableB.getExportPackage(A.class.getPackage().getName());
+      assertEquals("Importers not null", 1, exportPackage.getImporters().size());
+   }
+}
\ No newline at end of file


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

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/jboss-osgi-bootstrap.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/jboss-osgi-bootstrap.xml	2009-11-10 19:00:18 UTC (rev 96229)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/jboss-osgi-bootstrap.xml	2009-11-10 19:32:57 UTC (rev 96230)
@@ -46,6 +46,9 @@
   ********************************
   -->
   
+  <bean name="OSGiBundleResolver" class="org.jboss.osgi.framework.resolver.internal.basic.BasicResolverImpl">
+    <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
+  </bean>
   <bean name="OSGiFrameworkEventsPlugin" class="org.jboss.osgi.framework.plugins.internal.FrameworkEventsPluginImpl">
     <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
   </bean>
@@ -55,9 +58,6 @@
   <bean name="OSGiSystemPackages" class="org.jboss.osgi.framework.plugins.internal.SystemPackagesPluginImpl">
     <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
   </bean>
-  <bean name="OSGiBundleResolver" class="org.jboss.osgi.framework.resolver.internal.basic.BasicResolverImpl">
-    <constructor><parameter><inject bean="OSGiBundleManager" /></parameter></constructor>
-  </bean>
   
   <!-- 
   ********************************

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleexport/META-INF/MANIFEST.MF	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: resolver-simpleexport
+Export-Package: org.jboss.test.osgi.classloader.support.a

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/simpleimport/META-INF/MANIFEST.MF	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: resolver-simpleimport
+Import-Package: org.jboss.test.osgi.classloader.support.a

Added: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/bundles/resolver/singleton/META-INF/MANIFEST.MF	2009-11-10 19:32:57 UTC (rev 96230)
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: resolver-sigleton;singleton:=true
+Export-Package: org.jboss.test.osgi.classloader.support.a




More information about the jboss-cvs-commits mailing list