use of org.osgi.resource.Capability in project aries by apache.
the class SubTestRepository method findProviders.
@Override
public Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements) {
Map<Requirement, Collection<Capability>> res = new HashMap<Requirement, Collection<Capability>>();
for (Requirement req : requirements) {
if (req.getNamespace().equals("ns1") && req.getDirectives().equals(Collections.singletonMap("filter", "(x=y)"))) {
TestCapability cap = new TestCapability("ns1", Collections.<String, Object>singletonMap("x", "y"));
Collection<Capability> caps = Collections.<Capability>singleton(cap);
res.put(req, caps);
}
}
return res;
}
use of org.osgi.resource.Capability in project aries by apache.
the class Aries1453Test method shouldResolveFragmentHostWithVersionRangeAndMatchWithBundlesInThatRange.
@Test
public void shouldResolveFragmentHostWithVersionRangeAndMatchWithBundlesInThatRange() {
FragmentHostHeader header = new FragmentHostHeader("host-bundle;bundle-version=\"[9.6.0,10)\"");
FragmentHostRequirement requirement = new FragmentHostRequirement(header.getClauses().iterator().next(), null);
FragmentHostCapability capability = new FragmentHostCapability(new BundleSymbolicNameHeader("host-bundle"), new BundleVersionHeader("9.6.1"), new Resource() {
@Override
public List<Capability> getCapabilities(String namespace) {
return null;
}
@Override
public List<Requirement> getRequirements(String namespace) {
return null;
}
});
String filterDirective = requirement.getDirectives().get(Namespace.REQUIREMENT_FILTER_DIRECTIVE);
SimpleFilter simpleFilter = SimpleFilter.parse(filterDirective);
CapabilitySet capabilitySet = new CapabilitySet(Arrays.asList(HostNamespace.HOST_NAMESPACE), true);
capabilitySet.addCapability(capability);
Set<Capability> capabilities = capabilitySet.match(simpleFilter, true);
Assert.assertTrue(capabilities.size() == 1);
Assert.assertSame(capabilities.iterator().next(), capability);
}
use of org.osgi.resource.Capability in project bndtools by bndtools.
the class WorkspaceR5Repository method findProviders.
@Override
public Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements) {
Map<Requirement, Collection<Capability>> result = new HashMap<Requirement, Collection<Capability>>();
for (Requirement requirement : requirements) {
List<Capability> matches = new LinkedList<Capability>();
result.put(requirement, matches);
for (Entry<IProject, CapabilityIndex> entry : projectMap.entrySet()) {
IProject project = entry.getKey();
if (project.exists() && project.isOpen()) {
CapabilityIndex capabilityIndex = entry.getValue();
capabilityIndex.appendMatchingCapabilities(requirement, matches);
}
}
}
return result;
}
use of org.osgi.resource.Capability in project bnd by bndtools.
the class AugmentRepository method findProviders.
@Override
public Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements) {
Map<Requirement, Collection<Capability>> fromRepos = repository.findProviders(requirements);
for (Requirement requirement : requirements) {
List<Capability> provided = new ArrayList<>();
boolean replaced = false;
for (Capability originalCapability : fromRepos.get(requirement)) {
if (isValid(originalCapability)) {
Capability wrappedCapability = wrapped.get(originalCapability);
if (wrappedCapability != null) {
provided.add(wrappedCapability);
replaced = true;
} else
provided.add(originalCapability);
}
}
Collection<Capability> additional = ResourceUtils.findProviders(requirement, augmentedCapabilities);
replaced |= provided.addAll(additional);
if (replaced)
fromRepos.put(requirement, provided);
}
return fromRepos;
}
use of org.osgi.resource.Capability in project bnd by bndtools.
the class BaseRepository method dispatch.
private void dispatch(RequirementExpression expression, Set<Resource> providers) {
if (expression instanceof IdentityExpression) {
Map<Requirement, Collection<Capability>> capabilities = findProviders(Collections.singleton(((IdentityExpression) expression).getRequirement()));
for (Collection<Capability> caps : capabilities.values()) {
for (Capability c : caps) providers.add(c.getResource());
}
} else if (expression instanceof OrExpression) {
for (RequirementExpression re : ((OrExpression) expression).getRequirementExpressions()) dispatch(re, providers);
} else if (expression instanceof AndExpression) {
List<RequirementExpression> requirementExpressions = ((AndExpression) expression).getRequirementExpressions();
if (requirementExpressions.isEmpty())
return;
if (requirementExpressions.size() == 1) {
dispatch(requirementExpressions.get(0), providers);
return;
}
Set<Resource> subset = new HashSet<>();
dispatch(requirementExpressions.get(0), subset);
for (int i = 1; i < requirementExpressions.size(); i++) {
for (Iterator<Resource> it = subset.iterator(); it.hasNext(); ) {
Resource resource = it.next();
RequirementExpression re = requirementExpressions.get(i);
if (!matches(re, resource)) {
it.remove();
if (subset.isEmpty())
return;
}
}
}
providers.addAll(subset);
} else if (expression instanceof NotExpression) {
Set<Resource> allSet = new HashSet<>();
dispatch(all, allSet);
RequirementExpression re = ((NotExpression) expression).getRequirementExpression();
for (Iterator<Resource> it = allSet.iterator(); it.hasNext(); ) {
Resource resource = it.next();
if (matches(re, resource)) {
it.remove();
if (allSet.isEmpty())
return;
}
}
providers.addAll(allSet);
} else
throw new UnsupportedOperationException("Unknown expression type " + expression.getClass());
}
Aggregations