/**
   * Returns a {@link IdentityStore} instance considering the given {@link IdentityConfiguration}
   * and {@link IdentityStoreConfiguration}.
   *
   * <p>Before returning the instance, the {@link IdentityContext} is initialized.
   *
   * @param context
   * @param configuration
   * @param storeConfig
   * @param <T>
   * @return
   */
  private <T extends IdentityStore<?>> T getIdentityStoreAndInitializeContext(
      final IdentityContext context,
      final IdentityConfiguration configuration,
      final IdentityStoreConfiguration storeConfig) {
    IdentityStore<?> store = this.stores.get(configuration).get(storeConfig);

    storeConfig.initializeContext(context, store);

    return (T) store;
  }