package sk.stuba.fiit.perconik.utilities.io;
import java.io.IOException;
import java.io.Serializable;
import java.nio.file.DirectoryStream;
import javax.annotation.Nullable;
import com.google.common.base.Predicate;
import static com.google.common.base.Preconditions.checkNotNull;
public final class PathFilters {
private PathFilters() {}
public static <T> DirectoryStream.Filter<T> using(final Predicate<? super T> predicate) {
return new PredicateFilter<>(predicate);
}
static final class PredicateFilter<T> implements DirectoryStream.Filter<T>, Serializable {
private static final long serialVersionUID = 0L;
private final Predicate<? super T> predicate;
PredicateFilter(final Predicate<? super T> predicate) {
this.predicate = checkNotNull(predicate);
}
public boolean accept(@Nullable final T entry) throws IOException {
return this.predicate.apply(entry);
}
@Override
public boolean equals(@Nullable final Object o) {
if (o instanceof PredicateFilter) {
PredicateFilter<?> other = (PredicateFilter<?>) o;
return this.predicate.equals(other.predicate);
}
return false;
}
@Override
public int hashCode() {
return this.predicate.hashCode();
}
@Override
public String toString() {
return "Filters.using(" + this.predicate + ")";
}
}
}