package com.github.signed.sandboxe.quartz.domain; import org.quartz.JobExecutionContext; import org.quartz.Trigger; import org.quartz.TriggerListener; import java.util.concurrent.CountDownLatch; import static java.util.concurrent.TimeUnit.SECONDS; class JobResult implements TriggerListener { private final CountDownLatch resultArrived = new CountDownLatch(1); private final String identifier; private Integer lastCompletedExecution = -1; public JobResult(String identifier) { this.identifier = identifier; } @Override public String getName() { return "wait for result " + identifier; } @Override public void triggerFired(Trigger trigger, JobExecutionContext context) { //nothing to do } @Override public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) { return false; } @Override public void triggerMisfired(Trigger trigger) { //nothing to do } @Override public void triggerComplete(Trigger trigger, JobExecutionContext context, Trigger.CompletedExecutionInstruction triggerInstructionCode) { try { lastCompletedExecution = context.getJobDetail().getJobDataMap().getInt("numberOfExecutions"); } finally { resultArrived.countDown(); } } public Integer waitFor() { try { resultArrived.await(15, SECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } return lastCompletedExecution; } }