Class BundleWiringImpl
- java.lang.Object
-
- org.apache.felix.framework.BundleWiringImpl
-
- All Implemented Interfaces:
BundleReference
,BundleWiring
,Wiring
public class BundleWiringImpl extends java.lang.Object implements BundleWiring
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
BundleWiringImpl.BundleClassLoader
static class
BundleWiringImpl.BundleClassLoaderJava5
-
Field Summary
Fields Modifier and Type Field Description static int
EAGER_ACTIVATION
static int
LAZY_ACTIVATION
static int
LISTRESOURCES_DEBUG
-
Fields inherited from interface org.osgi.framework.wiring.BundleWiring
FINDENTRIES_RECURSE, LISTRESOURCES_LOCAL, LISTRESOURCES_RECURSE
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDynamicWire(BundleWire wire)
void
dispose()
java.util.List<java.net.URL>
findEntries(java.lang.String path, java.lang.String filePattern, int options)
Returns entries in this bundle wiring'sbundle revision
and its attached fragment revisions.Bundle
getBundle()
Returns theBundle
object associated with thisBundleReference
.java.util.List<BundleCapability>
getCapabilities(java.lang.String namespace)
Returns the capabilities provided by this bundle wiring.java.lang.Class
getClassByDelegation(java.lang.String name)
java.lang.ClassLoader
getClassLoader()
Returns the class loader for this bundle wiring.BundleRevision
getImportedPackageSource(java.lang.String pkgName)
java.util.List<NativeLibrary>
getNativeLibraries()
java.util.List<Wire>
getProvidedResourceWires(java.lang.String namespace)
Returns theWire
s to the providedcapabilities
of this wiring.java.util.List<BundleWire>
getProvidedWires(java.lang.String namespace)
Returns theBundleWire
s to the providedcapabilities
of this bundle wiring.java.util.List<Wire>
getRequiredResourceWires(java.lang.String namespace)
Returns theWire
s to therequirements
in use by this wiring.java.util.List<BundleWire>
getRequiredWires(java.lang.String namespace)
Returns theBundleWire
s to therequirements
in use by this bundle wiring.java.util.List<BundleRequirement>
getRequirements(java.lang.String namespace)
Returns the requirements of this bundle wiring.BundleRevision
getResource()
Returns the resource associated with this wiring.java.net.URL
getResourceByDelegation(java.lang.String name)
java.util.List<Capability>
getResourceCapabilities(java.lang.String namespace)
Returns the capabilities provided by this wiring.java.util.List<Requirement>
getResourceRequirements(java.lang.String namespace)
Returns the requirements of this wiring.java.util.Enumeration
getResourcesByDelegation(java.lang.String name)
BundleRevision
getRevision()
Returns the bundle revision for the bundle in this bundle wiring.boolean
hasPackageSource(java.lang.String pkgName)
boolean
isCurrent()
Returnstrue
if this bundle wiring is the current bundle wiring.boolean
isInUse()
Returnstrue
if this bundle wiring is in use.java.util.Collection<java.lang.String>
listResources(java.lang.String path, java.lang.String filePattern, int options)
Returns the names of resources visible to this bundle wiring'sclass loader
.java.lang.String
toString()
-
-
-
Field Detail
-
LISTRESOURCES_DEBUG
public static final int LISTRESOURCES_DEBUG
- See Also:
- Constant Field Values
-
EAGER_ACTIVATION
public static final int EAGER_ACTIVATION
- See Also:
- Constant Field Values
-
LAZY_ACTIVATION
public static final int LAZY_ACTIVATION
- See Also:
- Constant Field Values
-
-
Method Detail
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
dispose
public void dispose()
-
hasPackageSource
public boolean hasPackageSource(java.lang.String pkgName)
-
getImportedPackageSource
public BundleRevision getImportedPackageSource(java.lang.String pkgName)
-
isCurrent
public boolean isCurrent()
Description copied from interface:BundleWiring
Returnstrue
if this bundle wiring is the current bundle wiring. The bundle wiring for a bundle is the current bundle wiring if it is the most recent bundle wiring for the current bundle revision. All bundles with non-current, in use bundle wirings are consideredremoval pending
.- Specified by:
isCurrent
in interfaceBundleWiring
- Returns:
true
if this bundle wiring is the current bundle wiring;false
otherwise.
-
isInUse
public boolean isInUse()
Description copied from interface:BundleWiring
Returnstrue
if this bundle wiring is in use. A bundle wiring is in use if it is thecurrent
wiring or if some other in use bundle wiring is dependent upon it. Once a bundle wiring is no longer in use, it is considered stale and is discarded by the framework.- Specified by:
isInUse
in interfaceBundleWiring
- Returns:
true
if this bundle wiring is in use;false
otherwise.
-
getResourceCapabilities
public java.util.List<Capability> getResourceCapabilities(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns the capabilities provided by this wiring.Only capabilities considered by the resolver are returned. For example, capabilities with
effective
directive not equal toresolve
are not returned.A capability may not be required by any wiring and thus there may be no
wires
for the capability.A wiring for a non-fragment resource provides a subset of the declared capabilities from the resource and all attached fragment resources†. Not all declared capabilities may be provided since some may be discarded. For example, if a package is declared to be both exported and imported, only one is selected and the other is discarded.
A wiring for a fragment resource with a symbolic name must provide exactly one
osgi.identity
capability.† The
osgi.identity
capability provided by attached fragment resource must not be included in the capabilities of the host wiring.This method returns the same value as
BundleWiring.getCapabilities(String)
.- Specified by:
getResourceCapabilities
in interfaceBundleWiring
- Specified by:
getResourceCapabilities
in interfaceWiring
- Parameters:
namespace
- The namespace of the capabilities to return ornull
to return the capabilities from all namespaces.- Returns:
- A list containing a snapshot of the
Capability
s, or an empty list if this wiring provides no capabilities in the specified namespace. For a given namespace, the list contains the capabilities in the order the capabilities were specified in the manifests of theresource
and the attached fragment resources† of this wiring. There is no ordering defined between capabilities in different namespaces.
-
getCapabilities
public java.util.List<BundleCapability> getCapabilities(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns the capabilities provided by this bundle wiring.Only capabilities considered by the resolver are returned. For example, capabilities with
effective
directive not equal toresolve
are not returned.A capability may not be required by any bundle wiring and thus there may be no
wires
for the capability.A bundle wiring for a non-fragment revision provides a subset of the declared capabilities from the bundle revision and all attached fragment revisions†. Not all declared capabilities may be provided since some may be discarded. For example, if a package is declared to be both exported and imported, only one is selected and the other is discarded.
A bundle wiring for a fragment revision with a symbolic name must provide exactly one
identity
capability.† The
identity
capability provided by attached fragment revisions must not be included in the capabilities of the host bundle wiring.- Specified by:
getCapabilities
in interfaceBundleWiring
- Parameters:
namespace
- The namespace of the capabilities to return ornull
to return the capabilities from all namespaces.- Returns:
- A list containing a snapshot of the
BundleCapability
s, or an empty list if this bundle wiring provides no capabilities in the specified namespace. If this bundle wiring is notin use
,null
will be returned. For a given namespace, the list contains the capabilities in the order the capabilities were specified in the manifests of thebundle revision
and the attached fragments† of this bundle wiring. There is no ordering defined between capabilities in different namespaces.
-
getResourceRequirements
public java.util.List<Requirement> getResourceRequirements(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns the requirements of this wiring.Only requirements considered by the resolver are returned. For example, requirements with
effective
directive not equal toresolve
are not returned.A wiring for a non-fragment resource has a subset of the declared requirements from the resource and all attached fragment resources. Not all declared requirements may be present since some may be discarded. For example, if a package is declared to be optionally imported and is not actually imported, the requirement must be discarded.
This method returns the same value as
BundleWiring.getRequirements(String)
.- Specified by:
getResourceRequirements
in interfaceBundleWiring
- Specified by:
getResourceRequirements
in interfaceWiring
- Parameters:
namespace
- The namespace of the requirements to return ornull
to return the requirements from all namespaces.- Returns:
- A list containing a snapshot of the
Requirement
s, or an empty list if this wiring uses no requirements in the specified namespace. For a given namespace, the list contains the requirements in the order the requirements were specified in the manifests of theresource
and the attached fragment resources of this wiring. There is no ordering defined between requirements in different namespaces.
-
getRequirements
public java.util.List<BundleRequirement> getRequirements(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns the requirements of this bundle wiring.Only requirements considered by the resolver are returned. For example, requirements with
effective
directive not equal toresolve
are not returned.A bundle wiring for a non-fragment revision has a subset of the declared requirements from the bundle revision and all attached fragment revisions. Not all declared requirements may be present since some may be discarded. For example, if a package is declared to be optionally imported and is not actually imported, the requirement must be discarded.
- Specified by:
getRequirements
in interfaceBundleWiring
- Parameters:
namespace
- The namespace of the requirements to return ornull
to return the requirements from all namespaces.- Returns:
- A list containing a snapshot of the
BundleRequirement
s, or an empty list if this bundle wiring uses no requirements in the specified namespace. If this bundle wiring is notin use
,null
will be returned. For a given namespace, the list contains the requirements in the order the requirements were specified in the manifests of thebundle revision
and the attached fragments of this bundle wiring. There is no ordering defined between requirements in different namespaces.
-
getNativeLibraries
public java.util.List<NativeLibrary> getNativeLibraries()
-
getProvidedResourceWires
public java.util.List<Wire> getProvidedResourceWires(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns theWire
s to the providedcapabilities
of this wiring.This method returns the same value as
BundleWiring.getProvidedWires(String)
.- Specified by:
getProvidedResourceWires
in interfaceBundleWiring
- Specified by:
getProvidedResourceWires
in interfaceWiring
- Parameters:
namespace
- The namespace of the capabilities for which to return wires ornull
to return the wires for the capabilities in all namespaces.- Returns:
- A list containing a snapshot of the
Wire
s for thecapabilities
of this wiring, or an empty list if this wiring has no capabilities in the specified namespace. For a given namespace, the list contains the wires in the order the capabilities were specified in the manifests of theresource
and the attached fragment resources of this wiring. There is no ordering defined between capabilities in different namespaces.
-
getProvidedWires
public java.util.List<BundleWire> getProvidedWires(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns theBundleWire
s to the providedcapabilities
of this bundle wiring.- Specified by:
getProvidedWires
in interfaceBundleWiring
- Parameters:
namespace
- The namespace of the capabilities for which to return wires ornull
to return the wires for the capabilities in all namespaces.- Returns:
- A list containing a snapshot of the
BundleWire
s for thecapabilities
of this bundle wiring, or an empty list if this bundle wiring has no capabilities in the specified namespace. If this bundle wiring is notin use
,null
will be returned. For a given namespace, the list contains the wires in the order the capabilities were specified in the manifests of thebundle revision
and the attached fragments of this bundle wiring. There is no ordering defined between capabilities in different namespaces.
-
getRequiredResourceWires
public java.util.List<Wire> getRequiredResourceWires(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns theWire
s to therequirements
in use by this wiring.This method returns the same value as
BundleWiring.getRequiredWires(String)
.- Specified by:
getRequiredResourceWires
in interfaceBundleWiring
- Specified by:
getRequiredResourceWires
in interfaceWiring
- Parameters:
namespace
- The namespace of the requirements for which to return wires ornull
to return the wires for the requirements in all namespaces.- Returns:
- A list containing a snapshot of the
Wire
s for therequirements
of this wiring, or an empty list if this wiring has no requirements in the specified namespace. For a given namespace, the list contains the wires in the order the requirements were specified in the manifests of theresource
and the attached fragment resources of this wiring. There is no ordering defined between requirements in different namespaces.
-
getRequiredWires
public java.util.List<BundleWire> getRequiredWires(java.lang.String namespace)
Description copied from interface:BundleWiring
Returns theBundleWire
s to therequirements
in use by this bundle wiring.This method may return different results if this bundle wiring establishes additional wires to more requirements. For example, dynamically importing a package will establish a new wire to the dynamically imported package.
- Specified by:
getRequiredWires
in interfaceBundleWiring
- Parameters:
namespace
- The namespace of the requirements for which to return wires ornull
to return the wires for the requirements in all namespaces.- Returns:
- A list containing a snapshot of the
BundleWire
s for therequirements
of this bundle wiring, or an empty list if this bundle wiring has no requirements in the specified namespace. If this bundle wiring is notin use
,null
will be returned. For a given namespace, the list contains the wires in the order the requirements were specified in the manifests of thebundle revision
and the attached fragments of this bundle wiring followed by dynamically established wires, if any, in the order they were established. There is no ordering defined between requirements in different namespaces.
-
addDynamicWire
public void addDynamicWire(BundleWire wire)
-
getResource
public BundleRevision getResource()
Description copied from interface:BundleWiring
Returns the resource associated with this wiring.This method returns the same value as
BundleWiring.getRevision()
.- Specified by:
getResource
in interfaceBundleWiring
- Specified by:
getResource
in interfaceWiring
- Returns:
- The resource associated with this wiring.
-
getRevision
public BundleRevision getRevision()
Description copied from interface:BundleWiring
Returns the bundle revision for the bundle in this bundle wiring. Since a bundle update can change the entries in a bundle, different bundle wirings for the same bundle can have different bundle revisions.The bundle object
referenced
by the returnedBundleRevision
may return different information than the returnedBundleRevision
since the returnedBundleRevision
may refer to an older revision of the bundle.- Specified by:
getRevision
in interfaceBundleWiring
- Returns:
- The bundle revision for this bundle wiring.
- See Also:
BundleRevision.getWiring()
-
getClassLoader
public java.lang.ClassLoader getClassLoader()
Description copied from interface:BundleWiring
Returns the class loader for this bundle wiring. Since a bundle refresh creates a new bundle wiring for a bundle, different bundle wirings for the same bundle will have different class loaders.- Specified by:
getClassLoader
in interfaceBundleWiring
- Returns:
- The class loader for this bundle wiring. If this bundle wiring is
not
in use
or this bundle wiring is for a fragment revision,null
will be returned.
-
findEntries
public java.util.List<java.net.URL> findEntries(java.lang.String path, java.lang.String filePattern, int options)
Description copied from interface:BundleWiring
Returns entries in this bundle wiring'sbundle revision
and its attached fragment revisions. This bundle wiring's class loader is not used to search for entries. Only the contents of this bundle wiring's bundle revision and its attached fragment revisions are searched for the specified entries.This method takes into account that the "contents" of this bundle wiring can have attached fragments. This "bundle space" is not a namespace with unique members; the same entry name can be present multiple times. This method therefore returns a list of URL objects. These URLs can come from different JARs but have the same path name. This method can either return only entries in the specified path or recurse into subdirectories returning entries in the directory tree beginning at the specified path.
URLs for directory entries must have their path end with "/".
Note: Jar and zip files are not required to include directory entries. URLs to directory entries will not be returned if the bundle contents do not contain directory entries.
- Specified by:
findEntries
in interfaceBundleWiring
- Parameters:
path
- The path name in which to look. The path is always relative to the root of this bundle wiring and may begin with "/". A path value of "/" indicates the root of this bundle wiring.filePattern
- The file name pattern for selecting entries in the specified path. The pattern is only matched against the last element of the entry path. If the entry is a directory then the trailing "/" is not used for pattern matching. Substring matching is supported, as specified in the Filter specification, using the wildcard character ("*"). Ifnull
is specified, this is equivalent to "*" and matches all files.options
- The options for listing resource names. SeeBundleWiring.FINDENTRIES_RECURSE
. The method must ignore unrecognized options.- Returns:
- An unmodifiable list of URL objects for each matching entry, or
an empty list if no matching entry could be found, if this bundle
wiring is for a fragment revision or if the caller does not have
the appropriate
AdminPermission[bundle,RESOURCE]
and the Java Runtime Environment supports permissions. The list is ordered such that entries from thebundle revision
are returned first followed by the entries from attached fragment revisions in attachment order. If this bundle wiring is notin use
,null
must be returned. - See Also:
Bundle.findEntries(String, String, boolean)
-
listResources
public java.util.Collection<java.lang.String> listResources(java.lang.String path, java.lang.String filePattern, int options)
Description copied from interface:BundleWiring
Returns the names of resources visible to this bundle wiring'sclass loader
. The returned names can be used to access the resources via this bundle wiring's class loader.- Only the resource names for resources in bundle wirings will be returned. The names of resources visible to a bundle wiring's parent class loader, such as the bootstrap class loader, must not be included in the result.
- Only established wires will be examined for resources. This method must not cause new wires for dynamic imports to be established.
- Specified by:
listResources
in interfaceBundleWiring
- Parameters:
path
- The path name in which to look. The path is always relative to the root of this bundle wiring's class loader and may begin with "/". A path value of "/" indicates the root of this bundle wiring's class loader.filePattern
- The file name pattern for selecting resource names in the specified path. The pattern is only matched against the last element of the resource path. If the resource is a directory then the trailing "/" is not used for pattern matching. Substring matching is supported, as specified in the Filter specification, using the wildcard character ("*"). Ifnull
is specified, this is equivalent to "*" and matches all files.options
- The options for listing resource names. SeeBundleWiring.LISTRESOURCES_LOCAL
andBundleWiring.LISTRESOURCES_RECURSE
. This method must ignore unrecognized options.- Returns:
- An unmodifiable collection of resource names for each matching
resource, or an empty collection if no matching resource could be
found, if this bundle wiring is for a fragment revision or if the
caller does not have the appropriate
AdminPermission[bundle,RESOURCE]
and the Java Runtime Environment supports permissions. The collection is unordered and must contain no duplicate resource names. If this bundle wiring is notin use
,null
must be returned.
-
getBundle
public Bundle getBundle()
Description copied from interface:BundleReference
Returns theBundle
object associated with thisBundleReference
.- Specified by:
getBundle
in interfaceBundleReference
- Returns:
- The
Bundle
object associated with thisBundleReference
.
-
getResourcesByDelegation
public java.util.Enumeration getResourcesByDelegation(java.lang.String name)
-
getClassByDelegation
public java.lang.Class getClassByDelegation(java.lang.String name) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
getResourceByDelegation
public java.net.URL getResourceByDelegation(java.lang.String name)
-
-