Search in sources :

Example 1 with SimpleFilter

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

the class SubsystemResolver method getResourceMapping.

/**
 * Returns a mapping for resources that match given filter, to a subsystem that represents region or scoped feature.
 * @param resourceFilter
 * @return map from resource to region name
 */
private Map<Resource, String> getResourceMapping(SimpleFilter resourceFilter) {
    Map<String, String> flats = getFlatSubsystemsMap();
    Map<Resource, List<Wire>> wiring = getWiring();
    Map<Resource, String> resources = new HashMap<>();
    SimpleFilter sf = createFilter(IDENTITY_NAMESPACE, "*", CAPABILITY_TYPE_ATTRIBUTE, TYPE_SUBSYSTEM);
    if (wiring != null) {
        for (Resource resource : wiring.keySet()) {
            if (findMatchingCapability(resourceFilter, resource.getCapabilities(null)) != null) {
                // Find the subsystem where this feature is installed
                Wire wire = findMatchingWire(sf, wiring.get(resource));
                if (wire != null) {
                    String region = (String) wire.getCapability().getAttributes().get(IDENTITY_NAMESPACE);
                    region = flats.get(region);
                    resources.put(resource, region);
                }
            }
        }
    }
    return resources;
}
Also used : HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) SimpleFilter(org.apache.felix.utils.resource.SimpleFilter) Resource(org.osgi.resource.Resource) List(java.util.List) ArrayList(java.util.ArrayList) Wire(org.osgi.resource.Wire)

Example 2 with SimpleFilter

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

the class SubsystemResolver method getBundles.

/**
 * @return map of bundles and the region they are deployed in
 */
public Map<Resource, String> getBundles() {
    if (bundles == null) {
        String filter = String.format("(&(%s=*)(|(%s=%s)(%s=%s)))", IDENTITY_NAMESPACE, CAPABILITY_TYPE_ATTRIBUTE, TYPE_BUNDLE, CAPABILITY_TYPE_ATTRIBUTE, TYPE_FRAGMENT);
        SimpleFilter sf = SimpleFilter.parse(filter);
        bundles = getResourceMapping(sf);
    }
    return bundles;
}
Also used : SimpleFilter(org.apache.felix.utils.resource.SimpleFilter)

Example 3 with SimpleFilter

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

the class SubsystemResolver method associateFragments.

private void associateFragments() {
    SimpleFilter sf = createFilter(IDENTITY_NAMESPACE, "*", CAPABILITY_TYPE_ATTRIBUTE, TYPE_SUBSYSTEM);
    for (Map.Entry<Resource, List<Wire>> entry : wiring.entrySet()) {
        final Resource resource = entry.getKey();
        final Requirement requirement = getSubsystemRequirement(resource);
        if (ResolverUtil.isFragment(resource) && requirement != null) {
            List<Wire> wires = entry.getValue();
            final Resource host = wires.get(0).getProvider();
            final Wire wire = findMatchingWire(sf, wiring.get(host));
            if (wire != null) {
                wires.add(new Wire() {

                    @Override
                    public Capability getCapability() {
                        return wire.getCapability();
                    }

                    @Override
                    public Requirement getRequirement() {
                        return requirement;
                    }

                    @Override
                    public Resource getProvider() {
                        return wire.getProvider();
                    }

                    @Override
                    public Resource getRequirer() {
                        return resource;
                    }
                });
            }
        }
    }
}
Also used : Requirement(org.osgi.resource.Requirement) Capability(org.osgi.resource.Capability) SimpleFilter(org.apache.felix.utils.resource.SimpleFilter) Resource(org.osgi.resource.Resource) List(java.util.List) ArrayList(java.util.ArrayList) Wire(org.osgi.resource.Wire) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) DictionaryAsMap(org.apache.felix.utils.collections.DictionaryAsMap)

Example 4 with SimpleFilter

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

the class RequirementSort method collectDependencies.

@SuppressWarnings("unchecked")
private static <T extends Resource> Set<T> collectDependencies(T resource, CapabilitySet capSet) {
    Set<T> result = new LinkedHashSet<>();
    for (Requirement requirement : resource.getRequirements(null)) {
        String filter = requirement.getDirectives().get(Constants.FILTER_DIRECTIVE);
        SimpleFilter sf = (filter != null) ? SimpleFilter.parse(filter) : SimpleFilter.MATCH_ALL_FILTER;
        for (Capability cap : capSet.match(sf, true)) {
            result.add((T) cap.getResource());
        }
    }
    return result;
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Requirement(org.osgi.resource.Requirement) Capability(org.osgi.resource.Capability) SimpleFilter(org.apache.felix.utils.resource.SimpleFilter)

Example 5 with SimpleFilter

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

the class Subsystem method cloneResource.

ResourceImpl cloneResource(Resource resource) {
    ResourceImpl res = new ResourceImpl();
    for (Capability cap : resource.getCapabilities(null)) {
        res.addCapability(new CapabilityImpl(res, cap.getNamespace(), new StringArrayMap<>(cap.getDirectives()), new StringArrayMap<>(cap.getAttributes())));
    }
    for (Requirement req : resource.getRequirements(null)) {
        SimpleFilter sf;
        if (req instanceof RequirementImpl) {
            sf = ((RequirementImpl) req).getFilter();
        } else if (req.getDirectives().containsKey(REQUIREMENT_FILTER_DIRECTIVE)) {
            sf = SimpleFilter.parse(req.getDirectives().get(REQUIREMENT_FILTER_DIRECTIVE));
        } else {
            sf = SimpleFilter.convert(req.getAttributes());
        }
        res.addRequirement(new RequirementImpl(res, req.getNamespace(), new StringArrayMap<>(req.getDirectives()), new StringArrayMap<>(req.getAttributes()), sf));
    }
    return res;
}
Also used : ResourceUtils.addIdentityRequirement(org.apache.karaf.features.internal.resolver.ResourceUtils.addIdentityRequirement) ResourceUtils.toFeatureRequirement(org.apache.karaf.features.internal.resolver.ResourceUtils.toFeatureRequirement) Requirement(org.osgi.resource.Requirement) ResourceImpl(org.apache.felix.utils.resource.ResourceImpl) CapabilityImpl(org.apache.felix.utils.resource.CapabilityImpl) RequirementImpl(org.apache.felix.utils.resource.RequirementImpl) Capability(org.osgi.resource.Capability) StringArrayMap(org.apache.felix.utils.collections.StringArrayMap) SimpleFilter(org.apache.felix.utils.resource.SimpleFilter)

Aggregations

SimpleFilter (org.apache.felix.utils.resource.SimpleFilter)6 Capability (org.osgi.resource.Capability)3 Requirement (org.osgi.resource.Requirement)3 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 LinkedHashMap (java.util.LinkedHashMap)2 List (java.util.List)2 Resource (org.osgi.resource.Resource)2 Wire (org.osgi.resource.Wire)2 LinkedHashSet (java.util.LinkedHashSet)1 Map (java.util.Map)1 DictionaryAsMap (org.apache.felix.utils.collections.DictionaryAsMap)1 StringArrayMap (org.apache.felix.utils.collections.StringArrayMap)1 CapabilityImpl (org.apache.felix.utils.resource.CapabilityImpl)1 RequirementImpl (org.apache.felix.utils.resource.RequirementImpl)1 ResourceImpl (org.apache.felix.utils.resource.ResourceImpl)1 ResourceUtils.addIdentityRequirement (org.apache.karaf.features.internal.resolver.ResourceUtils.addIdentityRequirement)1 ResourceUtils.toFeatureRequirement (org.apache.karaf.features.internal.resolver.ResourceUtils.toFeatureRequirement)1