aQute.bnd.osgi.repository.AggregateRepository Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of biz.aQute.bndlib Show documentation
Show all versions of biz.aQute.bndlib Show documentation
bndlib: A Swiss Army Knife for OSGi
package aQute.bnd.osgi.repository;
import static java.util.Collections.singleton;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.service.repository.Repository;
import aQute.lib.collections.MultiMap;
public class AggregateRepository extends BaseRepository {
private final Repository repositories[];
public AggregateRepository(Collection< ? extends Repository> repositories) {
this(repositories.toArray(new Repository[0]));
}
public AggregateRepository(Repository... repositories) {
this.repositories = new Repository[repositories.length];
System.arraycopy(repositories, 0, this.repositories, 0, repositories.length);
}
@SuppressWarnings({
"unchecked", "rawtypes"
})
@Override
public Map> findProviders(Collection< ? extends Requirement> requirements) {
MultiMap result = new MultiMap<>();
for (Repository repository : repositories) {
Map> capabilities = repository.findProviders(requirements);
result.addAll(capabilities);
}
return (Map) result;
}
public Collection findProviders(Requirement req) {
if (req == null)
return Collections.emptyList();
Collection capabilities = findProviders(singleton(req)).get(req);
assert capabilities != null : "findProviders must return a map containing the collection";
return capabilities;
}
}