static <T> Supplier<ExecutionResult> resultSupplierOf(CheckedSupplier<T> supplier, AbstractExecution execution) { return () -> { ExecutionResult result = null; try { result = ExecutionResult.success(supplier.get()); } catch (Throwable t) { result = ExecutionResult.failure(t); } finally { execution.record(result); } return result; }; }
static <T> Supplier<CompletableFuture<ExecutionResult>> promiseOf(CheckedSupplier<T> supplier, AbstractExecution execution) { Assert.notNull(supplier, "supplier"); return () -> { ExecutionResult result; try { execution.preExecute(); result = ExecutionResult.success(supplier.get()); } catch (Throwable e) { result = ExecutionResult.failure(e); } execution.record(result); return CompletableFuture.completedFuture(result); }; }
static <T> Supplier<CompletableFuture<ExecutionResult>> promiseOf(ContextualSupplier<T> supplier, AbstractExecution execution) { Assert.notNull(supplier, "supplier"); return () -> { ExecutionResult result; try { execution.preExecute(); result = ExecutionResult.success(supplier.get(execution)); } catch (Throwable e) { result = ExecutionResult.failure(e); } execution.record(result); return CompletableFuture.completedFuture(result); }; }
static <T> Supplier<CompletableFuture<ExecutionResult>> promiseOfStage( ContextualSupplier<? extends CompletionStage<? extends T>> supplier, AbstractExecution execution) { Assert.notNull(supplier, "supplier"); return () -> { CompletableFuture<ExecutionResult> promise = new CompletableFuture<>(); try { execution.preExecute(); supplier.get(execution).whenComplete((innerResult, failure) -> { // Unwrap CompletionException cause ExecutionResult result; if ( failure != null ) { if ( failure instanceof CompletionException) { failure = failure.getCause(); } result = ExecutionResult.failure(failure); } else { result = ExecutionResult.success(innerResult); } execution.record(result); promise.complete(result); }); } catch (Throwable e) { ExecutionResult result = ExecutionResult.failure(e); execution.record(result); promise.complete(result); } return promise; }; }
static <T> Supplier<CompletableFuture<ExecutionResult>> promiseOfStage( CheckedSupplier<? extends CompletionStage<? extends T>> supplier, AbstractExecution execution) { Assert.notNull(supplier, "supplier"); return () -> { CompletableFuture<ExecutionResult> promise = new CompletableFuture<>(); try { execution.preExecute(); supplier.get().whenComplete((innerResult, failure) -> { // Unwrap CompletionException cause ExecutionResult result; if ( failure != null ) { if ( failure instanceof CompletionException) { failure = failure.getCause(); } result = ExecutionResult.failure(failure); } else { result = ExecutionResult.success(innerResult); } execution.record(result); promise.complete(result); }); } catch (Throwable e) { ExecutionResult result = ExecutionResult.failure(e); execution.record(result); promise.complete(result); } return promise; }; }