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