use of java.nio.file.PathMatcher in project elasticsearch by elastic.
the class IngestUserAgentPlugin method createUserAgentParsers.
static Map<String, UserAgentParser> createUserAgentParsers(Path userAgentConfigDirectory, UserAgentCache cache) throws IOException {
Map<String, UserAgentParser> userAgentParsers = new HashMap<>();
UserAgentParser defaultParser = new UserAgentParser(DEFAULT_PARSER_NAME, IngestUserAgentPlugin.class.getResourceAsStream("/regexes.yaml"), cache);
userAgentParsers.put(DEFAULT_PARSER_NAME, defaultParser);
if (Files.exists(userAgentConfigDirectory) && Files.isDirectory(userAgentConfigDirectory)) {
PathMatcher pathMatcher = userAgentConfigDirectory.getFileSystem().getPathMatcher("glob:**.yaml");
try (Stream<Path> regexFiles = Files.find(userAgentConfigDirectory, 1, (path, attr) -> attr.isRegularFile() && pathMatcher.matches(path))) {
Iterable<Path> iterable = regexFiles::iterator;
for (Path path : iterable) {
String parserName = path.getFileName().toString();
try (InputStream regexStream = Files.newInputStream(path, StandardOpenOption.READ)) {
userAgentParsers.put(parserName, new UserAgentParser(parserName, regexStream, cache));
}
}
}
}
return Collections.unmodifiableMap(userAgentParsers);
}
use of java.nio.file.PathMatcher in project jetty.project by eclipse.
the class BaseHome method getPaths.
/**
* Get a List of {@link Path}s from a provided pattern.
* <p>
* Resolution Steps:
* <ol>
* <li>If the pattern starts with "regex:" or "glob:" then a standard {@link PathMatcher} is built using
* {@link java.nio.file.FileSystem#getPathMatcher(String)} as a file search.</li>
* <li>If pattern starts with a known filesystem root (using information from {@link java.nio.file.FileSystem#getRootDirectories()}) then this is assumed to
* be a absolute file system pattern.</li>
* <li>All other patterns are treated as relative to BaseHome information:
* <ol>
* <li>Search ${jetty.home} first</li>
* <li>Search ${jetty.base} for overrides</li>
* </ol>
* </li>
* </ol>
* <p>
* Pattern examples:
* <dl>
* <dt><code>lib/logging/*.jar</code></dt>
* <dd>Relative pattern, not recursive, search <code>${jetty.home}</code> then <code>${jetty.base}</code> for lib/logging/*.jar content</dd>
*
* <dt><code>lib/**/*-dev.jar</code></dt>
* <dd>Relative pattern, recursive search <code>${jetty.home}</code> then <code>${jetty.base}</code> for files under <code>lib</code> ending in
* <code>-dev.jar</code></dd>
*
* <dt><code>etc/jetty.xml</code></dt>
* <dd>Relative pattern, no glob, search for <code>${jetty.home}/etc/jetty.xml</code> then <code>${jetty.base}/etc/jetty.xml</code></dd>
*
* <dt><code>glob:/opt/app/common/*-corp.jar</code></dt>
* <dd>PathMapper pattern, glob, search <code>/opt/app/common/</code> for <code>*-corp.jar</code></dd>
*
* </dl>
*
* <p>
* Notes:
* <ul>
* <li>FileSystem case sensitivity is implementation specific (eg: linux is case-sensitive, windows is case-insensitive).<br>
* See {@link java.nio.file.FileSystem#getPathMatcher(String)} for more details</li>
* <li>Pattern slashes are implementation neutral (use '/' always and you'll be fine)</li>
* <li>Recursive searching is limited to 30 levels deep (not configurable)</li>
* <li>File System loops are detected and skipped</li>
* </ul>
*
* @param pattern
* the pattern to search.
* @return the collection of paths found
* @throws IOException
* if error during search operation
*/
public List<Path> getPaths(String pattern) throws IOException {
StartLog.debug("getPaths('%s')", pattern);
List<Path> hits = new ArrayList<>();
if (PathMatchers.isAbsolute(pattern)) {
// Perform absolute path pattern search
// The root to start search from
Path root = PathMatchers.getSearchRoot(pattern);
// The matcher for file hits
PathMatcher matcher = PathMatchers.getMatcher(pattern);
if (FS.isValidDirectory(root)) {
PathFinder finder = new PathFinder();
finder.setIncludeDirsInResults(true);
finder.setFileMatcher(matcher);
finder.setBase(root);
Files.walkFileTree(root, SEARCH_VISIT_OPTIONS, MAX_SEARCH_DEPTH, finder);
hits.addAll(finder.getHits());
}
} else {
// Perform relative path pattern search
Path relativePath = PathMatchers.getSearchRoot(pattern);
PathMatcher matcher = PathMatchers.getMatcher(pattern);
PathFinder finder = new PathFinder();
finder.setIncludeDirsInResults(true);
finder.setFileMatcher(matcher);
// walk config sources backwards ...
ListIterator<ConfigSource> iter = sources.reverseListIterator();
while (iter.hasPrevious()) {
ConfigSource source = iter.previous();
if (source instanceof DirConfigSource) {
DirConfigSource dirsource = (DirConfigSource) source;
Path dir = dirsource.getDir();
Path deepDir = dir.resolve(relativePath);
if (FS.isValidDirectory(deepDir)) {
finder.setBase(dir);
Files.walkFileTree(deepDir, SEARCH_VISIT_OPTIONS, MAX_SEARCH_DEPTH, finder);
}
}
}
hits.addAll(finder.getHits());
}
Collections.sort(hits, new NaturalSort.Paths());
return hits;
}
use of java.nio.file.PathMatcher in project jetty.project by eclipse.
the class BaseHome method getPaths.
/**
* Search specified Path with pattern and return hits
*
* @param dir
* the path to a directory to start search from
* @param searchDepth
* the number of directories deep to perform the search
* @param pattern
* the raw pattern to use for the search (must be relative)
* @return the list of Paths found
* @throws IOException
* if unable to search the path
*/
public List<Path> getPaths(Path dir, int searchDepth, String pattern) throws IOException {
if (PathMatchers.isAbsolute(pattern)) {
throw new RuntimeException("Pattern cannot be absolute: " + pattern);
}
List<Path> hits = new ArrayList<>();
if (FS.isValidDirectory(dir)) {
PathMatcher matcher = PathMatchers.getMatcher(pattern);
PathFinder finder = new PathFinder();
finder.setFileMatcher(matcher);
finder.setBase(dir);
finder.setIncludeDirsInResults(true);
Files.walkFileTree(dir, SEARCH_VISIT_OPTIONS, searchDepth, finder);
hits.addAll(finder.getHits());
Collections.sort(hits, new NaturalSort.Paths());
}
return hits;
}
use of java.nio.file.PathMatcher in project jphp by jphp-compiler.
the class FileObject method matches.
@Signature(@Arg("pattern"))
public Memory matches(Environment env, Memory... args) {
FileSystem aDefault = FileSystems.getDefault();
PathMatcher pathMatcher = aDefault.getPathMatcher(args[0].toString());
return pathMatcher.matches(aDefault.getPath(file.getPath())) ? Memory.TRUE : Memory.FALSE;
}
use of java.nio.file.PathMatcher in project neo4j by neo4j.
the class SpecSuiteResources method findAndUnpackTo.
private static void findAndUnpackTo(FileSystem sourceFileSystem, Path sourceRootDirectory, String sourceFilePattern, File targetDirectory) throws IOException {
System.out.println("Unpacking to " + targetDirectory.getCanonicalPath());
PathMatcher matcher = sourceFileSystem.getPathMatcher(sourceFilePattern);
for (Iterator<Path> it = Files.walk(sourceRootDirectory, 3).iterator(); it.hasNext(); ) {
Path next = it.next();
if (matcher.matches(next)) {
File target = new File(targetDirectory, next.getFileName().toString());
Files.copy(next, target.toPath(), StandardCopyOption.REPLACE_EXISTING);
System.out.println("Unpacked " + target.getName());
}
}
}
Aggregations