From b21f17fc683a7528746a6d5e76c842d256876115 Mon Sep 17 00:00:00 2001 From: Marco Brandizi Date: Tue, 7 Nov 2023 00:32:21 +0100 Subject: [PATCH] ChainExecutor.andThen() added. --- .../ac/ebi/utils/runcontrol/ChainExecutor.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/uk/ac/ebi/utils/runcontrol/ChainExecutor.java b/src/main/java/uk/ac/ebi/utils/runcontrol/ChainExecutor.java index 4f73a9cdb..82216ffca 100644 --- a/src/main/java/uk/ac/ebi/utils/runcontrol/ChainExecutor.java +++ b/src/main/java/uk/ac/ebi/utils/runcontrol/ChainExecutor.java @@ -61,5 +61,21 @@ public void execute ( final Runnable action ) */ public ChainExecutor wrap ( Executor externalExecutor ) { return new ChainExecutor ( externalExecutor, this ); - } + } + + /** + * It's the reverse of {@link #wrap(Executor)}. + * + * Returns an executor that passes {@link #execute(Runnable) its runnable} to this executor, which + * then invokes nextExecutor. + * + * This can be used to chain things inside-out: + * {@code new ChainExecutor ( multiAttemptsExec ).andThen ( rateLimitedExec ) } + * + * TODO: never tested! + * + */ + public ChainExecutor andThen ( Executor nextExecutor ) { + return new ChainExecutor ( this, nextExecutor ); + } }