package net.varkhan.base.functor.predicate; import net.varkhan.base.functor.Predicate; /** * <b></b>. * <p/> * * @author varkhan * @date 10/29/13 * @time 12:10 PM */ public abstract class TransformPredicate<A,C> implements Predicate<A,C> { protected final Predicate<A,C> pred; public TransformPredicate(Predicate<A,C> pred) { this.pred = pred; } public Predicate<A, C> component() { return pred; } public abstract boolean invoke(A arg, C ctx); public static <A,C> TransformPredicate<A,C> not(final Predicate<A,C> pred) { return new TransformPredicate<A,C>(pred) { @Override public boolean invoke(A arg, C ctx) { return !pred.invoke(arg, ctx); } @Override public String toString() { return toString("!"); } }; } protected String toString(String op) { StringBuilder buf = new StringBuilder(op); buf.append('('); buf.append(component().toString()); buf.append(')'); return buf.toString(); } @Override public String toString() { return toString(this.getClass().getSimpleName()); } }