private boolean nameMatchesGroupPath(String name, String[] groupPath) { for (String group : groupPath) { if (wildcardMap.containsKey(group)) { return wildcardMap.get(group).matches(name); } if (!name.contains(group)) { return false; } } return true; }
private static void collectFiles(WildcardMatcher matcher, File dir, Set<File> fileSet, Set<File> visitedDirs) throws IOException { if (visitedDirs.contains(dir.getCanonicalFile())) { return; } else { visitedDirs.add(dir.getCanonicalFile()); } File[] files = dir.listFiles(); if (files == null) { throw new IOException(String.format("Failed to access directory '%s'", dir)); } for (File file : files) { // check for both to catch symlinks as well if (matcher.matches(file.getCanonicalPath()) || matcher.matches(file.getPath())) { fileSet.add(file.getCanonicalFile()); } if (file.isDirectory()) { collectFiles(matcher, file, fileSet, visitedDirs); } } }
@Test public void testMatchesStarAtEnd() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/*"); assertEquals("foo/[^/:]*", m.getRegex()); assertTrue(m.matches("foo/test.txt")); assertTrue(m.matches("foo/bar")); assertFalse(m.matches("foo")); assertFalse(m.matches("foo/bar/test.txt")); assertFalse(m.matches("/foo/")); assertFalse(m.matches("foo/bar/")); assertFalse(m.matches("foo/bar/doz/gna/test.txt")); }
@Test public void testMatchesMultiDirectoryNoWildcardUsed_Win() throws Exception { WildcardMatcher m = new WildcardMatcher("C:\\Users\\Norman\\MERIS\\data.nc", true); assertEquals("c:/users/norman/meris/data\\.nc", m.getRegex()); assertTrue(m.matches("C:\\Users\\Norman\\MERIS\\data.nc")); assertTrue(m.matches("C:\\Users\\Norman\\meris\\data.nc")); assertTrue(m.matches("C:\\Users\\Norman\\meris\\data.NC")); assertTrue(m.matches("c:\\Users\\Norman\\meris\\data.nc")); assertTrue(m.matches("C:/Users/Norman/MERIS/data.nc")); assertTrue(m.matches("C:/Users/Norman/meris/data.nc")); assertTrue(m.matches("C:/Users/Norman/meris/data.NC")); assertTrue(m.matches("c:/Users/Norman/meris/data.nc")); assertFalse(m.matches("D:\\Users\\Norman\\MERIS\\data.nc")); assertFalse(m.matches("\\Users\\Norman\\MERIS\\data.nc")); }
@Test public void testMatchesDoubleStarInBetween() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/**/test.txt"); assertEquals("foo((/.*/)?|/)test\\.txt", m.getRegex()); assertTrue(m.matches("foo/test.txt")); assertTrue(m.matches("foo/bar/test.txt")); assertTrue(m.matches("foo/bar/doz/test.txt")); assertTrue(m.matches("foo/bar/doz/gna/test.txt")); assertFalse(m.matches("/foo/test.txt")); assertFalse(m.matches("foo/bar/doz/gna/test.zip")); }
@Test public void testMatchesAntExamplePattern4() throws Exception { WildcardMatcher m = new WildcardMatcher("**/test/**"); assertEquals("(.*/)?test(/.*)?", m.getRegex()); assertTrue(m.matches("test")); assertTrue(m.matches("test/java")); assertTrue(m.matches("src/test/java")); assertTrue(m.matches("src/test")); assertFalse(m.matches("src/main/java")); }
@Test public void testMatchesDoubleStarAtEnd() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/**"); assertEquals("foo(/.*)?", m.getRegex()); assertTrue(m.matches("foo")); assertTrue(m.matches("foo/")); assertTrue(m.matches("foo/bar/doz/test.txt")); assertTrue(m.matches("foo/bar/doz/gna/test.txt")); assertTrue(m.matches("foo/test.txt")); assertTrue(m.matches("foo/bar/doz/gna/test.zip")); if (m.isWindowsFs()) { assertTrue(m.matches("foo\\bar\\doz\\gna\\test.txt")); } assertFalse(m.matches("/foo/bar/doz/gna/test.zip")); assertFalse(m.matches("bar/doz/gna/test.zip")); }
@Test public void testMatchesStarInFilename() throws Exception { WildcardMatcher m = new WildcardMatcher("*.N1"); assertEquals(m.isWindowsFs() ? "[^/:]*\\.n1" : "[^/:]*\\.N1", m.getRegex()); assertTrue(m.matches("test.N1")); assertTrue(m.matches("MER_RR.N1")); assertFalse(m.matches("MER_RR")); assertFalse(m.matches("MER_RR.txt")); assertFalse(m.matches("data/MER_RR.N1")); }
@Test public void testMatchesMultiDirectoryNoWildcardUsed_Unix() throws Exception { WildcardMatcher m = new WildcardMatcher("/home/norman/meris/data.nc", false); assertEquals("/home/norman/meris/data\\.nc", m.getRegex()); assertTrue(m.matches("/home/norman/meris/data.nc")); assertFalse(m.matches("home/norman/meris/data.nc")); assertFalse(m.matches("/home/norman/MERIS/data.nc")); assertFalse(m.matches("/home/norman/meris/data.NC")); }
@Test public void testMatchesStarInBetween() throws Exception { WildcardMatcher m = new WildcardMatcher("foo/*/test.txt"); assertEquals("foo/[^/:]*/test\\.txt", m.getRegex()); assertTrue(m.matches("foo//test.txt")); assertTrue(m.matches("foo/bar/test.txt")); assertFalse(m.matches("/foo/test.txt")); assertFalse(m.matches("foo/bar/doz/gna/test.txt")); }
@Test public void testMatchesSingleFileNoWildcardUsed() throws Exception { WildcardMatcher m = new WildcardMatcher("test.N1"); assertEquals(m.isWindowsFs() ? "test\\.n1" : "test\\.N1", m.getRegex()); assertTrue(m.matches("test.N1")); assertFalse(m.matches("test.jpg")); assertFalse(m.matches("rest.N1")); assertFalse(m.matches("x/test.N1")); }
@Test public void testMatchesAntExamplePattern1() throws Exception { WildcardMatcher m = new WildcardMatcher("**/CVS/*"); assertEquals(m.isWindowsFs() ? "(.*/)?cvs/[^/:]*" : "(.*/)?CVS/[^/:]*", m.getRegex()); assertTrue(m.matches("CVS/Repository")); assertTrue(m.matches("org/apache/CVS/Entries")); assertTrue(m.matches("org/apache/jakarta/tools/ant/CVS/Entries")); assertFalse(m.matches("org/apache/CVS/foo/bar/Entries")); }
@Test public void testMatchesAntExamplePattern2() throws Exception { WildcardMatcher m = new WildcardMatcher("org/apache/jakarta/**"); assertEquals("org/apache/jakarta(/.*)?", m.getRegex()); assertTrue(m.matches("org/apache/jakarta/tools/ant/docs/index.html")); assertTrue(m.matches("org/apache/jakarta/test.xml")); assertFalse(m.matches("org/apache/xyz.java")); }
@Test public void testMatchesAntExamplePattern3() throws Exception { WildcardMatcher m = new WildcardMatcher("org/apache/**/CVS/*"); assertEquals(m.isWindowsFs() ? "org/apache((/.*/)?|/)cvs/[^/:]*" : "org/apache((/.*/)?|/)CVS/[^/:]*", m.getRegex()); assertTrue(m.matches("org/apache/CVS/Entries")); assertTrue(m.matches("org/apache/jakarta/tools/ant/CVS/Entries")); assertFalse(m.matches("org/apache/CVS/foo/bar/Entries")); }