From 00ade23b4de120fb30c084326050bb90ee5d262f Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Mon, 10 Sep 2018 17:51:35 +0200 Subject: [PATCH] [New] Added JobMode to StrolchJob for Manual, Once and Recurring --- .../src/main/java/li/strolch/job/JobMode.java | 7 +++++ .../main/java/li/strolch/job/StrolchJob.java | 27 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 li.strolch.agent/src/main/java/li/strolch/job/JobMode.java diff --git a/li.strolch.agent/src/main/java/li/strolch/job/JobMode.java b/li.strolch.agent/src/main/java/li/strolch/job/JobMode.java new file mode 100644 index 000000000..71f7f5e3b --- /dev/null +++ b/li.strolch.agent/src/main/java/li/strolch/job/JobMode.java @@ -0,0 +1,7 @@ +package li.strolch.job; + +public enum JobMode { + Manual, + Once, + Recurring +} diff --git a/li.strolch.agent/src/main/java/li/strolch/job/StrolchJob.java b/li.strolch.agent/src/main/java/li/strolch/job/StrolchJob.java index f7ebd8c40..c5ebdb4c5 100644 --- a/li.strolch.agent/src/main/java/li/strolch/job/StrolchJob.java +++ b/li.strolch.agent/src/main/java/li/strolch/job/StrolchJob.java @@ -41,6 +41,7 @@ public abstract class StrolchJob implements Runnable { private StrolchAgent agent; private String realmName; + private final JobMode mode; private long initialDelay; private TimeUnit initialDelayTimeUnit; private long delay; @@ -51,9 +52,10 @@ public abstract class StrolchJob implements Runnable { private ScheduledFuture future; private Throwable lastException; - public StrolchJob(StrolchAgent agent, long initialDelay, TimeUnit initialDelayTimeUnit, long delay, + public StrolchJob(StrolchAgent agent, JobMode jobMode, long initialDelay, TimeUnit initialDelayTimeUnit, long delay, TimeUnit delayTimeUnit) { this.agent = agent; + this.mode = jobMode; this.initialDelay = initialDelay; this.initialDelayTimeUnit = initialDelayTimeUnit; @@ -63,6 +65,10 @@ public abstract class StrolchJob implements Runnable { this.first = true; } + public JobMode getMode() { + return this.mode; + } + public String getName() { return getClass().getSimpleName(); } @@ -170,8 +176,19 @@ public abstract class StrolchJob implements Runnable { } this.nrOfExecutions++; - this.first = false; - schedule(); + + if (this.first) { + this.first = false; + + if (this.mode == JobMode.Recurring) { + schedule(); + } else { + logger.info("Not scheduling " + getName() + " after first execution as mode is " + this.mode); + } + + } else { + schedule(); + } } /** @@ -197,6 +214,10 @@ public abstract class StrolchJob implements Runnable { * @return this instance for chaining */ public StrolchJob schedule() { + if (this.mode == JobMode.Manual) { + logger.info("Not scheduling " + getName() + " as mode is " + this.mode); + return this; + } // first cancel a possibly already scheduled task cancel(false);