public interface IAdapterManager
IAdaptable
interface) funnel IAdaptable.getAdapter
invocations to their
adapter manager's IAdapterManger.getAdapter
method. The
adapter manager then forwards this request unmodified to the IAdapterFactory.getAdapter
method on one of the registered adapter factories.
Adapter factories can be registered programmatically using the registerAdapters
method. Alternatively, they can be registered declaratively using the
org.eclipse.core.runtime.adapters
extension point. Factories registered
with this extension point will not be able to provide adapters until their
corresponding plugin has been activated.
The following code snippet shows how one might register an adapter of type
com.example.acme.Sticky
on resources in the workspace.
IAdapterFactory pr = new IAdapterFactory() { @Override public Class[] getAdapterList() { return new Class[] { com.example.acme.Sticky.class }; } @Override public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { IResource res = (IResource) adaptableObject; QualifiedName key = new QualifiedName("com.example.acme", "sticky-note"); try { com.example.acme.Sticky v = (com.example.acme.Sticky) res.getSessionProperty(key); if (v == null) { v = new com.example.acme.Sticky(); res.setSessionProperty(key, v); } } catch (CoreException e) { // unable to access session property - ignore } return v; } } Platform.getAdapterManager().registerAdapters(pr, IResource.class);
This interface can be used without OSGi running.
This interface is not intended to be implemented by clients.
IAdaptable
,
IAdapterFactory
Modifier and Type | Field and Description |
---|---|
static int |
LOADED
This value can be returned to indicate that an adapter factory is loaded.
|
static int |
NONE
This value can be returned to indicate that no applicable adapter factory
was found.
|
static int |
NOT_LOADED
This value can be returned to indicate that an adapter factory was found,
but has not been loaded.
|
Modifier and Type | Method and Description |
---|---|
String[] |
computeAdapterTypes(Class<?> adaptableClass)
Returns the types that can be obtained by converting
adaptableClass
via this manager. |
<T> Class<? super T>[] |
computeClassOrder(Class<T> clazz)
Returns the class search order for a given class.
|
<T> T |
getAdapter(Object adaptable,
Class<T> adapterType)
Returns an object which is an instance of the given class associated
with the given object.
|
Object |
getAdapter(Object adaptable,
String adapterTypeName)
Returns an object which is an instance of the given class name associated
with the given object.
|
boolean |
hasAdapter(Object adaptable,
String adapterTypeName)
Returns whether there is an adapter factory registered that may be able
to convert
adaptable to an object of type adapterTypeName . |
Object |
loadAdapter(Object adaptable,
String adapterTypeName)
Returns an object that is an instance of the given class name associated
with the given object.
|
int |
queryAdapter(Object adaptable,
String adapterTypeName)
Returns a status of an adapter factory registered that may be able
to convert
adaptable to an object of type adapterTypeName . |
void |
registerAdapters(IAdapterFactory factory,
Class<?> adaptable)
Registers the given adapter factory as extending objects of the given
type.
|
void |
unregisterAdapters(IAdapterFactory factory)
Removes the given adapter factory completely from the list of registered
factories.
|
void |
unregisterAdapters(IAdapterFactory factory,
Class<?> adaptable)
Removes the given adapter factory from the list of factories registered
as extending the given class.
|
static final int NONE
static final int NOT_LOADED
static final int LOADED
String[] computeAdapterTypes(Class<?> adaptableClass)
adaptableClass
via this manager. Converting means that subsequent calls to getAdapter()
or loadAdapter()
could result in an adapted object.
Note that the returned types do not guarantee that
a subsequent call to getAdapter
with the same type as an argument
will return a non-null result. If the factory's plug-in has not yet been
loaded, or if the factory itself returns null
, then
getAdapter
will still return null
.
adaptableClass
- the adaptable class being queriedadaptableClass
via this manager. An empty array
is returned if there are none.<T> Class<? super T>[] computeClassOrder(Class<T> clazz)
class X extends Y implements A, B
Object
getInterfaces
(in the example, X's
superinterfaces then Y's superinterfaces) clazz
- the class for which to return the class order.<T> T getAdapter(Object adaptable, Class<T> adapterType)
null
if no such object can
be found.
Note that this method will never cause plug-ins to be loaded. If the
only suitable factory is not yet loaded, this method will return null
.
In most cases, it is preferable for client code to use
Adapters.adapt(Object, Class, boolean)
rather than calling this
method directly since doing so will also detect interfaces supplied by the
IAdaptable
interface
adaptable
- the adaptable object being queried (usually an instance
of IAdaptable
)adapterType
- the type of adapter to look upnull
if the given adaptable object does not have an available adapter of the
given typeObject getAdapter(Object adaptable, String adapterTypeName)
null
if no such object can
be found.
Note that this method will never cause plug-ins to be loaded. If the
only suitable factory is not yet loaded, this method will return null
.
If activation of the plug-in providing the factory is required, use the
loadAdapter
method instead.
In most cases, it is preferable for client code to use
Adapters.adapt(Object, Class, boolean)
rather than calling this
method directly since doing so will also detect interfaces supplied by the
IAdaptable
interface
adaptable
- the adaptable object being queried (usually an instance
of IAdaptable
)adapterTypeName
- the fully qualified name of the type of adapter to look upnull
if the given adaptable object does not have an available adapter of the
given typeboolean hasAdapter(Object adaptable, String adapterTypeName)
adaptable
to an object of type adapterTypeName
.
Note that a return value of true
does not guarantee that
a subsequent call to getAdapter
with the same arguments
will return a non-null result. If the factory's plug-in has not yet been
loaded, or if the factory itself returns null
, then
getAdapter
will still return null
.
adaptable
- the adaptable object being queried (usually an instance
of IAdaptable
)adapterTypeName
- the fully qualified class name of an adapter to
look uptrue
if there is an adapter factory that claims
it can convert adaptable
to an object of type adapterType
,
and false
otherwise.int queryAdapter(Object adaptable, String adapterTypeName)
adaptable
to an object of type adapterTypeName
.
One of the following values can be returned:
NONE
if no applicable adapter factory was found;NOT_LOADED
if an adapter factory was found, but has not been loaded;LOADED
if an adapter factory was found, and it is loaded.adaptable
- the adaptable object being queried (usually an instance
of IAdaptable
)adapterTypeName
- the fully qualified class name of an adapter to
look upObject loadAdapter(Object adaptable, String adapterTypeName)
null
if no such object can
be found.
Note that unlike the getAdapter
methods, this method
will cause the plug-in that contributes the adapter factory to be loaded
if necessary. As such, this method should be used judiciously, in order
to avoid unnecessary plug-in activations. Most clients should avoid
activation by using getAdapter
instead.
In most cases, it is preferable for client code to use
Adapters.adapt(Object, Class, boolean)
rather than calling this
method directly since doing so will also detect interfaces supplied by the
IAdaptable
interface.
adaptable
- the adaptable object being queried (usually an instance
of IAdaptable
)adapterTypeName
- the fully qualified name of the type of adapter to look upnull
if the given adaptable object does not have an available adapter of the
given typevoid registerAdapters(IAdapterFactory factory, Class<?> adaptable)
If the type being extended is a class, the given factory's adapters are available on instances of that class and any of its subclasses. If it is an interface, the adapters are available to all classes that directly or indirectly implement that interface.
factory
- the adapter factoryadaptable
- the type being extendedunregisterAdapters(IAdapterFactory)
,
unregisterAdapters(IAdapterFactory, Class)
void unregisterAdapters(IAdapterFactory factory)
unregisterAdapters(IAdapterFactory,Class)
on all classes against which it had been explicitly registered. Does
nothing if the given factory is not currently registered.factory
- the adapter factory to removeregisterAdapters(IAdapterFactory, Class)
void unregisterAdapters(IAdapterFactory factory, Class<?> adaptable)
factory
- the adapter factory to removeadaptable
- one of the types against which the given factory is
registeredregisterAdapters(IAdapterFactory, Class)
Copyright (c) 2000, 2016 Eclipse Contributors and others. All rights reserved.Guidelines for using Eclipse APIs.