ActionSupport.java
- package com.github.dakusui.actionunit.core;
- import com.github.dakusui.actionunit.actions.*;
- import com.github.dakusui.actionunit.actions.cmd.CommanderConfig;
- import com.github.dakusui.actionunit.actions.cmd.UnixCommanderFactory;
- import com.github.dakusui.actionunit.actions.cmd.unix.Cmd;
- import java.util.List;
- import java.util.function.Consumer;
- import java.util.function.Function;
- import java.util.function.Predicate;
- import java.util.stream.Stream;
- import static com.github.dakusui.actionunit.core.context.ContextConsumer.NOP_CONSUMER;
- import static com.github.dakusui.actionunit.utils.InternalUtils.toStringIfOverriddenOrNoname;
- import static com.github.dakusui.printables.PrintableFunctionals.printableConsumer;
- import static java.util.Arrays.asList;
- import static java.util.Objects.requireNonNull;
- /**
- * A utility class to build various actions.
- */
- public enum ActionSupport {
- ;
- /**
- * Creates an action that does nothing.
- *
- * @return A nop action.
- */
- public static Action nop() {
- // Needs to be instantiated each time this method is called.
- // Otherwise, multiple nops cannot be identified in an action tree.
- return Leaf.of(NOP_CONSUMER);
- }
- public static Action leaf(Consumer<Context> consumer) {
- return Leaf.of(consumer);
- }
- /**
- * Returns an action named with a given string `name`.
- *
- * @param name A name given to `action`.
- * @param action An action to be named.
- * @return A named action.
- */
- public static Action named(String name, Action action) {
- return Named.of(name, action);
- }
- public static Attempt.Builder attempt(Action action) {
- return new Attempt.Builder(action);
- }
- public static <E> ForEach.Builder<E> forEach(Function<Context, Stream<E>> streamGenerator) {
- return forEach("i", streamGenerator);
- }
- /**
- * Note that the `variableName` is only used for printing the variable in an action tree.
- * Not used for identifying a corresponding entry in the context.
- *
- * @param variableName A name of variable.
- * @param streamGenerator A function to return stream.
- * @param <E> The type of the loop variable.
- * @return A builder for `ForEach2` action
- */
- public static <E> ForEach.Builder<E> forEach(String variableName, Function<Context, Stream<E>> streamGenerator) {
- return new ForEach.Builder<>(variableName, streamGenerator);
- }
- /**
- * Returns a builder to create an action repeated while `condition` is satisfied.
- *
- * @param condition A condition to make an action repeated.
- * @return A builder for `While` action.
- * @see While
- * @see While.Builder
- */
- public static While.Builder repeatWhile(Predicate<Context> condition) {
- return new While.Builder(condition);
- }
- /**
- * Returns a builder to create an action performed when `condition` is satisfied.
- *
- * @param cond A condition to make an actiono performed.
- * @return A builder for `When` action
- * @see When
- * @see When.Builder
- */
- public static When.Builder when(Predicate<Context> cond) {
- return new When.Builder(cond);
- }
- public static <T> With.Builder<T> with(Function<Context, T> value) {
- return with("i", value);
- }
- /**
- * Note that `variableName` won't be used to resolve a value of a variable, it is
- * merely intended to be printed in an action-tree or logs.
- *
- * @param variableName human-readable variable name.
- * @param value A function to give a value to be used a context under the returned action.
- * @param <T> The type of the variable
- * @return A builder for a `with` action.
- */
- public static <T> With.Builder<T> with(String variableName, Function<Context, T> value) {
- return new With.Builder<>(variableName, value);
- }
- public static Retry.Builder retry(Action action) {
- return new Retry.Builder(action);
- }
- public static TimeOut.Builder timeout(Action action) {
- return new TimeOut.Builder(action);
- }
- public static Action sequential(List<Action> actions) {
- return new Composite.Builder(actions).build();
- }
- public static Action parallel(List<Action> actions) {
- return new Composite.Builder(actions).parallel().build();
- }
- public static Cmd cmd(String program, ContextVariable... knownVariables) {
- return cmd(program, CommanderConfig.DEFAULT, knownVariables);
- }
- public static Cmd cmd(String program, CommanderConfig config, ContextVariable... knownVariables) {
- Cmd ret = new Cmd(config).commandName(requireNonNull(program).trim());
- for (ContextVariable each : knownVariables)
- ret = ret.declareVariable(each);
- return ret.append(" ");
- }
- public static UnixCommanderFactory unix() {
- return unix(CommanderConfig.DEFAULT);
- }
- public static UnixCommanderFactory unix(CommanderConfig config) {
- return UnixCommanderFactory.create(config);
- }
- public static Action simple(String name, Consumer<Context> consumer) {
- return leaf(printableConsumer(consumer).describe(name + ":" + toStringIfOverriddenOrNoname(consumer)));
- }
- /**
- * Creates an action that performs given actions one by one sequentially.
- *
- * @param actions Actions to be performed.
- * @return An action that performs `actions`.
- */
- public static Action sequential(Action... actions) {
- return sequential(asList(actions));
- }
- /**
- * Creates an action that performs given actions one by one sequentially.
- *
- * @param actions Actions to be performed.
- * @return An action that performs `actions`.
- */
- public static Action parallel(Action... actions) {
- return parallel(asList(actions));
- }
- /**
- * Returns an action to build `Ensured` action.
- * By adding actions to the returned builder's methods, you can construct an `Ensured` action, whose
- * target action's success is ensured by those added actions.
- *
- * @param target An action ensured to be successful.
- * @return A builder for an `Ensured` action.
- * @see Ensured
- */
- public static Ensured.Builder ensure(Action target) {
- Ensured.Builder b = new Ensured.Builder();
- b.target(target);
- return b;
- }
- }