package org.aksw.jena_sparql_api.spring.conversion;
import java.util.Collection;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.ConfigurableConversionService;
public class ConverterRegistryPostProcessor
implements BeanDefinitionRegistryPostProcessor
{
private static final Logger logger = LoggerFactory.getLogger(ConverterRegistryPostProcessor.class);
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinition beanDefinition = BeanDefinitionBuilder
.rootBeanDefinition(ConversionServiceFactoryBean.class)
//.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE)
.getBeanDefinition();
registry.registerBeanDefinition("conversionService", beanDefinition);
}
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
Map<String, Object> beansWithAnnotation = beanFactory.getBeansWithAnnotation(AutoRegistered.class);
Collection<?> converters = beansWithAnnotation.values();
ConfigurableConversionService conversionService = (ConfigurableConversionService) beanFactory
.getBean("conversionService");
for (Object converter : converters) {
logger.debug("AutoRegistered converter: " + converter.getClass() + " - " + converter);
conversionService.addConverter((Converter<?, ?>) converter);
}
logger.debug("AutoRegistered " + converters.size() + " converters");
}
}