An optional factory that may not be available in all configurations.
Such factories often need some external resources. For example the default
org.geotools.referencing.factory.epsg.AccessDialectEpsgFactoryneed a MS-Access database installed on the client machine. This database is not bundle in
Geotools distribution; if the user have not installed it, the factory can't work.
This interface is not a manager for automatic download of external resources.
It is just a way to tell to
FactoryFinder that this factory exists, but can't do its
job for whatever reasons (usually a missing resource that the user shall download and install
himself), so
FactoryFinder has to choose an other factory. In other words, the
OptionalFactory interface is used as a filter, nothing else. The process is as follows:
- When
FactoryRegistry#getServiceProvider is invoked, it starts to iterate over all
registered factories. If an
FactoryRegistry#setOrdering(Class,Object,Object), it is taken in account for the iteration order.
- If no suitable factory was found before the iterator reachs this optional factory, then
#isAvailable is invoked. If it returns
true, then this optional factory
is processed like any other factories. Otherwise it is ignored.
NOTE:
OptionalFactory is not designed for factories with intermittent
state (i.e. return value of
#isAvailable varying in an unpredictable way). The behavior
is undetermined if the
isAvailable() state changes with time.