package de.uniba.dsg.bpmnspector.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class FileUtils { private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class.getSimpleName()); public static List<Path> getAllBpmnFileFromDirectory(Path directory) { assertDirectory(directory); List<Path> bpmnFiles = new ArrayList<>(); try { Files.walkFileTree(directory, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { if (FileSystems.getDefault().getPathMatcher("glob:**/*.{bpmn,bpmn2,bpmn20.xml}").matches(file)) { bpmnFiles.add(file); } return FileVisitResult.CONTINUE; } }); } catch (IOException e) { LOGGER.error("IOException while traversing folder.", e); } return bpmnFiles; } public static void assertDirectory(Path path) { if (!Files.isDirectory(path)) { throw new IllegalArgumentException("Path " + path.toAbsolutePath() + " is no directory."); } } public static Path createResourcesForReports() throws IOException { Path reportDir = Paths.get("reports"); if(!Files.exists(reportDir)) { Files.createDirectory(reportDir); } Path reportResDir = reportDir.resolve("res"); if(!Files.exists(reportResDir)) { Files.createDirectory(reportResDir); } Path myPath = null; boolean loadedFromJar = false; try { URI uri = FileUtils.class.getResource("/reporting/res").toURI(); if (uri.getScheme().equals("jar")) { loadedFromJar = true; FileSystem fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); myPath = fileSystem.getPath("/reporting/res"); } else { myPath = Paths.get(uri); } Files.walk(myPath).forEach(path -> { try { Files.copy(path, reportResDir.resolve(path.getFileName().toString()), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { LOGGER.error("Unable to copy resources for HTML reports.", e); } }); } catch (URISyntaxException e) { LOGGER.error("Unable to copy resources for HTML reports.", e); } finally { // close FileSystem if created before - try-with resources is not working as FileSystem is needed during // Files.walk() if(loadedFromJar && myPath!=null) { myPath.getFileSystem().close(); } } return reportDir; } public static Path createFileForReport(Path reportDir, String filePrefix, String fileSuffix) { Path reportFile = reportDir.resolve(filePrefix + "_validation_result."+fileSuffix); for(int i=1; Files.exists(reportFile); i++) { reportFile = reportDir.resolve(filePrefix+"("+i+")_validation_result."+fileSuffix); } return reportFile; } }