JAL-3141 Fixed what happens when suffix template has no '%n' index
authorBen Soares <bsoares@dundee.ac.uk>
Tue, 22 Jan 2019 13:15:08 +0000 (13:15 +0000)
committerBen Soares <bsoares@dundee.ac.uk>
Tue, 22 Jan 2019 13:15:08 +0000 (13:15 +0000)
src/jalview/io/BackupFilenameParts.java

index 93aa602..a91414a 100644 (file)
@@ -22,21 +22,12 @@ public class BackupFilenameParts
   }
 
   public BackupFilenameParts(String filename, String base, String template,
-          int digits)
+          int suggesteddigits)
   {
     this.isBackupFile = false;
 
-    // calculate minimum length of a backup filename
-    int minlength = base.length() + template.length()
-            - BackupFiles.NUM_PLACEHOLDER.length() + digits ;
-
-    if (!(filename.startsWith(base) && filename.length() >= minlength))
-    {
-      // non-starter
-      return;
-    }
-
     int numcharstart = template.indexOf(BackupFiles.NUM_PLACEHOLDER);
+    int digits = 0;
     String templateStart = template;
     String templateEnd = "";
     if (numcharstart > -1)
@@ -44,23 +35,33 @@ public class BackupFilenameParts
       templateStart = template.substring(0, numcharstart);
       templateEnd = template.substring(
               numcharstart + BackupFiles.NUM_PLACEHOLDER.length());
+      digits = suggesteddigits;
     }
     
+    // calculate minimum length of a backup filename
+    int minlength = base.length() + template.length()
+            - BackupFiles.NUM_PLACEHOLDER.length() + digits ;
+
+    if (!(filename.startsWith(base) && filename.length() >= minlength))
+    {
+      // non-starter
+      return;
+    }
+
     int startLength = base.length() + templateStart.length();
     int endLength = templateEnd.length();
-    String numString = filename.substring(startLength,
-            filename.length() - endLength);
+    String numString = numcharstart > -1?filename.substring(startLength,
+            filename.length() - endLength):"";
 
     if (filename.length() >= startLength + digits + endLength
             && filename.startsWith(base + templateStart)
             && filename.endsWith(templateEnd)
-            && numString.matches("[0-9]+"))
+            && numString.matches("[0-9]*"))
     {
       this.base = base;
       this.templateStart = templateStart;
-      this.num = Integer.parseInt(numString);
+      this.num = numString.length() > 0?Integer.parseInt(numString):0;
       this.digits = digits;
-      this.templateStart = templateStart;
       this.templateEnd = templateEnd;
       this.isBackupFile = true;
     }