JAL-3141 Tests now available and working, bringing to light a problem with the classI...
[jalview.git] / src / jalview / io / BackupFilenameFilter.java
index 8cf7cbf..1fed65c 100644 (file)
@@ -2,6 +2,7 @@ package jalview.io;
 
 import java.io.File;
 import java.io.FilenameFilter;
+import java.io.IOException;
 
 public class BackupFilenameFilter implements FilenameFilter
 {
@@ -24,27 +25,44 @@ public class BackupFilenameFilter implements FilenameFilter
   }
 
   @Override
-  public boolean accept(File file, String filename)
+  public boolean accept(File dir, String filename)
   {
-    // CHECK THIS IS NOT ALWAYS THE PARENT DIR
-    if (file.isDirectory())
+    boolean ret = false;
+    try
     {
-      return true;
-    }
-    else
+      File file = new File(
+              dir.getCanonicalPath() + File.separatorChar + filename);
+      if (file.isDirectory())
+      {
+        // backup files aren't dirs!
+        return false;
+      }
+    } catch (IOException e)
     {
-      BackupFilenameParts bffp = new BackupFilenameParts(filename, base,
-              template, digits, extension);
-      return bffp.isBackupFile();
+      System.out.println("IOException when checking file '" + filename
+              + "' is a backupfile");
     }
+
+    BackupFilenameParts bffp = new BackupFilenameParts(filename, base,
+            template, digits, extension);
+    ret = bffp.isBackupFile();
+    return ret;
+  }
+
+  public static String getBackupFilename(int index, String base,
+          String template, int digits, String extension)
+  {
+    String numString = String.format("%0" + digits + "d", index);
+    String backupSuffix = template.replaceAll(BackupFiles.NUM_PLACEHOLDER,
+            numString);
+    String backupfilename = base + backupSuffix + extension;
+    return backupfilename;
   }
 
 }
 
 class BackupFilenameParts
 {
-  File file;
-
   String base;
 
   String templateStart;
@@ -70,8 +88,15 @@ class BackupFilenameParts
   {
     this.isBackupFile = false;
 
-    if (!(filename.startsWith(base) && filename.endsWith(extension)))
+    // calculate minimum length of a backup filename
+    int minlength = base.length() + template.length()
+            - BackupFiles.NUM_PLACEHOLDER.length() + digits
+            + extension.length();
+
+    if (!(filename.startsWith(base) && filename.endsWith(extension)
+            && filename.length() >= minlength))
     {
+      // non-starter
       return;
     }
 
@@ -81,18 +106,20 @@ class BackupFilenameParts
     if (numcharstart > -1)
     {
       templateStart = template.substring(0, numcharstart);
-      templateEnd = template.substring(numcharstart + BackupFiles.NUM_PLACEHOLDER.length());
+      templateEnd = template.substring(
+              numcharstart + BackupFiles.NUM_PLACEHOLDER.length());
     }
+    
     int startLength = base.length() + templateStart.length();
     int endLength = templateEnd.length() + extension.length();
-    String numString = filename.substring(startLength, filename.length() - endLength + 1);
+    String numString = filename.substring(startLength,
+            filename.length() - endLength);
 
     if (filename.length() >= startLength + digits + endLength
             && filename.startsWith(base + templateStart)
             && filename.endsWith(templateEnd + extension)
             && numString.matches("[0-9]+"))
     {
-      this.file = file;
       this.base = base;
       this.templateStart = templateStart;
       this.num = Integer.parseInt(numString);
@@ -104,17 +131,6 @@ class BackupFilenameParts
     
   }
 
-  public static String getBackupFilename(int index, String base,
-          String template,
-          int digits, String extension)
-  {
-    String numString = String.format("%0" + digits + "d", index);
-    String backupSuffix = template.replaceAll(BackupFiles.NUM_PLACEHOLDER,
-            numString);
-    String backupfilename = base + backupSuffix + extension;
-    return backupfilename;
-  }
-
   public boolean isBackupFile()
   {
     return this.isBackupFile;