public ListenableFuture<TaskStatus> getTaskStatus(TaskState callersCurrentState) { requireNonNull(callersCurrentState, "callersCurrentState is null"); if (callersCurrentState.isDone()) { return immediateFuture(getTaskStatus()); } ListenableFuture<TaskState> futureTaskState = taskStateMachine.getStateChange(callersCurrentState); return Futures.transform(futureTaskState, input -> getTaskStatus(), directExecutor()); }
public ListenableFuture<TaskInfo> getTaskInfo(TaskState callersCurrentState) { requireNonNull(callersCurrentState, "callersCurrentState is null"); // If the caller's current state is already done, just return the current // state of this task as it will either be done or possibly still running // (due to a bug in the caller), since we can not transition from a done // state. if (callersCurrentState.isDone()) { return immediateFuture(getTaskInfo()); } ListenableFuture<TaskState> futureTaskState = taskStateMachine.getStateChange(callersCurrentState); return Futures.transform(futureTaskState, input -> getTaskInfo(), directExecutor()); }
TaskState taskState = taskStateMachine.getStateChange(TaskState.RUNNING).get(10, SECONDS); assertEquals(taskState, TaskState.FINISHED);
TaskState taskState = taskStateMachine.getStateChange(TaskState.RUNNING).get(10, SECONDS); assertEquals(taskState, TaskState.FINISHED);
public CompletableFuture<TaskInfo> getTaskInfo(TaskState callersCurrentState) { requireNonNull(callersCurrentState, "callersCurrentState is null"); // If the caller's current state is already done, just return the current // state of this task as it will either be done or possibly still running // (due to a bug in the caller), since we can not transition from a done // state. if (callersCurrentState.isDone()) { return completedFuture(getTaskInfo()); } CompletableFuture<TaskState> futureTaskState = taskStateMachine.getStateChange(callersCurrentState); return futureTaskState.thenApply(input -> getTaskInfo()); }
@Override public CompletableFuture<TaskInfo> getStateChange(TaskInfo taskInfo) { return taskStateMachine.getStateChange(taskInfo.getState()).thenApply(ignored -> getTaskInfo()); }