package ctbrec.ui.tasks; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import ctbrec.GlobalThreadPool; import ctbrec.Model; import ctbrec.recorder.Recorder; public abstract class AbstractModelTask { protected Recorder recorder; private Consumer concreteTask; protected AbstractModelTask(Recorder recorder, Consumer concreteTask) { this.recorder = recorder; this.concreteTask = concreteTask; } public CompletableFuture executeSync(Model model) { try { concreteTask.accept(model); return CompletableFuture.completedFuture(model); } catch (Exception e) { return CompletableFuture.failedFuture(e); } } public CompletableFuture execute(Model model) { return CompletableFuture.supplyAsync(() -> { try { concreteTask.accept(model); return model; } catch (Exception e) { throw new TaskExecutionException(e); } }, GlobalThreadPool.get()); } }