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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 16 09:07:58 EST 2009


Author: thomas.diesler at jboss.com
Date: 2009-11-16 09:07:55 -0500 (Mon, 16 Nov 2009)
New Revision: 96440

Added:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java
Removed:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java
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/ImportPackage.java
   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/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/RequiredBundleImpl.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/drools/RuleBasedResolverImpl.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/resources/META-INF/resolver-rules.drl
Log:
Add support for Require-Bundle in drools resolver

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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ExportPackage.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -32,7 +32,7 @@
  * @author thomas.diesler at jboss.com
  * @since 09-Nov-2009
  */
-public interface ExportPackage extends NamedPackage
+public interface ExportPackage extends NamedElement
 {
    /**
     * Get the version of this export.

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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/ImportPackage.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -29,13 +29,8 @@
  * @author thomas.diesler at jboss.com
  * @since 09-Nov-2009
  */
-public interface ImportPackage extends NamedPackage
+public interface ImportPackage extends NamedElement
 {
-   enum Resolution
-   {
-      OPTIONAL, MANDATORY
-   };
-
    /**
     * Get the version range for this import package.
     * 

Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java (from rev 96404, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedElement.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -0,0 +1,62 @@
+/*
+ * 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.Set;
+
+
+/**
+ * A common named element
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+public interface NamedElement
+{
+   /**
+    * Get the bundle that owns this element
+    * 
+    * @return the owner
+    */
+   Resolvable getOwner();
+
+   /**
+    * Get the element name
+    * 
+    * @return the name
+    */
+   String getName();
+
+   /**
+    * Get the associated set of arbitrary attributes.
+    * @return An empty list if their are no attributes.
+    */
+   Set<String> getAttributes();
+
+   /**
+    * Get the attribute value for the given key.
+    * 
+    * @param key the key
+    * @return The attribute value or null.
+    */
+   Object getAttribute(String key);
+}
\ No newline at end of file

Deleted: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java	2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/NamedPackage.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -1,62 +0,0 @@
-/*
- * 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.Set;
-
-
-/**
- * An abstraction of an osgi package declaration.
- * 
- * @author thomas.diesler at jboss.com
- * @since 09-Nov-2009
- */
-public interface NamedPackage
-{
-   /**
-    * Get the bundle that owns this package decalaration
-    * 
-    * @return the owner
-    */
-   Resolvable getOwner();
-
-   /**
-    * Get the package name
-    * 
-    * @return the name
-    */
-   String getName();
-
-   /**
-    * Get the associated set of arbitrary attributes.
-    * @return An empty list if their are no attributes.
-    */
-   Set<String> getAttributes();
-
-   /**
-    * Get the attribute value for the given key.
-    * 
-    * @param key the key
-    * @return The attribute value or null.
-    */
-   Object getAttribute(String key);
-}
\ No newline at end of file

Modified: 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	2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/RequiredBundle.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -29,7 +29,7 @@
  * @author thomas.diesler at jboss.com
  * @since 09-Nov-2009
  */
-public interface RequiredBundle
+public interface RequiredBundle extends NamedElement
 {
    /**
     * Get the bundle's symbolic name.
@@ -51,4 +51,16 @@
     * @return null if this attribute is not set
     */
    boolean isOptional();
+   
+   /**
+    * Get the provider for this bundle requirement
+    * 
+    * @return the owner
+    */
+   Resolvable getProvider();
+
+   /**
+    * Set the provider for this bundle requirement
+    */
+   void setProvider(Resolvable provider);
 }
\ 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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ExportPackageImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -28,8 +28,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.jboss.osgi.framework.metadata.PackageAttribute;
 import org.jboss.osgi.framework.metadata.Parameter;
+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.Resolvable;
@@ -42,38 +42,18 @@
  * @author thomas.diesler at jboss.com
  * @since 09-Nov-2009
  */
-public class ExportPackageImpl extends NamedPackageImpl implements ExportPackage
+public class ExportPackageImpl extends NamedElementImpl implements ExportPackage
 {
-   private PackageAttribute packageMetaData;
    private Set<ImportPackage> importers = new HashSet<ImportPackage>();
    
-   public ExportPackageImpl(Resolvable owner, String packageName)
+   public ExportPackageImpl(Resolvable owner, ParameterizedAttribute attr)
    {
-      super(owner, packageName);
+      super(owner, attr);
    }
 
-   @Override
-   protected PackageAttribute getPackageMetaData()
-   {
-      if (packageMetaData == null)
-      {
-         for (PackageAttribute aux : getMetaData().getExportPackages())
-         {
-            if (aux.getPackageInfo().getName().equals(getName()))
-            {
-               packageMetaData = aux;
-               break;
-            }
-         }
-         if (packageMetaData == null)
-            throw new IllegalStateException("Cannot obtain packageMetaData for: " + getName());
-      }
-      return packageMetaData;
-   }
-
    public Version getVersion()
    {
-      Parameter version = getPackageMetaData().getAttribute(Constants.VERSION_ATTRIBUTE);
+      Parameter version = getParameterizedAttribute().getAttribute(Constants.VERSION_ATTRIBUTE);
       return Version.parseVersion(version != null ? version.getValue().toString() : null);
    }
 
@@ -103,7 +83,7 @@
    private List<String> getDirectiveValueList(String key)
    {
       List<String> valueList = new ArrayList<String>();
-      Parameter directive = getPackageMetaData().getDirective(key);
+      Parameter directive = getParameterizedAttribute().getDirective(key);
       if (directive != null)
       {
          valueList.addAll((Collection<String>)directive.getValue());

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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ImportPackageImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -21,8 +21,8 @@
  */
 package org.jboss.osgi.framework.resolver.internal;
 
-import org.jboss.osgi.framework.metadata.PackageAttribute;
 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.ExportPackage;
@@ -36,39 +36,19 @@
  * @author thomas.diesler at jboss.com
  * @since 09-Nov-2009
  */
-public class ImportPackageImpl extends NamedPackageImpl implements ImportPackage
+public class ImportPackageImpl extends NamedElementImpl implements ImportPackage
 {
-   private PackageAttribute packageMetaData;
    private ExportPackage exporter;
 
-   public ImportPackageImpl(Resolvable owner, String packageName)
+   public ImportPackageImpl(Resolvable owner, ParameterizedAttribute attr)
    {
-      super(owner, packageName);
+      super(owner, attr);
    }
 
-   @Override
-   protected PackageAttribute getPackageMetaData()
-   {
-      if (packageMetaData == null)
-      {
-         for (PackageAttribute aux : getMetaData().getImportPackages())
-         {
-            if (aux.getPackageInfo().getName().equals(getName()))
-            {
-               packageMetaData = aux;
-               break;
-            }
-         }
-         if (packageMetaData == null)
-            throw new IllegalStateException("Cannot obtain packageMetaData for: " + getName());
-      }
-      return packageMetaData;
-   }
-
    public VersionRange getVersion()
    {
       VersionRange versionRange = AbstractVersionRange.valueOf("0.0.0");
-      Parameter version = getPackageMetaData().getAttribute(Constants.VERSION_ATTRIBUTE);
+      Parameter version = getParameterizedAttribute().getAttribute(Constants.VERSION_ATTRIBUTE);
       if (version != null)
          versionRange = AbstractVersionRange.valueOf((String)version.getValue());
       return versionRange;
@@ -81,14 +61,14 @@
 
    public VersionRange getBundleVersion()
    {
-      Parameter version = getPackageMetaData().getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
+      Parameter version = getParameterizedAttribute().getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
       return (version != null ? AbstractVersionRange.valueOf((String)version.getValue()) : null);
    }
 
    public boolean isOptional()
    {
       boolean optional = false;
-      Parameter resolution = getPackageMetaData().getDirective(Constants.RESOLUTION_DIRECTIVE);
+      Parameter resolution = getParameterizedAttribute().getDirective(Constants.RESOLUTION_DIRECTIVE);
       if (resolution != null)
          optional = Constants.RESOLUTION_OPTIONAL.equals(resolution.getValue());
       return optional;

Copied: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java (from rev 96430, projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java)
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java	                        (rev 0)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedElementImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -0,0 +1,108 @@
+/*
+ * 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 java.util.Map;
+import java.util.Set;
+
+import org.jboss.osgi.framework.bundle.OSGiBundleState;
+import org.jboss.osgi.framework.metadata.OSGiMetaData;
+import org.jboss.osgi.framework.metadata.Parameter;
+import org.jboss.osgi.framework.metadata.ParameterizedAttribute;
+import org.jboss.osgi.framework.resolver.NamedElement;
+import org.jboss.osgi.framework.resolver.Resolvable;
+
+/**
+ * A common named element
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 09-Nov-2009
+ */
+abstract class NamedElementImpl implements NamedElement
+{
+   private Resolvable owner;
+   private OSGiMetaData metaData;
+   private ParameterizedAttribute paramattr;
+
+   public NamedElementImpl(Resolvable owner, ParameterizedAttribute attr)
+   {
+      if (owner == null)
+         throw new IllegalArgumentException("Null element owner");
+      if (attr == null)
+         throw new IllegalArgumentException("Null element attribute");
+
+      this.owner = owner;
+      this.paramattr = attr;
+
+      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(owner.getBundle());
+      this.metaData = bundleState.getOSGiMetaData();
+   }
+
+   public Resolvable getOwner()
+   {
+      return owner;
+   }
+
+   public String getName()
+   {
+      return paramattr.getAttribute();
+   }
+
+   protected OSGiMetaData getMetaData()
+   {
+      return metaData;
+   }
+
+   protected ParameterizedAttribute getParameterizedAttribute()
+   {
+      return paramattr;
+   }
+
+   public Set<String> getAttributes()
+   {
+      return getParameterizedAttribute().getAttributes().keySet();
+   }
+
+   public Object getAttribute(String key)
+   {
+      Parameter attr = getParameterizedAttribute().getAttribute(key);
+      return (attr != null ? attr.getValue() : null);
+   }
+
+   private String shortString;
+   public String toShortString()
+   {
+      if (shortString == null)
+      {
+         Map<String, Parameter> attributes = getParameterizedAttribute().getAttributes();
+         Map<String, Parameter> directives = getParameterizedAttribute().getDirectives();
+         StringBuffer buffer = new StringBuffer("[" + getName());
+         for (Map.Entry<String, Parameter> entry : directives.entrySet())
+            buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
+         for (Map.Entry<String, Parameter> entry : attributes.entrySet())
+            buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
+         buffer.append("]");
+         shortString = buffer.toString();
+      }
+      return shortString;
+   }
+}
\ No newline at end of file

Deleted: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java	2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/NamedPackageImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -1,105 +0,0 @@
-/*
- * 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 java.util.Map;
-import java.util.Set;
-
-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.Parameter;
-import org.jboss.osgi.framework.resolver.NamedPackage;
-import org.jboss.osgi.framework.resolver.Resolvable;
-
-/**
- * An abstraction of an osgi package declaration.
- * 
- * @author thomas.diesler at jboss.com
- * @since 09-Nov-2009
- */
-abstract class NamedPackageImpl implements NamedPackage
-{
-   private Resolvable owner;
-   private String packageName;
-   private OSGiMetaData metaData;
-
-   public NamedPackageImpl(Resolvable owner, String packageName)
-   {
-      if (owner == null)
-         throw new IllegalArgumentException("Null package owner");
-      if (packageName == null)
-         throw new IllegalArgumentException("Null packageName");
-
-      this.owner = owner;
-      this.packageName = packageName;
-
-      OSGiBundleState bundleState = OSGiBundleState.assertBundleState(owner.getBundle());
-      this.metaData = bundleState.getOSGiMetaData();
-   }
-
-   public Resolvable getOwner()
-   {
-      return owner;
-   }
-
-   public String getName()
-   {
-      return packageName;
-   }
-
-   protected OSGiMetaData getMetaData()
-   {
-      return metaData;
-   }
-
-   protected abstract PackageAttribute getPackageMetaData();
-
-   public Set<String> getAttributes()
-   {
-      return getPackageMetaData().getAttributes().keySet();
-   }
-
-   public Object getAttribute(String key)
-   {
-      Parameter attr = getPackageMetaData().getAttribute(key);
-      return (attr != null ? attr.getValue() : null);
-   }
-
-   private String packageSpec;
-   public String toShortString()
-   {
-      if (packageSpec == null)
-      {
-         Map<String, Parameter> attributes = getPackageMetaData().getAttributes();
-         Map<String, Parameter> directives = getPackageMetaData().getDirectives();
-         StringBuffer buffer = new StringBuffer("[" + getName());
-         for (Map.Entry<String, Parameter> entry : directives.entrySet())
-            buffer.append(";" + entry.getKey() + ":=" + entry.getValue().getValue());
-         for (Map.Entry<String, Parameter> entry : attributes.entrySet())
-            buffer.append(";" + entry.getKey() + "=" + entry.getValue().getValue());
-         buffer.append("]");
-         packageSpec = buffer.toString();
-      }
-      return packageSpec;
-   }
-}
\ No newline at end of file

Modified: 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	2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/RequiredBundleImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -26,6 +26,7 @@
 import org.jboss.osgi.framework.metadata.VersionRange;
 import org.jboss.osgi.framework.metadata.internal.AbstractVersionRange;
 import org.jboss.osgi.framework.resolver.RequiredBundle;
+import org.jboss.osgi.framework.resolver.Resolvable;
 import org.osgi.framework.Constants;
 
 /**
@@ -34,24 +35,25 @@
  * @author thomas.diesler at jboss.com
  * @since 09-Nov-2009
  */
-public class RequiredBundleImpl implements RequiredBundle
+public class RequiredBundleImpl extends NamedElementImpl implements RequiredBundle
 {
-   private String symbolicName;
-   private ParameterizedAttribute attr;
-
-   public RequiredBundleImpl(ParameterizedAttribute attr)
+   private Resolvable provider;
+   
+   public RequiredBundleImpl(Resolvable owner, ParameterizedAttribute attr)
    {
-      this.symbolicName = attr.getAttribute();
-      this.attr = attr;
+      super(owner, attr);
+      if (getSymbolicName().equals(owner.getSymbolicName()))
+         throw new IllegalArgumentException("Cannot require a bundle with the owner's symbolic name: " + getSymbolicName());
    }
 
    public String getSymbolicName()
    {
-      return symbolicName;
+      return getName();
    }
 
    public VersionRange getVersion()
    {
+      ParameterizedAttribute attr = getParameterizedAttribute();
       String rangeStr = attr.getAttributeValue(Constants.BUNDLE_VERSION_ATTRIBUTE, String.class);
       if (rangeStr != null)
          return AbstractVersionRange.parseRangeSpec(rangeStr);
@@ -61,9 +63,25 @@
    public boolean isOptional()
    {
       boolean optional = false;
+      ParameterizedAttribute attr = getParameterizedAttribute();
       Parameter param = attr.getDirective(Constants.RESOLUTION_DIRECTIVE);
       if (param != null)
          optional = Constants.RESOLUTION_OPTIONAL.equals(param.getValue());
       return optional;
    }
+
+   public Resolvable getProvider()
+   {
+      return provider;
+   }
+
+   public void setProvider(Resolvable provider)
+   {
+      this.provider = provider;
+   }
+
+   public String toString()
+   {
+      return "RequiredBundle" + toShortString();
+   }
 }
\ 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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/ResolvableImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -65,8 +65,8 @@
       {
          for (PackageAttribute attr : exportPackages)
          {
-            String packageName = attr.getPackageInfo().getName();
-            exportedPackages.put(packageName, new ExportPackageImpl(this, packageName));
+            String packageName = attr.getAttribute();
+            exportedPackages.put(packageName, new ExportPackageImpl(this, attr));
          }
       }
 
@@ -76,8 +76,8 @@
       {
          for (PackageAttribute attr : importPackages)
          {
-            String packageName = attr.getPackageInfo().getName();
-            importedPackages.put(packageName, new ImportPackageImpl(this, packageName));
+            String packageName = attr.getAttribute();
+            importedPackages.put(packageName, new ImportPackageImpl(this, attr));
          }
       }
 
@@ -87,8 +87,9 @@
       {
          for (ParameterizedAttribute attr : requireBundles)
          {
-            RequiredBundleImpl req = new RequiredBundleImpl(attr);
-            requiredBundles.put(req.getSymbolicName(), req);
+            String symbolicName = attr.getAttribute();
+            RequiredBundleImpl req = new RequiredBundleImpl(this, attr);
+            requiredBundles.put(symbolicName, req);
          }
       }
    }

Modified: 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	2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/resolver/internal/drools/RuleBasedResolverImpl.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -118,9 +118,10 @@
       {
          FactHandle factHandle = ksession.getFactHandle(aux);
          if (factHandle == null)
+         {
             factHandle = ksession.insert(aux);
-         
-         facts.put(aux, factHandle);
+            facts.put(aux, factHandle);
+         }
       }
 
       // Fire all the rules

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-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/resolver/AbstractImportExportTest.java	2009-11-16 14:07:55 UTC (rev 96440)
@@ -669,7 +669,7 @@
       }
    }
 
-   @Ignore
+   @Test
    public void testRequireBundleFails() throws Exception
    {
       Resolver resolver = getTestResolver();
@@ -694,12 +694,12 @@
       }
    }
 
-   @Test
+   @Ignore
    public void testAttributeImportPackage() throws Exception
    {
    }
 
-   @Test
+   @Ignore
    public void testAttributeImportPackageFails() throws Exception
    {
    }

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl	2009-11-16 13:22:32 UTC (rev 96439)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/resources/META-INF/resolver-rules.drl	2009-11-16 14:07:55 UTC (rev 96440)
@@ -53,12 +53,12 @@
 * A rule that inserts the ImportPackage facts for newly inserted 
 * Resolvable objects.
 */
-rule "Add import packages for new resolvable"
+rule "Add ImportPackage for new Resolvable"
 salience 10000
 when
 	$owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
-	$import : ImportPackage( owner == $owner ) from $owner.importPackages
-	not ImportPackage( owner == $owner, name == $import.name ) 
+	$import : ImportPackage( ) from $owner.importPackages
+	not ImportPackage( owner == $owner, this == $import ) 
 then
     log("Add " + $import);
     insert( $import );
@@ -68,18 +68,33 @@
 * A rule that inserts the ExportPackage facts for newly inserted 
 * Resolvable objects.
 */
-rule "Add export packages for new resolvable"
+rule "Add ExportPackage for new Resolvable"
 salience 10000
 when
 	$owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
-	$export : ExportPackage( owner == $owner ) from $owner.exportPackages
-	not ExportPackage( owner == $owner, name == $export.name ) 
+	$export : ExportPackage( ) from $owner.exportPackages
+	not ExportPackage( owner == $owner, this == $export ) 
 then
     log("Add " + $export);
     insert( $export );
 end
 
 /**************************************************************************************************
+* A rule that inserts the RequiredBundle facts for newly inserted 
+* Resolvable objects.
+*/
+rule "Add RequiredBundle for new Resolvable"
+salience 10000
+when
+	$owner : Resolvable( resolved == false, state == Bundle.INSTALLED )
+	$reqbundle : RequiredBundle( ) from $owner.requiredBundles
+	not RequiredBundle( owner == $owner, this == $reqbundle ) 
+then
+    log("Add " + $reqbundle);
+    insert( $reqbundle );
+end
+
+/**************************************************************************************************
 * A rule that inserts the WireCandidate facts for every combination 
 * of matching import/export package names.
 */
@@ -141,6 +156,19 @@
 end
 
 /**************************************************************************************************
+* A rule that sets the provider for a RequiredBundle if there is a match
+*/
+rule "Set RequiredBundle provider on match"
+salience 100
+when
+    $provider : Resolvable( )
+    $reqbundle : RequiredBundle( symbolicName == $provider.symbolicName, provider == null )
+then
+    log("RequiredBundle match " + $reqbundle + " --> " + $provider);
+    modify ( $reqbundle ) { setProvider( $provider ) };
+end
+
+/**************************************************************************************************
 * A rule that applies the WireCandidate if there is only one 
 * possible WireCandidate left that refers to an ImportPackage.
 */
@@ -164,6 +192,7 @@
 when
     $owner : Resolvable( resolved == false )
     not( ImportPackage( owner == $owner, optional == false, exporter == null ))
+    not( RequiredBundle( owner == $owner, optional == false, provider == null ))
 then
     log("Resolved " + $owner);
     modify ( $owner ) { markResolved ( ) };
@@ -174,8 +203,7 @@
 */
 rule "Retract uninstalled ImportPackage"
 when
-    $owner : Resolvable( )
-    eval ( $owner.getState() == Bundle.UNINSTALLED )
+    $owner : Resolvable( state == Bundle.UNINSTALLED )
     $import : ImportPackage( owner == $owner )
 then
     log("Uninstall " + $import);
@@ -187,8 +215,7 @@
 */
 rule "Retract uninstalled ExportPackage"
 when
-    $owner : Resolvable( )
-    eval ( $owner.getState() == Bundle.UNINSTALLED )
+    $owner : Resolvable( state == Bundle.UNINSTALLED )
     $export : ExportPackage( owner == $owner )
 then
     log("Uninstall " + $export);
@@ -220,6 +247,18 @@
 end
 
 /**************************************************************************************************
+* A rule that retracts RequiredBundles facts for UNINSTALLED Resolvables
+*/
+rule "Retract uninstalled RequiredBundles"
+when
+    $owner : Resolvable( state == Bundle.UNINSTALLED )
+    $reqbundle : RequiredBundle( owner == $owner )
+then
+    log("Unistall " + $reqbundle);
+    retract ( $reqbundle );
+end
+
+/**************************************************************************************************
 * A rule that reports unresolved ImportPackage objects 
 */
 rule "Report unresolved import"




More information about the jboss-cvs-commits mailing list