Search in sources :

Example 6 with Wiring

use of org.osgi.resource.Wiring in project felix by apache.

the class ResolverTest method testScenario7.

@Test
public void testScenario7() throws Exception {
    Resolver resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG));
    Map<Resource, Wiring> wirings = new HashMap<Resource, Wiring>();
    Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
    List<Resource> mandatory = populateScenario7(wirings, candMap);
    ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource>emptyList());
    Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
    assertEquals(4, wireMap.size());
    Resource aRes = findResource("A", wireMap.keySet());
    List<Wire> aWires = wireMap.get(aRes);
    assertEquals(0, aWires.size());
    Resource f1Res = findResource("F1", wireMap.keySet());
    List<Wire> f1Wires = wireMap.get(f1Res);
    assertEquals(1, f1Wires.size());
    Wire f1Wire = f1Wires.get(0);
    assertEquals(f1Res, f1Wire.getRequirer());
    assertEquals(aRes, f1Wire.getProvider());
    Requirement req = f1Wire.getRequirement();
    assertEquals(HostNamespace.HOST_NAMESPACE, req.getNamespace());
    assertEquals(0, req.getAttributes().size());
    assertEquals(f1Res, req.getResource());
    assertEquals(1, req.getDirectives().size());
    assertEquals("(osgi.wiring.host=A)", req.getDirectives().get("filter"));
    Capability cap = f1Wire.getCapability();
    assertEquals(aRes, cap.getResource());
    assertEquals(HostNamespace.HOST_NAMESPACE, cap.getNamespace());
    assertEquals(0, cap.getDirectives().size());
    assertEquals(1, cap.getAttributes().size());
    assertEquals("A", cap.getAttributes().get(HostNamespace.HOST_NAMESPACE));
    Resource f2Res = findResource("F2", wireMap.keySet());
    List<Wire> f2Wires = wireMap.get(f2Res);
    assertEquals(1, f2Wires.size());
    Wire f2Wire = f2Wires.get(0);
    assertEquals(f2Res, f2Wire.getRequirer());
    assertEquals(aRes, f2Wire.getProvider());
    Requirement req2 = f2Wire.getRequirement();
    assertEquals(HostNamespace.HOST_NAMESPACE, req2.getNamespace());
    assertEquals(0, req2.getAttributes().size());
    assertEquals(f2Res, req2.getResource());
    assertEquals(1, req2.getDirectives().size());
    assertEquals("(osgi.wiring.host=A)", req2.getDirectives().get("filter"));
    Capability cap2 = f1Wire.getCapability();
    assertEquals(aRes, cap2.getResource());
    assertEquals(HostNamespace.HOST_NAMESPACE, cap2.getNamespace());
    assertEquals(0, cap2.getDirectives().size());
    assertEquals(1, cap2.getAttributes().size());
    assertEquals("A", cap2.getAttributes().get(HostNamespace.HOST_NAMESPACE));
    Resource bRes = findResource("B", wireMap.keySet());
    List<Wire> bWires = wireMap.get(bRes);
    assertEquals(1, bWires.size());
    Wire bWire = bWires.get(0);
    assertEquals(bRes, bWire.getRequirer());
    assertEquals(f2Res, bWire.getProvider());
    Requirement bReq = bWire.getRequirement();
    assertEquals(IdentityNamespace.IDENTITY_NAMESPACE, bReq.getNamespace());
    assertEquals(0, bReq.getAttributes().size());
    assertEquals(bRes, bReq.getResource());
    assertEquals(1, bReq.getDirectives().size());
    assertEquals("(osgi.identity=F2)", bReq.getDirectives().get("filter"));
}
Also used : Resolver(org.osgi.service.resolver.Resolver) GenericCapability(org.apache.felix.resolver.test.util.GenericCapability) PackageCapability(org.apache.felix.resolver.test.util.PackageCapability) Capability(org.osgi.resource.Capability) BundleCapability(org.apache.felix.resolver.test.util.BundleCapability) HashMap(java.util.HashMap) Resource(org.osgi.resource.Resource) ResolverImpl(org.apache.felix.resolver.ResolverImpl) Logger(org.apache.felix.resolver.Logger) Wire(org.osgi.resource.Wire) Wiring(org.osgi.resource.Wiring) Requirement(org.osgi.resource.Requirement) BundleRequirement(org.apache.felix.resolver.test.util.BundleRequirement) GenericRequirement(org.apache.felix.resolver.test.util.GenericRequirement) PackageRequirement(org.apache.felix.resolver.test.util.PackageRequirement) ArrayList(java.util.ArrayList) List(java.util.List) ResolveContextImpl(org.apache.felix.resolver.test.util.ResolveContextImpl) Test(org.junit.Test)

Example 7 with Wiring

use of org.osgi.resource.Wiring in project felix by apache.

the class ResolverTest method testScenario13.

@Test
public void testScenario13() throws Exception {
    ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
    Map<Resource, Wiring> wirings = new HashMap<Resource, Wiring>();
    Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
    ResourceImpl a1 = new ResourceImpl("A");
    Capability a1_hostCap = addCap(a1, HostNamespace.HOST_NAMESPACE, "A");
    ResourceImpl f1 = new ResourceImpl("F1", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
    Requirement f1_hostReq = addReq(f1, HostNamespace.HOST_NAMESPACE, "A");
    Capability f1_pkgCap = addCap(f1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.a");
    ResourceImpl b1 = new ResourceImpl("B");
    Requirement b_pkgReq1 = addReq(b1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.a");
    candMap.put(b_pkgReq1, Collections.singletonList(f1_pkgCap));
    candMap.put(f1_hostReq, Collections.singletonList(a1_hostCap));
    ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, Collections.<Resource>singletonList(b1), Collections.<Resource>emptyList());
    Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
    assertEquals(3, wireMap.size());
    List<Wire> wiresB = wireMap.get(b1);
    assertNotNull(wiresB);
    assertEquals(1, wiresB.size());
    // should be wired to A through the fragment capability
    assertEquals(a1, wiresB.get(0).getProvider());
    assertEquals(f1_pkgCap, wiresB.get(0).getCapability());
}
Also used : GenericCapability(org.apache.felix.resolver.test.util.GenericCapability) PackageCapability(org.apache.felix.resolver.test.util.PackageCapability) Capability(org.osgi.resource.Capability) BundleCapability(org.apache.felix.resolver.test.util.BundleCapability) HashMap(java.util.HashMap) Resource(org.osgi.resource.Resource) ResolverImpl(org.apache.felix.resolver.ResolverImpl) Logger(org.apache.felix.resolver.Logger) Wire(org.osgi.resource.Wire) Wiring(org.osgi.resource.Wiring) Requirement(org.osgi.resource.Requirement) BundleRequirement(org.apache.felix.resolver.test.util.BundleRequirement) GenericRequirement(org.apache.felix.resolver.test.util.GenericRequirement) PackageRequirement(org.apache.felix.resolver.test.util.PackageRequirement) ResourceImpl(org.apache.felix.resolver.test.util.ResourceImpl) ArrayList(java.util.ArrayList) List(java.util.List) ResolveContextImpl(org.apache.felix.resolver.test.util.ResolveContextImpl) Test(org.junit.Test)

Example 8 with Wiring

use of org.osgi.resource.Wiring in project felix by apache.

the class IterativeResolver method resolve.

public Map<Resource, List<Wire>> resolve(final ResolveContext context) throws ResolutionException {
    final Map<Resource, List<Wire>> wires = new HashMap<Resource, List<Wire>>();
    final Map<Resource, List<Wire>> invertedWires = new HashMap<Resource, List<Wire>>();
    Collection<Resource> resources = context.getMandatoryResources();
    for (final Resource resource : resources) {
        // Build wiring
        invertedWires.clear();
        for (Resource res : wires.keySet()) {
            for (Wire wire : wires.get(res)) {
                List<Wire> w = invertedWires.get(wire.getProvider());
                if (w == null) {
                    w = new ArrayList<Wire>();
                    invertedWires.put(wire.getProvider(), w);
                }
                w.add(wire);
            }
        }
        final Map<Resource, Wiring> wiring = new HashMap<Resource, Wiring>();
        for (Resource res : wires.keySet()) {
            wiring.put(res, new SimpleWiring(res, wires, invertedWires));
        }
        // Resolve the new resource
        Map<Resource, List<Wire>> tempWires = resolver.resolve(new ResolveContext() {

            @Override
            public Collection<Resource> getMandatoryResources() {
                return Collections.singleton(resource);
            }

            @Override
            public Collection<Resource> getOptionalResources() {
                return context.getOptionalResources();
            }

            @Override
            public List<Capability> findProviders(Requirement requirement) {
                return context.findProviders(requirement);
            }

            @Override
            public int insertHostedCapability(List<Capability> capabilities, HostedCapability hostedCapability) {
                return context.insertHostedCapability(capabilities, hostedCapability);
            }

            @Override
            public boolean isEffective(Requirement requirement) {
                return context.isEffective(requirement);
            }

            @Override
            public Map<Resource, Wiring> getWirings() {
                return wiring;
            }
        });
        // Merge wiring
        wires.putAll(tempWires);
    }
    return wires;
}
Also used : ResolveContext(org.osgi.service.resolver.ResolveContext) HostedCapability(org.osgi.service.resolver.HostedCapability) Capability(org.osgi.resource.Capability) HashMap(java.util.HashMap) Resource(org.osgi.resource.Resource) Wire(org.osgi.resource.Wire) HostedCapability(org.osgi.service.resolver.HostedCapability) Wiring(org.osgi.resource.Wiring) Requirement(org.osgi.resource.Requirement) Collection(java.util.Collection) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Example 9 with Wiring

use of org.osgi.resource.Wiring in project felix by apache.

the class BigResolutionTest method buildResolutionContext.

private ResolveContext buildResolutionContext() throws IOException, BundleException {
    Object resolution;
    InputStream is = getClass().getClassLoader().getResourceAsStream("resolution.json");
    try {
        resolution = JsonReader.read(is);
    } finally {
        is.close();
    }
    List<Resource> resources = new ArrayList<Resource>();
    ResourceImpl system = new ResourceImpl("system-bundle");
    parseCapability(system, "osgi.ee; osgi.ee=JavaSE; version=1.5");
    parseCapability(system, "osgi.ee; osgi.ee=JavaSE; version=1.6");
    parseCapability(system, "osgi.ee; osgi.ee=JavaSE; version=1.7");
    resources.add(system);
    for (Object r : (Collection) ((Map) resolution).get("resources")) {
        resources.add(parseResource(r));
    }
    final List<Resource> mandatory = new ArrayList<Resource>();
    for (Object r : (Collection) ((Map) resolution).get("mandatory")) {
        mandatory.add(parseResource(r));
    }
    final Map<String, CapabilitySet> capSets = new HashMap<String, CapabilitySet>();
    CapabilitySet svcSet = new CapabilitySet(Collections.singletonList("objectClass"));
    capSets.put("osgi.service", svcSet);
    for (Resource resource : resources) {
        for (Capability cap : resource.getCapabilities(null)) {
            String ns = cap.getNamespace();
            CapabilitySet set = capSets.get(ns);
            if (set == null) {
                set = new CapabilitySet(Collections.singletonList(ns));
                capSets.put(ns, set);
            }
            set.addCapability(cap);
        }
    }
    return new ResolveContext() {

        @Override
        public Collection<Resource> getMandatoryResources() {
            return mandatory;
        }

        @Override
        public List<Capability> findProviders(Requirement requirement) {
            SimpleFilter sf;
            if (requirement.getDirectives().containsKey("filter")) {
                sf = SimpleFilter.parse(requirement.getDirectives().get("filter"));
            } else {
                sf = SimpleFilter.convert(requirement.getAttributes());
            }
            CapabilitySet set = capSets.get(requirement.getNamespace());
            List<Capability> caps = new ArrayList<Capability>(set.match(sf, true));
            Collections.sort(caps, new CandidateComparator());
            return caps;
        }

        @Override
        public int insertHostedCapability(List<Capability> capabilities, HostedCapability hostedCapability) {
            capabilities.add(hostedCapability);
            return capabilities.size() - 1;
        }

        @Override
        public boolean isEffective(Requirement requirement) {
            return true;
        }

        @Override
        public Map<Resource, Wiring> getWirings() {
            return Collections.emptyMap();
        }
    };
}
Also used : ResolveContext(org.osgi.service.resolver.ResolveContext) HostedCapability(org.osgi.service.resolver.HostedCapability) GenericCapability(org.apache.felix.resolver.test.util.GenericCapability) Capability(org.osgi.resource.Capability) HashMap(java.util.HashMap) InputStream(java.io.InputStream) Resource(org.osgi.resource.Resource) ArrayList(java.util.ArrayList) HostedCapability(org.osgi.service.resolver.HostedCapability) Wiring(org.osgi.resource.Wiring) Requirement(org.osgi.resource.Requirement) GenericRequirement(org.apache.felix.resolver.test.util.GenericRequirement) ResourceImpl(org.apache.felix.resolver.test.util.ResourceImpl) CandidateComparator(org.apache.felix.resolver.test.util.CandidateComparator) SimpleFilter(org.apache.felix.resolver.test.util.SimpleFilter) Collection(java.util.Collection) CapabilitySet(org.apache.felix.resolver.test.util.CapabilitySet) ArrayList(java.util.ArrayList) List(java.util.List)

Example 10 with Wiring

use of org.osgi.resource.Wiring in project aries by apache.

the class ResolveContext method processAsBundle.

private void processAsBundle(Requirement requirement, List<Capability> capabilities) {
    String namespace = requirement.getNamespace();
    Resource bundle = requirement.getResource();
    Wiring wiring = wirings.get(bundle);
    List<Wire> wires = wiring.getRequiredResourceWires(namespace);
    processWires(wires, requirement, capabilities);
}
Also used : BundleWiring(org.osgi.framework.wiring.BundleWiring) Wiring(org.osgi.resource.Wiring) Resource(org.osgi.resource.Resource) Wire(org.osgi.resource.Wire)

Aggregations

Resource (org.osgi.resource.Resource)23 Wiring (org.osgi.resource.Wiring)23 Capability (org.osgi.resource.Capability)20 ArrayList (java.util.ArrayList)19 HashMap (java.util.HashMap)19 List (java.util.List)19 Requirement (org.osgi.resource.Requirement)19 Wire (org.osgi.resource.Wire)18 GenericCapability (org.apache.felix.resolver.test.util.GenericCapability)17 GenericRequirement (org.apache.felix.resolver.test.util.GenericRequirement)17 BundleCapability (org.apache.felix.resolver.test.util.BundleCapability)16 BundleRequirement (org.apache.felix.resolver.test.util.BundleRequirement)16 PackageCapability (org.apache.felix.resolver.test.util.PackageCapability)16 PackageRequirement (org.apache.felix.resolver.test.util.PackageRequirement)16 ResolveContextImpl (org.apache.felix.resolver.test.util.ResolveContextImpl)16 Logger (org.apache.felix.resolver.Logger)15 ResolverImpl (org.apache.felix.resolver.ResolverImpl)15 Test (org.junit.Test)14 Resolver (org.osgi.service.resolver.Resolver)10 ResourceImpl (org.apache.felix.resolver.test.util.ResourceImpl)7