@@ -0,0 +1,1441 @@
+package com.github.dakusui.actionunit.actions;%0A%0Aimport java.util.Formattable;%0Aimport java.util.Formatter;%0Aimport java.util.NoSuchElementException;%0Aimport java.util.function.Supplier;%0A%0Aimport static java.util.Objects.requireNonNull;%0A%0A/**%0A * Differences from %7B@code Optional%7D;%0A * %3Cul%3E%0A * %3Cli%3EIt can hold %7B@code null%7D, because it needs to be able to handle it.%3C/li%3E%0A * %3Cli%3ECompiler doesn't complain of its use in parameters.%3C/li%3E%0A * %3Cli%3EAlso it doesn't complain of calling %7B@code get()%7D without checking %7B@code isPresent()%7D in advance.%3C/li%3E%0A * %3C/ul%3E%0A *%0A * @param %3CT%3E Type of the value%0A */%0A@FunctionalInterface%0Apublic interface ValueHolder%3CT%3E extends Supplier%3CT%3E, Formattable %7B%0A  T get();%0A%0A  default boolean isPresent() %7B%0A    return false;%0A  %7D%0A%0A  default T orElse(T value) %7B%0A    return isPresent() ?%0A        get() :%0A        value;%0A  %7D%0A%0A  default void formatTo(Formatter formatter, int flags, int width, int precision) %7B%0A    formatter.format(%22%25s%22, isPresent() ?%0A        get() :%0A        emptyString()%0A    );%0A  %7D%0A%0A  default String emptyString() %7B%0A    return %22%5Bempty%5D%22;%0A  %7D%0A%0A  static %3CT%3E ValueHolder%3CT%3E of(T data) %7B%0A    requireNonNull(data);%0A    return new ValueHolder%3CT%3E() %7B%0A      @Override%0A      public T get() %7B%0A        return data;%0A      %7D%0A%0A      @Override%0A      public boolean isPresent() %7B%0A        return true;%0A      %7D%0A    %7D;%0A  %7D%0A%0A  static %3CT%3E ValueHolder%3CT%3E empty() %7B%0A    return () -%3E %7B%0A      throw new NoSuchElementException();%0A    %7D;%0A  %7D%0A%7D%0A

Add ValueHolder definition.