package message.search.configs.parser;
import message.template.resource.ThymeleafTemplateResource;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionReader;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.Resource;
import org.w3c.dom.Element;
import java.util.Map;
/**
* 解析搜索引擎配置文件.
*
* @author sunhao(sunhao.java@gmail.com)
* @version V1.0, 14-9-14 下午3:32
*/
public abstract class AbstractSearchEngineParser implements BeanDefinitionParser {
@Override
public BeanDefinition parse(Element element, ParserContext parserContext) {
//bean的注册
BeanDefinitionRegistry registry = parserContext.getRegistry();
dynamicLoadConfigBean(element, registry);
return null;
}
private void dynamicLoadConfigBean(Element element, BeanDefinitionRegistry registry) {
BeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(registry);
beanDefinitionReader.loadBeanDefinitions(this.getConfigFileResource(this.getTemplatePath(), getConfigs(element)));
}
private Resource getConfigFileResource(String templatePath, Map<String, String> context) {
return new ThymeleafTemplateResource(templatePath, context, "xml");
}
/**
* 获取每种配置文件中的字段
*
* @param element
* @return
*/
protected abstract Map<String, String> getConfigs(Element element);
/**
* 获取模板文件位置
*
* @return
*/
protected abstract String getTemplatePath();
}