class ThingsConfiguration {

    @Bean
    public NoneThingsDataRepositoryStrategy noneThingsDataRepositoryStrategy() {
        return new NoneThingsDataRepositoryStrategy();
    }

    @Bean(destroyMethod = "shutdown")
    public AutoUpdateThingsDataManager thingsDataManager(EventBus eventBus) {
        String fileName = "./data/things-property/data";
        return new AutoUpdateThingsDataManager(fileName, eventBus);
    }

    @Bean
    @Primary
    public AutoRegisterThingsRegistry thingsRegistry() {
        return new AutoRegisterThingsRegistry();
    }


    @Bean
    public DefaultPropertyMetricManager propertyMetricManager(ThingsRegistry registry,
                                                              EventBus eventBus,
                                                              @SuppressWarnings("all")
                                                              ReactiveRepository<PropertyMetricEntity, String> repository) {
        return new DefaultPropertyMetricManager(registry, eventBus, repository);
    }

    @Bean
    @ConditionalOnBean(DeviceRegistry.class)
    public DeviceThingsRegistrySupport deviceThingsRegistrySupport(DeviceRegistry registry) {
        return new DeviceThingsRegistrySupport(registry);
    }

    @Bean
    public DefaultThingsDataRepository thingDataService(ThingsRegistry registry,
                                                        ObjectProvider<ThingsDataCustomizer> customizers,
                                                        ObjectProvider<ThingsDataRepositoryStrategy> policies) {<FILL_FUNCTION_BODY>}
}

        DefaultThingsDataRepository service = new DefaultThingsDataRepository(registry);
        policies.forEach(service::addPolicy);

        for (ThingsDataCustomizer customizer : customizers) {
            customizer.custom(service);
        }
        return service;
    
<no_super_class>