package com.github.signed.sandboxe.quartz.gui; import com.github.signed.sandboxe.quartz.domain.Domain; import com.github.signed.sandboxe.quartz.domain.SchedulerFacade; import com.github.signed.sandboxe.quartz.domain.SleepingJob; import com.github.signed.sandboxe.quartz.domain.JobFacts; import com.github.signed.sandboxe.quartz.domain.JobScheduler; import com.github.signed.sandboxe.quartz.gui.actions.ExecuteRunnableOnAction; import com.github.signed.sandboxe.quartz.gui.actions.IsRunningPeriodically; import com.github.signed.sandboxe.quartz.gui.actions.ListKnownTriggers; import com.github.signed.sandboxe.quartz.gui.actions.PauseScheduler; import com.github.signed.sandboxe.quartz.gui.actions.ResumeAll; import com.github.signed.sandboxe.quartz.gui.actions.RunJobOnce; import com.github.signed.sandboxe.quartz.gui.actions.RunJobPeriodically; import com.github.signed.sandboxe.quartz.gui.actions.StopPeriodicalExecution; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.TriggerKey; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.WindowConstants; import java.util.concurrent.TimeUnit; import static javax.swing.SwingUtilities.invokeLater; public class Gui { private Domain domain; public static void main(String[] args) throws Exception { JobScheduler jobScheduler = new JobScheduler(); jobScheduler.loadDefaultPropertiesFromQuartz(); jobScheduler.misfireThreshold((long) 1, TimeUnit.SECONDS); final Scheduler scheduler = jobScheduler.createCustomizedScheduler(); final JobDetail jobDetail = JobBuilder.newJob(SleepingJob.class).withIdentity("greeting job", "polite").storeDurably().usingJobData("numberOfExecutions", 0).build(); scheduler.addJob(jobDetail, false); scheduler.start(); TriggerKey triggerKey = TriggerKey.triggerKey("good night trigger", "polite"); final JobFacts facts = new JobFacts(jobDetail.getKey(), triggerKey); invokeLater(new Runnable() { public void run() { new Gui(scheduler,facts).createAndShowGUI(); } }); } private final Scheduler scheduler; private final JobFacts facts; private final SchedulerFacade schedulerFacade; public Gui(Scheduler scheduler, JobFacts facts) { this.scheduler = scheduler; this.facts = facts; schedulerFacade = new SchedulerFacade(scheduler); domain = new Domain(this.facts, schedulerFacade); } private void createAndShowGUI() { JFrame frame = new JFrame("Gui"); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JPanel panel = new JPanel(); JPanel schedulerInteraction = getPanelForSchedulerInteraction(scheduler); JPanel periodicallyPanel = getPanelForPeriodicPolling(); JButton oneShot = new JButton("trigger by hand"); panel.add(schedulerInteraction); panel.add(periodicallyPanel); panel.add(oneShot); frame.getContentPane().add(panel); oneShot.addActionListener(new ExecuteRunnableOnAction(new RunJobOnce(domain))); frame.pack(); frame.setVisible(true); } private JPanel getPanelForSchedulerInteraction(Scheduler scheduler) { JPanel schedulerInteraction = new JPanel(); JButton listTriggerForJob = new JButton("list trigger for job"); listTriggerForJob.addActionListener(new ExecuteRunnableOnAction(new ListKnownTriggers(scheduler, facts.jobKey))); JButton pauseScheduler = new JButton("pause"); pauseScheduler.addActionListener(new ExecuteRunnableOnAction(new PauseScheduler(scheduler))); JButton resume = new JButton("resume"); resume.addActionListener(new ExecuteRunnableOnAction(new ResumeAll(scheduler))); schedulerInteraction.add(pauseScheduler); schedulerInteraction.add(resume); schedulerInteraction.add(listTriggerForJob); return schedulerInteraction; } private JPanel getPanelForPeriodicPolling() { JPanel periodicallyPanel = new JPanel(); JButton periodically = new JButton("run periodically"); JButton cancelPeriodically = new JButton("cancel periodical execution"); JButton isPeriodicPollingEnabled = new JButton("enabled?"); periodicallyPanel.add(periodically); periodicallyPanel.add(cancelPeriodically); periodicallyPanel.add(isPeriodicPollingEnabled); periodically.addActionListener(new ExecuteRunnableOnAction(new RunJobPeriodically(new Domain(facts, schedulerFacade)))); cancelPeriodically.addActionListener(new ExecuteRunnableOnAction(new StopPeriodicalExecution(domain))); isPeriodicPollingEnabled.addActionListener(new ExecuteRunnableOnAction(new IsRunningPeriodically(domain))); return periodicallyPanel; } }