Beispiel #1
0
  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());
    }
  }
Beispiel #2
0
  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");
    }
  }
Beispiel #3
0
  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());
  }
Beispiel #4
0
  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;
          }
      }
    }
  }