dom4j代码

package com.intelitune.quartz;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.SimpleTrigger;

/**
 * 提供对quartz.xml的各种操作功能
 */
public class XmlDomParse {

    private static XmlDomParse dom4jParse = new XmlDomParse();
    private static final String FILENAME = dom4jParse.getClass().getResource("/").getPath() + "quartz.xml";

    /**
     * 构造方法私有化
     */
    private XmlDomParse() {

    }

    /**
     * 获取XmlDom4jParse单例实例
     */
    public static XmlDomParse getInstance() {
        if (dom4jParse == null) {
            dom4jParse = new XmlDomParse();
        }
        return dom4jParse;
    }

    /**
     * 获取Document
     */
    public Document getDocument() {
        Document document = null;
        try {
            SAXReader saxReader = new SAXReader();
            document = saxReader.read(new File(FILENAME)); // 读取XML文件,获得document对象
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return document;
    }

    /**
     * 检查某个jobdetail是否存在
     */
    public synchronized boolean checkJobDetail(String jobName, String jobGroup) {
        Document document = dom4jParse.getDocument();
        Element quartz = document.getRootElement(); // 获取根节点
        for (Iterator i = quartz.elementIterator(); i.hasNext();) {
            Element job = (Element) i.next();
            for (Iterator j = job.elementIterator(); j.hasNext();) {
                Element threeNode = (Element) j.next();
                if (threeNode.getName().equals("job-detail")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
                            Element job_detail = fourNode.getParent();
                            Element job_group = job_detail.element("job-group");
                            if (job_group.getText().equals(jobGroup)) {
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return false;
    }

    /**
     * 检查某个trigger是否存在
     */
    public synchronized boolean checkTrigger(String triggerName, String triggerGroup) {
        Document document = dom4jParse.getDocument();
        Element quartz = document.getRootElement(); // 获取根节点
        for (Iterator i = quartz.elementIterator(); i.hasNext();) {
            Element job = (Element) i.next();
            for (Iterator j = job.elementIterator(); j.hasNext();) {
                Element threeNode = (Element) j.next();
                if (threeNode.getName().equals("simple-trigger")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("trigger-name") && fourNode.getText().equals(triggerName)) {
                            Element job_detail = fourNode.getParent();
                            Element job_group = job_detail.element("trigger-group");
                            if (job_group.getText().equals(triggerGroup)) {
                                return true;
                            }
                        }
                    }
                }
            }
        }
        return false;
    }

    /**
     * 当作业执行之后,更新触发器trigger的数据
     */
    public synchronized boolean updateTrigger(JobExecutionContext jct) {
        Logger log = Logger.getLogger(jct.getJobDetail().getJobClass());
        log.info("当前正在执行的作业是  " + jct.getJobDetail().getFullName() + "  " + DateString.date2String(new Date()));
        JobDetail jobDetail = jct.getJobDetail();
        SimpleTrigger trigger = (SimpleTrigger) jct.getTrigger();
        JobDetailBean jobDetailBean = dom4jParse.getJobDetailBean(jobDetail.getName(), jobDetail.getGroup());
        TriggerBean triggerBean = dom4jParse.getTriggerBeanByjob(jobDetail.getName(), jobDetail.getGroup());
        triggerBean.setSuccessTriggered((Long.parseLong(triggerBean.getSuccessTriggered()) + 1) + "");
        triggerBean.setNextFireTime(DateString.date2String(trigger.getNextFireTime()));
        triggerBean.setPreviousFireTime(DateString.date2String(trigger.getPreviousFireTime()));
        return dom4jParse.updateJob(jobDetailBean, triggerBean);
    }
    
    /**
     * 查找所有的job
     */
    public synchronized List<JobAndSimpleTrigger> getJobAndSimpleTriggers() {
        List<JobAndSimpleTrigger> jastList = new ArrayList<JobAndSimpleTrigger>();
        JobDetailBean jobDetailBean = new JobDetailBean();
        TriggerBean triggerBean = new TriggerBean();
        boolean detailFlag = false;
        boolean triggerFlag = false;
        Document document = dom4jParse.getDocument();
        Element quartz = document.getRootElement(); // 获取根节点
        for (Iterator i = quartz.elementIterator(); i.hasNext();) {
            Element job = (Element) i.next();
            for (Iterator j = job.elementIterator(); j.hasNext();) {
                Element threeNode = (Element) j.next();
                //得到所有的jobdetail
                if (threeNode.getName().equals("job-detail")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("job-name")) {
                            Element job_detail = fourNode.getParent();
                            Element job_group = job_detail.element("job-group");
                            Element job_name = job_detail.element("job-name");
                            jobDetailBean = dom4jParse.getJobDetailBean(job_name.getText(), job_group.getText());
                            if(jobDetailBean!=null){
                                detailFlag = true;
                            }
//                            System.out.println(job_name.getName()+" --->"+job_name.getText());
//                            System.out.println(job_group.getName()+" --->"+job_group.getText());
                        }
                    }
                    
                }
                //得到所有的trigger
                if (threeNode.getName().equals("simple-trigger")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("trigger-name")) {
                            Element simple_trigger = fourNode.getParent();
                            Element trigger_name = simple_trigger.element("trigger-name");
                            Element trigger_group = simple_trigger.element("trigger-group");
                            triggerBean = dom4jParse.getTriggerBean(trigger_name.getText(), trigger_group.getText());
                            if(triggerBean!=null){
                                triggerFlag = true;
                            }
//                            System.out.println(trigger_name.getName()+" --->"+trigger_name.getText());
//                            System.out.println(trigger_group.getName()+" --->"+trigger_group.getText());
                        }
                    }
                }
                if(detailFlag&&triggerFlag){
//                    System.out.println("看看执行了几次");
                    JobAndSimpleTrigger jast = new JobAndSimpleTrigger(jobDetailBean, triggerBean);
                    jastList.add(jast);
                    detailFlag = false;
                    triggerFlag = false;
                }
            }
        }
        return jastList;
    }

    /**
     * 根据条件,修改某个job节点
     */
    public synchronized boolean updateJob(JobDetailBean jobDetailBean, TriggerBean triggerBean) {
        if(deleteJob(jobDetailBean.getName(), jobDetailBean.getGroup())){
            return createJobElement(jobDetailBean, triggerBean);
        }
        return false;
    }

    /**
     * 根据条件,删除某个job节点
     */
    public synchronized boolean deleteJob(String jobName, String jobGroup) {
        boolean result = false;
        XMLWriter writer = null;
        File file = null;
        try {
            OutputFormat format = OutputFormat.createPrettyPrint();
            file = new File(FILENAME);
            Document document = dom4jParse.getDocument();
            Element quartz = document.getRootElement(); // 获取根节点
            for (Iterator i = quartz.elementIterator(); i.hasNext();) {
                Element job = (Element) i.next();
                for (Iterator j = job.elementIterator(); j.hasNext();) {
                    Element threeNode = (Element) j.next();
                    if (threeNode.getName().equals("job-detail")) {
                        for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                            Element fourNode = (Element) k.next();
                            if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
                                Element job_detail = fourNode.getParent();
                                Element job_group = job_detail.element("job-group");
                                if (job_group.getText().equals(jobGroup)) {
                                    Element job_node = job_group.getParent().getParent();
                                    for (Iterator m = threeNode.elementIterator(); m.hasNext();){
                                        Element detail_trigger = (Element) m.next();
                                        for (Iterator n = threeNode.elementIterator(); n.hasNext();){
                                            Element last_node = (Element) n.next();
                                            detail_trigger.remove(last_node);
                                        }
                                        job_node.remove(detail_trigger);
                                    }
                                    job_node.getParent().remove(job_node);
                                }
                            }
                        }
                    }
                }
            }
            writer = new XMLWriter(new FileWriter(file), format);
            writer.write(document);
            writer.close();
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

    /**
     * 从xml中查找jobdetail
     */
    public synchronized JobDetailBean getJobDetailBean(String jobName, String jobGroup) {
        JobDetailBean jobDetailBean = new JobDetailBean();
        Document document = dom4jParse.getDocument();
        Element quartz = document.getRootElement(); // 获取根节点
        for (Iterator i = quartz.elementIterator(); i.hasNext();) {
            Element job = (Element) i.next();
            for (Iterator j = job.elementIterator(); j.hasNext();) {
                Element threeNode = (Element) j.next();
                if (threeNode.getName().equals("job-detail")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("job-name") && fourNode.getText().equals(jobName)) {
                            Element job_detail = fourNode.getParent();
                            Element job_group = job_detail.element("job-group");
                            if (job_group.getText().equals(jobGroup)) {
                                Element target = job_group.getParent();
                                jobDetailBean.setName(target.element("job-name").getText());
                                jobDetailBean.setGroup(target.element("job-group").getText());
                                jobDetailBean.setJobClass(target.element("job-class").getText());
                                jobDetailBean.setJobState(target.element("job-state").getText());
                                jobDetailBean.setDescription(target.element("job-description").getText());
                                return jobDetailBean;
                            }
                        }
                    }
                }
            }
        }
        return null;
    }

    /**
     * 从xml中查找trigger
     */
    public synchronized TriggerBean getTriggerBean(String triggerName, String triggerGroup) {
        TriggerBean triggerBean = new TriggerBean();
        Document document = dom4jParse.getDocument();
        Element quartz = document.getRootElement(); // 获取根节点
        for (Iterator i = quartz.elementIterator(); i.hasNext();) {
            Element job = (Element) i.next();
            for (Iterator j = job.elementIterator(); j.hasNext();) {
                Element threeNode = (Element) j.next();
                if (threeNode.getName().equals("simple-trigger")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("trigger-name") && fourNode.getText().equals(triggerName)) {
                            Element job_detail = fourNode.getParent();
                            Element job_group = job_detail.element("trigger-group");
                            if (job_group.getText().equals(triggerGroup)) {
                                Element target = job_group.getParent();
                                triggerBean.setName(target.element("trigger-name").getText());
                                triggerBean.setGroup(target.element("trigger-group").getText());
                                triggerBean.setJobName(target.element("trigger-job-name").getText());
                                triggerBean.setJobGroup(target.element("trigger-job-group").getText());
                                triggerBean.setDescription(target.element("trigger-description").getText());
                                triggerBean.setStartTime(target.element("start-time").getText());
                                triggerBean.setEndTime(target.element("end-time").getText());
                                triggerBean.setNextFireTime(target.element("next-fire-time").getText());
                                triggerBean.setPreviousFireTime(target.element("previous-fire-time").getText());
                                triggerBean.setRepeatCount(target.element("repeat-count").getText());
                                triggerBean.setRepeatInterval(target.element("repeat-interval").getText());
                                triggerBean.setSuccessTriggered(target.element("success-triggered").getText());
                                triggerBean.setPriority(target.element("priority").getText());
                                return triggerBean;
                            }
                        }
                    }
                }
            }
        }
        return null;
    }

    public synchronized TriggerBean getTriggerBeanByjob(String jobName, String jobGroup) {
        TriggerBean triggerBean = new TriggerBean();
        Document document = dom4jParse.getDocument();
        Element quartz = document.getRootElement(); // 获取根节点
        for (Iterator i = quartz.elementIterator(); i.hasNext();) {
            Element job = (Element) i.next();
            for (Iterator j = job.elementIterator(); j.hasNext();) {
                Element threeNode = (Element) j.next();
                if (threeNode.getName().equals("simple-trigger")) {
                    for (Iterator k = threeNode.elementIterator(); k.hasNext();) {
                        Element fourNode = (Element) k.next();
                        if (fourNode.getName().equals("trigger-job-name") && fourNode.getText().equals(jobName)) {
                            Element job_detail = fourNode.getParent();
                            Element job_group = job_detail.element("trigger-job-group");
                            if (job_group.getText().equals(jobGroup)) {
                                Element target = job_group.getParent();
                                triggerBean.setName(target.element("trigger-name").getText());
                                triggerBean.setGroup(target.element("trigger-group").getText());
                                triggerBean.setJobName(target.element("trigger-job-name").getText());
                                triggerBean.setJobGroup(target.element("trigger-job-group").getText());
                                triggerBean.setDescription(target.element("trigger-description").getText());
                                triggerBean.setStartTime(target.element("start-time").getText());
                                triggerBean.setEndTime(target.element("end-time").getText());
                                triggerBean.setNextFireTime(target.element("next-fire-time").getText());
                                triggerBean.setPreviousFireTime(target.element("previous-fire-time").getText());
                                triggerBean.setRepeatCount(target.element("repeat-count").getText());
                                triggerBean.setRepeatInterval(target.element("repeat-interval").getText());
                                triggerBean.setSuccessTriggered(target.element("success-triggered").getText());
                                triggerBean.setPriority(target.element("priority").getText());
                                return triggerBean;
                            }
                        }
                    }
                }
            }
        }
        return null;
    }
    /**
     * 将job和trigger的数据持久化保存
     */
    public synchronized boolean createJobElement(JobDetailBean jobDetailBean, TriggerBean triggerBean) {
        boolean result = false;
        XMLWriter writer = null;
        File file = null;
        try {
            OutputFormat format = OutputFormat.createPrettyPrint();
            file = new File(FILENAME);
            Document document = dom4jParse.getDocument();
            Element quartz = document.getRootElement(); // 获取根节点
            // 二级节点
            Element job = quartz.addElement("job");
            // 三级节点
            Element jobDetail = job.addElement("job-detail");
            // 四级节点
            Element jobDetail_name = jobDetail.addElement("job-name");
            jobDetail_name.setText(StringUtils.isEmpty(jobDetailBean.getName()) ? "" : jobDetailBean.getName());
            Element jobDetail_group = jobDetail.addElement("job-group");
            jobDetail_group.setText(StringUtils.isEmpty(jobDetailBean.getGroup()) ? "" : jobDetailBean.getGroup());
            Element jobDetail_class = jobDetail.addElement("job-class");
            jobDetail_class.setText(StringUtils.isEmpty(jobDetailBean.getJobClass()) ? "" : jobDetailBean.getJobClass());
            Element jobDetail_state = jobDetail.addElement("job-state");
            jobDetail_state.setText(StringUtils.isEmpty(jobDetailBean.getJobState()) ? "" : jobDetailBean.getJobState());
            Element jobDetail_description = jobDetail.addElement("job-description");
            jobDetail_description.setText(StringUtils.isEmpty(jobDetailBean.getDescription()) ? "" : jobDetailBean.getDescription());

            // 三级节点
            Element simpleTrigger = job.addElement("simple-trigger");
            // 四级节点
            Element trigger_name = simpleTrigger.addElement("trigger-name");
            trigger_name.setText(StringUtils.isEmpty(triggerBean.getName()) ? "" : triggerBean.getName());
            Element trigger_group = simpleTrigger.addElement("trigger-group");
            trigger_group.setText(StringUtils.isEmpty(triggerBean.getGroup()) ? "" : triggerBean.getGroup());
            Element trigger_job_name = simpleTrigger.addElement("trigger-job-name");
            trigger_job_name.setText(StringUtils.isEmpty(triggerBean.getJobName()) ? "" : triggerBean.getJobName());
            Element trigger_job_group = simpleTrigger.addElement("trigger-job-group");
            trigger_job_group.setText(StringUtils.isEmpty(triggerBean.getJobGroup()) ? "" : triggerBean.getJobGroup());
            Element trigger_description = simpleTrigger.addElement("trigger-description");
            trigger_description.setText(StringUtils.isEmpty(triggerBean.getDescription()) ? "" : triggerBean.getDescription());
            // start-time
            Element start_time = simpleTrigger.addElement("start-time");
            start_time.setText(StringUtils.isEmpty(triggerBean.getStartTime()) ? "" : triggerBean.getStartTime());
            // end-time
            Element end_time = simpleTrigger.addElement("end-time");
            end_time.setText(StringUtils.isEmpty(triggerBean.getEndTime()) ? "" : triggerBean.getEndTime());
            // next-fire-time
            Element next_fire_time = simpleTrigger.addElement("next-fire-time");
            next_fire_time.setText(StringUtils.isEmpty(triggerBean.getNextFireTime()) ? "" : triggerBean.getNextFireTime());
            // previous-fire-time
            Element previous_fire_time = simpleTrigger.addElement("previous-fire-time");
            previous_fire_time.setText(StringUtils.isEmpty(triggerBean.getPreviousFireTime()) ? "" : triggerBean.getPreviousFireTime());
            // repeat-count
            Element repeat_count = simpleTrigger.addElement("repeat-count");
            repeat_count.setText(StringUtils.isEmpty(triggerBean.getRepeatCount()) ? "" : triggerBean.getRepeatCount());
            // repeat-interval
            Element repeat_interval = simpleTrigger.addElement("repeat-interval");
            repeat_interval.setText(StringUtils.isEmpty(triggerBean.getRepeatInterval()) ? "" : triggerBean.getRepeatInterval());
            // success-triggered
            Element success_triggered = simpleTrigger.addElement("success-triggered");
            success_triggered.setText(StringUtils.isEmpty(triggerBean.getSuccessTriggered()) ? "" : triggerBean.getSuccessTriggered());
            // priority
            Element priority = simpleTrigger.addElement("priority");
            priority.setText(StringUtils.isEmpty(triggerBean.getPriority()) ? "" : triggerBean.getPriority());

            writer = new XMLWriter(new FileWriter(file), format);
            writer.write(document);
            writer.close();

            result = true;

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return result;
    }

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值