001package org.kuali.ole.deliver.service;
002
003import org.apache.log4j.Logger;
004import org.kuali.ole.deliver.bo.OleBatchJobBo;
005import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
006import org.kuali.rice.krad.service.KRADServiceLocator;
007import org.quartz.JobDetail;
008import org.quartz.impl.StdScheduler;
009import org.springframework.scheduling.quartz.CronTriggerBean;
010
011import java.util.HashMap;
012import java.util.List;
013import java.util.Map;
014
015/**
016 * Created with IntelliJ IDEA.
017 * User: ?
018 * Date: 3/5/13
019 * Time: 5:28 PM
020 * To change this template use File | Settings | File Templates.
021 */
022public class OleBatchJobService {
023
024    private static final Logger LOG = Logger.getLogger(OleBatchJobService.class);
025
026    public OleBatchJobService() {
027        addAvailableJobsToScheduler();
028    }
029
030    /*
031     This method is used to add the active job  to the scheduler.
032     */
033    public void addAvailableJobsToScheduler() {
034
035        Map<String, String> batchMap = new HashMap<String, String>();
036        batchMap.put("jobEnableStatus", "true");
037        List<OleBatchJobBo> oleDeliverBatchJobBoList = (List<OleBatchJobBo>) KRADServiceLocator.getBusinessObjectService().findMatching(OleBatchJobBo.class, batchMap);
038        StdScheduler scheduler = (StdScheduler) GlobalResourceLoader.getService("scheduler");
039
040        if (oleDeliverBatchJobBoList.size() > 0) {
041            for (OleBatchJobBo oleDeliverBatchJobBo : oleDeliverBatchJobBoList) {
042
043                try {
044                    JobDetail jobDetail = (JobDetail) GlobalResourceLoader.getService(oleDeliverBatchJobBo.getJobTriggerName());
045                    CronTriggerBean cronTriggerBean = new CronTriggerBean();
046                    cronTriggerBean.setName(oleDeliverBatchJobBo.getJobTriggerName() + "Trigger");
047                    cronTriggerBean.setCronExpression(oleDeliverBatchJobBo.getJobCronExpression());
048                    cronTriggerBean.setJobName(jobDetail.getName());
049                    cronTriggerBean.setJobGroup(jobDetail.getGroup());
050                    cronTriggerBean.setJobDetail(jobDetail);
051                    try {
052                        scheduler.scheduleJob(jobDetail, cronTriggerBean);
053                        if (LOG.isInfoEnabled()){
054                            LOG.info(jobDetail.getName() + " job is scheduled");
055                        }
056                    } catch (Exception e) {
057                        scheduler.rescheduleJob(oleDeliverBatchJobBo.getJobTriggerName(), jobDetail.getName(), cronTriggerBean);
058                    }
059                } catch (Exception e) {
060                    LOG.error(e.getMessage() + " : Unable to schedule the job", e);
061                    //To change body of catch statement use File | Settings | File Templates.
062                }
063            }
064        }
065
066    }
067}