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}