package org.netbeans.gradle.project.script; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.NotDirectoryException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.project.util.NbConsumer; import org.netbeans.gradle.project.util.NbFileUtils; import org.netbeans.gradle.project.util.NbPredicate; public final class DefaultScriptFileProvider implements ScriptFileProvider { private static final String[] EXTENSIONS = {".gradle", ".gradle.kts"}; public DefaultScriptFileProvider() { } @Override public boolean isScriptFileName(String fileName) { String normName = fileName.toLowerCase(Locale.ROOT); for (String ext: EXTENSIONS) { if (normName.endsWith(ext)) { return true; } } return false; } @Override public Path findScriptFile(Path baseDir, String baseName) { for (String ext: EXTENSIONS) { Path candidate = baseDir.resolve(baseName + ext); if (Files.isRegularFile(candidate)) { return candidate; } } return null; } @Override public Iterable<Path> findScriptFiles(Path baseDir, String baseName) { List<Path> result = new ArrayList<>(EXTENSIONS.length); for (String ext: EXTENSIONS) { Path candidate = baseDir.resolve(baseName + ext); if (Files.isRegularFile(candidate)) { result.add(candidate); } } return result; } @Override public Collection<Path> findScriptFiles( Path baseDir, NbPredicate<? super String> baseNameFilter) throws IOException { final List<Path> result = new ArrayList<>(); findScriptFiles(baseDir, baseNameFilter, new NbConsumer<Path>() { @Override public void accept(Path script) { result.add(script); } }); return result; } @Override public void findScriptFiles( Path baseDir, NbPredicate<? super String> baseNameFilter, NbConsumer<Path> fileProcessor) throws IOException { ExceptionHelper.checkNotNullArgument(baseDir, "baseDir"); ExceptionHelper.checkNotNullArgument(baseNameFilter, "baseNameFilter"); ExceptionHelper.checkNotNullArgument(fileProcessor, "fileProcessor"); try (DirectoryStream<Path> files = Files.newDirectoryStream(baseDir)) { for (Path candidate: files) { String name = NbFileUtils.getFileNameStr(candidate); String normName = name.toLowerCase(Locale.ROOT); for (String ext: EXTENSIONS) { if (normName.endsWith(ext)) { String baseName = name.substring(0, name.length() - ext.length()); if (baseNameFilter.test(baseName)) { fileProcessor.accept(candidate); } break; } } } } catch (NotDirectoryException ex) { // Ignore, no files are returned } } }