package ameba.db.dsl; /** * <p>Abstract Transformed class.</p> * * @author icode * */ public abstract class Transformed<R> { /** * <p>fail.</p> * * @param transformer a {@link ameba.db.dsl.Transformer} object. * @param <T> a T object. * @return a {@link ameba.db.dsl.Transformed} object. */ public static <T> Transformed<T> fail(Transformer transformer) { return new Basic<>(transformer, null, false); } /** * <p>fail.</p> * * @param <T> a T object. * @return a {@link ameba.db.dsl.Transformed} object. */ public static <T> Transformed<T> fail() { return fail(null); } /** * <p>succ.</p> * * @param transformer a {@link ameba.db.dsl.Transformer} object. * @param result a T object. * @param <T> a T object. * @return a {@link ameba.db.dsl.Transformed} object. */ public static <T> Transformed<T> succ(Transformer transformer, T result) { return new Basic<>(transformer, result, true); } /** * <p>result.</p> * * @return a R object. */ public abstract R result(); /** * <p>success.</p> * * @return a boolean. */ public abstract boolean success(); /** * <p>transformer.</p> * * @return a {@link ameba.db.dsl.Transformer} object. */ public abstract Transformer transformer(); public static class Basic<T> extends Transformed<T> { private Transformer transformer; private T result; private boolean success; public Basic(Transformer transformer, T result, boolean success) { this.transformer = transformer; this.result = result; this.success = success; } @Override public T result() { return result; } @Override public boolean success() { return success; } @Override public Transformer transformer() { return transformer; } } }