blob: 99abd026558cf3ead4360dd703c751258cb9731c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.felix.resolver.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.felix.resolver.Logger;
import org.apache.felix.resolver.ResolverImpl;
import org.apache.felix.resolver.test.util.BundleCapability;
import org.apache.felix.resolver.test.util.BundleRequirement;
import org.apache.felix.resolver.test.util.GenericCapability;
import org.apache.felix.resolver.test.util.GenericRequirement;
import org.apache.felix.resolver.test.util.PackageCapability;
import org.apache.felix.resolver.test.util.PackageRequirement;
import org.apache.felix.resolver.test.util.ResolveContextImpl;
import org.apache.felix.resolver.test.util.ResourceImpl;
import org.junit.Test;
import org.mockito.Mockito;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
import org.osgi.framework.namespace.BundleNamespace;
import org.osgi.framework.namespace.HostNamespace;
import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.framework.namespace.PackageNamespace;
import org.osgi.resource.Capability;
import org.osgi.resource.Namespace;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
import org.osgi.resource.Wire;
import org.osgi.resource.Wiring;
import org.osgi.service.resolver.ResolutionException;
import org.osgi.service.resolver.ResolveContext;
import org.osgi.service.resolver.Resolver;
public class ResolverTest
{
@Test
public void testScenario1() 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 = populateScenario1(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
assertEquals(2, wireMap.size());
Resource aRes = findResource("A", wireMap.keySet());
List<Wire> aWires = wireMap.get(aRes);
assertEquals(0, aWires.size());
Resource bRes = findResource("B", wireMap.keySet());
List<Wire> bWires = wireMap.get(bRes);
assertEquals(1, bWires.size());
Wire bWire = bWires.iterator().next();
assertEquals(aRes, bWire.getProvider());
assertEquals(bRes, bWire.getRequirer());
Capability cap = bWire.getCapability();
assertEquals(PackageNamespace.PACKAGE_NAMESPACE, cap.getNamespace());
assertEquals(1, cap.getAttributes().size());
assertEquals("foo", cap.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE));
assertEquals(0, cap.getDirectives().size());
assertEquals(aRes, cap.getResource());
Requirement req = bWire.getRequirement();
assertEquals(1, req.getDirectives().size());
assertEquals("(osgi.wiring.package=foo)", req.getDirectives().get(PackageNamespace.REQUIREMENT_FILTER_DIRECTIVE));
assertEquals(0, req.getAttributes().size());
assertEquals(PackageNamespace.PACKAGE_NAMESPACE, req.getNamespace());
assertEquals(bRes, req.getResource());
}
@Test
public void testScenario2() 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 = populateScenario2(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
assertEquals(2, wireMap.size());
Resource bRes = findResource("B", wireMap.keySet());
List<Wire> bWires = wireMap.get(bRes);
assertEquals(0, bWires.size());
Resource cRes = findResource("C", wireMap.keySet());
List<Wire> cWires = wireMap.get(cRes);
assertEquals(2, cWires.size());
boolean foundFoo = false;
boolean foundBar = false;
for (Wire w : cWires)
{
assertEquals(bRes, w.getProvider());
assertEquals(cRes, w.getRequirer());
Capability cap = w.getCapability();
assertEquals(PackageNamespace.PACKAGE_NAMESPACE, cap.getNamespace());
assertEquals(bRes, cap.getResource());
Map<String, Object> attrs = cap.getAttributes();
assertEquals(1, attrs.size());
Object pkg = attrs.get(PackageNamespace.PACKAGE_NAMESPACE);
if ("foo".equals(pkg))
{
foundFoo = true;
assertEquals(0, cap.getDirectives().size());
}
else if ("bar".equals(pkg))
{
foundBar = true;
assertEquals(1, cap.getDirectives().size());
assertEquals("foo", cap.getDirectives().get(PackageNamespace.CAPABILITY_USES_DIRECTIVE));
}
}
assertTrue(foundFoo);
assertTrue(foundBar);
}
@Test
public void testScenario3() 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 = populateScenario3(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
assertEquals(3, wireMap.size());
Resource cRes = findResource("C", wireMap.keySet());
List<Wire> cWires = wireMap.get(cRes);
assertEquals(0, cWires.size());
Resource dRes = findResource("D", wireMap.keySet());
List<Wire> dWires = wireMap.get(dRes);
assertEquals(1, dWires.size());
Wire dWire = dWires.iterator().next();
assertEquals(cRes, dWire.getProvider());
assertEquals(dRes, dWire.getRequirer());
Capability dwCap = dWire.getCapability();
assertEquals(PackageNamespace.PACKAGE_NAMESPACE, dwCap.getNamespace());
assertEquals(1, dwCap.getAttributes().size());
assertEquals("resources", dwCap.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE));
assertEquals(0, dwCap.getDirectives().size());
assertEquals(cRes, dwCap.getResource());
Resource eRes = findResource("E", wireMap.keySet());
List<Wire> eWires = wireMap.get(eRes);
assertEquals(2, eWires.size());
boolean foundC = false;
boolean foundD = false;
for (Wire w : eWires)
{
assertEquals(eRes, w.getRequirer());
Capability cap = w.getCapability();
if (cap.getNamespace().equals(PackageNamespace.PACKAGE_NAMESPACE))
{
assertEquals("resources", cap.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE));
assertEquals(0, cap.getDirectives().size());
assertEquals(cRes, cap.getResource());
foundC = true;
Requirement req = w.getRequirement();
assertEquals(PackageNamespace.PACKAGE_NAMESPACE, req.getNamespace());
assertEquals(eRes, req.getResource());
assertEquals(0, req.getAttributes().size());
assertEquals(1, req.getDirectives().size());
assertEquals("(osgi.wiring.package=resources)", req.getDirectives().get("filter"));
}
else if (cap.getNamespace().equals(BundleNamespace.BUNDLE_NAMESPACE))
{
assertEquals("D", cap.getAttributes().get(BundleNamespace.BUNDLE_NAMESPACE));
assertEquals(1, cap.getDirectives().size());
assertEquals("resources", cap.getDirectives().get(Namespace.CAPABILITY_USES_DIRECTIVE));
assertEquals(dRes, cap.getResource());
foundD = true;
Requirement req = w.getRequirement();
assertEquals(BundleNamespace.BUNDLE_NAMESPACE, req.getNamespace());
assertEquals(eRes, req.getResource());
assertEquals(0, req.getAttributes().size());
assertEquals(1, req.getDirectives().size());
assertEquals("(osgi.wiring.bundle=D)", req.getDirectives().get("filter"));
}
}
assertTrue(foundC);
assertTrue(foundD);
}
@Test
public void testScenario4() 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 = populateScenario4(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
try
{
resolver.resolve(rci);
fail("Should have thrown a resolution exception as bundle A in scenario 4 cannot be resolved due to constraint violations.");
}
catch (ResolutionException re)
{
// good
}
}
@Test
public void testScenario5() 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 = populateScenario5(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
try
{
resolver.resolve(rci);
fail("Should have thrown a resolution exception as bundle A in scenario 5 cannot be resolved due to constraint violations.");
}
catch (ResolutionException re)
{
// good
}
}
@Test
public void testScenario6() 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 = populateScenario6(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
int aResources = 0;
for (Resource r : wireMap.keySet())
{
if ("A".equals(getResourceName(r)))
{
aResources++;
List<Wire> wires = wireMap.get(r);
assertEquals(4, wires.size());
List<String> providers = new ArrayList<String>();
for (Wire w : wires)
{
providers.add(getResourceName(w.getProvider()));
}
Collections.sort(providers);
assertEquals(Arrays.asList("B", "C", "D", "D"), providers);
}
}
assertEquals("Should have found two resolved resources named 'A'", 2, aResources);
}
@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"));
}
@Test
public void testScenario8() 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 = populateScenario8(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
Resource res2 = findResource("res2", wireMap.keySet());
Resource res4 = findResource("res4", wireMap.keySet());
Resource res5 = findResource("res5", wireMap.keySet());
assertNotNull(res2);
assertNotNull(res4);
assertNotNull(res5);
List<Wire> wires2 = wireMap.get(res2);
assertEquals(2, wires2.size());
// should be wired to res4 and res5
List<Wire> wires4 = wireMap.get(res4);
assertEquals(1, wires4.size());
// should be wired to res5
List<Wire> wires5 = wireMap.get(res5);
assertEquals(0, wires5.size());
// should not be wired to any of its optional requirements to res6
assertEquals(3, wireMap.size());
}
@Test
public void testScenario9() throws Exception
{
Resolver 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>>();
List<Resource> mandatory = populateScenario9(wirings, candMap);
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, mandatory, Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
Resource resB = findResource("B", wireMap.keySet());
Resource resA = findResource("A", wirings.keySet());
Resource resC1 = findResource("C1", wirings.keySet());
assertNotNull(resB);
assertNotNull(resC1);
assertEquals(1, wireMap.size());
List<Wire> wiresB = wireMap.get(resB);
assertEquals(2, wiresB.size());
// should be wired to A and C1
assertEquals(resA, wiresB.get(0).getProvider());
assertEquals(resC1, wiresB.get(1).getProvider());
}
/**
* Test dynamic resolution with a resolved fragment
*/
@Test
public void testScenario10() 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));
Map<Resource, List<Wire>> wires = new HashMap<Resource, List<Wire>>();
wires.put(a1, new ArrayList<Wire>());
wires.put(b1, new ArrayList<Wire>());
wires.put(f1, new ArrayList<Wire>());
wires.get(f1).add(new SimpleWire(f1_hostReq, a1_hostCap));
Map<Resource, List<Wire>> invertedWires = new HashMap<Resource, List<Wire>>();
invertedWires.put(a1, new ArrayList<Wire>());
invertedWires.put(b1, new ArrayList<Wire>());
invertedWires.put(f1, new ArrayList<Wire>());
invertedWires.get(a1).add(new SimpleWire(f1_hostReq, a1_hostCap));
wirings.put(a1, new SimpleWiring(a1, Arrays.asList(a1_hostCap, f1_pkgCap), wires, invertedWires));
wirings.put(b1, new SimpleWiring(b1, Collections.<Capability>emptyList(), wires, invertedWires));
wirings.put(f1, new SimpleWiring(f1, Collections.<Capability>emptyList(), wires, invertedWires));
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, Collections.<Resource>emptyList(), Collections.<Resource> emptyList());
List<Capability> caps = new ArrayList<Capability>();
caps.add(f1_pkgCap);
Map<Resource, List<Wire>> wireMap = resolver.resolveDynamic(rci, wirings.get(b1), b_pkgReq1);
assertEquals(1, 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());
}
/**
* Test dynamic resolution with an unresolved fragment
*/
@Test
public void testScenario11() 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));
Map<Resource, List<Wire>> wires = new HashMap<Resource, List<Wire>>();
wires.put(a1, new ArrayList<Wire>());
wires.put(b1, new ArrayList<Wire>());
Map<Resource, List<Wire>> invertedWires = new HashMap<Resource, List<Wire>>();
invertedWires.put(a1, new ArrayList<Wire>());
invertedWires.put(b1, new ArrayList<Wire>());
wirings.put(a1, new SimpleWiring(a1, Collections.<Capability>emptyList(), wires, invertedWires));
wirings.put(b1, new SimpleWiring(b1, Collections.<Capability>emptyList(), wires, invertedWires));
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, Collections.<Resource>emptyList(), Collections.<Resource> emptyList());
List<Capability> caps = new ArrayList<Capability>();
caps.add(f1_pkgCap);
try {
resolver.resolveDynamic(rci, wirings.get(b1), b_pkgReq1);
fail("Should fail to dynamic requirement to fragment when host is resolved already.");
} catch (ResolutionException e) {
// expected
assertTrue(e.getUnresolvedRequirements().contains(b_pkgReq1));
}
// now remove host wiring
wirings.remove(a1);
caps.clear();
caps.add(f1_pkgCap);
Map<Resource, List<Wire>> wireMap = resolver.resolveDynamic(rci, wirings.get(b1), b_pkgReq1);
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());
}
/**
* Test dynamic resolution with an unresolvable host
*/
@Test(expected = ResolutionException.class)
public void testScenario12() 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 b1 = new ResourceImpl("B");
Requirement b_pkgReq1 = addReq(b1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.a");
ResourceImpl c1 = new ResourceImpl("C");
Capability c_hostCap = addCap(c1, HostNamespace.HOST_NAMESPACE, "A");
Capability c_pkgCap = addCap(c1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.a");
Requirement c_pkgReq1 = addReq(c1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.b");
candMap.put(b_pkgReq1, Collections.singletonList(c_pkgCap));
candMap.put(c_pkgReq1, Collections.<Capability>emptyList());
Map<Resource, List<Wire>> wires = new HashMap<Resource, List<Wire>>();
wires.put(a1, new ArrayList<Wire>());
wires.put(b1, new ArrayList<Wire>());
Map<Resource, List<Wire>> invertedWires = new HashMap<Resource, List<Wire>>();
invertedWires.put(a1, new ArrayList<Wire>());
invertedWires.put(b1, new ArrayList<Wire>());
wirings.put(a1, new SimpleWiring(a1, Collections.<Capability>emptyList(), wires, invertedWires));
wirings.put(b1, new SimpleWiring(b1, Collections.<Capability>emptyList(), wires, invertedWires));
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, Collections.<Resource>emptyList(), Collections.<Resource> emptyList());
List<Capability> caps = new ArrayList<Capability>();
caps.add(c_pkgCap);
Map<Resource, List<Wire>> wireMap = resolver.resolveDynamic(rci, wirings.get(b1), b_pkgReq1);
assertEquals(0, wireMap.size());
}
@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());
}
@Test
public void testScenario14() 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", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("1.0.0"));
Capability a1_hostCap = addCap(a1, HostNamespace.HOST_NAMESPACE, "A");
Capability a1_pkgCap = addCap(a1, PackageNamespace.PACKAGE_NAMESPACE, "a");
Requirement a1_pkgReq = addReq(a1, PackageNamespace.PACKAGE_NAMESPACE, "a.impl");
ResourceImpl a2 = new ResourceImpl("A", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("2.0.0"));
Capability a2_hostCap = addCap(a2, HostNamespace.HOST_NAMESPACE, "A");
Capability a2_pkgCap = addCap(a2, PackageNamespace.PACKAGE_NAMESPACE, "a");
Requirement a2_pkgReq = addReq(a2, PackageNamespace.PACKAGE_NAMESPACE, "a.impl");
ResourceImpl a3 = new ResourceImpl("A", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("3.0.0"));
Capability a3_hostCap = addCap(a3, HostNamespace.HOST_NAMESPACE, "A");
Capability a3_pkgCap = addCap(a3, PackageNamespace.PACKAGE_NAMESPACE, "a");
Requirement a3_pkgReq = addReq(a3, PackageNamespace.PACKAGE_NAMESPACE, "a.impl");
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, "a.impl");
Requirement f1_pkgReq = addReq(f1, PackageNamespace.PACKAGE_NAMESPACE, "a");
ResourceImpl b1 = new ResourceImpl("B");
Requirement b_pkgReq1 = addReq(b1, PackageNamespace.PACKAGE_NAMESPACE, "a");
candMap.put(a1_pkgReq, Collections.singletonList(f1_pkgCap));
candMap.put(a2_pkgReq, Collections.singletonList(f1_pkgCap));
candMap.put(a3_pkgReq, Collections.singletonList(f1_pkgCap));
candMap.put(b_pkgReq1, Arrays.asList(a3_pkgCap, a2_pkgCap, a1_pkgCap));
candMap.put(f1_pkgReq, Arrays.asList(a3_pkgCap, a2_pkgCap, a1_pkgCap));
candMap.put(f1_hostReq, Arrays.asList(a3_hostCap, a2_hostCap, a1_hostCap));
ResolveContextImpl rci = new ResolveContextImpl(wirings, candMap, Arrays.<Resource> asList(b1, a1, a2, a3), Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
// all bundles should be resolved
assertEquals(5, wireMap.size());
List<Wire> wiresB = wireMap.get(b1);
assertNotNull(wiresB);
assertEquals(1, wiresB.size());
assertEquals(a3, wiresB.get(0).getProvider());
assertEquals(a3_pkgCap, wiresB.get(0).getCapability());
// There should be three hosts
List<Wire> wiresF1 = wireMap.get(f1);
assertNotNull(wiresF1);
assertEquals(3, wiresF1.size());
}
@Test
public void testScenario15() throws Exception
{
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
ResourceImpl exporter = new ResourceImpl("exporter", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("1.0.0"));
Capability exporter_hostCap = addCap(exporter, HostNamespace.HOST_NAMESPACE, "exporter");
Capability exporter_pkgCap = addCap(exporter, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl exporterFrag = new ResourceImpl("exporter.frag", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
Requirement exporterFrag_hostReq = addReq(exporterFrag, HostNamespace.HOST_NAMESPACE, "exporter");
ResourceImpl host1 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("1.0.0"));
Capability host1_hostCap = addCap(host1, HostNamespace.HOST_NAMESPACE, "host");
Requirement host1_pkgReq = addReq(host1, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host2 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("2.0.0"));
Capability host2_hostCap = addCap(host2, HostNamespace.HOST_NAMESPACE, "host");
Requirement host2_pkgReq = addReq(host2, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host3 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("3.0.0"));
Capability host3_hostCap = addCap(host3, HostNamespace.HOST_NAMESPACE, "host");
Requirement host3_pkgReq = addReq(host3, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host4 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("4.0.0"));
Capability host4_hostCap = addCap(host4, HostNamespace.HOST_NAMESPACE, "host");
Requirement host4_pkgReq = addReq(host4, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host5 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("5.0.0"));
Capability host5_hostCap = addCap(host5, HostNamespace.HOST_NAMESPACE, "host");
Requirement host5_pkgReq = addReq(host5, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host6 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("6.0.0"));
Capability host6_hostCap = addCap(host6, HostNamespace.HOST_NAMESPACE, "host");
Requirement host6_pkgReq = addReq(host6, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host7 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("7.0.0"));
Capability host7_hostCap = addCap(host7, HostNamespace.HOST_NAMESPACE, "host");
Requirement host7_pkgReq = addReq(host7, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl host8 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("8.0.0"));
Capability host8_hostCap = addCap(host8, HostNamespace.HOST_NAMESPACE, "host");
Requirement host8_pkgReq = addReq(host8, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl hostFrag = new ResourceImpl("host.frag", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
Requirement hostFrag_hostReq = addReq(hostFrag, HostNamespace.HOST_NAMESPACE, "host");
Requirement hostFrag_pkgReq = addReq(hostFrag, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
candMap.put(exporterFrag_hostReq, Collections.singletonList(exporter_hostCap));
candMap.put(host1_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host2_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host3_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host4_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host5_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host6_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host7_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(host8_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(hostFrag_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(hostFrag_hostReq,
Arrays.asList(host1_hostCap, host2_hostCap, host3_hostCap, host4_hostCap, host5_hostCap, host6_hostCap, host7_hostCap, host8_hostCap));
ResolveContextImpl rci = new ResolveContextImpl(Collections.<Resource, Wiring> emptyMap(), candMap,
Arrays.<Resource> asList(host1, host2, host3, host4, exporter, exporterFrag, host5, host6, host7, host8, hostFrag),
Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
// all bundles should be resolved
assertEquals(11, wireMap.size());
// There should be 8 hosts
List<Wire> wiresHostFrag = wireMap.get(hostFrag);
assertNotNull(wiresHostFrag);
assertEquals(8, wiresHostFrag.size());
List<Wire> wiresHost1 = wireMap.get(host1);
assertNotNull(wiresHost1);
}
@Test
public void testScenario16() throws Exception
{
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
ResourceImpl exporter = new ResourceImpl("exporter", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("1.0.0"));
Capability exporter_hostCap = addCap(exporter, HostNamespace.HOST_NAMESPACE, "exporter");
Capability exporter_pkgCap = addCap(exporter, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
ResourceImpl exporterFrag = new ResourceImpl("exporter.frag", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
Requirement exporterFrag_hostReq = addReq(exporterFrag, HostNamespace.HOST_NAMESPACE, "exporter");
ResourceImpl host1 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("1.0.0"));
Capability host1_hostCap = addCap(host1, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host2 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("2.0.0"));
Capability host2_hostCap = addCap(host2, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host3 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("3.0.0"));
Capability host3_hostCap = addCap(host3, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host4 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("4.0.0"));
Capability host4_hostCap = addCap(host4, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host5 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("5.0.0"));
Capability host5_hostCap = addCap(host4, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host6 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("6.0.0"));
Capability host6_hostCap = addCap(host4, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host7 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("7.0.0"));
Capability host7_hostCap = addCap(host4, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl host8 = new ResourceImpl("host", IdentityNamespace.TYPE_BUNDLE, Version.parseVersion("8.0.0"));
Capability host8_hostCap = addCap(host4, HostNamespace.HOST_NAMESPACE, "host");
ResourceImpl hostFrag = new ResourceImpl("host.frag", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
Requirement hostFrag_hostReq = addReq(hostFrag, HostNamespace.HOST_NAMESPACE, "host");
Requirement hostFrag_pkgReq = addReq(hostFrag, PackageNamespace.PACKAGE_NAMESPACE, "exporter");
candMap.put(exporterFrag_hostReq, Collections.singletonList(exporter_hostCap));
candMap.put(hostFrag_pkgReq, Collections.singletonList(exporter_pkgCap));
candMap.put(hostFrag_hostReq,
Arrays.asList(host1_hostCap, host2_hostCap, host3_hostCap, host4_hostCap, host5_hostCap, host6_hostCap, host7_hostCap, host8_hostCap));
ResolveContextImpl rci = new ResolveContextImpl(Collections.<Resource, Wiring> emptyMap(), candMap,
Arrays.<Resource> asList(host1, host2, host3, host4, exporter, exporterFrag, hostFrag, host5, host6, host7, host8),
Collections.<Resource> emptyList());
Map<Resource, List<Wire>> wireMap = resolver.resolve(rci);
// all bundles should be resolved
assertEquals(11, wireMap.size());
}
@Test
public void testPackageSources() throws Exception {
Method m = ResolverImpl.class.getDeclaredMethod("getPackageSources",
Capability.class, Map.class);
m.setAccessible(true);
Capability cap = Mockito.mock(Capability.class);
assertEquals(Collections.emptySet(),
m.invoke(null, cap, new HashMap<Resource, ResolverImpl.Packages>()));
Capability cap2 = Mockito.mock(Capability.class);
Resource res2 = Mockito.mock(Resource.class);
Mockito.when(cap2.getResource()).thenReturn(res2);
Map<Resource, ResolverImpl.Packages> map2 = new HashMap<Resource, ResolverImpl.Packages>();
map2.put(res2, new ResolverImpl.Packages(res2));
assertEquals(Collections.emptySet(), m.invoke(null, cap2, map2));
Capability cap3 = Mockito.mock(Capability.class);
Resource res3 = Mockito.mock(Resource.class);
Mockito.when(cap3.getResource()).thenReturn(res3);
Map<Resource, ResolverImpl.Packages> map3 = new HashMap<Resource, ResolverImpl.Packages>();
ResolverImpl.Packages pkgs3 = new ResolverImpl.Packages(res3);
Set<Capability> srcCaps3 = Collections.singleton(Mockito.mock(Capability.class));
Map<Capability, Set<Capability>> srcMap3 = Collections.singletonMap(
cap3, srcCaps3);
pkgs3.m_sources.putAll(srcMap3);
map3.put(res3, pkgs3);
assertEquals(srcCaps3, m.invoke(null, cap3, map3));
}
@Test
public void testScenario17_1() throws Exception
{
ResolveContext rci = populateScenario17(false, false, false);
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario17_2() throws Exception
{
ResolveContext rci = populateScenario17(false, false, true);
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario17_3() throws Exception
{
ResolveContext rci = populateScenario17(true, false, false);
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario17_4() throws Exception
{
ResolveContext rci = populateScenario17(true, false, true);
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario17_5() throws Exception
{
ResolveContext rci = populateScenario17(false, true, true);
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario17_6() throws Exception
{
ResolveContext rci = populateScenario17(true, true, true);
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario18() throws Exception
{
ResolveContext rci = populateScenario18();
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
resolver.resolve(rci);
}
@Test
public void testScenario19() throws Exception
{
ResolveContext rci = populateScenario19();
ResolverImpl resolver = new ResolverImpl(new Logger(Logger.LOG_DEBUG), 1);
Map<Resource, List<Wire>> result = resolver.resolve(rci);
assertEquals("Wrong number of resolved bundles", 9, result.size());
}
private ResolveContext populateScenario17(boolean realSubstitute,
boolean felixResolveContext, boolean existingWirings)
{
Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
ResourceImpl core = new ResourceImpl("core");
Capability core_pkgCap = addCap(core, PackageNamespace.PACKAGE_NAMESPACE, "pkg1");
Capability core_bundleCap = addCap(core, BundleNamespace.BUNDLE_NAMESPACE,
"core");
Requirement core_pkgReq = addReq(core, PackageNamespace.PACKAGE_NAMESPACE,
"pkg1");
ResourceImpl misc = new ResourceImpl("misc");
Capability misc_pkgCap = addCap(misc, PackageNamespace.PACKAGE_NAMESPACE, "pkg1");
Capability misc_bundleCap = addCap(misc, BundleNamespace.BUNDLE_NAMESPACE,
"misc");
Requirement misc_bundleReq = addReq(misc, BundleNamespace.BUNDLE_NAMESPACE,
"core");
ResourceImpl importsCore = new ResourceImpl("importsCore");
Capability importsCore_pkgCap = addCap(importsCore,
PackageNamespace.PACKAGE_NAMESPACE, "pkg2", "pkg1");
Requirement importsCore_pkgReq = addReq(importsCore,
PackageNamespace.PACKAGE_NAMESPACE, "pkg1");
ResourceImpl requiresMisc = new ResourceImpl("requiresMisc");
Requirement requiresMisc_pkgReq = addReq(requiresMisc,
PackageNamespace.PACKAGE_NAMESPACE, "pkg2");
Requirement requiresMisc_bundleReq = addReq(requiresMisc,
BundleNamespace.BUNDLE_NAMESPACE, "misc");
ResourceImpl substitutesCore = new ResourceImpl("substitutesCore");
Capability substitutesCore_pkgCap = addCap(substitutesCore,
PackageNamespace.PACKAGE_NAMESPACE, "pkg1");
candMap.put(core_pkgReq, Collections.singletonList(
realSubstitute ? substitutesCore_pkgCap : core_pkgCap));
candMap.put(misc_bundleReq, Collections.singletonList(core_bundleCap));
candMap.put(importsCore_pkgReq, Collections.singletonList(
realSubstitute ? substitutesCore_pkgCap : core_pkgCap));
candMap.put(requiresMisc_pkgReq, Collections.singletonList(importsCore_pkgCap));
candMap.put(requiresMisc_bundleReq, Collections.singletonList(misc_bundleCap));
Map<Resource, List<Wire>> wires = new HashMap<Resource, List<Wire>>();
wires.put(substitutesCore, new ArrayList<Wire>());
wires.put(core, new ArrayList<Wire>());
if (realSubstitute)
{
wires.get(core).add(new SimpleWire(core_pkgReq, substitutesCore_pkgCap));
}
wires.put(misc, new ArrayList<Wire>());
wires.get(misc).add(new SimpleWire(misc_bundleReq, core_bundleCap));
Wiring coreWiring = null;
Map<Resource, Wiring> wirings = new HashMap<Resource, Wiring>();
if (existingWirings)
{
Map<Resource, List<Wire>> invertedWires = new HashMap<Resource, List<Wire>>();
invertedWires.put(substitutesCore, new ArrayList<Wire>());
if (realSubstitute)
{
invertedWires.get(substitutesCore).add(
new SimpleWire(core_pkgReq, substitutesCore_pkgCap));
}
invertedWires.put(core, new ArrayList<Wire>());
invertedWires.get(core).add(new SimpleWire(misc_bundleReq, core_bundleCap));
invertedWires.put(misc, new ArrayList<Wire>());
wirings.put(substitutesCore, new SimpleWiring(substitutesCore,
Arrays.asList(substitutesCore_pkgCap), wires, invertedWires));
coreWiring = new SimpleWiring(core,
Arrays.asList(core_bundleCap, core_pkgCap), wires, invertedWires);
wirings.put(core, coreWiring);
wirings.put(misc, new SimpleWiring(misc,
Arrays.asList(misc_bundleCap, misc_pkgCap), wires, invertedWires));
}
Collection<Resource> mandatory = Collections.<Resource> singletonList(requiresMisc);
if (felixResolveContext) {
Map<Wiring, List<Wire>> substitutions = new HashMap<Wiring, List<Wire>>();
if (realSubstitute && coreWiring != null)
{
substitutions.put(coreWiring, Arrays.<Wire> asList(
new SimpleWire(core_pkgReq, substitutesCore_pkgCap)));
}
return new ResolveContextImpl.FelixResolveContextImpl(wirings, candMap,
mandatory, Collections.<Resource> emptyList(), substitutions);
}
else
{
return new ResolveContextImpl(wirings, candMap, mandatory,
Collections.<Resource> emptyList());
}
}
private ResolveContext populateScenario18()
{
Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
ResourceImpl core1 = new ResourceImpl("core1");
Capability core1_pkgCap1 = addCap(core1, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
Capability core1_pkgCap2 = addCap(core1, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg2", "corepkg1");
Capability core1_pkgCap3 = addCap(core1, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3", "corepkg2");
ResourceImpl core2 = new ResourceImpl("core2");
Capability core2_pkgCap1 = addCap(core2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
Capability core2_pkgCap2 = addCap(core2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg2", "corepkg1");
Capability core2_pkgCap3 = addCap(core2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3", "corepkg2");
Requirement core2_pkgReq1 = addReq(core2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
Requirement core2_pkgReq2 = addReq(core2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg2");
Requirement core2_pkgReq3 = addReq(core2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3");
ResourceImpl core3 = new ResourceImpl("core3");
Capability core3_pkgCap1 = addCap(core3, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
Capability core3_pkgCap2 = addCap(core3, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg2", "corepkg1");
Capability core3_pkgCap3 = addCap(core3, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3", "corepkg2");
Requirement core3_pkgReq1 = addReq(core3, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
Requirement core3_pkgReq2 = addReq(core3, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg2");
Requirement core3_pkgReq3 = addReq(core3, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3");
ResourceImpl client1 = new ResourceImpl("client1");
Capability client1_pkgCap = addCap(client1, PackageNamespace.PACKAGE_NAMESPACE,
"clientpkg1", "corepkg3");
Requirement client1_pkgReq1 = addReq(client1, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3");
ResourceImpl client2 = new ResourceImpl("client2");
Capability client2_pkgCap = addCap(client2, PackageNamespace.PACKAGE_NAMESPACE,
"clientpkg1", "corepkg3");
Requirement client2_pkgReq1 = addReq(client2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg3");
ResourceImpl bundle1 = new ResourceImpl("bundle1");
Requirement bundle1_pkgReq1 = addReq(bundle1, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
Requirement bundle1_pkgReq2 = addReq(bundle1, PackageNamespace.PACKAGE_NAMESPACE,
"clientpkg1");
ResourceImpl bundle2 = new ResourceImpl("bundle2");
Requirement bundle2_pkgReq1 = addReq(bundle2, PackageNamespace.PACKAGE_NAMESPACE,
"corepkg1");
candMap.put(core2_pkgReq1, Arrays.asList(core3_pkgCap1, core2_pkgCap1));
candMap.put(core2_pkgReq2, Arrays.asList(core3_pkgCap2, core2_pkgCap2));
candMap.put(core2_pkgReq3, Arrays.asList(core3_pkgCap3, core2_pkgCap3));
candMap.put(core3_pkgReq1, Arrays.asList(core3_pkgCap1, core2_pkgCap1));
candMap.put(core3_pkgReq2, Arrays.asList(core3_pkgCap2, core2_pkgCap2));
candMap.put(core3_pkgReq3, Arrays.asList(core3_pkgCap3, core2_pkgCap3));
candMap.put(client1_pkgReq1,
Arrays.asList(core3_pkgCap3, core2_pkgCap3, core1_pkgCap3));
candMap.put(client2_pkgReq1, Arrays.asList(core3_pkgCap3));
candMap.put(bundle1_pkgReq1, Arrays.asList(core1_pkgCap1));
candMap.put(bundle1_pkgReq2, Arrays.asList(client1_pkgCap));
candMap.put(bundle2_pkgReq1, Arrays.asList(core3_pkgCap1));
Collection<Resource> mandatory = Arrays.<Resource> asList(core1, core2, core3,
client1, client2, bundle1, bundle2);
return new ResolveContextImpl(Collections.<Resource, Wiring> emptyMap(), candMap,
mandatory, Collections.<Resource> emptyList());
}
private ResolveContext populateScenario19()
{
Map<Requirement, List<Capability>> candMap = new HashMap<Requirement, List<Capability>>();
ResourceImpl split1 = new ResourceImpl("split1");
Capability split1_bundle = addCap(split1, BundleNamespace.BUNDLE_NAMESPACE, "splil1");
Capability split1_pkg = addCap(split1, PackageNamespace.PACKAGE_NAMESPACE,
"split.pkg");
ResourceImpl split2 = new ResourceImpl("split2");
Capability split2_bundle = addCap(split2, BundleNamespace.BUNDLE_NAMESPACE, "splil2");
Capability split2_pkg = addCap(split2, PackageNamespace.PACKAGE_NAMESPACE,
"split.pkg");
ResourceImpl split3 = new ResourceImpl("split3");
Capability split3_bundle = addCap(split3, BundleNamespace.BUNDLE_NAMESPACE, "splil3");
Capability split3_pkg = addCap(split3, PackageNamespace.PACKAGE_NAMESPACE,
"split.pkg");
ResourceImpl split4 = new ResourceImpl("split4");
Capability split4_bundle = addCap(split4, BundleNamespace.BUNDLE_NAMESPACE,
"splil4");
Capability split4_pkg = addCap(split4, PackageNamespace.PACKAGE_NAMESPACE,
"split.pkg");
GenericRequirement split3_split1Req = (GenericRequirement) addReq(split3,
BundleNamespace.BUNDLE_NAMESPACE, "split1");
split3_split1Req.addDirective(BundleNamespace.REQUIREMENT_VISIBILITY_DIRECTIVE,
BundleNamespace.VISIBILITY_REEXPORT);
GenericRequirement split3_split2Req = (GenericRequirement) addReq(split3,
BundleNamespace.BUNDLE_NAMESPACE, "split2");
split3_split2Req.addDirective(BundleNamespace.REQUIREMENT_VISIBILITY_DIRECTIVE,
BundleNamespace.VISIBILITY_REEXPORT);
ResourceImpl reexportSplit1 = new ResourceImpl("reexportSplit1");
Capability reexportSplit1_bundle = addCap(reexportSplit1, BundleNamespace.BUNDLE_NAMESPACE, "reexportSplit1");
GenericRequirement reexportSplit1_split1Req = (GenericRequirement) addReq(
reexportSplit1, BundleNamespace.BUNDLE_NAMESPACE, "split1");
reexportSplit1_split1Req.addDirective(
BundleNamespace.REQUIREMENT_VISIBILITY_DIRECTIVE,
BundleNamespace.VISIBILITY_REEXPORT);
ResourceImpl reexportSplit3 = new ResourceImpl("reexportSplit3");
Capability reexportSplit3_bundle = addCap(reexportSplit3, BundleNamespace.BUNDLE_NAMESPACE, "reexportSplit3");
GenericRequirement reexportSplit3_split3Req = (GenericRequirement) addReq(
reexportSplit3, BundleNamespace.BUNDLE_NAMESPACE, "split3");
reexportSplit3_split3Req.addDirective(
BundleNamespace.REQUIREMENT_VISIBILITY_DIRECTIVE,
BundleNamespace.VISIBILITY_REEXPORT);
ResourceImpl exportUsesSplit3 = new ResourceImpl("exportUsesSplit3");
Capability exportUsesSplit3_bundle = addCap(exportUsesSplit3, BundleNamespace.BUNDLE_NAMESPACE, "exportUsesSplit3");
GenericCapability exportUsesSplit_pkg = (GenericCapability) addCap(
exportUsesSplit3, PackageNamespace.PACKAGE_NAMESPACE, "export.pkg");
exportUsesSplit_pkg.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE,
"split.pkg");
GenericRequirement exportUsesSplit3_split3Req = (GenericRequirement) addReq(
exportUsesSplit3, BundleNamespace.BUNDLE_NAMESPACE, "reexportSplit3");
ResourceImpl requireExportAndSplit1 = new ResourceImpl("requireExportAndSplit1");
Requirement requireExportAndSplit1_split1Req = addReq(requireExportAndSplit1,
BundleNamespace.BUNDLE_NAMESPACE, "reexportSplit1");
Requirement requireExportAndSplit1_exportReq = addReq(requireExportAndSplit1,
BundleNamespace.BUNDLE_NAMESPACE, "exportUsesSplit3");
ResourceImpl importExportAndSplit = new ResourceImpl("importExportAndSplit");
Requirement importExportAndSplit_importExport = addReq(importExportAndSplit,
PackageNamespace.PACKAGE_NAMESPACE, "export.pkg");
Requirement importExportAndSplit_importSplit = addReq(importExportAndSplit,
PackageNamespace.PACKAGE_NAMESPACE, "split.pkg");
candMap.put(split3_split1Req, Arrays.asList(split1_bundle));
candMap.put(split3_split2Req, Arrays.asList(split2_bundle));
candMap.put(reexportSplit1_split1Req, Arrays.asList(split1_bundle));
candMap.put(reexportSplit3_split3Req, Arrays.asList(split3_bundle));
candMap.put(exportUsesSplit3_split3Req, Arrays.asList(reexportSplit3_bundle));
candMap.put(requireExportAndSplit1_split1Req, Arrays.asList(reexportSplit1_bundle));
candMap.put(requireExportAndSplit1_exportReq,
Arrays.asList(exportUsesSplit3_bundle));
candMap.put(importExportAndSplit_importSplit,
Arrays.asList(split4_pkg, split3_pkg));
candMap.put(importExportAndSplit_importExport,
Arrays.asList((Capability) exportUsesSplit_pkg));
Collection<Resource> mandatory = Arrays.<Resource> asList(split1, split2,
split3, split4, reexportSplit1, reexportSplit3, exportUsesSplit3,
requireExportAndSplit1, importExportAndSplit);
return new ResolveContextImpl(Collections.<Resource, Wiring> emptyMap(), candMap,
mandatory, Collections.<Resource> emptyList());
}
private static String getResourceName(Resource r)
{
return r.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE).get(0).getAttributes()
.get(IdentityNamespace.IDENTITY_NAMESPACE).toString();
}
private static Resource findResource(String identity, Collection<Resource> resources)
{
for (Resource r : resources)
{
if (identity.equals(getResourceName(r)))
return r;
}
return null;
}
private static List<Resource> populateScenario1(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
ResourceImpl exporter = new ResourceImpl("A");
exporter.addCapability(new PackageCapability(exporter, "foo"));
ResourceImpl importer = new ResourceImpl("B");
importer.addRequirement(new PackageRequirement(importer, "foo"));
candMap.put(importer.getRequirements(null).get(0), exporter.getCapabilities(PackageNamespace.PACKAGE_NAMESPACE));
List<Resource> resources = new ArrayList<Resource>();
resources.add(importer);
return resources;
}
private static List<Resource> populateScenario2(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
List<Capability> fooCands = new ArrayList<Capability>();
List<Capability> barCands = new ArrayList<Capability>();
// A
ResourceImpl a = new ResourceImpl("A");
PackageCapability p = new PackageCapability(a, "foo");
a.addCapability(p);
fooCands.add(p);
// B
ResourceImpl b = new ResourceImpl("B");
p = new PackageCapability(b, "foo");
b.addCapability(p);
fooCands.add(p);
p = new PackageCapability(b, "bar");
p.addDirective(PackageNamespace.CAPABILITY_USES_DIRECTIVE, "foo");
b.addCapability(p);
barCands.add(p);
// C
ResourceImpl c = new ResourceImpl("C");
Requirement r = new PackageRequirement(c, "foo");
c.addRequirement(r);
candMap.put(r, fooCands);
r = new PackageRequirement(c, "bar");
c.addRequirement(r);
candMap.put(r, barCands);
// Mandatory resources
List<Resource> resources = new ArrayList<Resource>();
resources.add(c);
return resources;
}
private static List<Resource> populateScenario3(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
List<Capability> dResourcesCands = new ArrayList<Capability>();
List<Capability> eBundleDCands = new ArrayList<Capability>();
List<Capability> eResourcesCands = new ArrayList<Capability>();
// B
ResourceImpl b = new ResourceImpl("B");
PackageCapability pc = new PackageCapability(b, "resources");
b.addCapability(pc);
eResourcesCands.add(pc);
// C
ResourceImpl c = new ResourceImpl("C");
pc = new PackageCapability(c, "resources");
c.addCapability(pc);
eResourcesCands.add(pc);
dResourcesCands.add(pc);
// D
ResourceImpl d = new ResourceImpl("D");
pc = new PackageCapability(d, "export");
pc.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE, "resources");
d.addCapability(pc);
BundleCapability bc = new BundleCapability(d, "D");
bc.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE, "resources");
d.addCapability(bc);
eBundleDCands.add(bc);
Requirement r = new PackageRequirement(d, "resources");
d.addRequirement(r);
candMap.put(r, dResourcesCands);
// E
ResourceImpl e = new ResourceImpl("E");
r = new BundleRequirement(e, "D");
e.addRequirement(r);
candMap.put(r, eBundleDCands);
r = new PackageRequirement(e, "resources");
e.addRequirement(r);
candMap.put(r, eResourcesCands);
// Mandatory resources
List<Resource> resources = new ArrayList<Resource>();
resources.add(e);
return resources;
}
private static List<Resource> populateScenario4(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
ResourceImpl a = new ResourceImpl("A");
a.addRequirement(new BundleRequirement(a, "B"));
a.addRequirement(new BundleRequirement(a, "C"));
ResourceImpl b = new ResourceImpl("B");
b.addCapability(new BundleCapability(b, "B"));
b.addCapability(new PackageCapability(b, "p1"));
ResourceImpl c = new ResourceImpl("C");
c.addRequirement(new BundleRequirement(c, "D"));
c.addCapability(new BundleCapability(c, "C"));
PackageCapability p2 = new PackageCapability(c, "p2");
p2.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE, "p1");
c.addCapability(p2);
ResourceImpl d = new ResourceImpl("D");
d.addCapability(new BundleCapability(d, "D"));
d.addCapability(new PackageCapability(d, "p1"));
candMap.put(a.getRequirements(null).get(0), b.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(a.getRequirements(null).get(1), c.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(c.getRequirements(null).get(0), d.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
List<Resource> resources = new ArrayList<Resource>();
resources.add(a);
return resources;
}
private static List<Resource> populateScenario5(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
ResourceImpl x = new ResourceImpl("X");
x.addRequirement(new BundleRequirement(x, "A"));
ResourceImpl a = new ResourceImpl("A");
a.addCapability(new BundleCapability(a, "A"));
a.addRequirement(new BundleRequirement(a, "B"));
a.addRequirement(new BundleRequirement(a, "C"));
ResourceImpl b = new ResourceImpl("B");
b.addCapability(new BundleCapability(b, "B"));
b.addCapability(new PackageCapability(b, "p1"));
ResourceImpl c = new ResourceImpl("C");
c.addRequirement(new BundleRequirement(c, "D"));
c.addCapability(new BundleCapability(c, "C"));
PackageCapability p2 = new PackageCapability(c, "p2");
p2.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE, "p1");
c.addCapability(p2);
ResourceImpl d = new ResourceImpl("D");
d.addCapability(new BundleCapability(d, "D"));
d.addCapability(new PackageCapability(d, "p1"));
candMap.put(x.getRequirements(null).get(0), a.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(a.getRequirements(null).get(0), b.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(a.getRequirements(null).get(1), c.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(c.getRequirements(null).get(0), d.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
List<Resource> resources = new ArrayList<Resource>();
resources.add(x);
return resources;
}
private static List<Resource> populateScenario6(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
ResourceImpl a1 = new ResourceImpl("A");
a1.addRequirement(new PackageRequirement(a1, "p1"));
a1.addRequirement(new PackageRequirement(a1, "p2"));
Requirement a1Req = new GenericRequirement(a1, "generic");
a1Req.getDirectives().put(Namespace.REQUIREMENT_CARDINALITY_DIRECTIVE, Namespace.CARDINALITY_MULTIPLE);
a1.addRequirement(a1Req);
ResourceImpl a2 = new ResourceImpl("A");
a2.addRequirement(new BundleRequirement(a2, "B"));
a2.addRequirement(new BundleRequirement(a2, "C"));
Requirement a2Req = new GenericRequirement(a2, "generic");
a2Req.getDirectives().put(Namespace.REQUIREMENT_CARDINALITY_DIRECTIVE, Namespace.CARDINALITY_MULTIPLE);
a2.addRequirement(a2Req);
ResourceImpl b1 = new ResourceImpl("B");
b1.addCapability(new BundleCapability(b1, "B"));
Capability b1_p2 = new PackageCapability(b1, "p2");
b1_p2.getDirectives().put(Namespace.CAPABILITY_USES_DIRECTIVE, "p1");
b1.addCapability(b1_p2);
b1.addRequirement(new PackageRequirement(b1, "p1"));
ResourceImpl b2 = new ResourceImpl("B");
b2.addCapability(new BundleCapability(b2, "B"));
Capability b2_p2 = new PackageCapability(b2, "p2");
b2_p2.getDirectives().put(Namespace.CAPABILITY_USES_DIRECTIVE, "p1");
b2.addCapability(b2_p2);
b2.addRequirement(new PackageRequirement(b2, "p1"));
ResourceImpl c1 = new ResourceImpl("C");
c1.addCapability(new BundleCapability(c1, "C"));
Capability c1_p1 = new PackageCapability(c1, "p1");
c1.addCapability(c1_p1);
ResourceImpl c2 = new ResourceImpl("C");
c2.addCapability(new BundleCapability(c2, "C"));
Capability c2_p1 = new PackageCapability(c2, "p1");
c2.addCapability(c2_p1);
ResourceImpl d1 = new ResourceImpl("D");
GenericCapability d1_generic = new GenericCapability(d1, "generic");
d1_generic.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE, "p1,p2");
d1.addCapability(d1_generic);
d1.addRequirement(new PackageRequirement(d1, "p1"));
d1.addRequirement(new PackageRequirement(d1, "p2"));
ResourceImpl d2 = new ResourceImpl("D");
GenericCapability d2_generic = new GenericCapability(d2, "generic");
d2_generic.addDirective(Namespace.CAPABILITY_USES_DIRECTIVE, "p1,p2");
d2.addCapability(d2_generic);
d2.addRequirement(new PackageRequirement(d2, "p1"));
d2.addRequirement(new PackageRequirement(d2, "p2"));
candMap.put(a1.getRequirements(null).get(0), Arrays.asList(c2_p1));
candMap.put(a1.getRequirements(null).get(1), Arrays.asList(b2_p2));
candMap.put(a1.getRequirements(null).get(2), Arrays.asList((Capability) d1_generic, (Capability) d2_generic));
candMap.put(a2.getRequirements(null).get(0), c2.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(a2.getRequirements(null).get(1), b2.getCapabilities(BundleNamespace.BUNDLE_NAMESPACE));
candMap.put(a2.getRequirements(null).get(2), Arrays.asList((Capability) d1_generic, (Capability) d2_generic));
candMap.put(b1.getRequirements(null).get(0), Arrays.asList(c1_p1, c2_p1));
candMap.put(b2.getRequirements(null).get(0), Arrays.asList(c1_p1, c2_p1));
candMap.put(d1.getRequirements(null).get(0), Arrays.asList(c1_p1, c2_p1));
candMap.put(d1.getRequirements(null).get(1), Arrays.asList(b1_p2, b2_p2));
candMap.put(d2.getRequirements(null).get(0), Arrays.asList(c1_p1, c2_p1));
candMap.put(d2.getRequirements(null).get(1), Arrays.asList(b1_p2, b2_p2));
List<Resource> resources = new ArrayList<Resource>();
resources.add(a1);
resources.add(a2);
return resources;
}
private static List<Resource> populateScenario7(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
ResourceImpl a1 = new ResourceImpl("A");
GenericCapability a1_hostCap = new GenericCapability(a1, HostNamespace.HOST_NAMESPACE);
a1_hostCap.addAttribute(HostNamespace.HOST_NAMESPACE, "A");
a1.addCapability(a1_hostCap);
ResourceImpl f1 = new ResourceImpl("F1", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
GenericRequirement f1_hostReq = new GenericRequirement(f1, HostNamespace.HOST_NAMESPACE);
f1_hostReq.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, "(" + HostNamespace.HOST_NAMESPACE + "=A)");
f1.addRequirement(f1_hostReq);
ResourceImpl f2 = new ResourceImpl("F2", IdentityNamespace.TYPE_FRAGMENT, Version.emptyVersion);
GenericRequirement f2_hostReq = new GenericRequirement(f2, HostNamespace.HOST_NAMESPACE);
f2_hostReq.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, "(" + HostNamespace.HOST_NAMESPACE + "=A)");
f2.addRequirement(f2_hostReq);
ResourceImpl b1 = new ResourceImpl("B");
GenericRequirement b1_identityReq = new GenericRequirement(b1, IdentityNamespace.IDENTITY_NAMESPACE);
b1_identityReq.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, "(" + IdentityNamespace.IDENTITY_NAMESPACE + "=F2)");
b1.addRequirement(b1_identityReq);
candMap.put(f1.getRequirements(null).get(0), a1.getCapabilities(HostNamespace.HOST_NAMESPACE));
candMap.put(f2.getRequirements(null).get(0), a1.getCapabilities(HostNamespace.HOST_NAMESPACE));
candMap.put(b1.getRequirements(null).get(0), f2.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
List<Resource> resources = new ArrayList<Resource>();
resources.add(a1);
resources.add(f1);
resources.add(f2);
resources.add(b1);
return resources;
}
private static List<Resource> populateScenario8(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap)
{
ResourceImpl res2 = new ResourceImpl("res2");
Requirement req25 = addReq(res2, IdentityNamespace.IDENTITY_NAMESPACE, "res5");
Requirement req24 = addReq(res2, IdentityNamespace.IDENTITY_NAMESPACE, "res4");
Requirement req23 = addReq(res2, IdentityNamespace.IDENTITY_NAMESPACE, "res3", true);
ResourceImpl res3 = new ResourceImpl("res3");
Requirement req32 = addReq(res3, IdentityNamespace.IDENTITY_NAMESPACE, "res2");
Requirement req3x = addReq(res3, "foo", "bar");
ResourceImpl res4 = new ResourceImpl("res4");
Requirement req45 = addReq(res4, IdentityNamespace.IDENTITY_NAMESPACE, "res5");
ResourceImpl res5 = new ResourceImpl("res5");
Requirement req5x1 = addReq(res5, BundleNamespace.BUNDLE_NAMESPACE, "package1", true);
Requirement req5x2 = addReq(res5, BundleNamespace.BUNDLE_NAMESPACE, "package2", true);
ResourceImpl res6 = new ResourceImpl("res6");
Capability cap6x1 = addCap(res6, BundleNamespace.BUNDLE_NAMESPACE, "package1");
Capability cap6x2 = addCap(res6, BundleNamespace.BUNDLE_NAMESPACE, "package2");
Requirement req63 = addReq(res6, IdentityNamespace.IDENTITY_NAMESPACE, "res3");
candMap.put(req25, res5.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
candMap.put(req24, res4.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
candMap.put(req23, res3.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
candMap.put(req32, res2.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
candMap.put(req45, res5.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
candMap.put(req63, res3.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE));
candMap.put(req3x, Arrays.<Capability>asList());
candMap.put(req5x1, Arrays.<Capability>asList(cap6x1));
candMap.put(req5x2, Arrays.<Capability>asList(cap6x2));
return Arrays.<Resource>asList(res2);
}
private static List<Resource> populateScenario9(Map<Resource, Wiring> wirings, Map<Requirement, List<Capability>> candMap) {
ResourceImpl c1 = new ResourceImpl("C1");
Capability c1_pkgCap = addCap(c1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.c");
ResourceImpl c2 = new ResourceImpl("C2");
Capability c2_pkgCap = addCap(c2, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.c");
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");
Requirement f1_pkgReq = addReq(f1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.c");
Capability f1_pkgCap = addCap(f1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.a", "org.foo.c");
ResourceImpl b1 = new ResourceImpl("B");
Requirement b_pkgReq1 = addReq(b1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.a");
Requirement b_pkgReq2 = addReq(b1, PackageNamespace.PACKAGE_NAMESPACE, "org.foo.c");
candMap.put(b_pkgReq1, Collections.singletonList(f1_pkgCap));
candMap.put(b_pkgReq2, Arrays.asList(c2_pkgCap, c1_pkgCap));
Map<Resource, List<Wire>> wires = new HashMap<Resource, List<Wire>>();
wires.put(c1, new ArrayList<Wire>());
wires.put(c2, new ArrayList<Wire>());
wires.put(a1, new ArrayList<Wire>());
wires.put(f1, new ArrayList<Wire>());
wires.get(f1).add(new SimpleWire(f1_hostReq, a1_hostCap));
wires.get(a1).add(new SimpleWire(f1_pkgReq, c1_pkgCap, a1, c1));
Map<Resource, List<Wire>> invertedWires = new HashMap<Resource, List<Wire>>();
invertedWires.put(c1, new ArrayList<Wire>());
invertedWires.put(c2, new ArrayList<Wire>());
invertedWires.put(a1, new ArrayList<Wire>());
invertedWires.put(f1, new ArrayList<Wire>());
invertedWires.get(a1).add(new SimpleWire(f1_hostReq, a1_hostCap));
invertedWires.get(c1).add(new SimpleWire(f1_pkgReq, c1_pkgCap, a1, c1));
wirings.put(a1, new SimpleWiring(a1, Arrays.asList(a1_hostCap, f1_pkgCap), wires, invertedWires));
wirings.put(f1, new SimpleWiring(f1, Collections.<Capability>emptyList(), wires, invertedWires));
wirings.put(c1, new SimpleWiring(c1, Collections.singletonList(c1_pkgCap), wires, invertedWires));
wirings.put(c2, new SimpleWiring(c2, Collections.singletonList(c2_pkgCap), wires, invertedWires));
return Collections.<Resource>singletonList(b1);
}
private static Capability addCap(ResourceImpl res, String namespace, String value)
{
return addCap(res, namespace, value, null);
}
private static Capability addCap(ResourceImpl res, String namespace, String value, String uses)
{
GenericCapability cap = new GenericCapability(res, namespace);
cap.addAttribute(namespace, value);
if (uses != null)
{
cap.addDirective("uses", uses);
}
res.addCapability(cap);
return cap;
}
private static Requirement addReq(ResourceImpl res, String namespace, String value)
{
return addReq(res, namespace, value, false);
}
private static Requirement addReq(ResourceImpl res, String namespace, String value, boolean optional)
{
GenericRequirement req = new GenericRequirement(res, namespace);
req.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, "(" + namespace + "=" + value + ")");
if (optional) {
req.addDirective(Constants.RESOLUTION_DIRECTIVE, Constants.RESOLUTION_OPTIONAL);
}
res.addRequirement(req);
return req;
}
private static class SimpleWire implements Wire {
final Requirement requirement;
final Capability capability;
final Resource requirer;
final Resource provider;
public SimpleWire(Requirement requirement, Capability capability) {
this(requirement, capability, requirement.getResource(), capability.getResource());
}
public SimpleWire(Requirement requirement, Capability capability, Resource requirer, Resource provider) {
this.requirement = requirement;
this.capability = capability;
this.requirer = requirer;
this.provider = provider;
}
public Capability getCapability() {
return capability;
}
public Requirement getRequirement() {
return requirement;
}
public Resource getRequirer() {
return requirer;
}
public Resource getProvider() {
return provider;
}
}
private static class SimpleWiring implements Wiring {
final Resource resource;
final Map<Resource, List<Wire>> wires;
final Map<Resource, List<Wire>> invertedWires;
List<Capability> resourceCapabilities;
List<Requirement> resourceRequirements;
private SimpleWiring(Resource resource, List<Capability> resourceCapabilities, Map<Resource, List<Wire>> wires, Map<Resource, List<Wire>> invertedWires) {
this.resource = resource;
this.wires = wires;
this.invertedWires = invertedWires;
this.resourceCapabilities = resourceCapabilities;
}
public List<Capability> getResourceCapabilities(String namespace) {
if (resourceCapabilities == null) {
resourceCapabilities = new ArrayList<Capability>();
for (Wire wire : invertedWires.get(resource)) {
if (!resourceCapabilities.contains(wire.getCapability())) {
resourceCapabilities.add(wire.getCapability());
}
}
}
if (namespace != null) {
List<Capability> caps = new ArrayList<Capability>();
for (Capability cap : resourceCapabilities) {
if (namespace.equals(cap.getNamespace())) {
caps.add(cap);
}
}
return caps;
}
return resourceCapabilities;
}
public List<Requirement> getResourceRequirements(String namespace) {
if (resourceRequirements == null) {
resourceRequirements = new ArrayList<Requirement>();
for (Wire wire : wires.get(resource)) {
if (!resourceRequirements.contains(wire.getRequirement())) {
resourceRequirements.add(wire.getRequirement());
}
}
}
if (namespace != null) {
List<Requirement> reqs = new ArrayList<Requirement>();
for (Requirement req : resourceRequirements) {
if (namespace.equals(req.getNamespace())) {
reqs.add(req);
}
}
return reqs;
}
return resourceRequirements;
}
public List<Wire> getProvidedResourceWires(String namespace) {
List<Wire> providedWires = invertedWires.get(resource);
if (namespace != null) {
List<Wire> wires = new ArrayList<Wire>();
for (Wire wire : providedWires) {
if (namespace.equals(wire.getRequirement().getNamespace())) {
wires.add(wire);
}
}
return wires;
}
return providedWires;
}
public List<Wire> getRequiredResourceWires(String namespace) {
List<Wire> requiredWires = wires.get(resource);
if (namespace != null) {
List<Wire> wires = new ArrayList<Wire>();
for (Wire wire : requiredWires) {
if (namespace.equals(wire.getCapability().getNamespace())) {
wires.add(wire);
}
}
return wires;
}
return requiredWires;
}
public Resource getResource() {
return resource;
}
}
}