Interface ActionChain<S>

Type Parameters:
S - The type of the object going through state transformations

@API(status=EXPERIMENTAL, since="1.7.0") public interface ActionChain<S>
A chain of transforming Actions that can be run for values of type S. Since the next action is usually created on demand, the current runState of a chain can be queried.

By default any action chain instance is not thread safe, i.e. you should not try to invoke run() concurrently.

  • Method Details

    • startWith

      static <T> ActionChainArbitrary<T> startWith(Supplier<? extends T> initialSupplier)
      Create arbitrary for a chain with a certain initial state.
      Type Parameters:
      T - The type of state to be transformed through the chain.
      Parameters:
      initialSupplier - function to create the initial state object
      Returns:
      new arbitrary instance
    • transformations

      List<String> transformations()
      Return list of all applied transformations.

      For a chain that has not been run this list is always empty.

      Returns:
      list of describing strings
    • transformers

      @API(status=EXPERIMENTAL, since="1.7.1") List<Transformer<S>> transformers()
      Return list of all used transformer instances.

      Checking transformer instances - e.g. if they are of a certain implementation type - only makes sense if the transformer's description string is NOT set explicitly, e.g. in an Action's description() method.

      For a chain that has not been run this list is always empty.

      Returns:
      list of transformer instances
    • run

      S run()
      Run the list through all transformations provided by the actions to create it. Stop when either the maximum number of transformations is reached or if a Transformer.END_OF_CHAIN is being applied.
      Returns:
      the last resulting state of running through transformations
    • withInvariant

      default ActionChain<S> withInvariant(Consumer<S> invariant)
      Add an unlabelled invariant to a sequence.
      Parameters:
      invariant - will be checked after each successful action
      Returns:
      the same chain instance
      See Also:
    • withInvariant

      ActionChain<S> withInvariant(@Nullable @Nullable String label, Consumer<S> invariant)
      Add a labelled invariant to a sequence.
      Parameters:
      label - will show up in error messages when the invariant fails
      invariant - will be checked after each successful action
      Returns:
      the same chain instance
      See Also:
    • finalState

      Optional<S> finalState()
      The final state value after running an action chain.
      Returns:
      state or Optional.empty() if chain has not been run
    • running

      An action chain can be in different running states: NOT_RUN, RUNNING, FAILED, SUCEEDED
      Returns:
      a state object
    • peek

      ActionChain<S> peek(Consumer<S> peeker)
      Observe the state transformations of a running chain by adding a peeker to an action chain. The peeker will be called after each successful transformation but before checking invariants.

      There can be more than one peeker.

      Parameters:
      peeker - A consumer of a state object
      Returns:
      the same chain instance