The solution is pretty straight forward.
I modified "private List searchLocalResources(Requirement req)" in
ResolverImpl to include the following:

if (!m_failedSet.contains(resources[resIdx])
&& !m_resolveSet.contains(resources[resIdx])) {
//begin fix
  Capability[] caps = resources[resIdx].getCapabilities();
  CapabilityImpl impl = new CapabilityImpl();
  Map map = resources[resIdx].getProperties();
  for (Entry entry : (Set<Entry>) map.entrySet()) {
     impl.addP(entry.getKey().toString(), entry.getValue());
  }
  if (req.isSatisfied(impl)) {
    matchingCandidates.add(resources[resIdx]);
    continue;
  }
//end fix

I create a temporary capability that contains all the properties of a
resource (the properties contain the bundle name and version). This can then
be passed to requirement's isSatisifed method and matched against the
filter.
I am looking for a better place to put this but my scenario works now.

Reply via email to