class Fabric8ConfigReloadAutoConfiguration {

	/**
	 * Polling configMap ConfigurationChangeDetector.
	 * @param properties config reload properties
	 * @param strategy configuration update strategy
	 * @param fabric8ConfigMapPropertySourceLocator configMap property source locator
	 * @return a bean that listen to configuration changes and fire a reload.
	 */
	@Bean
	@ConditionalOnConfigMapsReloadEnabled
	@ConditionalOnBean(Fabric8ConfigMapPropertySourceLocator.class)
	@Conditional(PollingReloadDetectionMode.class)
	public ConfigurationChangeDetector configMapPropertyChangePollingWatcher(ConfigReloadProperties properties,
			ConfigurationUpdateStrategy strategy,
			Fabric8ConfigMapPropertySourceLocator fabric8ConfigMapPropertySourceLocator,
			TaskSchedulerWrapper<TaskScheduler> taskSchedulerWrapper, AbstractEnvironment environment) {

		return new PollingConfigMapChangeDetector(environment, properties, strategy,
				Fabric8ConfigMapPropertySource.class, fabric8ConfigMapPropertySourceLocator,
				taskSchedulerWrapper.getTaskScheduler());
	}

	/**
	 * Polling secrets ConfigurationChangeDetector.
	 * @param properties config reload properties
	 * @param strategy configuration update strategy
	 * @param fabric8SecretsPropertySourceLocator secrets property source locator
	 * @return a bean that listen to configuration changes and fire a reload.
	 */
	@Bean
	@ConditionalOnSecretsReloadEnabled
	@ConditionalOnBean(Fabric8SecretsPropertySourceLocator.class)
	@Conditional(PollingReloadDetectionMode.class)
	public ConfigurationChangeDetector secretsPropertyChangePollingWatcher(ConfigReloadProperties properties,
			ConfigurationUpdateStrategy strategy,
			Fabric8SecretsPropertySourceLocator fabric8SecretsPropertySourceLocator,
			TaskSchedulerWrapper<TaskScheduler> taskScheduler, AbstractEnvironment environment) {

		return new PollingSecretsChangeDetector(environment, properties, strategy, Fabric8SecretsPropertySource.class,
				fabric8SecretsPropertySourceLocator, taskScheduler.getTaskScheduler());
	}

	/**
	 * Event Based configMap ConfigurationChangeDetector.
	 * @param properties config reload properties
	 * @param strategy configuration update strategy
	 * @param fabric8ConfigMapPropertySourceLocator configMap property source locator
	 * @return a bean that listen to configMap change events and fire a reload.
	 */
	@Bean
	@ConditionalOnConfigMapsReloadEnabled
	@ConditionalOnBean(Fabric8ConfigMapPropertySourceLocator.class)
	@Conditional(EventReloadDetectionMode.class)
	public ConfigurationChangeDetector configMapPropertyChangeEventWatcher(ConfigReloadProperties properties,
			ConfigurationUpdateStrategy strategy,
			Fabric8ConfigMapPropertySourceLocator fabric8ConfigMapPropertySourceLocator,
			AbstractEnvironment environment, KubernetesClient kubernetesClient) {

		return new Fabric8EventBasedConfigMapChangeDetector(environment, properties, kubernetesClient, strategy,
				fabric8ConfigMapPropertySourceLocator, new KubernetesNamespaceProvider(environment));
	}

	/**
	 * Event Based secrets ConfigurationChangeDetector.
	 * @param properties config reload properties
	 * @param strategy configuration update strategy
	 * @param fabric8SecretsPropertySourceLocator secrets property source locator
	 * @return a bean that listen to secrets change events and fire a reload.
	 */
	@Bean
	@ConditionalOnSecretsReloadEnabled
	@ConditionalOnBean(Fabric8SecretsPropertySourceLocator.class)
	@Conditional(EventReloadDetectionMode.class)
	public ConfigurationChangeDetector secretsPropertyChangeEventWatcher(ConfigReloadProperties properties,
			ConfigurationUpdateStrategy strategy,
			Fabric8SecretsPropertySourceLocator fabric8SecretsPropertySourceLocator, AbstractEnvironment environment,
			KubernetesClient kubernetesClient) {<FILL_FUNCTION_BODY>}

}


		return new Fabric8EventBasedSecretsChangeDetector(environment, properties, kubernetesClient, strategy,
				fabric8SecretsPropertySourceLocator, new KubernetesNamespaceProvider(environment));
	
<no_super_class>