org.osgi.framework.wiring.BundleRequirement#org.osgi.resource.Requirement源码实例Demo

下面列出了org.osgi.framework.wiring.BundleRequirement#org.osgi.resource.Requirement 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: concierge   文件: Resources.java
void addWire(final BundleWire wire) {
	final Capability cap = wire.getCapability();
	final Requirement req = wire.getRequirement();
	if (wire.getProvider() == revision) {
		providedWires.insert(cap.getNamespace(), wire);
		inUseSet.add(wire.getRequirer());
		((ConciergeBundleWire) wire).providerWiring = this;
	} else {
		requiredWires.insert(req.getNamespace(), wire);
		if (HostNamespace.HOST_NAMESPACE.equals(wire.getRequirement()
				.getNamespace())) {
			inUseSet.add(wire.getProvider());
		}
		((ConciergeBundleWire) wire).requirerWiring = this;
	}
}
 
源代码2 项目: concierge   文件: Concierge.java
public synchronized Map<Resource, List<Wire>> resolve(
		final ResolveContext context) throws ResolutionException {
	if (context == null) {
		throw new IllegalArgumentException("context is null");
	}

	final MultiMap<Resource, Wire> solution = new MultiMap<Resource, Wire>();
	final ArrayList<Requirement> unresolvedRequirements = new ArrayList<Requirement>();
	final ArrayList<Resource> unresolvedResources = new ArrayList<Resource>();

	resolve0(context, solution, unresolvedRequirements,
			unresolvedResources, true);

	if (!unresolvedRequirements.isEmpty()
			|| !unresolvedResources.isEmpty()) {
		throw new ResolutionException("Could not resolve.", null,
				unresolvedRequirements);
	}

	return solution.getFlatMap();
}
 
源代码3 项目: concierge   文件: Concierge.java
protected List<Capability> findProviders(Requirement requirement){
	final String filterStr = requirement.getDirectives()
			.get(Namespace.REQUIREMENT_FILTER_DIRECTIVE);

	final List<Capability> providers;
	if (filterStr == null) {
		providers = capabilityRegistry
				.getAll(requirement.getNamespace());
	} else {
		try {
			providers = RFC1960Filter.filterWithIndex(
					requirement, filterStr, capabilityRegistry);
		} catch (final InvalidSyntaxException ise) {
			// TODO: debug output
			ise.printStackTrace();
			return Collections.emptyList();
		}
	}
	
	return providers;
}
 
源代码4 项目: concierge   文件: Concierge.java
static boolean matches0(final String namespace, final Requirement req,
		final Capability cap, final String filterStr) {
	if (!namespace.startsWith("osgi.wiring.")) {
		return true;
	}

	final String mandatory = cap.getDirectives()
			.get(Namespace.RESOLUTION_MANDATORY);

	if (mandatory == null) {
		return true;
	}

	final Set<String> mandatoryAttributes = new HashSet<String>(
			Arrays.asList(Utils.splitString(
					Utils.unQuote(mandatory).toLowerCase(), ',')));
	final Matcher matcher = FILTER_ASSERT_MATCHER
			.matcher(filterStr == null ? "" : filterStr);
	while (matcher.find()) {
		mandatoryAttributes.remove(matcher.group(1));
	}
	return mandatoryAttributes.isEmpty();
}
 
源代码5 项目: concierge   文件: Concierge.java
/**
 * Get Fragments matching a host bundle.
 * 
 * @param hostBundle
 *            , the host bundle, for which fragments should be found
 * @return an array of fragments, which should be attached to the host
 *         bundle
 */
List<Revision> getFragments(final BundleRevision hostBundle) {
	final List<Revision> candidates = new ArrayList<Revision>(
			fragmentIndex.lookup(hostBundle.getSymbolicName()));

	if (!candidates.isEmpty()) {
		final Capability cap = hostBundle
				.getCapabilities(HostNamespace.HOST_NAMESPACE).get(0);
		for (final Iterator<Revision> iter = candidates.iterator(); iter
				.hasNext();) {
			final Requirement req = iter.next()
					.getRequirements(HostNamespace.HOST_NAMESPACE).get(0);
			if (!matches(req, cap)) {
				iter.remove();
			}
		}
	}

	return candidates;
}
 
源代码6 项目: knopflerfish.org   文件: NsToHtmlBundle.java
@Override
public String toHTML(Requirement requirement)
{
  final StringBuffer sb = new StringBuffer(50);
  final String filter = requirement.getDirectives().get("filter");
  final String bundleName =
    Util.getFilterValue(filter, BundleRevision.BUNDLE_NAMESPACE);
  if (bundleName != null) {
    sb.append(bundleName);
    Util.appendVersion(sb, filter, Constants.BUNDLE_VERSION_ATTRIBUTE);
  } else {
    // Filter too complex to extract info from...
    sb.append(filter);
  }

  return sb.toString();
}
 
源代码7 项目: knopflerfish.org   文件: NsToHtmlContent.java
@Override
public String toHTML(Requirement requirement)
{
  final StringBuffer sb = new StringBuffer(100);
  sb.append("<table border='0'>\n");
  for (final Entry<String, String> dir : requirement.getDirectives()
      .entrySet()) {
    Util.toHTMLtr13_3(sb, ":=", dir.getKey(), dir.getValue());
  }
  for (final Entry<String, Object> attr : requirement.getAttributes()
      .entrySet()) {
    Util.toHTMLtr13_3(sb, "=", attr.getKey(), attr.getValue());
  }
  sb.append("</table>\n");
  return sb.toString();
}
 
源代码8 项目: knopflerfish.org   文件: NsToHtmlGeneric.java
@Override
public String toHTML(Requirement requirement)
{
  final StringBuffer sb = new StringBuffer(100);
  sb.append("<table border='0'>\n");
  for (final Entry<String, String> dir : requirement.getDirectives()
      .entrySet()) {
    Util.toHTMLtr13_3(sb, ":=", dir.getKey(), dir.getValue());
  }
  for (final Entry<String, Object> attr : requirement.getAttributes()
      .entrySet()) {
    Util.toHTMLtr13_3(sb, "=", attr.getKey(), attr.getValue());
  }
  sb.append("</table>\n");
  return sb.toString();
}
 
源代码9 项目: knopflerfish.org   文件: NsToHtmlHost.java
@Override
public String toHTML(Requirement requirement)
{
  final StringBuffer sb = new StringBuffer(50);
  final String filter = requirement.getDirectives().get("filter");
  final String hostName =
    Util.getFilterValue(filter, BundleRevision.HOST_NAMESPACE);
  if (hostName != null) {
    sb.append(hostName);
    Util.appendVersion(sb, filter, Constants.BUNDLE_VERSION_ATTRIBUTE);
  } else {
    // Filter too complex to extract info from...
    sb.append(filter);
  }

  return sb.toString();
}
 
源代码10 项目: knopflerfish.org   文件: NsToHtmlEE.java
@Override
public String toHTML(Requirement requirement)
{
  final StringBuffer sb = new StringBuffer(50);
  final String filter = requirement.getDirectives().get("filter");
  final String eeName =
    Util.getFilterValue(filter,
                        ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE);

  if (eeName != null) {
    sb.append(eeName);
    Util.appendVersion(sb, filter, Constants.VERSION_ATTRIBUTE);
  } else {
    // Filter too complex to extract info from...
    sb.append(filter);
  }

  return sb.toString();
}
 
源代码11 项目: knopflerfish.org   文件: NsToHtmlPackage.java
@Override
public String toHTML(Requirement requirement)
{
  final StringBuffer sb = new StringBuffer(50);
  final String filter = requirement.getDirectives().get("filter");
  final String pkgName =
    Util.getFilterValue(filter, BundleRevision.PACKAGE_NAMESPACE);
  if (pkgName != null) {
    sb.append(pkgName);
    appendVersionAndResolutionDirective(sb, requirement);
  } else {
    sb.append(filter);
  }

  return sb.toString();
}
 
源代码12 项目: knopflerfish.org   文件: ResolveContextImpl.java
private void addToProvidersIfMatching(Resource res, List<Capability> providers, Requirement req) {
	String f = req.getDirectives().get(Namespace.REQUIREMENT_FILTER_DIRECTIVE);
	Filter filter = null;
	if(f != null) {
	  try {
	    filter = bc.createFilter(f);
	  } catch (InvalidSyntaxException e) {
	    // TODO log filter failure, skip
	    System.err.println("Failed, " + f + ". " + e);
	    return;
	  }
	}
	for(Capability c : res.getCapabilities(req.getNamespace())) {
	  if(filter != null && !filter.matches(c.getAttributes())) {
	    continue;
	  }
	  providers.add(c);
	}
}
 
源代码13 项目: concierge   文件: Resources.java
private void addWire(final Wire wire) {
	if (wire.getProvider() == resource) {
		final Capability cap = wire.getCapability();
		capabilities.insertUnique(cap.getNamespace(), cap);
		providedWires.insert(cap.getNamespace(), wire);
	} else {
		final Requirement req = wire.getRequirement();
		requirements.insertUnique(req.getNamespace(), req);
		requiredWires.insert(req.getNamespace(), wire);
	}
}
 
源代码14 项目: concierge   文件: AbstractBundle.java
protected final BundleRevisionDTO getBundleRevisionDTO(BundleRevision revision){
	BundleRevisionDTO dto = new BundleRevisionDTO();
	dto.bundle = revision.getBundle().getBundleId();
	dto.id = revision.hashCode();
	dto.symbolicName = revision.getSymbolicName();
	dto.type = revision.getTypes();
	dto.version = getVersion().toString();
	
	// add requirement/capabilities
	List<Capability> caps = revision.getCapabilities(null);
	dto.capabilities = new ArrayList<CapabilityDTO>(caps.size());
	for(Capability c : caps){
		CapabilityDTO capDTO = new CapabilityDTO();
		capDTO.id = c.hashCode();
		capDTO.namespace = c.getNamespace();
		capDTO.resource = c.getResource().hashCode();
		capDTO.attributes = getDTOMap(c.getAttributes());
		capDTO.directives = new HashMap<String, String>(c.getDirectives());
		dto.capabilities.add(capDTO);
	}
	
	List<Requirement> reqs = revision.getRequirements(null);
	dto.requirements = new ArrayList<RequirementDTO>(reqs.size());
	for(Requirement r : reqs){
		RequirementDTO reqDTO = new RequirementDTO();
		reqDTO.id = r.hashCode();
		reqDTO.namespace = r.getNamespace();
		reqDTO.resource = r.getResource().hashCode();
		reqDTO.attributes = getDTOMap(r.getAttributes());
		reqDTO.directives = new HashMap<String, String>(r.getDirectives());
		dto.requirements.add(reqDTO);
	}
	return dto;
}
 
源代码15 项目: concierge   文件: Concierge.java
/**
 * @see org.osgi.framework.wiring.FrameworkWiring#findProviders(Requirement requirement)
 */
public Collection<BundleCapability> findProviders(Requirement requirement) {
	final List<Capability> providers = resolver.findProviders(requirement);
	final List<BundleCapability> result = new ArrayList<BundleCapability>(providers.size());
	for(int i=0;i<providers.size();i++){
		Capability cap = providers.get(i);
		if(cap instanceof BundleCapability){
			result.add((BundleCapability) cap);
		}
	}
	return result;
}
 
源代码16 项目: concierge   文件: Concierge.java
private void hostFragment(final ResolveContext context,
		final BundleRevision fragment, final BundleRevision host,
		final MultiMap<Resource, Wire> solution) {
	// host the capabilities
	for (final Capability cap : fragment.getCapabilities(null)) {
		if (!IdentityNamespace.IDENTITY_NAMESPACE
				.equals(cap.getNamespace())) {
			final HostedBundleCapability hostedCap = new HostedBundleCapability(
					host, cap);

			context.insertHostedCapability(
					new ArrayList<Capability>(host.getCapabilities(
							PackageNamespace.PACKAGE_NAMESPACE)),
					hostedCap);
		}
	}

	// create host wire
	final Capability hostCapability = host
			.getCapabilities(HostNamespace.HOST_NAMESPACE).get(0);
	final Requirement hostRequirement = fragment
			.getRequirements(HostNamespace.HOST_NAMESPACE).get(0);

	final Wire wire = Resources.createWire(hostCapability,
			hostRequirement);
	solution.insert(fragment, wire);
	solution.insert(host, wire);
}
 
源代码17 项目: concierge   文件: Concierge.java
static boolean matches(final Requirement req, final Capability cap) {
	final String reqNamespace = req.getNamespace();
	final String capNamespace = cap.getNamespace();

	if (!reqNamespace.equals(capNamespace)) {
		return false;
	}

	/*
	 * final String effective = req.getDirectives().get(
	 * Namespace.REQUIREMENT_EFFECTIVE_DIRECTIVE); if (!(effective == null
	 * || effective .equals(Namespace.EFFECTIVE_RESOLVE))) { return false; }
	 */

	final String filter = req.getDirectives()
			.get(Namespace.REQUIREMENT_FILTER_DIRECTIVE);

	try {
		if (!(filter == null || RFC1960Filter.fromString(filter)
				.matches(cap.getAttributes()))) {
			return false;
		}

		return matches0(capNamespace, req, cap, filter);
	} catch (final InvalidSyntaxException e) {
		// TODO: to log
		e.printStackTrace();
		return false;
	}
}
 
源代码18 项目: knopflerfish.org   文件: Util.java
/**
 * Get the resolution directive from a requirement and convert it to a HTML
 * string.
 *
 * @param sb
 *          The buffer to append the resulting interval to.
 * @param requirement
 *          The rquirement to extract and present the resolution directiv
 *          from.
 */
public static void appendResolution(final StringBuffer sb,
                                    final Requirement requirement)
{
  final String resolution =
    requirement.getDirectives().get(Constants.RESOLUTION_DIRECTIVE);
  if (resolution != null && resolution.length() > 0) {
    if (resolution.equals(Constants.RESOLUTION_MANDATORY)) {
      // Default, don't print
    } else {
      sb.append("&nbsp;");
      sb.append(resolution);
    }
  }
}
 
源代码19 项目: knopflerfish.org   文件: NsToHtmlPackage.java
private void appendVersionAndResolutionDirective(final StringBuffer sb,
                                                 final Requirement requirement)
{
  final String filter =
    requirement.getDirectives().get(Constants.FILTER_DIRECTIVE);
  Util.appendVersion(sb, filter, Constants.VERSION_ATTRIBUTE);

  Util.appendResolution(sb, requirement);
}
 
源代码20 项目: knopflerfish.org   文件: RequirementImpl.java
public boolean equals(Object other) {
  if (this == other)
    return true;
  if (other == null)
    return false;
  if (!(other instanceof Requirement))
    return false;
  Requirement r = (Requirement) other;
  return getNamespace().equals(r.getNamespace())
      && getDirectives().equals(r.getDirectives())
      && getAttributes().equals(r.getAttributes())
      && getResource() == r.getResource();
  // getResource().equals(r.getResource());

}
 
源代码21 项目: knopflerfish.org   文件: ResourceImpl.java
@Override
public List<Requirement> getRequirements(String namespace) {
  List<Requirement> result = rs;
  if (namespace != null) {
    result = new ArrayList<Requirement>();
    for (Requirement r : rs) {
      if (namespace.equalsIgnoreCase(r.getNamespace())) {
        result.add(r);
      }
    }
  }
  return Collections.unmodifiableList(result);
}
 
源代码22 项目: knopflerfish.org   文件: ResourceImpl.java
public String toString() {
  StringBuffer sb = new StringBuffer();
  sb.append("Resource[\n");
  for (Capability c : cs) {
    sb.append(c.toString());
  }
  for (Requirement r : rs) {
    sb.append(r.toString());
  }
  sb.append("]\n");
  return sb.toString();
}
 
源代码23 项目: knopflerfish.org   文件: ExpressionResolver.java
private Collection<Resource> getResources(Requirement req)
{
  Collection<Capability> cs = repository.findProviders(Collections.singleton(req)).get(req);
  Collection<Resource> res = new ArrayList<Resource>(cs.size());
  for (Capability c : cs) {
    // TODO could resource be null?
    res.add(c.getResource());
  }
  return res;
}
 
源代码24 项目: knopflerfish.org   文件: RepositoryManagerImpl.java
public List<Capability> findProviders(Requirement requirement) {
  ArrayList<Capability> res = new ArrayList<Capability>();
  for (RepositoryInfo ri : myRepos != null ? myRepos.keySet() : repos.getAll()) {
    Repository r = repos.getRepository(ri);
    if (r != null) {
      res.addAll(r.findProviders(Collections.singleton(requirement)).get(requirement));
    }
  }
  return res;
}
 
源代码25 项目: knopflerfish.org   文件: FrameworkWiringImpl.java
@SuppressWarnings("unchecked")
public Collection<BundleCapability> findProviders(Requirement requirement) {
  final String namespace = requirement.getNamespace();
  final String filterStr = requirement.getDirectives().get("filter");
  Filter filter;
  if (filterStr != null) {
    try {
      filter = FrameworkUtil.createFilter(filterStr);
    } catch (InvalidSyntaxException ise) {
      final String msg = "Invalid filter directive '" + filterStr + "': " + ise;
      throw new IllegalArgumentException(msg, ise);
    }
  } else {
    filter = null;
  }
  HashSet<BundleCapability> res = new HashSet<BundleCapability>();
  for (BundleGeneration bg : fwCtx.bundles.getBundleGenerations(null)) {
    BundleRevisionImpl bri = bg.bundleRevision;
    if (bri != null) {
      for (BundleCapability bc : bri.getDeclaredCapabilities(namespace)) {
        if (null == filter || filter.matches(bc.getAttributes())) {
          res.add(bc);
        }
      }
    }
  }
  return res;
}
 
源代码26 项目: vespa   文件: TestBundle.java
@Override
public List<Requirement> getRequirements(String namespace) {
    throw new UnsupportedOperationException();
}
 
源代码27 项目: vespa   文件: ClassLoaderOsgiFramework.java
@Override
public List<Requirement> getRequirements(String p1) {
    throw new UnsupportedOperationException();
}
 
源代码28 项目: vespa   文件: ClassLoaderOsgiFramework.java
@Override
public List<Requirement> getResourceRequirements(String p1) {
    throw new UnsupportedOperationException();
}
 
源代码29 项目: vespa   文件: MockBundle.java
@Override
public List<Requirement> getResourceRequirements(String p1) {
    throw new UnsupportedOperationException();
}
 
源代码30 项目: concierge   文件: Resources.java
static Wire createWire(final Capability cap, final Requirement req) {
	return cap instanceof BundleCapability
			&& req instanceof BundleRequirement ? new ConciergeBundleWire(
			(BundleCapability) cap, (BundleRequirement) req)
			: new ConciergeWire(cap, req);
}