public class ICUService extends ICUNotifier
A Service provides access to service objects that implement a particular service, e.g. transliterators. Users provide a String id (for example, a locale string) to the service, and get back an object for that id. Service objects can be any kind of object. The service object is cached and returned for later queries, so generally it should not be mutable, or the caller should clone the object before modifying it.
Services 'canonicalize' the query id and use the canonical id to query for the service. The service also defines a mechanism to 'fallback' the id multiple times. Clients can optionally request the actual id that was matched by a query when they use an id to retrieve a service object.
Service objects are instantiated by Factory objects registered with the service. The service queries each Factory in turn, from most recently registered to earliest registered, until one returns a service object. If none responds with a service object, a fallback id is generated, and the process repeats until a service object is returned or until the id has no further fallbacks.
Factories can be dynamically registered and unregistered with the service. When registered, a Factory is installed at the head of the factory list, and so gets 'first crack' at any keys or fallback keys. When unregistered, it is removed from the service and can no longer be located through it. Service objects generated by this factory and held by the client are unaffected.
ICUService uses Keys to query factories and perform fallback. The Key defines the canonical form of the id, and implements the fallback strategy. Custom Keys can be defined that parse complex IDs into components that Factories can more easily use. The Key can cache the results of this parsing to save repeated effort. ICUService provides convenience APIs that take Strings and generate default Keys for use in querying.
ICUService provides API to get the list of ids publicly supported by the service (although queries aren't restricted to this list). This list contains only 'simple' IDs, and not fully unique ids. Factories are associated with each simple ID and the responsible factory can also return a human-readable localized version of the simple ID, for use in user interfaces. ICUService can also provide a sorted collection of the all the localized visible ids.
ICUService implements ICUNotifier, so that clients can register to receive notification when factories are added or removed from the service. ICUService provides a default EventListener subinterface, ServiceListener, which can be registered with the service. When the service changes, the ServiceListener's serviceChanged method is called, with the service as the only argument.
The ICUService API is both rich and generic, and it is expected that most implementations will statically 'wrap' ICUService to present a more appropriate API-- for example, to declare the type of the objects returned from get, to limit the factories that can be registered with the service, or to define their own listener interface with a custom callback method. They might also customize ICUService by overriding it, for example, to customize the Key and fallback strategy. ICULocaleService is a customized service that uses Locale names as ids and uses Keys that implement the standard resource bundle fallback strategy.
| Modifier and Type | Class and Description |
|---|---|
static interface |
ICUService.Factory
Factories generate the service objects maintained by the
service.
|
static class |
ICUService.Key
Keys are used to communicate with factories to generate an
instance of the service.
|
static interface |
ICUService.ServiceListener
ServiceListener is the listener that ICUService provides by default.
|
static class |
ICUService.SimpleFactory
A default implementation of factory.
|
| Modifier and Type | Field and Description |
|---|---|
protected String |
name
Name used for debugging.
|
| Constructor and Description |
|---|
ICUService()
Constructor.
|
ICUService(String name)
Construct with a name (useful for debugging).
|
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
acceptsListener(EventListener l)
Return true if the listener is accepted; by default this
requires a ServiceListener.
|
protected void |
clearCaches()
Clear caches maintained by this service.
|
protected void |
clearServiceCache()
Clears only the service cache.
|
ICUService.Key |
createKey(String id)
Create a key from an id.
|
List<ICUService.Factory> |
factories()
Return a snapshot of the currently registered factories.
|
Object |
get(String descriptor)
Convenience override for get(String, String[]).
|
Object |
get(String descriptor,
String[] actualReturn)
Convenience override for get(Key, String[]).
|
String |
getDisplayName(String id)
Convenience override for getDisplayName(String, ULocale) that
uses the current default locale.
|
String |
getDisplayName(String id,
ULocale locale)
Given a visible id, return the display name in the requested locale.
|
SortedMap<String,String> |
getDisplayNames()
Convenience override of getDisplayNames(ULocale, Comparator, String) that
uses the current default Locale as the locale, null as
the comparator, and null for the matchID.
|
SortedMap<String,String> |
getDisplayNames(ULocale locale)
Convenience override of getDisplayNames(ULocale, Comparator, String) that
uses null for the comparator, and null for the matchID.
|
SortedMap<String,String> |
getDisplayNames(ULocale locale,
Comparator<Object> com)
Convenience override of getDisplayNames(ULocale, Comparator, String) that
uses null for the matchID, thus returning all display names.
|
SortedMap<String,String> |
getDisplayNames(ULocale locale,
Comparator<Object> com,
String matchID)
Return a snapshot of the mapping from display names to visible
IDs for this service.
|
SortedMap<String,String> |
getDisplayNames(ULocale locale,
String matchID)
Convenience override of getDisplayNames(ULocale, Comparator, String) that
uses null for the comparator.
|
Object |
getKey(ICUService.Key key)
Convenience override for get(Key, String[]).
|
Object |
getKey(ICUService.Key key,
String[] actualReturn)
Given a key, return a service object, and, if actualReturn
is not null, the descriptor with which it was found in the
first element of actualReturn.
|
Object |
getKey(ICUService.Key key,
String[] actualReturn,
ICUService.Factory factory) |
String |
getName()
Return the name of this service.
|
Set<String> |
getVisibleIDs()
Convenience override for getVisibleIDs(String) that passes null
as the fallback, thus returning all visible IDs.
|
Set<String> |
getVisibleIDs(String matchID)
Return a snapshot of the visible IDs for this service.
|
protected Object |
handleDefault(ICUService.Key key,
String[] actualIDReturn)
Default handler for this service if no factory in the list
handled the key.
|
boolean |
isDefault()
Return true if the service is in its default state.
|
protected void |
markDefault()
Set the default size to the current number of registered factories.
|
protected void |
notifyListener(EventListener l)
Notify the listener, which by default is a ServiceListener.
|
ICUService.Factory |
registerFactory(ICUService.Factory factory)
Register a Factory.
|
ICUService.Factory |
registerObject(Object obj,
String id)
A convenience override of registerObject(Object, String, boolean)
that defaults visible to true.
|
ICUService.Factory |
registerObject(Object obj,
String id,
boolean visible)
Register an object with the provided id.
|
protected void |
reInitializeFactories()
Reinitialize the factory list to its default state.
|
void |
reset()
Reset the service to the default factories.
|
String |
stats()
When the statistics for this service is already enabled,
return the log and resets he statistics.
|
String |
toString()
Returns the result of super.toString, appending the name in curly braces.
|
boolean |
unregisterFactory(ICUService.Factory factory)
Unregister a factory.
|
addListener, notifyChanged, removeListenerprotected final String name
public ICUService()
public ICUService(String name)
public Object get(String descriptor)
public Object get(String descriptor, String[] actualReturn)
public Object getKey(ICUService.Key key)
public Object getKey(ICUService.Key key, String[] actualReturn)
Given a key, return a service object, and, if actualReturn is not null, the descriptor with which it was found in the first element of actualReturn. If no service object matches this key, return null, and leave actualReturn unchanged.
This queries the cache using the key's descriptor, and if no object in the cache matches it, tries the key on each registered factory, in order. If none generates a service object for the key, repeats the process with each fallback of the key, until either one returns a service object, or the key has no fallback.
If key is null, just returns null.
public Object getKey(ICUService.Key key, String[] actualReturn, ICUService.Factory factory)
protected Object handleDefault(ICUService.Key key, String[] actualIDReturn)
public Set<String> getVisibleIDs()
public Set<String> getVisibleIDs(String matchID)
Return a snapshot of the visible IDs for this service. This set will not change as Factories are added or removed, but the supported ids will, so there is no guarantee that all and only the ids in the returned set are visible and supported by the service in subsequent calls.
matchID is passed to createKey to create a key. If the key is not null, it is used to filter out ids that don't have the key as a fallback.
public String getDisplayName(String id)
public String getDisplayName(String id, ULocale locale)
public SortedMap<String,String> getDisplayNames()
public SortedMap<String,String> getDisplayNames(ULocale locale)
public SortedMap<String,String> getDisplayNames(ULocale locale, Comparator<Object> com)
public SortedMap<String,String> getDisplayNames(ULocale locale, String matchID)
public SortedMap<String,String> getDisplayNames(ULocale locale, Comparator<Object> com, String matchID)
public final List<ICUService.Factory> factories()
public ICUService.Factory registerObject(Object obj, String id)
public ICUService.Factory registerObject(Object obj, String id, boolean visible)
public final ICUService.Factory registerFactory(ICUService.Factory factory)
public final boolean unregisterFactory(ICUService.Factory factory)
public final void reset()
protected void reInitializeFactories()
public boolean isDefault()
protected void markDefault()
public ICUService.Key createKey(String id)
protected void clearCaches()
protected void clearServiceCache()
protected boolean acceptsListener(EventListener l)
acceptsListener in class ICUNotifierprotected void notifyListener(EventListener l)
notifyListener in class ICUNotifierpublic String stats()
public String getName()