package com.hqyg.disjob.spring;
/*package com.hqyg.disjob.spring;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.hqyg.disjob.java.ExecutorBuilder;
import com.hqyg.disjob.java.bean.JobInfo;
import com.hqyg.disjob.java.job.RegisterEJob;
import com.hqyg.disjob.java.job.RegisterEJobAction;
import com.hqyg.disjob.java.utils.Log;
public class EJobBeanDefinitionParser implements BeanDefinitionParser {
private Class<?> beanClass;
private boolean required;
public EJobBeanDefinitionParser(Class<?> beanClass, boolean required) {
this.beanClass = beanClass;
this.required = required;
}
private final static String EXECUTOR_INFO = "ejob:executor" ;
private final static String EJOB_INFOR = "ejob:publish";
public BeanDefinition parse(Element element, ParserContext parserContext) {
RootBeanDefinition beanDefinition = new RootBeanDefinition();
beanDefinition.setBeanClass(beanClass);
String id = null;
String nodeName = element.getNodeName();
if(EXECUTOR_INFO.equals(nodeName.trim())){
id = element.getAttribute("name");
}else if(EJOB_INFOR.equals(nodeName)){
id = element.getAttribute("className");
}else{
throw new IllegalStateException("不支持的标签异常。");
}
if (id == null && required) {
throw new IllegalStateException("MyBeanDefinitionParser.parse,未知的业务逻辑处理:class:" + element.getAttribute("class"));
}
if (id != null && id.length() > 0) {
if (parserContext.getRegistry().containsBeanDefinition(id)) {
throw new IllegalStateException("Duplicate spring bean id " + id);
}
parserContext.getRegistry().registerBeanDefinition(id, beanDefinition);
}
NamedNodeMap nnm = element.getAttributes();
if(EXECUTOR_INFO.equals(nodeName)){
this.parserExecutor(nnm, beanDefinition);
}else if(EJOB_INFOR.equals(nodeName)){
boolean hasChildNodes = element.hasChildNodes();
if(!hasChildNodes){//<ejob:publish className="***.***.***.**Job" groupName="global_1" jobName="printClassInfo" />
JobInfo jobInfo = new JobInfo();
for (int i = 0; i < nnm.getLength(); i++) {
Node node = nnm.item(i);
String key = node.getLocalName();
String value = node.getNodeValue();
if("className".equals(key)){
jobInfo.setClassName(value);
}else if("groupName".equals(key)){
jobInfo.setGroupName(value);
}else if("jobName".equals(key)){
jobInfo.setJobName(value);
}
}
System.out.println(jobInfo.toString());
ExecutorBuilder.getJobExecutor().enDefaultQueue(new RegisterEJobAction(new RegisterEJob(jobInfo)));
}else{
NodeList nodeLists = element.getChildNodes();
for(int i=0 ; i < nodeLists.getLength();i++){
Node node = nodeLists.item(i);
//1、start parse: <ejob:group value="springConfig">
String ejobGroupNode = node.getNodeName() ;
if(ejobGroupNode.equals("ejob:group")){
NamedNodeMap groupValue = node.getAttributes() ;
if(groupValue.getLength() != 1 ){
throw new IllegalArgumentException(ejobGroupNode +" must to named.");
}
Node groupNode = groupValue.item(0);//只有一个数据节点
String key = groupNode.getLocalName();
String group = groupNode.getNodeValue() ;
if(!"value".equals(key)){
throw new IllegalArgumentException("the attribute of "+ ejobGroupNode +" must be value.");
}
//2、parse the node of ejob:group all of the children
NodeList jobNodeLists = node.getChildNodes();
if(jobNodeLists.getLength() < 1){
Log.warn(group + " 下面没有配置相关的job");
continue;
}
*//**
* 3、开始解析 ejob:job 节点
* <ejob:group value="springConfig">
<ejob:job className="com.hqyg.disjob.java.job.SpringLabelJobSec" jobName="labelJobSec" />
<ejob:job className="com.hqyg.disjob.java.job.SpringLabelJobThree" jobName="labelJobThree" />
</ejob:group>
*//*
for(int x=0;x<jobNodeLists.getLength();x++){
Node jobNode = jobNodeLists.item(x);
String jobNodeName = jobNode.getNodeName();
if(!"ejob:job".equals(jobNodeName)){
throw new IllegalArgumentException("<ejob:group> 下面的子节点必须是以 <ejob:job> 开头。");
}
//4、<ejob:job> 解析 他的节点属性
NamedNodeMap jobAttributes = jobNode.getAttributes();
String className = null ;
String jobName = null ;
for(int y=0;y < jobAttributes.getLength();y++){
Node jobAttributeNode = jobAttributes.item(y);
String jobkey = jobAttributeNode.getLocalName();
String jobValue = jobAttributeNode.getNodeValue();
if("className".equals(jobkey)){
className = jobValue;
continue;
}
if("jobName".equals(jobkey)){
jobName = jobValue ;
}
}
if(className == null || jobName == null){
throw new IllegalArgumentException(group + " 下面的第 "+(x+1)+" 个 <ejob:job> 没有配置 className or jobName。");
}
JobInfo jobInfo = new JobInfo(className, group, jobName);
System.out.println(jobInfo.toString());
}
}else{
System.err.println(ejobGroupNode);
}
}
}
}
return beanDefinition;
}
private void parserExecutor(NamedNodeMap nodeMap,RootBeanDefinition beanDefinition){
for (int i = 0; i < nodeMap.getLength(); i++) {
Node node = nodeMap.item(i);
String key = node.getLocalName();
String value = node.getNodeValue();
beanDefinition.getPropertyValues().add(key, value);
}
}
}
=======
package com.hqyg.disjob.spring;
/*package com.hqyg.disjob.spring;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.hqyg.disjob.java.ExecutorBuilder;
import com.hqyg.disjob.java.bean.JobInfo;
import com.hqyg.disjob.java.job.RegisterEJob;
import com.hqyg.disjob.java.job.RegisterEJobAction;
import com.hqyg.disjob.java.utils.Log;
public class EJobBeanDefinitionParser implements BeanDefinitionParser {
private Class<?> beanClass;
private boolean required;
public EJobBeanDefinitionParser(Class<?> beanClass, boolean required) {
this.beanClass = beanClass;
this.required = required;
}
private final static String EXECUTOR_INFO = "ejob:executor" ;
private final static String EJOB_INFOR = "ejob:publish";
public BeanDefinition parse(Element element, ParserContext parserContext) {
RootBeanDefinition beanDefinition = new RootBeanDefinition();
beanDefinition.setBeanClass(beanClass);
String id = null;
String nodeName = element.getNodeName();
if(EXECUTOR_INFO.equals(nodeName.trim())){
id = element.getAttribute("name");
}else if(EJOB_INFOR.equals(nodeName)){
id = element.getAttribute("className");
}else{
throw new IllegalStateException("不支持的标签异常。");
}
if (id == null && required) {
throw new IllegalStateException("MyBeanDefinitionParser.parse,未知的业务逻辑处理:class:" + element.getAttribute("class"));
}
if (id != null && id.length() > 0) {
if (parserContext.getRegistry().containsBeanDefinition(id)) {
throw new IllegalStateException("Duplicate spring bean id " + id);
}
parserContext.getRegistry().registerBeanDefinition(id, beanDefinition);
}
NamedNodeMap nnm = element.getAttributes();
if(EXECUTOR_INFO.equals(nodeName)){
this.parserExecutor(nnm, beanDefinition);
}else if(EJOB_INFOR.equals(nodeName)){
boolean hasChildNodes = element.hasChildNodes();
if(!hasChildNodes){//<ejob:publish className="***.***.***.**Job" groupName="global_1" jobName="printClassInfo" />
JobInfo jobInfo = new JobInfo();
for (int i = 0; i < nnm.getLength(); i++) {
Node node = nnm.item(i);
String key = node.getLocalName();
String value = node.getNodeValue();
if("className".equals(key)){
jobInfo.setClassName(value);
}else if("groupName".equals(key)){
jobInfo.setGroupName(value);
}else if("jobName".equals(key)){
jobInfo.setJobName(value);
}
}
System.out.println(jobInfo.toString());
ExecutorBuilder.getJobExecutor().enDefaultQueue(new RegisterEJobAction(new RegisterEJob(jobInfo)));
}else{
NodeList nodeLists = element.getChildNodes();
for(int i=0 ; i < nodeLists.getLength();i++){
Node node = nodeLists.item(i);
//1、start parse: <ejob:group value="springConfig">
String ejobGroupNode = node.getNodeName() ;
if(ejobGroupNode.equals("ejob:group")){
NamedNodeMap groupValue = node.getAttributes() ;
if(groupValue.getLength() != 1 ){
throw new IllegalArgumentException(ejobGroupNode +" must to named.");
}
Node groupNode = groupValue.item(0);//只有一个数据节点
String key = groupNode.getLocalName();
String group = groupNode.getNodeValue() ;
if(!"value".equals(key)){
throw new IllegalArgumentException("the attribute of "+ ejobGroupNode +" must be value.");
}
//2、parse the node of ejob:group all of the children
NodeList jobNodeLists = node.getChildNodes();
if(jobNodeLists.getLength() < 1){
Log.warn(group + " 下面没有配置相关的job");
continue;
}
*//**
* 3、开始解析 ejob:job 节点
* <ejob:group value="springConfig">
<ejob:job className="com.hqyg.disjob.java.job.SpringLabelJobSec" jobName="labelJobSec" />
<ejob:job className="com.hqyg.disjob.java.job.SpringLabelJobThree" jobName="labelJobThree" />
</ejob:group>
*//*
for(int x=0;x<jobNodeLists.getLength();x++){
Node jobNode = jobNodeLists.item(x);
String jobNodeName = jobNode.getNodeName();
if(!"ejob:job".equals(jobNodeName)){
throw new IllegalArgumentException("<ejob:group> 下面的子节点必须是以 <ejob:job> 开头。");
}
//4、<ejob:job> 解析 他的节点属性
NamedNodeMap jobAttributes = jobNode.getAttributes();
String className = null ;
String jobName = null ;
for(int y=0;y < jobAttributes.getLength();y++){
Node jobAttributeNode = jobAttributes.item(y);
String jobkey = jobAttributeNode.getLocalName();
String jobValue = jobAttributeNode.getNodeValue();
if("className".equals(jobkey)){
className = jobValue;
continue;
}
if("jobName".equals(jobkey)){
jobName = jobValue ;
}
}
if(className == null || jobName == null){
throw new IllegalArgumentException(group + " 下面的第 "+(x+1)+" 个 <ejob:job> 没有配置 className or jobName。");
}
JobInfo jobInfo = new JobInfo(className, group, jobName);
System.out.println(jobInfo.toString());
}
}else{
System.err.println(ejobGroupNode);
}
}
}
}
return beanDefinition;
}
private void parserExecutor(NamedNodeMap nodeMap,RootBeanDefinition beanDefinition){
for (int i = 0; i < nodeMap.getLength(); i++) {
Node node = nodeMap.item(i);
String key = node.getLocalName();
String value = node.getNodeValue();
beanDefinition.getPropertyValues().add(key, value);
}
}
}
>>>>>>> 31756b5772b8cccc509feda8167e5dd74f23142f:Ejob-jar/src/test/java/com/hqyg/disjob/spring/EJobBeanDefinitionParser.java
*/