Interface IAdaptable
- All Known Implementing Classes:
AdapterStore
IAdaptable
allows to register and retrieve adapters under a given
AdapterKey
, which combines a TypeToken
-based type key and a
String
-based role.
The combination of a type key with a role (by means of an AdapterKey
)
allows to register multiple adapters with the same type under different
roles. If there is only one adapter for specific type, it can easily be
registered and retrieved without specifying a role, or by using the 'default'
role (AdapterKey.DEFAULT_ROLE
).
Using a TypeToken
-based type key instead of a simple Class
-based type key, an IAdaptable
allows to register and retrieve
adapters also via parameterized types (e.g. by using
new TypeToken<Provider<IGeometry>>(){}
as a type
key). For convenience, non-parameterized types can also be registered and
retrieved via a raw Class
type key (a TypeToken
will
internally be computed for it using TypeToken.of(Class)
).
If a to be registered adapter implements the IAdaptable.Bound
interface, it is
expected that the IAdaptable
, on which the adapter is registered,
binds itself to the adapter via IAdaptable.Bound.setAdaptable(IAdaptable)
during
registration, and accordingly unbinds itself from the adapter
(setAdaptable(null)) during un-registration.
Any client implementing this interface may internally use an
AdaptableSupport
as a delegate to realize the required functionality.
-
Property Summary
TypePropertyDescriptionReturns an unmodifiable read-only map property that contains the registered adapters by their keys. -
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic interface
IAdaptable.Bound<A extends IAdaptable>
To be implemented by an adapter to indicate that it intends to be bounded to the respectiveIAdaptable
it is registered at. -
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionReturns an unmodifiable read-only map property that contains the registered adapters by their keys.<T> T
getAdapter
(TypeToken<T> key) Returns an adapter for the givenTypeToken
key if one can unambiguously be retrieved.<T> T
getAdapter
(Class<T> key) Returns an adapter for the givenClass
key if one can unambiguously be retrieved.<T> T
getAdapter
(AdapterKey<T> key) Returns an adapter for the givenAdapterKey
if one can unambiguously be retrieved, i.e. if there is only a single adapter that 'matches' the givenAdapterKey
.<T> AdapterKey<T>
getAdapterKey
(T adapter) Returns the key under which the given adapter is bound.Returns an unmodifiableObservableMap
that contains the registered adapters by their keys.<T> Map<AdapterKey<? extends T>,
T> getAdapters
(TypeToken<? super T> key) Returns all adapters 'matching' the givenTypeToken
key, i.e. all adapters whoseAdapterKey
'sTypeToken
keyAdapterKey.getKey()
) refers to the same or a sub-type or of the givenTypeToken
key.<T> Map<AdapterKey<? extends T>,
T> getAdapters
(Class<? super T> key) Returns all adapters 'matching' the givenClass
key, i.e. all adapters whoseAdapterKey
'sTypeToken
keyAdapterKey.getKey()
) refers to the same or a sub-type of the givenClass
key.<T> void
setAdapter
(TypeToken<T> adapterType, T adapter) Registers the given adapter under the 'default' role (seeAdapterKey.DEFAULT_ROLE
.<T> void
setAdapter
(TypeToken<T> adapterType, T adapter, String role) Registers the given adapter under the given role.<T> void
setAdapter
(T adapter) Registers the given adapter under anAdapterKey
, which takes the given raw type key as well as the 'default' role (seeAdapterKey.DEFAULT_ROLE
.<T> void
setAdapter
(T adapter, String role) Registers the given adapter under the given role .<T> void
unsetAdapter
(T adapter) Unregisters the given adapter under all keys it was registered for.
-
Property Details
-
adapters
ReadOnlyMapProperty<AdapterKey<?>,Object> adaptersPropertyReturns an unmodifiable read-only map property that contains the registered adapters by their keys.- See Also:
-
-
Field Details
-
ADAPTERS_PROPERTY
The name of theadapters property
.- See Also:
-
-
Method Details
-
adaptersProperty
ReadOnlyMapProperty<AdapterKey<?>,Object> adaptersProperty()Returns an unmodifiable read-only map property that contains the registered adapters by their keys.- See Also:
-
getAdapter
Returns an adapter for the givenAdapterKey
if one can unambiguously be retrieved, i.e. if there is only a single adapter that 'matches' the givenAdapterKey
.An adapter 'matching' the
AdapterKey
is an adapter, which is registered with anAdapterKey
, whoseTypeToken
key (AdapterKey.getKey()
) refers to the same type or a sub-type of the givenAdapterKey
'sTypeToken
key and whose role (AdapterKey.getRole()
)) equals the role of the givenAdapterKey
's role.If there is more than one adapter that 'matches' the given
AdapterKey
, or there is no one 'matching' it,null
will be returned.- Type Parameters:
T
- The adapter type.- Parameters:
key
- TheAdapterKey
used to retrieve a registered adapter.- Returns:
- The unambiguously retrievable adapter for the given
AdapterKey
ornull
if none could be retrieved.
-
getAdapter
Returns an adapter for the givenClass
key if one can unambiguously be retrieved. That is, if there is only a single adapter that 'matches' the givenClass
key, this adapter is returned, ignoring the role under which it is registered (seeAdapterKey.getRole()
).An adapter 'matching' the
Class
key is an adapter, which is registered with anAdapterKey
, whose key (AdapterKey.getKey()
) refers to the same type or a sub-type of the givenClass
key.If there is more than one adapter that 'matches' the given
Class
key, it will return the single adapter that is registered for the default role (AdapterKey.DEFAULT_ROLE
), if there is a single adapter for which this holds. Otherwise it will returnnull
. -
getAdapter
Returns an adapter for the givenTypeToken
key if one can unambiguously be retrieved. That is, if there is only a single adapter that 'matches' the givenTypeToken
key, this adapter is returned, ignoring the role under which it is registered (seeAdapterKey.getRole()
).An adapter 'matching' the
TypeToken
key is an adapter, which is registered with anAdapterKey
, whose key (AdapterKey.getKey()
) refers to the same type or a sub-type of the given type key.If there is more than one adapter that 'matches' the given
TypeToken
key, it will return the single adapter that is registered for the default role (AdapterKey.DEFAULT_ROLE
), if there is a single adapter for which this holds. Otherwise it will returnnull
. -
getAdapterKey
Returns the key under which the given adapter is bound.- Type Parameters:
T
- The adapter type.- Parameters:
adapter
- The adapter whose key to retrieve.- Returns:
- The
AdapterKey
under which the respective adapter is bound, ornull
if the adapter is not registered.
-
getAdapters
ObservableMap<AdapterKey<?>,Object> getAdapters()Returns an unmodifiableObservableMap
that contains the registered adapters by their keys.- Returns:
- An unmodifiable
ObservableMap
.
-
getAdapters
Returns all adapters 'matching' the givenClass
key, i.e. all adapters whoseAdapterKey
'sTypeToken
keyAdapterKey.getKey()
) refers to the same or a sub-type of the givenClass
key.- Type Parameters:
T
- The adapter type.- Parameters:
key
- TheClass
key to retrieve adapters for.- Returns:
- A
Map
containing all those adapters registered at thisIAdaptable
, whoseAdapterKey
'sTypeToken
key (AdapterKey.getKey()
) refers to the same or a sub-type of the givenClass
key, qualified by their respectiveAdapterKey
s. - See Also:
-
getAdapters
Returns all adapters 'matching' the givenTypeToken
key, i.e. all adapters whoseAdapterKey
'sTypeToken
keyAdapterKey.getKey()
) refers to the same or a sub-type or of the givenTypeToken
key.- Type Parameters:
T
- The adapter type.- Parameters:
key
- TheTypeToken
key to retrieve adapters for.- Returns:
- A
Map
containing all those adapters registered at thisIAdaptable
, whoseAdapterKey
'sTypeToken
key (AdapterKey.getKey()
) refers to the same or a sub-type of the givenTypeToken
key, qualified by their respectiveAdapterKey
s. - See Also:
-
setAdapter
<T> void setAdapter(T adapter) Registers the given adapter under anAdapterKey
, which takes the given raw type key as well as the 'default' role (seeAdapterKey.DEFAULT_ROLE
. The adapter may afterwards be retrieved by any type key 'in between' the given key type and actual raw type. If the actual type of the parameter is not a raw type but a parameterized type, it is not legitimate to use this method.If the given adapter implements
IAdaptable.Bound
, the adapter will obtain a back-reference to thisIAdaptable
via itsIAdaptable.Bound.setAdaptable(IAdaptable)
method.- Type Parameters:
T
- The adapter type.- Parameters:
adapter
- The adapter to register under the givenClass
key.- See Also:
-
setAdapter
Registers the given adapter under the given role .- Type Parameters:
T
- The adapter type.- Parameters:
adapter
- The adapter to register.role
- The role to register this adapter with.- See Also:
-
setAdapter
Registers the given adapter under the 'default' role (seeAdapterKey.DEFAULT_ROLE
.If the given adapter implements
IAdaptable.Bound
, the adapter will obtain a back-reference to thisIAdaptable
via itsIAdaptable.Bound.setAdaptable(IAdaptable)
method. -
setAdapter
Registers the given adapter under the given role.If the given adapter implements
IAdaptable.Bound
, the adapter will obtain a back-reference to thisIAdaptable
via itsIAdaptable.Bound.setAdaptable(IAdaptable)
method.- Type Parameters:
T
- The adapter type.- Parameters:
adapterType
- ATypeToken
representing the actual type of the given adapter.adapter
- The adapter to register.role
- The role under which to register the adapter.
-
unsetAdapter
<T> void unsetAdapter(T adapter) Unregisters the given adapter under all keys it was registered for.If the given adapter implements
IAdaptable.Bound
, the back-reference to thisIAdaptable
will be removed via itsIAdaptable.Bound.setAdaptable(IAdaptable)
method, passing overnull
.- Type Parameters:
T
- The adapter type.- Parameters:
adapter
- The adapter which should be removed.
-