@ConsumerType public abstract class ResolveContext extends Object
resolve
operation.
Resolve Contexts:
capabilities
that the Resolver can use to
satisfy requirements
via the
findProviders(Requirement)
methodgetWirings()
method. A wiring
consists of a map of existing resources
to wiring
.isEffective(Requirement)
.A resolver may call the methods on the resolve context any number of times during a resolve operation using any thread. Implementors should ensure that this class is properly thread safe.
Except for insertHostedCapability(List, HostedCapability)
, the
resolve context methods must be idempotent. This means that resources
must have constant capabilities and requirements and the resolve context must
return a consistent set of capabilities, wires and effective requirements.
Constructor and Description |
---|
ResolveContext() |
Modifier and Type | Method and Description |
---|---|
abstract List<Capability> |
findProviders(Requirement requirement)
Find Capabilities that match the given Requirement.
|
Collection<Resource> |
getMandatoryResources()
Return the resources that must be resolved for this resolve context.
|
Collection<Resource> |
getOptionalResources()
Return the resources that the resolver should attempt to resolve for this
resolve context.
|
abstract Map<Resource,Wiring> |
getWirings()
Returns the wirings for existing resolved resources.
|
abstract int |
insertHostedCapability(List<Capability> capabilities,
HostedCapability hostedCapability)
Add a
HostedCapability to the list of capabilities returned from
findProviders(Requirement) . |
abstract boolean |
isEffective(Requirement requirement)
Test if a given requirement should be wired in the resolve operation.
|
public Collection<Resource> getMandatoryResources()
The default implementation returns an empty collection.
public Collection<Resource> getOptionalResources()
The default implementation returns an empty collection.
public abstract List<Capability> findProviders(Requirement 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
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
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 means
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.
requirement
- The requirement that a resolver is attempting to
satisfy. Must not be null
.Capability
objects that match the specified
requirement.public abstract int insertHostedCapability(List<Capability> capabilities, HostedCapability hostedCapability)
HostedCapability
to the list of capabilities returned from
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
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
.
capabilities
- The list returned from
findProviders(Requirement)
. Must not be null
.hostedCapability
- The HostedCapability to insert in the specified
list. Must not be null
.public abstract boolean isEffective(Requirement requirement)
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.
requirement
- The Requirement to test. Must not be null
.true
if the requirement should be considered as part of
the resolve operation.public abstract Map<Resource,Wiring> getWirings()
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.
Copyright © OSGi Alliance (2000, 2015). All Rights Reserved. Licensed under the OSGi Specification License, Version 2.0