package liveplugin; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nullable; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.regex.Pattern; import static java.util.Arrays.asList; public class MyFileUtil { public static List<String> fileNamesMatching(String regexp, String path) { List<File> files = FileUtil.findFilesByMask(Pattern.compile(regexp), new File(path)); return ContainerUtil.map(files, it -> it.getName()); } public static String asUrl(File file) { try { return file.toURI().toURL().toString(); } catch (MalformedURLException e) { throw new RuntimeException(e); } } @Nullable public static File findScriptFileIn(final String path, String fileName) { List<File> result = findScriptFilesIn(path, fileName); if (result.size() == 0) { return null; } else if (result.size() == 1) { return result.get(0); } else { List<String> filePaths = ContainerUtil.map(result, file -> file.getAbsolutePath()); throw new IllegalStateException("Found several scripts files under " + path + ":\n" + StringUtil.join(filePaths, ";\n")); } } public static List<File> findScriptFilesIn(final String path, String fileName) { File rootScriptFile = new File(path + File.separator + fileName); if (rootScriptFile.exists()) return asList(rootScriptFile); List<File> result = new ArrayList<>(); for (File file : allFilesInDirectory(new File(path))) { if (fileName.equals(file.getName())) { result.add(file); } } return result; } private static List<File> allFilesInDirectory(File dir) { LinkedList<File> result = new LinkedList<>(); File[] files = dir.listFiles(); if (files == null) return result; for (File file : files) { if (file.isFile()) { result.add(file); } else if (file.isDirectory()) { result.addAll(allFilesInDirectory(file)); } } return result; } public static String[] readLines(String url) throws IOException { return FileUtil.loadTextAndClose(new BufferedReader(new InputStreamReader(new URL(url).openStream()))).split("\n"); } }