From 1c949e01816441ae3a7286320b4a9371a50d241d Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Mon, 1 Sep 2025 17:07:13 -0500 Subject: experiment with completablefuture --- .../java/dev/figboot/launcher/core/Launcher.java | 24 +++++++++++---- .../core/task/LauncherExecutorService.java | 36 ---------------------- .../launcher/core/task/LauncherTaskExecutor.java | 36 ++++++++++++++++++++++ .../java/dev/figboot/launcher/core/task/Task.java | 8 +++++ .../launcher/core/task/TaskConsumingCallable.java | 1 + .../launcher/core/task/TaskConsumingRunnable.java | 1 + 6 files changed, 64 insertions(+), 42 deletions(-) delete mode 100644 core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java create mode 100644 core/src/main/java/dev/figboot/launcher/core/task/LauncherTaskExecutor.java (limited to 'core') diff --git a/core/src/main/java/dev/figboot/launcher/core/Launcher.java b/core/src/main/java/dev/figboot/launcher/core/Launcher.java index bc5b74e..9b9730b 100644 --- a/core/src/main/java/dev/figboot/launcher/core/Launcher.java +++ b/core/src/main/java/dev/figboot/launcher/core/Launcher.java @@ -1,25 +1,37 @@ package dev.figboot.launcher.core; -import dev.figboot.launcher.core.task.LauncherExecutorService; -import dev.figboot.launcher.core.task.TaskUtil; +import dev.figboot.launcher.core.task.LauncherTaskExecutor; +import dev.figboot.launcher.core.task.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; -import java.util.concurrent.ScheduledExecutorService; public class Launcher { private static final Logger LOGGER = LoggerFactory.getLogger(Launcher.class); protected final LauncherInterfaceAccess iface; - protected final ScheduledExecutorService service; + protected final LauncherTaskExecutor service; public Launcher(LauncherInterfaceAccess iface) { this.iface = iface; - service = new LauncherExecutorService(iface); + service = new LauncherTaskExecutor(iface); } public Future loadVersions() { - return service.submit(TaskUtil.taskRunnable((task) -> task.setLabel("sussy"))); + Task task = iface.createTask("somelabel"); + CompletableFuture.completedFuture(task) + .thenApplyAsync(t -> /* do something */ null, service) + .whenComplete((out, t) -> { + try { + if (t != null) { + task.unhandled(t); + } + } finally { + task.complete(); + } + }); + } } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java b/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java deleted file mode 100644 index 6c7f2be..0000000 --- a/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.figboot.launcher.core.task; - -import dev.figboot.launcher.core.LauncherInterfaceAccess; - -import java.util.concurrent.Callable; -import java.util.concurrent.RunnableScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; - -public class LauncherExecutorService extends ScheduledThreadPoolExecutor { - private final LauncherInterfaceAccess iface; - - public LauncherExecutorService(LauncherInterfaceAccess iface) { - super(4); - this.iface = iface; - } - - @Override - protected RunnableScheduledFuture decorateTask(Runnable runnable, RunnableScheduledFuture task) { - if (runnable instanceof TaskConsumingRunnable) { - TaskConsumingRunnable tcr = (TaskConsumingRunnable)runnable; - tcr.consumeTask(iface.createTask(tcr.initialLabel)); - } - - return task; - } - - @Override - protected RunnableScheduledFuture decorateTask(Callable callable, RunnableScheduledFuture task) { - if (callable instanceof TaskConsumingCallable) { - TaskConsumingCallable tcc = (TaskConsumingCallable)callable; - tcc.consumeTask(iface.createTask(tcc.initialLabel)); - } - - return task; - } -} diff --git a/core/src/main/java/dev/figboot/launcher/core/task/LauncherTaskExecutor.java b/core/src/main/java/dev/figboot/launcher/core/task/LauncherTaskExecutor.java new file mode 100644 index 0000000..ddf591e --- /dev/null +++ b/core/src/main/java/dev/figboot/launcher/core/task/LauncherTaskExecutor.java @@ -0,0 +1,36 @@ +package dev.figboot.launcher.core.task; + +import dev.figboot.launcher.core.LauncherInterfaceAccess; + +import java.util.concurrent.Callable; +import java.util.concurrent.RunnableScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; + +public class LauncherTaskExecutor extends ScheduledThreadPoolExecutor { + private final LauncherInterfaceAccess iface; + + public LauncherTaskExecutor(LauncherInterfaceAccess iface) { + super(4); + this.iface = iface; + } + + @Override + protected RunnableScheduledFuture decorateTask(Runnable runnable, RunnableScheduledFuture task) { + if (runnable instanceof TaskConsumingRunnable) { + TaskConsumingRunnable tcr = (TaskConsumingRunnable)runnable; + tcr.consumeTask(iface.createTask(tcr.initialLabel)); + } + + return task; + } + + @Override + protected RunnableScheduledFuture decorateTask(Callable callable, RunnableScheduledFuture task) { + if (callable instanceof TaskConsumingCallable) { + TaskConsumingCallable tcc = (TaskConsumingCallable)callable; + tcc.consumeTask(iface.createTask(tcc.initialLabel)); + } + + return task; + } +} diff --git a/core/src/main/java/dev/figboot/launcher/core/task/Task.java b/core/src/main/java/dev/figboot/launcher/core/task/Task.java index 57423d1..f96099a 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/Task.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/Task.java @@ -1,7 +1,15 @@ package dev.figboot.launcher.core.task; public interface Task { + // should set the state of this task from "Waiting" to "Running" + void notifyStart(); + + // should change the displayed label of this task void setLabel(String label); + + // should display some kind of warning to the user about the this task void unhandled(Throwable t); + + // should mark this task as "Completed" void complete(); } diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java index 4835105..a600433 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java @@ -23,6 +23,7 @@ class TaskConsumingCallable implements Callable { if (!taskAssigned) throw new IllegalStateException("task not assigned"); try { + task.notifyStart(); return delegate.call(task); } catch (Throwable t) { try { diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java index 46824c5..5ed3057 100644 --- a/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java +++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java @@ -23,6 +23,7 @@ class TaskConsumingRunnable implements Runnable { if (!taskAssigned) throw new IllegalStateException("task not assigned"); try { + task.notifyStart(); delegate.accept(task); } catch (Throwable t) { try { -- cgit v1.2.3-70-g09d2