DeleteTrashFolders: Extract predicate to its own class

Change-Id: If6f754ecccd5313bb46e71b366eb2264487e3432
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
index d80a677..07ef2e6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/DeleteTrashFolders.java
@@ -37,22 +37,33 @@
 public class DeleteTrashFolders implements LifecycleListener {
   private static final Logger log = LoggerFactory.getLogger(DeleteTrashFolders.class);
 
-  /**
-   * Search for name which ends with a dot, 13 digits and the string ".deleted". A folder 'f' is
-   * renamed to 'f.<currentTimeMillis>.deleted'. <currentTimeMillis> happens to be exactly 13 digits
-   * for commits created between 2002 (before git was born) and 2285.
-   */
-  private static final Pattern TRASH_1 = Pattern.compile(".*\\.\\d{13}.deleted");
+  static class TrashFolderPredicate {
 
-  /**
-   * New trash folder name format. It adds % chars around the "deleted" string and keeps the ".git"
-   * extension.
-   */
-  private static final Pattern TRASH_2 = Pattern.compile(".*\\.\\d{13}.%deleted%.git");
+    private TrashFolderPredicate() {
+      // Avoid this class being instantiated by using the default empty constructor
+    }
 
-  @VisibleForTesting
-  static final boolean isTrashFolderName(String fName) {
-    return TRASH_1.matcher(fName).matches() || TRASH_2.matcher(fName).matches();
+    /**
+     * Search for name which ends with a dot, 13 digits and the string ".deleted". A folder 'f' is
+     * renamed to 'f.<currentTimeMillis>.deleted'. <currentTimeMillis> happens to be exactly 13
+     * digits for commits created between 2002 (before git was born) and 2285.
+     */
+    private static final Pattern TRASH_1 = Pattern.compile(".*\\.\\d{13}.deleted");
+
+    /**
+     * New trash folder name format. It adds % chars around the "deleted" string and keeps the
+     * ".git" extension.
+     */
+    private static final Pattern TRASH_2 = Pattern.compile(".*\\.\\d{13}.%deleted%.git");
+
+    @VisibleForTesting
+    static final boolean match(String fName) {
+      return TRASH_1.matcher(fName).matches() || TRASH_2.matcher(fName).matches();
+    }
+
+    static boolean match(Path dir) {
+      return match(dir.getFileName().toString());
+    }
   }
 
   private Set<Path> repoFolders;
@@ -72,7 +83,7 @@
     public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
         throws IOException {
       String fName = dir.getFileName().toString();
-      if (isTrashFolderName(fName)) {
+      if (TrashFolderPredicate.match(fName)) {
         log.warn("Will delete this folder: {}", dir);
         recursiveDelete(dir);
         return FileVisitResult.SKIP_SUBTREE;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java
index 7b9b055..6ce8206 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/TrashFolderNameMatcherTest.java
@@ -15,7 +15,7 @@
 package com.googlesource.gerrit.plugins.deleteproject.fs;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.googlesource.gerrit.plugins.deleteproject.fs.DeleteTrashFolders.isTrashFolderName;
+import static com.googlesource.gerrit.plugins.deleteproject.fs.DeleteTrashFolders.TrashFolderPredicate.match;
 
 import org.junit.Test;
 
@@ -54,10 +54,10 @@
   }
 
   private void matches(String name) {
-    assertThat(isTrashFolderName(name)).isTrue();
+    assertThat(match(name)).isTrue();
   }
 
   private void doesNotMatch(String name) {
-    assertThat(isTrashFolderName(name)).isFalse();
+    assertThat(match(name)).isFalse();
   }
 }