Package org.keycloak.storage
Class AbstractStorageManager<ProviderType extends Provider,StorageProviderModelType extends CacheableStorageProviderModel>
- java.lang.Object
-
- org.keycloak.storage.AbstractStorageManager<ProviderType,StorageProviderModelType>
-
- Type Parameters:
ProviderType
- This type will be used for looking for factories that produce instances of desired providersStorageProviderModelType
- Type of model used for creating provider, it needs to extend CacheableStorageProviderModel as it hasisEnabled()
method and also extend PrioritizedComponentModel which is required for sorting providers based on its priorities
- Direct Known Subclasses:
ClientScopeStorageManager
,GroupStorageManager
,LegacyUserCredentialManager
,UserStorageManager
public abstract class AbstractStorageManager<ProviderType extends Provider,StorageProviderModelType extends CacheableStorageProviderModel> extends Object
-
-
Field Summary
Fields Modifier and Type Field Description protected KeycloakSession
session
-
Constructor Summary
Constructors Constructor Description AbstractStorageManager(KeycloakSession session, Class<? extends ProviderFactory> factoryTypeClass, Class<ProviderType> providerTypeClass, Function<ComponentModel,StorageProviderModelType> toStorageProviderModelTypeFunction, String configScope)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected <T> void
consumeEnabledStorageProvidersWithTimeout(RealmModel realm, Class<T> capabilityInterface, Consumer<T> consumer)
Gets all enabled StorageProviders that implements the capabilityInterface and call applyFunction on each !! Each StorageProvider has a limited time for consuming !!protected <R,T>
Stream<R>flatMapEnabledStorageProvidersWithTimeout(RealmModel realm, Class<T> capabilityInterface, Function<T,? extends Stream<R>> applyFunction)
Gets all enabled StorageProviders that implements the capabilityInterface, applies applyFunction on each of them and then join the results together.protected <T> Stream<T>
getEnabledStorageProviders(RealmModel realm, Class<T> capabilityInterface)
Returns stream of all storageProviders within the realm that implements the capabilityInterface.protected <T extends ProviderType>
ComponentFactory<T,ProviderType>getStorageProviderFactory(String providerId)
Returns a factory with the providerId, which produce instances of type CreatedProviderTypeprotected <T> T
getStorageProviderInstance(RealmModel realm, String providerId, Class<T> capabilityInterface)
protected <T> T
getStorageProviderInstance(RealmModel realm, String providerId, Class<T> capabilityInterface, boolean includeDisabled)
Returns an instance of provider with the providerId within the realm or null if storage provider with providerId doesn't implement capabilityInterface.protected <T> T
getStorageProviderInstance(StorageProviderModelType model, Class<T> capabilityInterface)
Returns an instance of provider for the model or null if storage provider based on the model doesn't implement capabilityInterface.protected <T> T
getStorageProviderInstance(StorageProviderModelType model, Class<T> capabilityInterface, boolean includeDisabled)
Returns an instance of provider for the model or null if storage provider based on the model doesn't implement capabilityInterface.protected StorageProviderModelType
getStorageProviderModel(RealmModel realm, String providerId)
Returns an instance of StorageProvider model corresponding realm and providerIdstatic Stream<ComponentModel>
getStorageProviderModels(RealmModel realm, Class<? extends Provider> storageType)
Stream of ComponentModels of storageType.protected Long
getStorageProviderTimeout()
protected <R,T>
Stream<R>mapEnabledStorageProvidersWithTimeout(RealmModel realm, Class<T> capabilityInterface, Function<T,R> applyFunction)
Gets all enabled StorageProviders that implements the capabilityInterface, applies applyFunction on each of them and returns the stream.
-
-
-
Field Detail
-
session
protected final KeycloakSession session
-
-
Constructor Detail
-
AbstractStorageManager
public AbstractStorageManager(KeycloakSession session, Class<? extends ProviderFactory> factoryTypeClass, Class<ProviderType> providerTypeClass, Function<ComponentModel,StorageProviderModelType> toStorageProviderModelTypeFunction, String configScope)
-
-
Method Detail
-
getStorageProviderTimeout
protected Long getStorageProviderTimeout()
-
getStorageProviderFactory
protected <T extends ProviderType> ComponentFactory<T,ProviderType> getStorageProviderFactory(String providerId)
Returns a factory with the providerId, which produce instances of type CreatedProviderType- Parameters:
providerId
- id of factory that produce desired instances- Returns:
- A factory that implements
ComponentFactory<CreatedProviderType, ProviderType>
-
getEnabledStorageProviders
protected <T> Stream<T> getEnabledStorageProviders(RealmModel realm, Class<T> capabilityInterface)
Returns stream of all storageProviders within the realm that implements the capabilityInterface.- Parameters:
realm
- realmcapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
- Returns:
- enabled storage providers for realm and @{code getProviderTypeClass()}
-
flatMapEnabledStorageProvidersWithTimeout
protected <R,T> Stream<R> flatMapEnabledStorageProvidersWithTimeout(RealmModel realm, Class<T> capabilityInterface, Function<T,? extends Stream<R>> applyFunction)
Gets all enabled StorageProviders that implements the capabilityInterface, applies applyFunction on each of them and then join the results together. !! Each StorageProvider has a limited time to respond, if it fails to do it, empty stream is returned !!- Type Parameters:
R
- result of applyFunction- Parameters:
realm
- realmcapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
applyFunction
- function that is applied on StorageProviders- Returns:
- a stream with all results from all StorageProviders
-
mapEnabledStorageProvidersWithTimeout
protected <R,T> Stream<R> mapEnabledStorageProvidersWithTimeout(RealmModel realm, Class<T> capabilityInterface, Function<T,R> applyFunction)
Gets all enabled StorageProviders that implements the capabilityInterface, applies applyFunction on each of them and returns the stream. !! Each StorageProvider has a limited time to respond, if it fails to do it, null is returned !!- Type Parameters:
R
- Result of applyFunction- Parameters:
realm
- realmcapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
applyFunction
- function that is applied on StorageProviders- Returns:
- First result from StorageProviders
-
consumeEnabledStorageProvidersWithTimeout
protected <T> void consumeEnabledStorageProvidersWithTimeout(RealmModel realm, Class<T> capabilityInterface, Consumer<T> consumer)
Gets all enabled StorageProviders that implements the capabilityInterface and call applyFunction on each !! Each StorageProvider has a limited time for consuming !!- Parameters:
realm
- realmcapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
consumer
- function that is applied on StorageProviders
-
getStorageProviderInstance
protected <T> T getStorageProviderInstance(RealmModel realm, String providerId, Class<T> capabilityInterface)
-
getStorageProviderInstance
protected <T> T getStorageProviderInstance(RealmModel realm, String providerId, Class<T> capabilityInterface, boolean includeDisabled)
Returns an instance of provider with the providerId within the realm or null if storage provider with providerId doesn't implement capabilityInterface.- Parameters:
realm
- realmproviderId
- id of ComponentModel within database/storagecapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
- Returns:
- an instance of type CreatedProviderType or null if storage provider with providerId doesn't implement capabilityInterface
-
getStorageProviderModel
protected StorageProviderModelType getStorageProviderModel(RealmModel realm, String providerId)
Returns an instance of StorageProvider model corresponding realm and providerId- Parameters:
realm
- Realm.providerId
- Id of desired provider.- Returns:
- An instance of type StorageProviderModelType
-
getStorageProviderInstance
protected <T> T getStorageProviderInstance(StorageProviderModelType model, Class<T> capabilityInterface)
Returns an instance of provider for the model or null if storage provider based on the model doesn't implement capabilityInterface.- Type Parameters:
T
- Required capability interface type- Parameters:
model
- StorageProviderModel obtained from database/storagecapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
- Returns:
- an instance of type T or null if storage provider based on the model doesn't exist or doesn't implement the capabilityInterface.
-
getStorageProviderInstance
protected <T> T getStorageProviderInstance(StorageProviderModelType model, Class<T> capabilityInterface, boolean includeDisabled)
Returns an instance of provider for the model or null if storage provider based on the model doesn't implement capabilityInterface.- Parameters:
model
- StorageProviderModel obtained from database/storagecapabilityInterface
- class of desired capabilityInterface. For example,GroupLookupProvider
orUserQueryProvider
includeDisabled
- If set to true, the method will return also disabled providers.- Returns:
- an instance of type T or null if storage provider based on the model doesn't exist or doesn't implement the capabilityInterface.
-
getStorageProviderModels
public static Stream<ComponentModel> getStorageProviderModels(RealmModel realm, Class<? extends Provider> storageType)
Stream of ComponentModels of storageType.- Parameters:
realm
- Realm.storageType
- Type.- Returns:
- Stream of ComponentModels
-
-