Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java')
-rw-r--r--bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
index 5a60207f1..716d86c79 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
@@ -17,7 +17,8 @@ import java.util.Map;
import org.eclipse.osgi.framework.internal.core.Constants;
import org.eclipse.osgi.internal.resolver.BaseDescriptionImpl.BaseCapability;
import org.eclipse.osgi.service.resolver.*;
-import org.osgi.framework.Version;
+import org.eclipse.osgi.util.ManifestElement;
+import org.osgi.framework.*;
import org.osgi.framework.wiring.*;
abstract class VersionConstraintImpl implements VersionConstraint {
@@ -101,6 +102,8 @@ abstract class VersionConstraintImpl implements VersionConstraint {
protected abstract Map<String, Object> getInteralAttributes();
+ protected abstract boolean hasMandatoryAttributes(String[] mandatory);
+
public BundleRequirement getRequirement() {
String namespace = getInternalNameSpace();
if (namespace == null)
@@ -156,6 +159,26 @@ abstract class VersionConstraintImpl implements VersionConstraint {
public String toString() {
return getNamespace() + BaseDescriptionImpl.toString(getAttributes(), false) + BaseDescriptionImpl.toString(getDirectives(), true);
}
+
+ public boolean matches(Capability capability) {
+ if (capability instanceof BundleCapability)
+ return matches((BundleCapability) capability);
+ // now we must do the generic thing
+ if (!namespace.equals(capability.getNamespace()))
+ return false;
+ String filterSpec = getDirectives().get(ResourceConstants.REQUIREMENT_FILTER_DIRECTIVE);
+ try {
+ if (filterSpec != null && !FrameworkUtil.createFilter(filterSpec).matches(capability.getAttributes()))
+ return false;
+ } catch (InvalidSyntaxException e) {
+ return false;
+ }
+ return hasMandatoryAttributes(ManifestElement.getArrayFromList(capability.getDirectives().get(ResourceConstants.CAPABILITY_MANDATORY_DIRECTIVE)));
+ }
+
+ public BundleRevision getResource() {
+ return getRevision();
+ }
}
static StringBuffer addFilterAttributes(StringBuffer filter, Map<String, ?> attributes) {

Back to the top