Search in sources :

Example 11 with Wire

use of org.osgi.resource.Wire in project karaf by apache.

the class FeaturesDependenciesTest method dumpWiring.

private void dumpWiring(SubsystemResolver resolver) {
    System.out.println("Wiring");
    Map<Resource, List<Wire>> wiring = resolver.getWiring();
    List<Resource> resources = new ArrayList<>(wiring.keySet());
    resources.sort(Comparator.comparing(this::getName));
    for (Resource resource : resources) {
        System.out.println("    " + getName(resource));
        for (Wire wire : wiring.get(resource)) {
            System.out.println("        " + wire);
        }
    }
}
Also used : Resource(org.osgi.resource.Resource) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) Wire(org.osgi.resource.Wire)

Example 12 with Wire

use of org.osgi.resource.Wire in project bnd by bndtools.

the class WireImpl method equals.

@Override
public boolean equals(Object obj) {
    if (obj == this)
        return true;
    if (obj instanceof Wire) {
        Wire w = (Wire) obj;
        if (capability.equals(w.getCapability()) && requirement.equals(w.getRequirement())) {
            Resource provider = getProvider();
            Resource requirer = getRequirer();
            return (provider == null ? w.getProvider() == null : provider.equals(w.getProvider())) && (requirer == null ? w.getRequirer() == null : requirer.equals(w.getRequirer()));
        }
    }
    return false;
}
Also used : Resource(org.osgi.resource.Resource) Wire(org.osgi.resource.Wire)

Example 13 with Wire

use of org.osgi.resource.Wire in project bnd by bndtools.

the class ResolveProcessTest method checkOptionalResource.

private void checkOptionalResource(ResolveProcess process, Resource resource, String bsn, Version version, String packageName, String... morePackages) {
    Collection<Wire> reasons;
    Map<String, Object> idAttrs;
    idAttrs = resource.getCapabilities(IDENTITY_NAMESPACE).get(0).getAttributes();
    assertEquals(bsn, idAttrs.get(IDENTITY_NAMESPACE));
    assertEquals(version, idAttrs.get(CAPABILITY_VERSION_ATTRIBUTE));
    reasons = process.getOptionalReasons(resource);
    assertEquals(1 + morePackages.length, reasons.size());
    Iterator<Wire> iterator = reasons.iterator();
    Wire wire = iterator.next();
    assertEquals("org.apache.felix.scr", wire.getRequirer().getCapabilities(IDENTITY_NAMESPACE).get(0).getAttributes().get(IDENTITY_NAMESPACE));
    assertTrue(wire.getRequirement().toString(), wire.getRequirement().getDirectives().get(REQUIREMENT_FILTER_DIRECTIVE).contains(packageName));
    for (String pkg : morePackages) {
        wire = iterator.next();
        assertEquals("org.apache.felix.scr", wire.getRequirer().getCapabilities(IDENTITY_NAMESPACE).get(0).getAttributes().get(IDENTITY_NAMESPACE));
        assertTrue(wire.getRequirement().toString(), wire.getRequirement().getDirectives().get(REQUIREMENT_FILTER_DIRECTIVE).contains(pkg));
    }
}
Also used : Wire(org.osgi.resource.Wire)

Example 14 with Wire

use of org.osgi.resource.Wire in project bnd by bndtools.

the class ResolveProcess method tidyUpOptional.

private static Map<Resource, List<Wire>> tidyUpOptional(Map<Resource, List<Wire>> required, Map<Resource, List<Wire>> discoveredOptional, LogService log) {
    Map<Resource, List<Wire>> toReturn = new HashMap<Resource, List<Wire>>();
    Set<Capability> requiredIdentities = new HashSet<Capability>();
    for (Resource r : required.keySet()) {
        Capability normalisedIdentity = toPureIdentity(r, log);
        if (normalisedIdentity != null) {
            requiredIdentities.add(normalisedIdentity);
        }
    }
    Set<Capability> acceptedIdentities = new HashSet<>();
    for (Entry<Resource, List<Wire>> entry : discoveredOptional.entrySet()) {
        // If we're required we are not also optional
        Resource optionalResource = entry.getKey();
        if (required.containsKey(optionalResource)) {
            continue;
        }
        // If another resource with the same identity is required
        // then we defer to it, otherwise we will get the an optional
        // resource showing up from a different repository
        Capability optionalIdentity = toPureIdentity(optionalResource, log);
        if (requiredIdentities.contains(optionalIdentity)) {
            continue;
        }
        // Only wires to required resources should kept
        List<Wire> validWires = new ArrayList<Wire>();
        optional: for (Wire optionalWire : entry.getValue()) {
            Resource requirer = optionalWire.getRequirer();
            Capability requirerIdentity = toPureIdentity(requirer, log);
            if (required.containsKey(requirer)) {
                Requirement req = optionalWire.getRequirement();
                // Somebody does require this - do they have a match
                // already?
                List<Wire> requiredWires = required.get(requirer);
                for (Wire requiredWire : requiredWires) {
                    if (req.equals(requiredWire.getRequirement())) {
                        continue optional;
                    }
                }
                validWires.add(optionalWire);
            }
        }
        // This can happen if the same resource is in multiple repos
        if (!validWires.isEmpty()) {
            if (acceptedIdentities.add(optionalIdentity)) {
                toReturn.put(optionalResource, validWires);
            } else {
                log.log(LogService.LOG_INFO, "Discarding the optional resource " + optionalResource + " because another optional resource with the identity " + optionalIdentity + " has already been selected. This usually happens when the same bundle is present in multiple repositories.");
            }
        }
    }
    return toReturn;
}
Also used : Requirement(org.osgi.resource.Requirement) Capability(org.osgi.resource.Capability) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Resource(org.osgi.resource.Resource) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) Wire(org.osgi.resource.Wire) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Example 15 with Wire

use of org.osgi.resource.Wire in project bnd by bndtools.

the class DebugReporter method resource.

private void resource(Resource r) {
    IdentityCapability id = ResourceUtils.getIdentityCapability(r);
    String resolveError = null;
    if (!context.isSystemResource(r) && level >= 3 && id != null)
        try {
            String v = id.version() == null ? null : id.version().toString();
            Requirement req = CapReqBuilder.createBundleRequirement(id.osgi_identity(), v).buildSyntheticRequirement();
            context.setInputRequirements(req);
            Resolver resolver = new BndResolver(new ResolverLogger(4));
            Map<Resource, List<Wire>> resolved = resolver.resolve(context);
        } catch (Exception e) {
            resolveError = e.toString();
        }
    String s = resolveError == null ? " " : "!";
    if (id == null)
        out.printf("%s %s%n", s, r);
    else
        out.printf("%s %-50s %-20s %s%n", s, id.osgi_identity(), noNull(id.version()), id.description(""));
    if (level >= 2) {
        for (Capability c : r.getCapabilities(null)) {
            capability("   ", c);
        }
        for (Requirement rq : r.getRequirements(null)) {
            requirement("  ", rq);
        }
    }
}
Also used : Requirement(org.osgi.resource.Requirement) Resolver(org.osgi.service.resolver.Resolver) IdentityCapability(aQute.bnd.osgi.resource.ResourceUtils.IdentityCapability) Capability(org.osgi.resource.Capability) Wire(org.osgi.resource.Wire) HashMap(java.util.HashMap) Map(java.util.Map) IdentityCapability(aQute.bnd.osgi.resource.ResourceUtils.IdentityCapability)

Aggregations

Wire (org.osgi.resource.Wire)27 Resource (org.osgi.resource.Resource)22 ArrayList (java.util.ArrayList)12 List (java.util.List)12 HashMap (java.util.HashMap)11 Requirement (org.osgi.resource.Requirement)11 Map (java.util.Map)7 Capability (org.osgi.resource.Capability)7 BundleWiring (org.osgi.framework.wiring.BundleWiring)6 HashSet (java.util.HashSet)5 Set (java.util.Set)4 Region (org.eclipse.equinox.region.Region)4 Bundle (org.osgi.framework.Bundle)4 BundleException (org.osgi.framework.BundleException)4 BundleRevision (org.osgi.framework.wiring.BundleRevision)4 FileInputStream (java.io.FileInputStream)3 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 Collection (java.util.Collection)3 EnumSet (java.util.EnumSet)3