Class FileCrudOperations<V extends AbstractEntity & UpdatableEntity,M>

java.lang.Object
org.keycloak.models.map.storage.file.FileCrudOperations<V,M>
All Implemented Interfaces:
HasRealmId, CrudOperations<V,M>

public abstract class FileCrudOperations<V extends AbstractEntity & UpdatableEntity,M> extends Object implements CrudOperations<V,M>, HasRealmId
  • Field Details

    • SEARCHABLE_FIELD_REALM_ID_FIELD_NAME

      public static final String SEARCHABLE_FIELD_REALM_ID_FIELD_NAME
    • FILE_SUFFIX

      public static final String FILE_SUFFIX
      See Also:
    • DUMP_SETTINGS

      public static final org.snakeyaml.engine.v2.api.DumpSettings DUMP_SETTINGS
    • ID_COMPONENT_SEPARATOR

      public static final String ID_COMPONENT_SEPARATOR
      See Also:
  • Constructor Details

  • Method Details

    • getPredicates

      public static <V extends AbstractEntity & UpdatableEntity, M> Map<SearchableModelField<? super M>,MapModelCriteriaBuilder.UpdatePredicatesFunc<String,V,M>> getPredicates(Class<V> entityClass)
    • getPathForEscapedId

      protected Path getPathForEscapedId(String[] escapedIdPathArray)
    • getPathForEscapedId

      protected Path getPathForEscapedId(String escapedId)
    • canParseFile

      public static boolean canParseFile(Path p)
    • parse

      protected V parse(Path fileName)
    • create

      public V create(V value)
      Description copied from interface: CrudOperations
      Creates an object in the storage.
      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.
      Specified by:
      create in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      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
      See Also:
    • determineKeyFromValue

      public String determineKeyFromValue(V value, String lastIdComponentIfUnset)
    • determineKeyFromValue

      public String determineKeyFromValue(V value)
      Returns escaped ID - relative file name in the file system with path separator ID_COMPONENT_SEPARATOR.
      Specified by:
      determineKeyFromValue in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Parameters:
      value - Object
      forCreate - Whether this is for create operation (true) or
      Returns:
    • read

      public V read(String key)
      Description copied from interface: CrudOperations
      Returns object with the given key from the storage or null if object does not exist.
      If V implements ExpirableEntity this method should not return entities that are expired. See ExpirableEntity JavaDoc for more details. TODO: Consider returning Optional<V> instead.
      Specified by:
      read in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Parameters:
      key - Key of the object. Must not be null.
      Returns:
      See description
    • createCriteriaBuilder

      public MapModelCriteriaBuilder<String,V,M> createCriteriaBuilder()
    • read

      public Stream<V> read(QueryParameters<M> queryParameters)
      Description copied from interface: CrudOperations
      Returns stream of objects satisfying given criteria from the storage. The criteria are specified in the given criteria builder based on model properties.
      If V implements ExpirableEntity this method should not return entities that are expired. See ExpirableEntity JavaDoc for more details.
      Specified by:
      read in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Parameters:
      queryParameters - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
      Stream of objects. Never returns null.
    • update

      public V update(V value)
      Description copied from interface: CrudOperations
      Updates the object with the key of the value's ID in the storage if it already exists.
      Specified by:
      update in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Parameters:
      value - Updated value
      Returns:
      the previous value associated with the specified key, or null if there was no mapping for the key. (A null return can also indicate that the map previously associated null with the key, if the implementation supports null values.)
      See Also:
    • delete

      public boolean delete(String key)
      Description copied from interface: CrudOperations
      Deletes object with the given key from the storage, if exists, no-op otherwise.
      Specified by:
      delete in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Returns:
      Returns true if the object has been deleted or result cannot be determined, false otherwise.
    • delete

      public long delete(QueryParameters<M> queryParameters)
      Description copied from interface: CrudOperations
      Deletes objects that match the given criteria.
      Specified by:
      delete in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Parameters:
      queryParameters - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
      Number of removed objects (might return -1 if not supported)
    • getCount

      public long getCount(QueryParameters<M> queryParameters)
      Description copied from interface: CrudOperations
      Returns the number of objects satisfying given criteria from the storage. The criteria are specified in the given criteria builder based on model properties.
      Specified by:
      getCount in interface CrudOperations<V extends AbstractEntity & UpdatableEntity,M>
      Parameters:
      queryParameters - parameters for the query like firstResult, maxResult, requested ordering, etc.
      Returns:
      Number of objects. Never returns null.
    • getRealmId

      public String getRealmId()
      Description copied from interface: HasRealmId
      Returns realm ID of the entity.
      Specified by:
      getRealmId in interface HasRealmId
      Returns:
      See description
    • setRealmId

      public void setRealmId(String realmId)
      Description copied from interface: HasRealmId
      Sets the realm ID of this object.
      Specified by:
      setRealmId in interface HasRealmId
      Parameters:
      realmId - Realm ID.
    • touch

      protected abstract void touch(String proposedId, Path sp) throws IOException
      Throws:
      IOException
    • removeIfExists

      protected abstract boolean removeIfExists(Path sp)
    • registerRenameOnCommit

      protected abstract void registerRenameOnCommit(Path tempSp, Path sp)
    • getTxId

      protected abstract String getTxId()
    • getLastModifiedTime

      protected abstract FileTime getLastModifiedTime(Path path)
      Hook to obtain the last modified time of the file identified by the supplied Path.
      Parameters:
      path - the Path to the file whose last modified time it to be obtained.
      Returns:
      the FileTime corresponding to the file's last modified time.
    • checkIsSafeToModify

      protected abstract void checkIsSafeToModify(Path path)
      Hook to validate that it is safe to modify the file identified by the supplied Path. The primary goal is to identify if other transactions have modified the file after it was read by the current transaction, preventing updates to a stale entity.
      Parameters:
      path - the Path to the file that is to be modified.