Package org.keycloak.storage
Class AbstractStorageManager<ProviderType extends org.keycloak.provider.Provider,StorageProviderModelType extends org.keycloak.storage.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
,UserCredentialStoreManager
,UserStorageManager
public abstract class AbstractStorageManager<ProviderType extends org.keycloak.provider.Provider,StorageProviderModelType extends org.keycloak.storage.CacheableStorageProviderModel> extends Object
-
-
Field Summary
Fields Modifier and Type Field Description protected org.keycloak.models.KeycloakSession
session
-
Constructor Summary
Constructors Constructor Description AbstractStorageManager(org.keycloak.models.KeycloakSession session, Class<? extends org.keycloak.provider.ProviderFactory> factoryTypeClass, Class<ProviderType> providerTypeClass, Function<org.keycloak.component.ComponentModel,StorageProviderModelType> toStorageProviderModelTypeFunction, String configScope)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected <T> void
consumeEnabledStorageProvidersWithTimeout(org.keycloak.models.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(org.keycloak.models.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(org.keycloak.models.RealmModel realm, Class<T> capabilityInterface)
Returns stream of all storageProviders within the realm that implements the capabilityInterface.protected <T extends ProviderType>
org.keycloak.component.ComponentFactory<T,ProviderType>getStorageProviderFactory(String providerId)
Returns a factory with the providerId, which produce instances of type CreatedProviderTypeprotected <T> T
getStorageProviderInstance(org.keycloak.models.RealmModel realm, String providerId, Class<T> capabilityInterface)
protected <T> T
getStorageProviderInstance(org.keycloak.models.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(org.keycloak.models.RealmModel realm, String providerId)
Returns an instance of StorageProvider model corresponding realm and providerIdstatic Stream<org.keycloak.component.ComponentModel>
getStorageProviderModels(org.keycloak.models.RealmModel realm, Class<? extends org.keycloak.provider.Provider> storageType)
Stream of ComponentModels of storageType.protected Long
getStorageProviderTimeout()
protected <R,T>
Stream<R>mapEnabledStorageProvidersWithTimeout(org.keycloak.models.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.
-
-
-
Constructor Detail
-
AbstractStorageManager
public AbstractStorageManager(org.keycloak.models.KeycloakSession session, Class<? extends org.keycloak.provider.ProviderFactory> factoryTypeClass, Class<ProviderType> providerTypeClass, Function<org.keycloak.component.ComponentModel,StorageProviderModelType> toStorageProviderModelTypeFunction, String configScope)
-
-
Method Detail
-
getStorageProviderTimeout
protected Long getStorageProviderTimeout()
-
getStorageProviderFactory
protected <T extends ProviderType> org.keycloak.component.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(org.keycloak.models.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(org.keycloak.models.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(org.keycloak.models.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(org.keycloak.models.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(org.keycloak.models.RealmModel realm, String providerId, Class<T> capabilityInterface)
-
getStorageProviderInstance
protected <T> T getStorageProviderInstance(org.keycloak.models.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(org.keycloak.models.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<org.keycloak.component.ComponentModel> getStorageProviderModels(org.keycloak.models.RealmModel realm, Class<? extends org.keycloak.provider.Provider> storageType)
Stream of ComponentModels of storageType.- Parameters:
realm
- Realm.storageType
- Type.- Returns:
- Stream of ComponentModels
-
-