org.jboss.osgi.resolver.spi
Class AbstractResolveContext

java.lang.Object
  extended by org.osgi.service.resolver.ResolveContext
      extended by org.jboss.osgi.resolver.XResolveContext
          extended by org.jboss.osgi.resolver.spi.AbstractResolveContext

public class AbstractResolveContext
extends XResolveContext

The abstract implementation of a XResolveContext.

Since:
02-Apr-2012
Author:
thomas.diesler@jboss.com

Constructor Summary
AbstractResolveContext(XEnvironment environment)
           
 
Method Summary
 List<Capability> findProviders(Requirement requirement)
          Find Capabilities that match the given Requirement.
protected  Comparator<Capability> getComparator()
           
 XEnvironment getEnvironment()
           
 Map<Resource,Wiring> getWirings()
          Returns the wirings for existing resolved resources.
 int insertHostedCapability(List<Capability> capabilities, HostedCapability hostedCapability)
          Add a HostedCapability to the list of capabilities returned from ResolveContext.findProviders(Requirement).
 boolean isEffective(Requirement requirement)
          Test if a given requirement should be wired in the resolve operation.
 
Methods inherited from class org.osgi.service.resolver.ResolveContext
getMandatoryResources, getOptionalResources
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AbstractResolveContext

public AbstractResolveContext(XEnvironment environment)
Method Detail

getComparator

protected Comparator<Capability> getComparator()

getEnvironment

public XEnvironment getEnvironment()
Specified by:
getEnvironment in class XResolveContext

findProviders

public List<Capability> findProviders(Requirement requirement)
Description copied from class: ResolveContext
Find Capabilities that match the given Requirement.

The returned list contains Capability objects where the Resource must be the declared Resource of the Capability. The Resolver can then add additional HostedCapability objects with the ResolveContext.insertHostedCapability(List, HostedCapability) method when it, for example, attaches fragments. Those HostedCapability objects will then use the host's Resource which likely differs from the declared Resource of the corresponding Capability.

The returned list is in priority order such that the Capabilities with a lower index have a preference over those with a higher index. The resolver must use the ResolveContext.insertHostedCapability(List, HostedCapability) method to add additional Capabilities to maintain priority order. In general, this is necessary when the Resolver uses Capabilities declared in a Resource but that must originate from an attached host.

Each returned Capability must match the given Requirement. This implies that the filter in the Requirement must match as well as any namespace specific directives. For example, the mandatory attributes for the osgi.wiring.package namespace.

Specified by:
findProviders in class ResolveContext
Parameters:
requirement - The requirement that a resolver is attempting to satisfy. Must not be null.
Returns:
A list of Capability objects that match the specified requirement.

insertHostedCapability

public int insertHostedCapability(List<Capability> capabilities,
                                  HostedCapability hostedCapability)
Description copied from class: ResolveContext
Add a HostedCapability to the list of capabilities returned from ResolveContext.findProviders(Requirement).

This method is used by the Resolver to add Capabilities that are hosted by another Resource to the list of Capabilities returned from ResolveContext.findProviders(Requirement). This function is necessary to allow fragments to attach to hosts, thereby changing the origin of a Capability. This method must insert the specified HostedCapability in a place that makes the list maintain the preference order. It must return the index in the list of the inserted HostedCapability.

Specified by:
insertHostedCapability in class ResolveContext
Parameters:
capabilities - The list returned from ResolveContext.findProviders(Requirement). Must not be null.
hostedCapability - The HostedCapability to insert in the specified list. Must not be null.
Returns:
The index in the list of the inserted HostedCapability.

isEffective

public boolean isEffective(Requirement requirement)
Description copied from class: ResolveContext
Test if a given requirement should be wired in the resolve operation. If this method returns false, then the resolver should ignore this requirement during the resolve operation.

The primary use case for this is to test the effective directive on the requirement, though implementations are free to use any effective test.

Specified by:
isEffective in class ResolveContext
Parameters:
requirement - The Requirement to test. Must not be null.
Returns:
true if the requirement should be considered as part of the resolve operation.

getWirings

public Map<Resource,Wiring> getWirings()
Description copied from class: ResolveContext
Returns the wirings for existing resolved resources.

For example, if this resolve context is for an OSGi framework, then the result would contain all the currently resolved bundles with each bundle's current wiring.

Multiple calls to this method for this resolve context must return the same result.

Specified by:
getWirings in class ResolveContext
Returns:
The wirings for existing resolved resources. The returned map is unmodifiable.


Copyright © 2012. All Rights Reserved.