package com.revolsys.parallel.process;
import java.util.function.Predicate;
import com.revolsys.parallel.channel.Channel;
public class FilterProcess<T> extends BaseInOutProcess<T, T> {
private Predicate<T> filter;
private boolean invert = false;
public Predicate<T> getFilter() {
return this.filter;
}
public boolean isInvert() {
return this.invert;
}
protected void postAccept(final T object) {
}
protected void postReject(final T object) {
}
@Override
protected void process(final Channel<T> in, final Channel<T> out, final T object) {
boolean test = this.filter.test(object);
if (this.invert) {
test = !test;
}
if (test) {
out.write(object);
postAccept(object);
} else {
postReject(object);
}
}
public void setFilter(final Predicate<T> filter) {
this.filter = filter;
}
public void setInvert(final boolean invert) {
this.invert = invert;
}
}