
aQute.bnd.osgi.repository.ResourcesRepository 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
The newest version!
package aQute.bnd.osgi.repository;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
import java.util.stream.Collector;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import aQute.bnd.osgi.resource.ResourceUtils;
import aQute.bnd.service.resource.SupportingResource;
/**
* A repository that contains a set of resources.
*/
public class ResourcesRepository extends BaseRepository {
private final Set resources;
private final Map>> cache;
/**
* Creates a new resources repository with an empty set of resources.
*/
public ResourcesRepository() {
resources = new LinkedHashSet<>();
cache = new ConcurrentHashMap<>();
}
/**
* Creates a new resources repository with a single resource.
*
* @param resource The resource to add to the repository.
*/
public ResourcesRepository(Resource resource) {
this();
add(resource);
}
/**
* Creates a new resources repository with a collection of resources.
*
* @param resources The resources to add to the repository.
*/
public ResourcesRepository(Collection extends Resource> resources) {
this();
addAll(resources);
}
/**
* Finds all the providers of the specified requirements in this repository.
*
* @param requirements The requirements to find providers for.
* @return A map of requirements to the providers that satisfy them.
*/
@Override
public Map> findProviders(Collection extends Requirement> requirements) {
return ResourceUtils.findProviders(requirements, this::findProvider);
}
/**
* Finds the providers of the specified requirement in this repository.
*
* @param requirement The requirement to find providers for.
* @return A list of capabilities that satisfy the requirement.
*/
public List findProvider(Requirement requirement) {
String namespace = requirement.getNamespace();
return resources.stream()
.flatMap(resource -> ResourceUtils.capabilityStream(resource, namespace))
.filter(ResourceUtils.matcher(requirement, this::filterPredicate))
.collect(ResourceUtils.toCapabilities());
}
/**
* Gets the predicate that filters capabilities based on the specified
* filter string.
*
* @param filterString The filter string.
* @return A predicate that filters capabilities based on the specified
* filter string.
*/
private Predicate
© 2015 - 2025 Weber Informatics LLC | Privacy Policy