org.keycloak.models.map.storage

## Interface MapStorage<V extends AbstractEntity,M>

- Type Parameters:
    `V` - Type of the stored values that contains all the data stripped of session state. In other words, in the entities there are only IDs and mostly primitive types / `String`, never references to `*Model` instances. See the `Abstract*Entity` classes in this module.
    `M` - Type of the `*Model` corresponding to the stored value, e.g. `UserModel`. This is used for filtering via model fields in `ModelCriteriaBuilder` which is necessary to abstract from physical layout and thus to support no-downtime upgrade.
  All Known Implementing Classes:
    ConcurrentHashMapStorage, UserSessionConcurrentHashMapStorage

      public interface MapStorage<V extends AbstractEntity,M>

  Implementation of this interface interacts with a persistence storage storing various entities, e.g. users, realms. It contains basic object CRUD operations as well as bulk `read(org.keycloak.models.map.storage.QueryParameters)` and bulk `delete(org.keycloak.models.map.storage.QueryParameters)` operations, and operation for determining the number of the objects satisfying given criteria (`getCount(org.keycloak.models.map.storage.QueryParameters)`).
  Author:
    hmlnarik

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `V` | `create(V value)` Creates an object in the store.
    `ModelCriteriaBuilder<M>` | `createCriteriaBuilder()` Returns criteria builder for the storage engine.
    `MapKeycloakTransaction<V,M>` | `createTransaction(KeycloakSession session)` Creates a `MapKeycloakTransaction` object that tracks a new transaction related to this storage.
    `long` | `delete(QueryParameters<M> queryParameters)` Deletes objects that match the given criteria.
    `boolean` | `delete(String key)` Deletes object with the given `key` from the storage, if exists, no-op otherwise.
    `long` | `getCount(QueryParameters<M> queryParameters)` Returns the number of objects satisfying given `criteria` from the storage.
    `Stream<V>` | `read(QueryParameters<M> queryParameters)` Returns stream of objects satisfying given `criteria` from the storage.
    `V` | `read(String key)` Returns object with the given `key` from the storage or `null` if object does not exist.
    `V` | `update(V value)` Updates the object with the key of the `value`'s ID in the storage if it already exists.

- - ### Method Detail

    - #### create

          V create(V value)

      Creates an object in the store. ID of the `value` may be prescribed in id of the `value`. If the id is `null` or its format is not matching the store internal format for ID, then the `value`'s ID will be generated and returned in the id of the return value.
      Parameters:
        `value` - Entity to create in the store
      Returns:
        Entity representing the `value` in the store. It may or may not be the same instance as `value`
      Throws:
        `NullPointerException` - if `value` is `null`
      See Also:
        `AbstractEntity.getId()`

    - #### read

          V read(String key)

      Returns object with the given `key` from the storage or `null` if object does not exist.
      TODO: Consider returning `Optional<V>` instead.
      Parameters:
        `key` - Key of the object. Must not be `null`.
      Returns:
        See description
      Throws:
        `NullPointerException` - if the `key` is `null`

    - #### read

          Stream<V> read(QueryParameters<M> queryParameters)

      Returns stream of objects satisfying given `criteria` from the storage. The criteria are specified in the given criteria builder based on model properties.
      Parameters:
        `queryParameters` - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
        Stream of objects. Never returns `null`.
      Throws:
        `IllegalStateException` - If `criteria` is not compatible, i.e. has not been originally created by the `createCriteriaBuilder()` method of this object.

    - #### getCount

          long getCount(QueryParameters<M> queryParameters)

      Returns the number of objects satisfying given `criteria` from the storage. The criteria are specified in the given criteria builder based on model properties.
      Parameters:
        `queryParameters` - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
        Number of objects. Never returns `null`.
      Throws:
        `IllegalStateException` - If `criteria` is not compatible, i.e. has not been originally created by the `createCriteriaBuilder()` method of this object.

    - #### update

          V update(V value)

      Updates the object with the key of the `value`'s ID in the storage if it already exists.
      Parameters:
        `value` - Updated value
      Throws:
        `NullPointerException` - if the object or its `id` is `null`
      See Also:
        `AbstractEntity.getId()`

    - #### delete

          boolean delete(String key)

      Deletes object with the given `key` from the storage, if exists, no-op otherwise.
      Parameters:
        `key` -
      Returns:
        Returns `true` if the object has been deleted or result cannot be determined, `false` otherwise.

    - #### delete

          long delete(QueryParameters<M> queryParameters)

      Deletes objects that match the given criteria.
      Parameters:
        `queryParameters` - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
        Number of removed objects (might return `-1` if not supported)
      Throws:
        `IllegalStateException` - If `criteria` is not compatible, i.e. has not been originally created by the `createCriteriaBuilder()` method of this object.

    - #### createCriteriaBuilder

          ModelCriteriaBuilder<M> createCriteriaBuilder()

      Returns criteria builder for the storage engine. The criteria are specified in the given criteria builder based on model properties.
      Note: While the criteria are formulated in terms of model properties, the storage engine may in turn process them into the best form that suits the underlying storage engine query language, e.g. to conditions on storage attributes or REST query parameters. If possible, do not delay filtering after the models are reconstructed from storage entities, in most cases this would be highly inefficient.
      Returns:
        See description. Never returns `null`

    - #### createTransaction

          MapKeycloakTransaction<V,M> createTransaction(KeycloakSession session)

      Creates a `MapKeycloakTransaction` object that tracks a new transaction related to this storage. In case of JPA or similar, the transaction object might be supplied by the container (via JTA) or shared same across storages accessing the same database within the same session; in other cases (e.g. plain map) a separate transaction handler might be created per each storage.
      Returns:
        See description. Never returns `null`

Copyright © 2021 JBoss by Red Hat. All rights reserved.