
com.github.dakusui.crest.matcherbuilders.AsObject Maven / Gradle / Ivy
package com.github.dakusui.crest.matcherbuilders;
import com.github.dakusui.crest.core.Matcher;
import com.github.dakusui.crest.functions.CrestPredicates;
import com.github.dakusui.crest.functions.TransformingPredicate;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.function.Predicate;
public class AsObject> implements MatcherBuilder {
private final Function super IN, ? extends OUT> function;
private final List> predicates;
public AsObject(Function super IN, ? extends OUT> function) {
this.function = function;
this.predicates = new LinkedList<>();
}
@SuppressWarnings("unchecked")
@Override
public SELF check(Predicate super OUT> predicate) {
this.predicates.add(predicate);
return (SELF) this;
}
@Override
public SELF check(Function super OUT, ? extends P> function, Predicate super P> predicate) {
return this.check(new TransformingPredicate
(predicate, function));
}
public SELF isNull() {
return this.check(CrestPredicates.isNull());
}
public SELF isNotNull() {
return this.check(CrestPredicates.isNotNull());
}
public SELF isSameAs(OUT value) {
return this.check(CrestPredicates.isSameAs(value));
}
public SELF isInstanceOf(Class> value) {
return this.check(CrestPredicates.isInstanceOf(value));
}
@Override
public Matcher super IN> all() {
return matcher(Op.AND);
}
@Override
public Matcher super IN> any() {
return matcher(Op.OR);
}
private Matcher super IN> matcher(Op op) {
return (predicates.size() == 1) ?
Matcher.Leaf.create(predicates.get(0), this.function) :
Objects.requireNonNull(op).create(predicates, this.function);
}
}