|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjavax.imageio.spi.ServiceRegistry
org.geotools.factory.FactoryRegistry
public class FactoryRegistry
A registry for factories, organized by categories (usualy by interface). For
example CRSFactory.class
is a category,
and MathTransformFactory.class
is
an other category.
For each category, implementations are registered in a file placed in the
META-INF/services/
directory, as specified in the ServiceRegistry
javadoc. Those files are usually bundled into the JAR file distributed by the vendor.
If the same META-INF/services/
file appears many time in different JARs,
they are processed as if their content were merged.
Example use:
Set<Class<?>> categories =
Collections.singleton(new Class<?>[] {
&npsp;&npsp;&npsp;&npsp;MathTransformProvider.class
});
FactoryRegistry registry = new FactoryRegistry(categories);
// get the providers
Filter filter = null;
Hints hints = null;
Iterator<MathTransform> providers =
registry.getServiceProviders(MathTransformProvider.class, filter, hints);
NOTE: This class is not thread safe. Users are responsable
for synchronisation. This is usually done in an utility class wrapping this
service registry (e.g. ReferencingFactoryFinder
).
ReferencingFactoryFinder
,
CoverageFactoryFinder
Nested Class Summary |
---|
Nested classes/interfaces inherited from class javax.imageio.spi.ServiceRegistry |
---|
javax.imageio.spi.ServiceRegistry.Filter |
Field Summary | |
---|---|
protected static java.util.logging.Logger |
LOGGER
The logger for all events related to factory registry. |
Constructor Summary | |
---|---|
FactoryRegistry(java.lang.Class<?> category)
Constructs a new registry for the specified category. |
|
FactoryRegistry(java.lang.Class<?>[] categories)
Constructs a new registry for the specified categories. |
|
FactoryRegistry(java.util.Collection<java.lang.Class<?>> categories)
Constructs a new registry for the specified categories. |
Method Summary | ||
---|---|---|
java.util.Set<java.lang.ClassLoader> |
getClassLoaders()
Returns all class loaders to be used for scanning plugins. |
|
|
getServiceProvider(java.lang.Class<T> category,
javax.imageio.spi.ServiceRegistry.Filter filter,
Hints hints,
Hints.Key key)
Returns the first provider in the registry for the specified category, using the specified map of hints (if any). |
|
|
getServiceProviders(java.lang.Class<T> category,
javax.imageio.spi.ServiceRegistry.Filter filter,
Hints hints)
Returns the providers in the registry for the specified category, filter and hints. |
|
protected
|
isAcceptable(T provider,
java.lang.Class<T> category,
Hints hints)
Returns true if the specified provider meets the requirements specified by
a map of hints . |
|
void |
scanForPlugins()
Scans for factory plug-ins on the application class path. |
|
|
setOrdering(java.lang.Class<T> base,
boolean set,
javax.imageio.spi.ServiceRegistry.Filter service1,
javax.imageio.spi.ServiceRegistry.Filter service2)
Sets or unsets a pairwise ordering between all factories meeting a criterion. |
|
|
setOrdering(java.lang.Class<T> category,
java.util.Comparator<T> comparator)
Set pairwise ordering between all factories according a comparator. |
Methods inherited from class javax.imageio.spi.ServiceRegistry |
---|
contains, deregisterAll, deregisterAll, deregisterServiceProvider, deregisterServiceProvider, finalize, getCategories, getServiceProviderByClass, getServiceProviders, getServiceProviders, lookupProviders, lookupProviders, registerServiceProvider, registerServiceProvider, registerServiceProviders, setOrdering, unsetOrdering |
Methods inherited from class java.lang.Object |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final java.util.logging.Logger LOGGER
Constructor Detail |
---|
public FactoryRegistry(java.lang.Class<?> category)
category
- The single category.public FactoryRegistry(java.lang.Class<?>[] categories)
categories
- The categories.public FactoryRegistry(java.util.Collection<java.lang.Class<?>> categories)
categories
- The categories.Method Detail |
---|
public <T> java.util.Iterator<T> getServiceProviders(java.lang.Class<T> category, javax.imageio.spi.ServiceRegistry.Filter filter, Hints hints)
T
- The class represented by the category
argument.category
- The category to look for. Usually an interface class
(not the actual implementation class).filter
- The optional filter, or null
.hints
- The optional user requirements, or null
.
public <T> T getServiceProvider(java.lang.Class<T> category, javax.imageio.spi.ServiceRegistry.Filter filter, Hints hints, Hints.Key key) throws FactoryRegistryException
FactoryCreator
class
change this behavior however.
T
- The class represented by the category
argument.category
- The category to look for. Must be one of the categories declared to the
constructor. Usually an interface class (not the actual implementation
class).filter
- An optional filter, or null
if none.
This is used for example in order to select the first factory for some
authority.hints
- A map of hints, or null
if none.key
- The key to use for looking for a user-provided instance in the hints, or
null
if none.
Object
instead of
Factory
because the factory implementation doesn't need to be a Geotools one.
FactoryNotFoundException
- if no factory was found for the specified category, filter
and hints.
FactoryRegistryException
- if a factory can't be returned for some other reason.#getServiceProviders(Class, Filter, Hints)
,
FactoryCreator.getServiceProvider(java.lang.Class, javax.imageio.spi.ServiceRegistry.Filter, org.geotools.factory.Hints, org.geotools.factory.Hints.Key)
protected <T> boolean isAcceptable(T provider, java.lang.Class<T> category, Hints hints)
true
if the specified provider
meets the requirements specified by
a map of hints
. The default implementation always returns true
. There is no
need to override this method for AbstractFactory
implementations, since their hints
are automatically checked. Override this method for non-Geotools implementations.
For example a JTS geometry factory finder may overrides this method in order to check
if a GeometryFactory
uses the required
CoordinateSequenceFactory
. Such method should be
implemented as below, since this method may be invoked for various kind of objects:
if (provider instanceof GeometryFactory) { // ... Check the GeometryFactory state here. }
T
- The class represented by the category
argument.provider
- The provider to checks.category
- The factory category. Usually an interface.hints
- The user requirements, or null
if none.
true
if the provider
meets the user requirements.public final java.util.Set<java.lang.ClassLoader> getClassLoaders()
public void scanForPlugins()
public <T> boolean setOrdering(java.lang.Class<T> category, java.util.Comparator<T> comparator)
compare(factory1, factory2)
should returns:
-1
if factory1
is preferred to factory2
+1
if factory2
is preferred to factory1
0
if there is no preferred order between factory1
and
factory2
T
- The class represented by the category
argument.category
- The category to set ordering.comparator
- The comparator to use for ordering.
true
if at least one ordering setting has been modified as a consequence
of this call.public <T> boolean setOrdering(java.lang.Class<T> base, boolean set, javax.imageio.spi.ServiceRegistry.Filter service1, javax.imageio.spi.ServiceRegistry.Filter service2)
org.geotools.referencing.FactoryFinder
), this is used for
setting ordering between all factories provided by two vendors, or for two authorities.
If one or both factories are not currently registered, or if the desired ordering is
already set/unset, nothing happens and false is returned.
T
- The class represented by the base
argument.base
- The base category. Only categories assignable to base
will be processed.set
- true
for setting the ordering, or false
for unsetting.service1
- Filter for the preferred factory.service2
- Filter for the factory to which service1
is preferred.
true
if the ordering changed as a result of this call.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |