X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FBackupFilenameParts.java;h=a4fbb3bc02b93dbadc69d0e50973f252c0ac8190;hb=db80eb8e1acf352e72a33e1e3825d40f7c6e4046;hp=6f7da93b02895e23544b482a1fa0f99369c5de1c;hpb=4db555a8f689e05652674009967a968021d6b340;p=jalview.git diff --git a/src/jalview/io/BackupFilenameParts.java b/src/jalview/io/BackupFilenameParts.java index 6f7da93..a4fbb3b 100644 --- a/src/jalview/io/BackupFilenameParts.java +++ b/src/jalview/io/BackupFilenameParts.java @@ -1,20 +1,27 @@ package jalview.io; +import jalview.bin.Cache; + import java.io.File; public class BackupFilenameParts { - String base; + private String base; - String templateStart; + private String templateStart; - int num; + private int num; - int digits; + private int digits; - String templateEnd; + private String templateEnd; - boolean isBackupFile; + private boolean isBackupFile; + + private BackupFilenameParts() + { + this.isBackupFile = false; + } public BackupFilenameParts(File file, String base, String template, int digits) @@ -25,6 +32,12 @@ public class BackupFilenameParts public BackupFilenameParts(String filename, String base, String template, int suggesteddigits) { + this(filename, base, template, suggesteddigits, false); + } + + public BackupFilenameParts(String filename, String base, String template, + int suggesteddigits, boolean extensionMatch) + { this.isBackupFile = false; int numcharstart = template.indexOf(BackupFiles.NUM_PLACEHOLDER); @@ -39,11 +52,33 @@ public class BackupFilenameParts digits = suggesteddigits; } + String savedFilename = ""; + // if extensionOnly is set then reset the filename to the last occurrence of the extension+templateStart and try the match + if (extensionMatch) + { + // only trying to match from extension onwards + + int extensioncharstart = filename + .lastIndexOf('.' + base + templateStart); + if (extensioncharstart == -1) + { + return; + } + + savedFilename = filename.substring(0, extensioncharstart + 1); // include + // the "." + filename = filename.substring(extensioncharstart + 1); + } + + // full filename match + // 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)) + if (!(filename.startsWith(base + templateStart) + && filename.endsWith(templateEnd) + && filename.length() >= minlength)) { // non-starter return; @@ -60,7 +95,7 @@ public class BackupFilenameParts && filename.endsWith(templateEnd) && numString.matches("[0-9]*")) { - this.base = base; + this.base = extensionMatch ? savedFilename + base : base; this.templateStart = templateStart; this.num = numString.length() > 0 ? Integer.parseInt(numString) : 0; this.digits = digits; @@ -70,6 +105,28 @@ public class BackupFilenameParts } + public static BackupFilenameParts currentBackupFilenameParts( + String filename, String base, boolean extensionMatch) + { + BackupFilenameParts bfp = new BackupFilenameParts(); + String template = Cache.getDefault(BackupFiles.SUFFIX, null); + if (template == null) + { + return bfp; + } + int digits; + try + { + digits = Integer + .parseInt(Cache.getDefault(BackupFiles.SUFFIX_DIGITS, null)); + } catch (Exception e) + { + return bfp; + } + return new BackupFilenameParts(filename, base, template, digits, + extensionMatch); + } + public boolean isBackupFile() { return this.isBackupFile; @@ -79,4 +136,14 @@ public class BackupFilenameParts { return this.num; } + + public static String getBackupFilename(int index, String base, + String template, int digits) + { + String numString = String.format("%0" + digits + "d", index); + String backupSuffix = template.replaceFirst(BackupFiles.NUM_PLACEHOLDER, + numString); + String backupfilename = base + backupSuffix; + return backupfilename; + } }