Class ReferencingFactoryFinder


  • public final class ReferencingFactoryFinder
    extends FactoryFinder
    Defines static methods used to access the application's default factory implementation.

    To declare a factory implementation, a services subdirectory is placed within the META-INF directory that is present in every JAR file. This directory contains a file for each factory interface that has one or more implementation classes present in the JAR file. For example, if the JAR file contained a class named com.mycompany.DatumFactoryImpl which implements the DatumFactory interface, the JAR file would contain a file named:

    META-INF/services/org.geotools.api.referencing.datum.DatumFactory

    containing the line:

    com.mycompany.DatumFactoryImpl

    If the factory classes implements RegisterableService, it will be notified upon registration and deregistration. Note that the factory classes should be lightweight and quick to load. Implementations of these interfaces should avoid complex dependencies on other classes and on native code. The usual pattern for more complex services is to register a lightweight proxy for the heavyweight service.

    Note on factory ordering

    This class is thread-safe. However, calls to any setAuthorityOrdering(java.lang.String, java.lang.String) or setVendorOrdering(java.lang.String, java.lang.String) methods have a system-wide effect. If two threads or two applications need a different ordering, they shall manage their own instance of FactoryRegistry. This FactoryFinder class is simply a convenience wrapper around a FactoryRegistry instance.

    Since:
    2.4
    Author:
    Martin Desruisseaux (IRD)
    • Method Detail

      • getAuthorityNames

        public static Set<String> getAuthorityNames()
        Returns the names of all currently registered authorities.
      • getDatumFactory

        public static DatumFactory getDatumFactory​(Hints hints)
                                            throws FactoryRegistryException
        Returns the first implementation of DatumFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        The first datum factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the DatumFactory interface.
      • getDatumFactories

        public static Set<DatumFactory> getDatumFactories​(Hints hints)
        Returns a set of all available implementations for the DatumFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available datum factory implementations.
      • getCSFactory

        public static CSFactory getCSFactory​(Hints hints)
                                      throws FactoryRegistryException
        Returns the first implementation of CSFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        The first coordinate system factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the CSFactory interface.
      • getCSFactories

        public static Set<CSFactory> getCSFactories​(Hints hints)
        Returns a set of all available implementations for the CSFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available coordinate system factory implementations.
      • getCRSFactory

        public static CRSFactory getCRSFactory​(Hints hints)
                                        throws FactoryRegistryException
        Returns the first implementation of CRSFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        The first coordinate reference system factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the CRSFactory interface.
      • getCRSFactories

        public static Set<CRSFactory> getCRSFactories​(Hints hints)
        Returns a set of all available implementations for the CRSFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available coordinate reference system factory implementations.
      • getCoordinateOperationFactories

        public static Set<CoordinateOperationFactory> getCoordinateOperationFactories​(Hints hints)
        Returns a set of all available implementations for the CoordinateOperationFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available coordinate operation factory implementations.
      • getDatumAuthorityFactory

        public static DatumAuthorityFactory getDatumAuthorityFactory​(String authority,
                                                                     Hints hints)
                                                              throws FactoryRegistryException
        Returns the first implementation of DatumAuthorityFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.
        Parameters:
        authority - The desired authority (e.g. "EPSG").
        hints - An optional map of hints, or null if none.
        Returns:
        The first datum authority factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the DatumAuthorityFactory interface.
      • getDatumAuthorityFactories

        public static Set<DatumAuthorityFactory> getDatumAuthorityFactories​(Hints hints)
        Returns a set of all available implementations for the DatumAuthorityFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available datum authority factory implementations.
      • getCSAuthorityFactories

        public static Set<CSAuthorityFactory> getCSAuthorityFactories​(Hints hints)
        Returns a set of all available implementations for the CSAuthorityFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available coordinate system authority factory implementations.
      • getCRSAuthorityFactory

        public static CRSAuthorityFactory getCRSAuthorityFactory​(String authority,
                                                                 Hints hints)
                                                          throws FactoryRegistryException
        Returns the first implementation of CRSAuthorityFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.

        Hints that may be understood includes FORCE_LONGITUDE_FIRST_AXIS_ORDER, FORCE_STANDARD_AXIS_UNITS, FORCE_STANDARD_AXIS_DIRECTIONS and VERSION.

        TIP: The EPSG official factory and the EPSG extensions (additional CRS provided by ESRI and others) are two distinct factories. Call to getCRSAuthorityFactory("EPSG", null) returns only one of those, usually the official EPSG factory. If the union of those two factories is wanted, then a chain of fallbacks is wanted. Consider using something like:

        FallbackAuthorityFactory.create(CRSAuthorityFactory.class, getCRSAuthorityFactories(hints));
        Parameters:
        authority - The desired authority (e.g. "EPSG").
        hints - An optional map of hints, or null if none.
        Returns:
        The first coordinate reference system authority factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the CRSAuthorityFactory interface.
      • getCRSAuthorityFactories

        public static Set<CRSAuthorityFactory> getCRSAuthorityFactories​(Hints hints)
        Returns a set of all available implementations for the CRSAuthorityFactory interface. This set can be used to list the available codes known to all authorities. In the event that the same code is understood by more then one authority you will need to assume both are close enough, or make use of this set directly rather than use the CRS.decode(java.lang.String) convenience method.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available coordinate reference system authority factory implementations.
      • getCoordinateOperationAuthorityFactory

        public static CoordinateOperationAuthorityFactory getCoordinateOperationAuthorityFactory​(String authority,
                                                                                                 Hints hints)
                                                                                          throws FactoryRegistryException
        Returns the first implementation of CoordinateOperationAuthorityFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.
        Parameters:
        authority - The desired authority (e.g. "EPSG").
        hints - An optional map of hints, or null if none.
        Returns:
        The first coordinate operation authority factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the CoordinateOperationAuthorityFactory interface.
      • getCoordinateOperationAuthorityFactories

        public static Set<CoordinateOperationAuthorityFactory> getCoordinateOperationAuthorityFactories​(Hints hints)
        Returns a set of all available implementations for the CoordinateOperationAuthorityFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available coordinate operation authority factory implementations.
      • getGridShiftLocators

        public static Set<GridShiftLocator> getGridShiftLocators​(Hints hints)
        Returns a set of all available implementations for the GridShiftLocator interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available grid shift factory implementations.
      • getMathTransformFactory

        public static MathTransformFactory getMathTransformFactory​(Hints hints)
                                                            throws FactoryRegistryException
        Returns the first implementation of MathTransformFactory matching the specified hints. If no implementation matches, a new one is created if possible or an exception is thrown otherwise. If more than one implementation is registered and an ordering is set, then the preferred implementation is returned. Otherwise an arbitrary one is selected.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        The first math transform factory that matches the supplied hints.
        Throws:
        FactoryRegistryException - if no implementation was found or can be created for the MathTransformFactory interface.
      • getMathTransformFactories

        public static Set<MathTransformFactory> getMathTransformFactories​(Hints hints)
        Returns a set of all available implementations for the MathTransformFactory interface.
        Parameters:
        hints - An optional map of hints, or null if none.
        Returns:
        Set of available math transform factory implementations.
      • setVendorOrdering

        public static boolean setVendorOrdering​(String vendor1,
                                                String vendor2)
        Sets a pairwise ordering between two vendors. If one or both vendors are not currently registered, or if the desired ordering is already set, nothing happens and false is returned.

        The example below said that an ESRI implementation (if available) is preferred over the Geotools one:

        FactoryFinder.setVendorOrdering("ESRI", "Geotools");
        Parameters:
        vendor1 - The preferred vendor.
        vendor2 - The vendor to which vendor1 is preferred.
        Returns:
        true if the ordering was set for at least one category.
      • unsetVendorOrdering

        public static boolean unsetVendorOrdering​(String vendor1,
                                                  String vendor2)
        Unsets a pairwise ordering between two vendors. If one or both vendors are not currently registered, or if the desired ordering is already unset, nothing happens and false is returned.
        Parameters:
        vendor1 - The preferred vendor.
        vendor2 - The vendor to which vendor1 is preferred.
        Returns:
        true if the ordering was unset for at least one category.
      • setAuthorityOrdering

        public static boolean setAuthorityOrdering​(String authority1,
                                                   String authority2)
        Sets a pairwise ordering between two authorities. If one or both authorities are not currently registered, or if the desired ordering is already set, nothing happens and false is returned.

        The example below said that EPSG authority factories are preferred over ESRI ones:

        FactoryFinder.setAuthorityOrdering("EPSG", "ESRI");
        Parameters:
        authority1 - The preferred authority.
        authority2 - The authority to which authority1 is preferred.
        Returns:
        true if the ordering was set for at least one category.
      • unsetAuthorityOrdering

        public static boolean unsetAuthorityOrdering​(String authority1,
                                                     String authority2)
        Unsets a pairwise ordering between two authorities. If one or both authorities are not currently registered, or if the desired ordering is already unset, nothing happens and false is returned.
        Parameters:
        authority1 - The preferred authority.
        authority2 - The vendor to which authority1 is preferred.
        Returns:
        true if the ordering was unset for at least one category.
      • addAuthorityFactory

        public static void addAuthorityFactory​(AuthorityFactory authority)
        Programmatic management of authority factories. Needed for user managed, not plug-in managed, authority factory. Also useful for test cases.
        Parameters:
        authority - The authority factory to add.
      • removeAuthorityFactory

        public static void removeAuthorityFactory​(AuthorityFactory authority)
        Programmatic management of authority factories. Needed for user managed, not plug-in managed, authority factory. Also useful for test cases.
        Parameters:
        authority - The authority factory to remove.
      • isRegistered

        public static boolean isRegistered​(Factory factory)
        Returns true if the specified factory is registered. A factory may have been registered by scanForPlugins() if it was declared in a META-INF/services file, or it may have been added programmatically.
        Since:
        2.4
      • scanForPlugins

        public static void scanForPlugins()
        Scans for factory plug-ins on the application class path. This method is needed because the application class path can theoretically change, or additional plug-ins may become available. Rather than re-scanning the classpath on every invocation of the API, the class path is scanned automatically only on the first invocation. Clients can call this method to prompt a re-scan. Thus this method need only be invoked by sophisticated applications which dynamically make new plug-ins available at runtime.
      • listProviders

        public static void listProviders​(Writer out,
                                         Locale locale)
                                  throws IOException
        List all available factory implementations in a tabular format. For each factory interface, the first implementation listed is the default one. This method provides a way to check the state of a system, usually for debugging purpose.
        Parameters:
        out - The output stream where to format the list.
        locale - The locale for the list, or null.
        Throws:
        IOException - if an error occurs while writting to out.
      • reset

        public static void reset()
        Resets the factory finder and prepares for a new full scan of the SPI subsystems
      • main

        public static void main​(String... args)
        Dump to the standard output stream a list of available factory implementations. This method can be invoked from the command line. It provides a mean to verify if some implementations were found in the classpath. The syntax is:
        java org.geotools.referencing.FactoryFinder <options>

        where options are:

        -encoding <code>  Set the character encoding
        -locale <language>  Set the language for the output (e.g. "fr" for French)

        Note for Windows users: If the output contains strange symbols, try to supply an "-encoding" argument. Example:

        java org.geotools.referencing.FactoryFinder -encoding Cp850

        The codepage number (850 in the previous example) can be obtained from the DOS commande line using the "chcp" command with no arguments.

        Parameters:
        args - Command line arguments.