Package org.apache.sis.setup

## Class Configuration

- Object
- - Configuration

-     public final class Configuration
      extends Object

  Provides system-wide configuration for Apache SIS library. Methods in this class can be used for overriding SIS default values. Those methods can be used in final applications, but should not be used by libraries in order to avoid interfering with user's settings.
  Since:
    1.0

  Defined in the `sis-utility` module

- - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `static Configuration` | `current()` | Returns the current configuration.
    `Optional<DataSource>` | `getDatabase()` | Returns the data source for the SIS-wide "SpatialMetadata" database.
    `void` | `setDatabase​(Supplier<DataSource> source)` | Specifies the data source to use if no `"jdbc/SpatialMetadata"` source is binded to a JNDI environment.

    - ### Methods inherited from class Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### current

          public static Configuration current()

      Returns the current configuration.
      Returns:
        the current configuration.

    - #### getDatabase

          public Optional<DataSource> getDatabase()
                                           throws SQLException

      Returns the data source for the SIS-wide "SpatialMetadata" database. This method returns the first of the following steps that succeed:
      1. If a JNDI context exists, use the data source registered under the `"jdbc/SpatialMetadata"` name.
      2. Otherwise if a default data source has been supplied, use that data source.
      3. Otherwise if the `SIS_DATA` environment variable is defined, use the data source for `"jdbc:derby:$SIS_DATA/Databases/SpatialMetadata"`. That database will be created if it does not exist. Note that this is the only case where Apache SIS may create the database since it is located in the directory managed by Apache SIS.
      4. Otherwise if the `non-free:sis-embedded-data` module is present on the classpath, use the embedded database.
      5. Otherwise if the `"derby​.system​.home"` property is defined, use the data source for `"jdbc:derby:SpatialMetadata"` database. This database will not be created if it does not exist.
      Returns:
        the data source for the `"SpatialMetadata"` database.
      Throws:
        `SQLException` - if an error occurred while fetching the database source.

    - #### setDatabase

          public void setDatabase​(Supplier<DataSource> source)

      Specifies the data source to use if no `"jdbc/SpatialMetadata"` source is binded to a JNDI environment. Data source specified by JNDI has precedence over data source specified by this method in order to let users control their data source.

      This method can be invoked only before the first attempt to get the database. If the `DataSource` has already be obtained, then this method throws `IllegalStateException`.

      Parameters:
        `source` - supplier of data source to set. The supplier may return `null`, in which case it will be ignored.
      Throws:
        `IllegalStateException` - if `DataSource` has already be obtained before this method call.