# Class ResourceDefinition

Object
ResourceDefinition

public class ResourceDefinition extends Object
Definition of a resource (table, view or query) to include in a `SQLStore`. Each `ResourceDefinition` instance can specify a table or a group of tables (based on name pattern) to view as `FeatureSet` instances. A `ResourceDefinition` instance can also specify a query instead of a table.

`ResourceDefinition`s are given to the `SimpleFeatureStore` constructor, which implies that the tables to use are known in advance (e.g., hard-coded). If this is not the case, then the `ResourceDefinition`s can be provided later by overriding `SQLStore​.readResourceDefinitions(DataAccess)` instead.

Since:
  1.1

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `ResourceDefinition(GenericName name, String query)`
  Creates a new description of a resource in a SQL database.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object obj)`
  Returns `true` if this definition is equal to the given object.
  `GenericName`
  `getName()`
  Returns the name pattern of the table, view or query to access as a resource.
  `Optional<String>`
  `getQuery()`
  Returns the SQL query to execute for the resource, or empty if the resource is a table or a view.
  `int`
  `hashCode()`
  Returns a hash code value for this resource definition.
  `static ResourceDefinition`
  `query(String name, String query)`
  Creates a resource definition for a SQL query.
  `static ResourceDefinition`
  `table(String tablePattern)`
  Creates a resource definition for a table or a view in any catalog and schema of the database.
  `static ResourceDefinition`
  `table(String catalog, String schemaPattern, String tablePattern)`
  Creates a resource definition for a table or a view in the database.
  `String`
  `toString()`
  Returns a string representation of this resource definition.

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### ResourceDefinition

    protected ResourceDefinition(GenericName name, String query)
    Creates a new description of a resource in a SQL database. If the `query` argument is null, then the `name` argument shall be the name pattern of a table or a view.
    Parameters:
      `name` - table, view or query name pattern. May contain `LIKE` wildcard characters.
    Since:
      1.5
    See Also:
      - `table(String)`
      - `table(String, String, String)`
      - `query(String, String)`

- ## Method Details

  - ### table

    public static ResourceDefinition table(String tablePattern)
    Creates a resource definition for a table or a view in any catalog and schema of the database. The table name can contain SQL wildcard characters: `'_'` matches any single character and `'%'` matches any sequence of characters.
    Parameters:
      `tablePattern` - pattern (with `'_'` and `'%'` wildcards) of a table.
    Returns:
      resource definition for the named table.

  - ### table

    public static ResourceDefinition table(String catalog, String schemaPattern, String tablePattern)
    Creates a resource definition for a table or a view in the database. The table name can be any of the followings:
    - `catalog​.schemaPattern​.tablePattern`
    - `schemaPattern​.tablePattern`
    - `tablePattern`
    The schema and table names (but not the catalog) can contain SQL wildcard characters: `'_'` matches any single character and `'%'` matches any sequence of characters.
    Parameters:
      `catalog` - name of a catalog as it is stored in the database, or `null` for any catalog.
      `schemaPattern` - pattern (with `'_'` and `'%'` wildcards) of a schema, or `null` for any schema.
      `tablePattern` - pattern (with `'_'` and `'%'` wildcards) of a table.
    Returns:
      resource definition for the named table.

  - ### query

    public static ResourceDefinition query(String name, String query)
    Creates a resource definition for a SQL query. Each column in the query should have a distinct name, using SQL `AS` keyword if needed. It is caller's responsibility to ensure that the given query is not subject to SQL injection vulnerability.
    Parameters:
      `name` - name of the resource.
      `query` - the SQL query to execute.
    Returns:
      resource definition for the given SQL query.

  - ### getName

    public GenericName getName()
    Returns the name pattern of the table, view or query to access as a resource. There is small differences in the way it is used depending on whether the resource is a table or a query:
    - If the resource is a table or a view, then this is the fully qualified name (including catalog and schema) of the table or view to include in the store. It may contain `LIKE` wildcard characters, in which case all tables matching the pattern will be included.
    - If the resource is a query, then this is an arbitrary name to assign to the resource which will contain the query result.
    Returns:
      the table or view name pattern, or an arbitrary query name.

  - ### getQuery

    public Optional<String> getQuery()
    Returns the SQL query to execute for the resource, or empty if the resource is a table or a view.
    Returns:
      the SQL query to execute for the resource.

  - ### equals

    public boolean equals(Object obj)
    Returns `true` if this definition is equal to the given object.
    Overrides:
      `equals` in class `Object`
    Parameters:
      `obj` - another object, or `null`.
    Returns:
      `true` if the other object is a resource definition equals to this one.

  - ### hashCode

    public int hashCode()
    Returns a hash code value for this resource definition.
    Overrides:
      `hashCode` in class `Object`
    Returns:
      a hash code value.

  - ### toString

    public String toString()
    Returns a string representation of this resource definition.
    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of this resource definition.