001package com.thed.zblast.scheduler;
002
003import com.thed.model.AutomationJobDetail;
004import org.quartz.*;
005import org.quartz.impl.StdSchedulerFactory;
006import org.quartz.impl.matchers.GroupMatcher;
007
008import java.util.Date;
009
010public class QuartzJobScheduler implements Job {
011
012        public void execute(JobExecutionContext context) throws JobExecutionException {
013
014                try {
015                        System.out.println("getName:::::" + context.getJobDetail().getKey().getName());
016                        System.out.println("getGroup:::::" + context.getJobDetail().getKey().getGroup());
017
018                        /*
019                         * Call executions....TODO: based on framework type call different impl
020                         * class(this one f=is for only maven so calling ditrectly)..
021                         */
022
023                        AutomationJobDetail automationJobDetail = (AutomationJobDetail) context.getJobDetail().getJobDataMap().get("automationJobDetail");
024                        
025                        ScheduledJobExecutor scheduledJobExecutor = new ScheduledJobExecutor();
026                        scheduledJobExecutor.executeJob(automationJobDetail);
027
028                } catch (Exception e) {
029                        e.printStackTrace();
030                }
031
032        }
033
034        public void scheduleJob(AutomationJobDetail automationJobDetail) {
035
036                // check if job with this name already scheduled..
037                try {
038
039                        boolean jobCheck = this.checkIfThisJobIsAlreadyInSchedule(automationJobDetail.getId() + "");
040                        System.out.println("jobCheck:::" + jobCheck);
041                        if (jobCheck) {
042                                System.out.println("""
043                                                Already this job is scheduled... %s getJobName::%s""".formatted(jobCheck, automationJobDetail.getJobName()));
044                                return;
045                        }
046
047                        System.out.println(" automationJobDetail :" + automationJobDetail);
048
049                        System.out.println("automationJobDetail.getCronExperssion():::" + automationJobDetail.getCronExperssion());
050
051                        JobDetail job = JobBuilder.newJob(QuartzJobScheduler.class).withIdentity(automationJobDetail.getId() + "", automationJobDetail.getJobName()).build();
052
053                        job.getJobDataMap().put("automationJobDetail", automationJobDetail);
054
055                        Date startDate = automationJobDetail.getStartDate();
056                        Date endDate = automationJobDetail.getEndDate();
057
058                        Trigger trigger = TriggerBuilder.newTrigger().startAt(startDate).withIdentity(automationJobDetail.getScheduleId() + "", automationJobDetail.getJobName())
059                                        .withSchedule(CronScheduleBuilder.cronSchedule(automationJobDetail.getCronExperssion()))
060                                        .endAt(endDate).build();
061
062                        Scheduler scheduler;
063
064                        scheduler = new StdSchedulerFactory().getScheduler();
065
066                        scheduler.start();
067
068                        scheduler.scheduleJob(job, trigger);
069
070                } catch (SchedulerException e) {
071
072                        e.printStackTrace();
073                        // TODO: handle exception ..
074                }
075
076        }
077
078        // check if this job already scheduled... sucheduled_id(from zee)
079        private boolean checkIfThisJobIsAlreadyInSchedule(String jobName)  {
080
081                Scheduler scheduler;
082                try {
083                        scheduler = new StdSchedulerFactory().getScheduler();
084                        for (String groupName : scheduler.getJobGroupNames()) {
085        
086                                System.out.println("groupName:" + groupName);
087        
088                                for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
089        
090                                        System.out.println("jobKey:::" + jobKey);
091                                        
092                                        if (jobName.equals(jobKey.getName())) {
093        
094                                                return true;
095                                        }
096                                }
097        
098                        }
099                } catch (SchedulerException e) {
100                        e.printStackTrace();
101                }
102                return false;
103        }
104        
105        public static boolean stopJob(String jobName)   {
106                
107                Scheduler scheduler;
108                try {
109                        scheduler = new StdSchedulerFactory().getScheduler();
110                
111                        for (String groupName : scheduler.getJobGroupNames()) {
112        
113                                System.out.println("groupName:" + groupName);
114        
115                                for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {
116        
117                                        System.out.println("jobKey:::" + jobKey);
118                                        
119                                        if (jobName.equals(jobKey.getName())) {
120                                                // Delete the identified Job from the Scheduler - and any associated Triggers.
121                                                return scheduler.deleteJob(jobKey);
122                                        }
123                                }
124        
125                        }
126                } catch (SchedulerException e) {
127                        e.printStackTrace();
128                }
129                return false;
130                
131        }
132
133}