All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wichell.framework.spring.BeanDefinitionParser Maven / Gradle / Ivy

The newest version!
package com.wichell.framework.spring;

import java.util.List;
import java.util.Properties;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import com.wichell.framework.quartz.AutowiringSpringBeanJobFactory;
import com.wichell.framework.quartz.QuartJobSchedulingListener;

public class BeanDefinitionParser extends AbstractBeanDefinitionParser {
	@SuppressWarnings("rawtypes")
	private Class clazz;

	@SuppressWarnings("rawtypes")
	public BeanDefinitionParser(Class clazz) {
		this.clazz = clazz;
	}

	@Override
	public BeanDefinition parse(Element element, ParserContext parserContext) {
		String id = getAttributer(element, "id");
		String clazzStr = getAttributer(element, "class");
		if (!StringUtils.isEmpty(clazzStr)) {
			try {
				clazz = Class.forName(clazzStr);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
		if (!StringUtils.isNotEmpty(id)) {
			id = clazz.getSimpleName();
		}
		RootBeanDefinition beanDefinition = new RootBeanDefinition();
		if ("kafka-provider".equals(element.getLocalName())) {
			providerInit(element, beanDefinition);
		}
		if ("kafka-consumer".equals(element.getLocalName())) {
			consumerInit(element, beanDefinition);
		}
		if ("redis".equals(element.getLocalName())) {
			redisInit(element, beanDefinition);
		}
		if ("quartz".equals(element.getLocalName())) {
			quartzInit(element, beanDefinition, parserContext);
		}
		if ("rocketmq-common-provider".equals(element.getLocalName())) {
			rocketmqCommonProviderInit(element, beanDefinition);
		}
		beanDefinition.setLazyInit(false);
		beanDefinition.setBeanClass(clazz);
		parserContext.getRegistry().registerBeanDefinition(id, beanDefinition);
		return beanDefinition;
	}

	private RootBeanDefinition quartzInit(Node node, RootBeanDefinition beanDefinition, ParserContext parserContext) {
		addSpringBean(beanDefinition, parserContext, QuartJobSchedulingListener.class);
		RootBeanDefinition autowiringSpringBeanJobFactory = addSpringBean(beanDefinition, parserContext,
				AutowiringSpringBeanJobFactory.class);
		String location = getAttributer(node, "configLocation");
		beanDefinition.getPropertyValues().add("configLocation", location);
		beanDefinition.getPropertyValues().add("jobFactory", autowiringSpringBeanJobFactory);
		return beanDefinition;
	}

	private RootBeanDefinition redisInit(Node node, RootBeanDefinition beanDefinition) {
		setProperty((Element) node, beanDefinition);
		return beanDefinition;
	}

	private RootBeanDefinition providerInit(Node node, RootBeanDefinition beanDefinition) {
		Properties prop = new Properties();
		List nodeList = getChildNode(node, "props");
		for (Node nd : nodeList) {
			for (Node pop : getChildNode(nd, "prop")) {
				prop.setProperty(getAttributer(pop, "key"), getNodeVal(pop));
			}
		}
		beanDefinition.setInitMethodName("init");
		beanDefinition.getPropertyValues().addPropertyValue("props", prop);
		return beanDefinition;
	}

	private RootBeanDefinition rocketmqCommonProviderInit(Node node, RootBeanDefinition beanDefinition) {
		List nodeList = getChildNode(node, "props");
		for (Node nd : nodeList) {
			for (Node pop : getChildNode(nd, "prop")) {
				beanDefinition.getPropertyValues().addPropertyValue(getAttributer(pop, "key"), getNodeVal(pop));
			}

		}
		// setProperty((Element) node, beanDefinition);
		beanDefinition.setInitMethodName("init");
		beanDefinition.setDestroyMethodName("shutdown");
		return beanDefinition;
	}

	private RootBeanDefinition consumerInit(Node node, RootBeanDefinition beanDefinition) {
		Properties prop = new Properties();
		List nodeList = getChildNode(node, "props");
		for (Node nd : nodeList) {
			for (Node pop : getChildNode(nd, "prop")) {
				prop.setProperty(getAttributer(pop, "key"), getNodeVal(pop));
			}
		}
		beanDefinition.getPropertyValues().addPropertyValue("props", prop);
		return beanDefinition;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy