package org.smoothbuild.builtin.file;
import static org.smoothbuild.builtin.file.match.PathMatcher.pathMatcher;
import static org.smoothbuild.io.fs.base.Path.path;
import java.util.function.Predicate;
import org.smoothbuild.builtin.file.match.IllegalPathPatternException;
import org.smoothbuild.io.fs.base.Path;
import org.smoothbuild.lang.message.ErrorMessage;
import org.smoothbuild.lang.plugin.Container;
import org.smoothbuild.lang.plugin.SmoothFunction;
import org.smoothbuild.lang.value.Array;
import org.smoothbuild.lang.value.ArrayBuilder;
import org.smoothbuild.lang.value.SFile;
import org.smoothbuild.lang.value.SString;
public class FilterFunction {
@SmoothFunction
public static Array<SFile> filter(Container container, Array<SFile> files, SString include) {
Predicate<Path> filter = createFilter(include.value());
ArrayBuilder<SFile> builder = container.create().arrayBuilder(SFile.class);
for (SFile file : files) {
if (filter.test(path(file.path().value()))) {
builder.add(file);
}
}
return builder.build();
}
private static Predicate<Path> createFilter(String pattern) {
try {
return pathMatcher(pattern);
} catch (IllegalPathPatternException e) {
throw new ErrorMessage("Parameter 'include' has illegal value. " + e.getMessage());
}
}
}