Search in sources :

Example 1 with CapabilitySet

use of org.apache.felix.utils.resource.CapabilitySet in project karaf by apache.

the class RequirementSort method sort.

/**
 * Sort {@link Resource} based on their {@link Requirement}s and {@link Capability}s.
 *
 * @param resources the resource to sort.
 * @param <T> the resources type.
 * @return sorted collection of resources.
 */
public static <T extends Resource> Collection<T> sort(Collection<T> resources) {
    Set<String> namespaces = new HashSet<>();
    for (Resource r : resources) {
        for (Capability cap : r.getCapabilities(null)) {
            namespaces.add(cap.getNamespace());
        }
    }
    CapabilitySet capSet = new CapabilitySet(new ArrayList<>(namespaces));
    for (Resource r : resources) {
        for (Capability cap : r.getCapabilities(null)) {
            capSet.addCapability(cap);
        }
    }
    Set<T> sorted = new LinkedHashSet<>();
    Set<T> visited = new LinkedHashSet<>();
    for (T r : resources) {
        visit(r, visited, sorted, capSet);
    }
    return sorted;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Capability(org.osgi.resource.Capability) Resource(org.osgi.resource.Resource) CapabilitySet(org.apache.felix.utils.resource.CapabilitySet) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Aggregations

HashSet (java.util.HashSet)1 LinkedHashSet (java.util.LinkedHashSet)1 CapabilitySet (org.apache.felix.utils.resource.CapabilitySet)1 Capability (org.osgi.resource.Capability)1 Resource (org.osgi.resource.Resource)1