All Downloads are FREE. Search and download functionalities are using the official Maven repository.

datahub.protobuf.DirectoryWalker Maven / Gradle / Ivy

There is a newer version: 0.14.1-12rc1
Show newest version
package datahub.protobuf;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.stream.Stream;

public class DirectoryWalker {
  private final Path rootDirectory;
  private final PathMatcher includeMatcher;
  private final ArrayList excludeMatchers;

  public DirectoryWalker(String directory, String[] excludePatterns) {
    this.rootDirectory = Path.of(directory);
    this.includeMatcher = FileSystems.getDefault().getPathMatcher("glob:**/*.proto");
    this.excludeMatchers = new ArrayList<>();
    if (excludePatterns != null) {
      for (String excludePattern : excludePatterns) {
        this.excludeMatchers.add(FileSystems.getDefault().getPathMatcher("glob:" + excludePattern));
      }
    }
  }

  public Stream walkFiles() throws IOException {
    final Path baseDir = this.rootDirectory;
    final ArrayList files = new ArrayList<>();
    Files.walkFileTree(
        this.rootDirectory,
        new FileVisitor() {
          @Override
          public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
              throws IOException {
            return FileVisitResult.CONTINUE;
          }

          @Override
          public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
              throws IOException {
            boolean excluded = false;
            Path relativePath = baseDir.relativize(file);
            if (!includeMatcher.matches(relativePath)) {
              excluded = true;
            } else {
              for (PathMatcher matcher : excludeMatchers) {
                if (matcher.matches(relativePath)) {
                  excluded = true;
                }
              }
            }

            if (!excluded) {
              files.add(file);
            }
            return FileVisitResult.CONTINUE;
          }

          @Override
          public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
          }

          @Override
          public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
            return FileVisitResult.CONTINUE;
          }
        });

    return files.stream();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy