From 3727bdca70fad7e87cf7cc9be4d5ea5913884f99 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Thu, 3 Dec 2020 18:22:58 +0100 Subject: [PATCH] [New] Added ExecutionPolicy.delay(Duration, Runnable) --- .../li/strolch/execution/DelayedExecutionTimer.java | 10 ++++++++++ .../execution/SimpleDurationExecutionTimer.java | 5 +++++ .../strolch/execution/policy/ExecutionPolicy.java | 13 +++++++++++++ 3 files changed, 28 insertions(+) diff --git a/li.strolch.service/src/main/java/li/strolch/execution/DelayedExecutionTimer.java b/li.strolch.service/src/main/java/li/strolch/execution/DelayedExecutionTimer.java index 75379a579..5eee429e8 100644 --- a/li.strolch.service/src/main/java/li/strolch/execution/DelayedExecutionTimer.java +++ b/li.strolch.service/src/main/java/li/strolch/execution/DelayedExecutionTimer.java @@ -14,6 +14,16 @@ import li.strolch.model.activity.Action; */ public interface DelayedExecutionTimer { + /** + * Delays the execution of the given {@link Runnable} by the given milliseconds + * + * @param duration + * the duration in milliseconds before calling the {@link Runnable} + * @param runnable + * the action to call after the given delay + */ + void delay(long duration, Runnable runnable); + /** * Completes the execution of the given {@link Action} {@link Locator} after the given duration in milliseconds * diff --git a/li.strolch.service/src/main/java/li/strolch/execution/SimpleDurationExecutionTimer.java b/li.strolch.service/src/main/java/li/strolch/execution/SimpleDurationExecutionTimer.java index b52221bf7..217d07433 100644 --- a/li.strolch.service/src/main/java/li/strolch/execution/SimpleDurationExecutionTimer.java +++ b/li.strolch.service/src/main/java/li/strolch/execution/SimpleDurationExecutionTimer.java @@ -48,6 +48,11 @@ public class SimpleDurationExecutionTimer implements DelayedExecutionTimer { } } + @Override + public void delay(long duration, Runnable runnable) { + getExecutor().schedule(runnable, duration, TimeUnit.MILLISECONDS); + } + @Override public void execute(String realm, ComponentContainer container, Locator actionLocator, long duration) { synchronized (this.simulationTasks) { diff --git a/li.strolch.service/src/main/java/li/strolch/execution/policy/ExecutionPolicy.java b/li.strolch.service/src/main/java/li/strolch/execution/policy/ExecutionPolicy.java index 9ff815c53..41fdb9a21 100644 --- a/li.strolch.service/src/main/java/li/strolch/execution/policy/ExecutionPolicy.java +++ b/li.strolch.service/src/main/java/li/strolch/execution/policy/ExecutionPolicy.java @@ -197,6 +197,19 @@ public abstract class ExecutionPolicy extends StrolchPolicy { logger.info(msg); } + /** + * Delays the given {@link Runnable} by the given {@link Duration} + * + * @param duration + * the duration to delay + * @param runnable + * the action to delay + */ + public void delay(Duration duration, Runnable runnable) { + long delayMs = duration.toMillis(); + getDelayedExecutionTimer().delay(delayMs, runnable); + } + /** * Method to delay toExecuted() call for this action by the given duration *