package org.eclipse.core.runtime; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
/** | |
* An adapter manager maintains a registry of adapter factories. | |
* Clients directly invoke methods on an adapter manager to register | |
* and unregister adapters. | |
* All adaptable objects (that is, objects that implement the | |
* <code>IAdaptable</code> interface) funnel | |
* <code>IAdaptable.getAdapter</code> invocations to their | |
* adapter manager's <code>IAdapterManger.getAdapter</code> | |
* method. The adapter manager then forwards this request | |
* unmodified to the <code>IAdapterFactory.getAdapter</code> | |
* method on one of the registered adapter factories. | |
* <p> | |
* The following code snippet shows how one might register | |
* an adapter of type <code>com.example.acme.Sticky</code> | |
* on resources in the workspace. | |
* <p> | |
* <pre> | |
* IAdapterFactory pr = new IAdapterFactory() { | |
* public Class[] getAdapterList() { | |
* return new Class[] { com.example.acme.Sticky.class }; | |
* } | |
* public Object getAdapter(Object adaptableObject, 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); | |
</pre> | |
* </p> | |
* <p> | |
* This interface is not intended to be implemented by clients. | |
* </p> | |
* | |
* @see IAdaptable | |
* @see IAdapterFactory | |
*/ | |
public interface IAdapterManager { | |
/** | |
* Returns an object which is an instance of the given class | |
* associated with the given object. Returns <code>null</code> if | |
* no such object can be found. | |
* | |
* @param adaptable the adaptable object being queried | |
* (usually an instance of <code>IAdaptable</code>) | |
* @param adapterType the type of adapter to look up | |
* @return a object castable to the given adapter type, | |
* or <code>null</code> if the given adaptable object does not | |
* have an adapter of the given type | |
*/ | |
public Object getAdapter(Object adaptable, Class adapterType); | |
/** | |
* Registers the given adapter factory as extending objects of | |
* the given type. | |
* <p> | |
* 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. | |
* </p> | |
* | |
* @param factory the adapter factory | |
* @param adaptable the type being extended | |
* @see #unregisterAdapters | |
*/ | |
public void registerAdapters(IAdapterFactory factory, Class adaptable); | |
/** | |
* Removes the given adapter factory completely from the list of | |
* registered factories. Equivalent to calling | |
* <code>unregisterAdapters(IAdapterFactory,Class)</code> | |
* on all classes against which it had been explicitly registered. | |
* Does nothing if the given factory is not currently registered. | |
* | |
* @param factory the adapter factory to remove | |
* @see #registerAdapters | |
*/ | |
public void unregisterAdapters(IAdapterFactory factory); | |
/** | |
* Removes the given adapter factory from the list of factories | |
* registered as extending the given class. | |
* Does nothing if the given factory and type combination is not | |
* registered. | |
* | |
* @param factory the adapter factory to remove | |
* @param adaptable one of the types against which the given | |
* factory is registered | |
* @see #registerAdapters | |
*/ | |
public void unregisterAdapters(IAdapterFactory factory, Class adaptable); | |
} |