public void testUnresolved() throws ResolutionException { Repository repo = ws.getPlugin(Repository.class); BndEditModel model = new BndEditModel(); model.setRunFw("org.apache.felix.framework"); List<Requirement> requires = new ArrayList<Requirement>(); CapReqBuilder capReq = CapReqBuilder.createBundleRequirement("org.apache.felix.webconsole", "[4,5)"); requires.add(capReq.buildSyntheticRequirement()); Map<Requirement, Collection<Capability>> shell = repo.findProviders(requires); assertNotNull(shell); assertEquals(1, shell.size()); model.setRunRequires(requires); BndrunResolveContext context = new BndrunResolveContext(model, ws, log); Resolver resolver = new BndResolver(new org.apache.felix.resolver.Logger(4)); try { Map<Resource, List<Wire>> resolved = resolver.resolve(context); fail("Resolve did not fail"); } catch (ResolutionException e) { assertEquals(1, e.getUnresolvedRequirements().size()); ResolutionException augmented = ResolveProcess.augment(context, e); assertEquals(2, augmented.getUnresolvedRequirements().size()); } }
public void testSimpleResolve() { Repository repo = ws.getPlugin(Repository.class); BndEditModel model = new BndEditModel(); model.setRunFw("org.apache.felix.framework"); List<Requirement> requires = new ArrayList<Requirement>(); CapReqBuilder capReq = CapReqBuilder.createBundleRequirement("org.apache.felix.gogo.shell", "[0,1)"); requires.add(capReq.buildSyntheticRequirement()); Map<Requirement, Collection<Capability>> shell = repo.findProviders(requires); assertNotNull(shell); assertEquals(1, shell.size()); model.setRunRequires(requires); BndrunResolveContext context = new BndrunResolveContext(model, ws, log); Resolver resolver = new BndResolver(new org.apache.felix.resolver.Logger(4)); try { Map<Resource, List<Wire>> resolved = resolver.resolve(context); Set<Resource> resources = resolved.keySet(); Resource resource = getResource(resources, "org.apache.felix.gogo.runtime", "0.12"); assertNotNull(resource); } catch (ResolutionException e) { fail("Resolve failed"); } }
public void testScr() { Repository repo = ws.getPlugin(Repository.class); BndEditModel model = new BndEditModel(); model.setRunFw("org.apache.felix.framework"); List<Requirement> requires = new ArrayList<Requirement>(); CapReqBuilder capReq = CapReqBuilder.createSimpleRequirement("osgi.extender", "osgi.component", "[1.1,2)"); requires.add(capReq.buildSyntheticRequirement()); Map<Requirement, Collection<Capability>> shell = repo.findProviders(requires); assertNotNull(shell); assertEquals(1, shell.size()); }
public void parseIndex( InputStream stream, URI baseUri, IRepositoryIndexProcessor listener, LogService log) throws Exception { XMLInputFactory inputFactory = XMLInputFactory.newInstance(); inputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, true); inputFactory.setProperty(XMLInputFactory.IS_VALIDATING, false); inputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false); StreamSource source = new StreamSource(stream, baseUri.toString()); XMLStreamReader reader = inputFactory.createXMLStreamReader(source); ResourceBuilder resourceBuilder = null; CapReqBuilder capReqBuilder = null; while (reader.hasNext()) { int type = reader.next(); String localName; switch (type) { case START_ELEMENT: localName = reader.getLocalName(); if (TAG_REFERRAL.equals(localName)) { Referral referral = new Referral( reader.getAttributeValue(null, ATTR_REFERRAL_URL), parseInt(reader.getAttributeValue(null, ATTR_REFERRAL_DEPTH))); listener.processReferral(baseUri, referral, referral.getDepth(), 1); } else if (TAG_RESOURCE.equals(localName)) { resourceBuilder = new ResourceBuilder(); String bsn = reader.getAttributeValue(null, ATTR_RESOURCE_SYMBOLIC_NAME); String versionStr = reader.getAttributeValue(null, ATTR_RESOURCE_VERSION); Version version = Version.parseVersion(versionStr); String uri = reader.getAttributeValue(null, ATTR_RESOURCE_URI); URI resolvedUri = resolveUri(uri, baseUri); addBasicCapabilities(resourceBuilder, bsn, version, resolvedUri); } else if (TAG_CAPABILITY.equals(localName)) { String obrName = reader.getAttributeValue(null, ATTR_NAME); String namespace = mapObrNameToR5Namespace(obrName, false); capReqBuilder = new CapReqBuilder(namespace); } else if (TAG_REQUIRE.equals(localName)) { String obrName = reader.getAttributeValue(null, ATTR_NAME); boolean extend = "true".equalsIgnoreCase(reader.getAttributeValue(null, ATTR_EXTEND)); String namespace = mapObrNameToR5Namespace(obrName, extend); boolean optional = "true".equalsIgnoreCase(reader.getAttributeValue(null, ATTR_OPTIONAL)); capReqBuilder = new CapReqBuilder(namespace); if (optional) capReqBuilder.addDirective( Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE, Namespace.RESOLUTION_OPTIONAL); String filter = translateObrFilter(namespace, reader.getAttributeValue(null, ATTR_FILTER), log); capReqBuilder.addDirective(Namespace.REQUIREMENT_FILTER_DIRECTIVE, filter); } else if (TAG_PROPERTY.equals(localName)) { String name = reader.getAttributeValue(null, ATTR_PROPERTY_NAME); String typeStr = reader.getAttributeValue(null, ATTR_PROPERTY_TYPE); String valueStr = reader.getAttributeValue(null, ATTR_PROPERTY_VALUE); if (capReqBuilder != null) { name = mapObrPropertyToR5(capReqBuilder.getNamespace(), name); if (PROPERTY_USES.equals(name)) capReqBuilder.addDirective(PROPERTY_USES, valueStr); else { Object value = convertProperty(valueStr, typeStr); capReqBuilder.addAttribute(name, value); } } } break; case END_ELEMENT: localName = reader.getLocalName(); if (TAG_RESOURCE.equals(localName)) { if (resourceBuilder != null) { Resource resource = resourceBuilder.build(); listener.processResource(resource); } } else if (TAG_CAPABILITY.equals(localName)) { if (resourceBuilder != null && capReqBuilder != null) resourceBuilder.addCapability(capReqBuilder); capReqBuilder = null; } else if (TAG_REQUIRE.equals(localName)) { if (resourceBuilder != null && capReqBuilder != null) resourceBuilder.addRequirement(capReqBuilder); capReqBuilder = null; } } } }