summaryrefslogtreecommitdiffstats
path: root/core/src/main/java/dev/figboot/launcher
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/dev/figboot/launcher')
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/Launcher.java9
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java2
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/config/SimpleLauncherConfiguration.java7
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java34
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/Task.java1
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskCallable.java6
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java30
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java30
-rw-r--r--core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java16
9 files changed, 128 insertions, 7 deletions
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 a95fed4..d6c7758 100644
--- a/core/src/main/java/dev/figboot/launcher/core/Launcher.java
+++ b/core/src/main/java/dev/figboot/launcher/core/Launcher.java
@@ -1,11 +1,12 @@
package dev.figboot.launcher.core;
+import dev.figboot.launcher.core.task.LauncherExecutorService;
+import dev.figboot.launcher.core.task.TaskUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
public class Launcher {
private static final Logger LOGGER = LoggerFactory.getLogger(Launcher.class);
@@ -15,10 +16,12 @@ public class Launcher {
public Launcher(LauncherInterfaceAccess iface) {
this.iface = iface;
- service = new ScheduledThreadPoolExecutor(4);
+ service = new LauncherExecutorService(iface);
}
public void loadVersions() throws IOException {
-
+ service.execute(TaskUtil.taskRunnable((task) -> {
+ task.setLabel("sussy");
+ }));
}
}
diff --git a/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java b/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java
index b1292ae..fc97d92 100644
--- a/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java
+++ b/core/src/main/java/dev/figboot/launcher/core/LauncherInterfaceAccess.java
@@ -3,5 +3,5 @@ package dev.figboot.launcher.core;
import dev.figboot.launcher.core.task.Task;
public interface LauncherInterfaceAccess {
- Task createTask(String description);
+ Task createTask(String label);
}
diff --git a/core/src/main/java/dev/figboot/launcher/core/config/SimpleLauncherConfiguration.java b/core/src/main/java/dev/figboot/launcher/core/config/SimpleLauncherConfiguration.java
index c5260bb..254a9c3 100644
--- a/core/src/main/java/dev/figboot/launcher/core/config/SimpleLauncherConfiguration.java
+++ b/core/src/main/java/dev/figboot/launcher/core/config/SimpleLauncherConfiguration.java
@@ -27,9 +27,10 @@ public class SimpleLauncherConfiguration implements LauncherConfiguration {
throw new SystemException("unable to determine sensible launcher home directory");
}
- return new SimpleLauncherConfiguration(new CacheLauncherDirectories(new PropertyLauncherDirectories(DIR_PROP_ROOT)
- .mapNull(osDirs)
- .mapNull(new DefaultLauncherDirectories(home)),
+ return new SimpleLauncherConfiguration(new CacheLauncherDirectories(
+ new PropertyLauncherDirectories(DIR_PROP_ROOT)
+ .mapNull(osDirs)
+ .mapNull(new DefaultLauncherDirectories(home)),
(dir) -> new SystemException(String.format("Couldn't determine directory %1$s! Try defining %2$s.%1$s.", dir.name(), DIR_PROP_ROOT))));
}
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
new file mode 100644
index 0000000..81d9768
--- /dev/null
+++ b/core/src/main/java/dev/figboot/launcher/core/task/LauncherExecutorService.java
@@ -0,0 +1,34 @@
+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 <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) {
+ if (runnable instanceof TaskConsumingRunnable) {
+ ((TaskConsumingRunnable)runnable).consumeTask(iface.createTask(null));
+ }
+
+ return task;
+ }
+
+ @Override
+ protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) {
+ if (callable instanceof TaskConsumingCallable) {
+ ((TaskConsumingCallable<V>)callable).consumeTask(iface.createTask(null));
+ }
+
+ return super.decorateTask(callable, 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 9fb603a..de025c1 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,5 +1,6 @@
package dev.figboot.launcher.core.task;
public interface Task {
+ void setLabel(String label);
void complete();
}
diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskCallable.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskCallable.java
new file mode 100644
index 0000000..6cc37ee
--- /dev/null
+++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskCallable.java
@@ -0,0 +1,6 @@
+package dev.figboot.launcher.core.task;
+
+@FunctionalInterface
+public interface TaskCallable<V> {
+ V call(Task task) throws Exception;
+}
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
new file mode 100644
index 0000000..3080bfc
--- /dev/null
+++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingCallable.java
@@ -0,0 +1,30 @@
+package dev.figboot.launcher.core.task;
+
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
+
+import java.util.concurrent.Callable;
+
+@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
+class TaskConsumingCallable<V> implements Callable<V> {
+ private final TaskCallable<V> delegate;
+
+ private Task task = null;
+ private boolean taskAssigned = false;
+
+ void consumeTask(Task task) {
+ this.task = task;
+ taskAssigned = true;
+ }
+
+ @Override
+ public V call() throws Exception {
+ if (!taskAssigned) throw new IllegalStateException("task not assigned");
+
+ try {
+ return delegate.call(task);
+ } finally {
+ task.complete();
+ }
+ }
+}
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
new file mode 100644
index 0000000..63464e1
--- /dev/null
+++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskConsumingRunnable.java
@@ -0,0 +1,30 @@
+package dev.figboot.launcher.core.task;
+
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
+
+import java.util.function.Consumer;
+
+@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
+class TaskConsumingRunnable implements Runnable {
+ private final Consumer<Task> delegate;
+
+ private Task task;
+ private boolean taskAssigned;
+
+ void consumeTask(Task task) {
+ this.task = task;
+ taskAssigned = true;
+ }
+
+ @Override
+ public void run() {
+ if (!taskAssigned) throw new IllegalStateException("task not assigned");
+
+ try {
+ delegate.accept(task);
+ } finally {
+ task.complete();
+ }
+ }
+}
diff --git a/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java b/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java
new file mode 100644
index 0000000..ffa0f9a
--- /dev/null
+++ b/core/src/main/java/dev/figboot/launcher/core/task/TaskUtil.java
@@ -0,0 +1,16 @@
+package dev.figboot.launcher.core.task;
+
+import java.util.concurrent.Callable;
+import java.util.function.Consumer;
+
+public final class TaskUtil {
+ private TaskUtil() { }
+
+ public static Runnable taskRunnable(Consumer<Task> command) {
+ return new TaskConsumingRunnable(command);
+ }
+
+ public static <V> Callable<V> taskCallable(TaskCallable<V> callable) {
+ return new TaskConsumingCallable<>(callable);
+ }
+}