package io.muoncore.spring.controllers;
import io.muoncore.spring.annotations.EnableMuonControllers;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import java.util.Map;
public class MuonControllersConfigurationHolderBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
public static final String MUON_CONTROLLERS_CONFIGURATION_HOLDER_BEAN_NAME = "muonControllersConfigurationHolder";
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
Map<String, Object> annotationAttributes = importingClassMetadata.getAnnotationAttributes(EnableMuonControllers.class.getName());
Object keepAliveTimeout = annotationAttributes.get("streamKeepAliveTimeout");
if (keepAliveTimeout != null && Integer.class == keepAliveTimeout.getClass()) {
BeanDefinitionBuilder definition = BeanDefinitionBuilder
.genericBeanDefinition(MuonControllersConfigurationHolder.class);
definition.addPropertyValue("streamKeepAliveTimeout", keepAliveTimeout);
definition.addPropertyValue("timeUnit", annotationAttributes.get("timeUnit"));
BeanDefinitionReaderUtils.registerBeanDefinition(
new BeanDefinitionHolder(definition.getBeanDefinition(), MUON_CONTROLLERS_CONFIGURATION_HOLDER_BEAN_NAME), registry);
}
}
}