X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FBackupFilenameParts.java;fp=src%2Fjalview%2Fio%2FBackupFilenameParts.java;h=150440422abf4b069082e3588269d5fb7a002ddf;hb=74393b51f368cb9f58589472d432a433d9c4386d;hp=0000000000000000000000000000000000000000;hpb=7a0d503181fe41452120a8a02ca63476392aa08c;p=jalview.git diff --git a/src/jalview/io/BackupFilenameParts.java b/src/jalview/io/BackupFilenameParts.java new file mode 100644 index 0000000..1504404 --- /dev/null +++ b/src/jalview/io/BackupFilenameParts.java @@ -0,0 +1,152 @@ +package jalview.io; + +import java.io.File; + +public class BackupFilenameParts +{ + private String base; + + private String templateStart; + + private int num; + + private int digits; + + private String templateEnd; + + private boolean isBackupFile; + + private BackupFilenameParts() + { + this.isBackupFile = false; + } + + public BackupFilenameParts(File file, String base, String template, + int digits) + { + this(file.getName(), base, template, digits); + } + + 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); + int digits = 0; + String templateStart = template; + String templateEnd = ""; + if (numcharstart > -1) + { + templateStart = template.substring(0, numcharstart); + templateEnd = template.substring( + numcharstart + BackupFiles.NUM_PLACEHOLDER.length()); + 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 + templateStart) + && filename.endsWith(templateEnd) + && filename.length() >= minlength)) + { + // non-starter + return; + } + + int startLength = base.length() + templateStart.length(); + int endLength = templateEnd.length(); + String numString = numcharstart > -1 + ? filename.substring(startLength, filename.length() - endLength) + : ""; + + if (filename.length() >= startLength + digits + endLength + && filename.startsWith(base + templateStart) + && filename.endsWith(templateEnd) + // match exactly digits number of number-characters (numString + // should be all digits and at least the right length), or more than + // digits long with proviso it's not zero-leading. + && (numString.matches("[0-9]{" + digits + "}") + || numString.matches("[1-9][0-9]{" + digits + ",}"))) + { + this.base = extensionMatch ? savedFilename + base : base; + this.templateStart = templateStart; + this.num = numString.length() > 0 ? Integer.parseInt(numString) : 0; + this.digits = digits; + this.templateEnd = templateEnd; + this.isBackupFile = true; + } + + } + + public static BackupFilenameParts currentBackupFilenameParts( + String filename, String base, boolean extensionMatch) + { + BackupFilenameParts bfp = new BackupFilenameParts(); + BackupFilesPresetEntry bfpe = BackupFilesPresetEntry + .getSavedBackupEntry(); + String template = bfpe.suffix; + if (template == null) + { + return bfp; + } + int digits; + try + { + digits = bfpe.digits; + } catch (Exception e) + { + return bfp; + } + return new BackupFilenameParts(filename, base, template, digits, + extensionMatch); + } + + public boolean isBackupFile() + { + return this.isBackupFile; + } + + public int indexNum() + { + 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; + } +}