public int digits;
- public String extension;
-
- public BackupFilenameFilter(String base, String template, int digits,
- String extension)
+ public BackupFilenameFilter(String base, String template, int digits)
{
this.base = base;
this.template = template;
this.digits = digits;
- this.extension = extension;
}
@Override
public boolean accept(File dir, String filename)
{
- boolean ret = false;
try
{
File file = new File(
}
BackupFilenameParts bffp = new BackupFilenameParts(filename, base,
- template, digits, extension);
- ret = bffp.isBackupFile();
- return ret;
+ template, digits);
+ return bffp.isBackupFile();
}
public static String getBackupFilename(int index, String base,
- String template, int digits, String extension)
+ String template, int digits)
{
String numString = String.format("%0" + digits + "d", index);
String backupSuffix = template.replaceAll(BackupFiles.NUM_PLACEHOLDER,
numString);
- String backupfilename = base + backupSuffix + extension;
+ String backupfilename = base + backupSuffix;
return backupfilename;
}
String templateEnd;
- String extension;
-
boolean isBackupFile;
- public BackupFilenameParts(File file, String base, String template, int digits,
- String extension)
+ public BackupFilenameParts(File file, String base, String template, int digits)
{
- this(file.getName(), base, template, digits, extension);
+ this(file.getName(), base, template, digits);
}
public BackupFilenameParts(String filename, String base, String template,
- int digits, String extension)
+ int digits)
{
this.isBackupFile = false;
// calculate minimum length of a backup filename
int minlength = base.length() + template.length()
- - BackupFiles.NUM_PLACEHOLDER.length() + digits
- + extension.length();
+ - BackupFiles.NUM_PLACEHOLDER.length() + digits ;
- if (!(filename.startsWith(base) && filename.endsWith(extension)
- && filename.length() >= minlength))
+ if (!(filename.startsWith(base) && filename.length() >= minlength))
{
// non-starter
return;
}
int startLength = base.length() + templateStart.length();
- int endLength = templateEnd.length() + extension.length();
+ int endLength = templateEnd.length();
String numString = filename.substring(startLength,
filename.length() - endLength);
if (filename.length() >= startLength + digits + endLength
&& filename.startsWith(base + templateStart)
- && filename.endsWith(templateEnd + extension)
+ && filename.endsWith(templateEnd)
&& numString.matches("[0-9]+"))
{
this.base = base;
* BackupFiles used for manipulating (naming rolling/deleting) backup/version files when an alignment or project file is saved.
* User configurable options are:
* BACKUPFILES_ENABLED - boolean flag as to whether to use this mechanism or act as before, including overwriting files as saved.
- * BACKUPFILES_SUFFIX - a template to insert just before the file extension. Use '%n' to be replaced by a 0-led SUFFIX_DIGITS long integer.
+ * BACKUPFILES_SUFFIX - a template to insert after the file extension. Use '%n' to be replaced by a 0-led SUFFIX_DIGITS long integer.
* BACKUPFILES_NO_MAX - flag to turn off setting a maximum number of backup files to keep.
* BACKUPFILES_ROLL_MAX - the maximum number of backupfiles to keep for any one alignment or project file.
* BACKUPFILES_SUFFIX_DIGITS - the number of digits to insert replace %n with (e.g. BACKUPFILES_SUFFIX_DIGITS = 3 would make "001", "002", etc)
private static final String DEFAULT_TEMP_FILE = "jalview_temp_file_" + NS;
+ private static final String TEMP_FILE_EXT = ".tmp";
+
// file - File object to be backed up and then updated (written over)
private File file;
// REVERSE_ORDER
public BackupFiles(File file)
{
- this(file, "-v" + NUM_PLACEHOLDER, false, 4, 3, false);
+ this(file, ".v" + NUM_PLACEHOLDER, false, 4, 3, false);
}
public BackupFiles(File file,
{
String tempfilename = file.getName();
File tempdir = file.getParentFile();
- temp = File.createTempFile(tempfilename, ".tmp", tempdir);
+ temp = File.createTempFile(tempfilename, TEMP_FILE_EXT, tempdir);
}
else
{
- temp = File.createTempFile(DEFAULT_TEMP_FILE, ".tmp");
+ temp = File.createTempFile(DEFAULT_TEMP_FILE, TEMP_FILE_EXT);
}
} catch (IOException e)
{
public boolean renameTempFile()
{
+ System.out.println("RENAMING TEMP FILE '"+tempFile.getName() + "' TO '"+file.getName()+"'"); // DELETEME
return tempFile.renameTo(file);
}
}
String filename = file.getName();
String basename = filename;
- String extension = "";
- int dotcharpos = filename.lastIndexOf('.');
- // don't split filenames with the last '.' at the very beginning or
- // very end of the filename
- if ((dotcharpos > 0) && (dotcharpos < filename.length() - 1))
- {
- basename = filename.substring(0, dotcharpos);
- extension = filename.substring(dotcharpos); // NOTE this includes the '.'
- }
boolean ret = true;
// Create/move backups up one
// find existing backup files
BackupFilenameFilter bff = new BackupFilenameFilter(basename, suffix,
- digits,
- extension);
+ digits);
File[] backupFiles = dirFile.listFiles(bff);
int nextIndexNum = 0;
String confirmDeleteExtraInfo = null;
}
else
{
- TreeMap<Integer, File> bfTreeMap = sortBackupFilesAsTreeMap(backupFiles, basename, extension);
+ TreeMap<Integer, File> bfTreeMap = sortBackupFilesAsTreeMap(backupFiles, basename);
if (reverseOrder)
{
// int n = tempMax - m;
String backupfilename = dir + File.separatorChar
+ BackupFilenameFilter.getBackupFilename(n, basename,
- suffix, digits, extension);
+ suffix, digits);
File backupfile_n = new File(backupfilename);
if (!backupfile_n.exists())
// move the largest (max) rolled file to a temp file and add to the delete list
try
{
- File temp = File.createTempFile(backupfilename, ".tmp",
+ File temp = File.createTempFile(backupfilename, TEMP_FILE_EXT,
dirFile);
backupfile_n.renameTo(temp);
// Let's make the new backup file!! yay, got there at last!
String latestBackupFilename = dir + File.separatorChar
+ BackupFilenameFilter.getBackupFilename(nextIndexNum, basename,
- suffix, digits, extension);
+ suffix, digits);
File latestBackupFile = new File(latestBackupFilename);
ret = ret && file.renameTo(latestBackupFile);
}
}
- private TreeMap sortBackupFilesAsTreeMap(File[] backupFiles, String basename, String extension) {
+ private TreeMap sortBackupFilesAsTreeMap(File[] backupFiles, String basename) {
// sort the backup files (based on integer found in the suffix) using a
// precomputed Hashmap for speed
Map<Integer, File> bfHashMap = new HashMap<>();
for (int i = 0; i < backupFiles.length; i++)
{
File f = backupFiles[i];
- BackupFilenameParts bfp = new BackupFilenameParts(f, basename, suffix, digits, extension);
+ BackupFilenameParts bfp = new BackupFilenameParts(f, basename, suffix, digits);
bfHashMap.put(bfp.indexNum(), f);
}
TreeMap<Integer, File> bfTreeMap = new TreeMap<>();
String filename = file.getName();
String basename = filename;
- String extension = "";
- int dotcharpos = filename.lastIndexOf('.');
- // don't split of filenames with the last '.' at the very beginning or
- // very end of the filename
- if ((dotcharpos > 0) && (dotcharpos < filename.length() - 1))
- {
- basename = filename.substring(0, dotcharpos);
- extension = filename.substring(dotcharpos); // NOTE this includes the '.'
- }
// find existing backup files
- BackupFilenameFilter bff = new BackupFilenameFilter(basename, suffix, digits, extension);
+ BackupFilenameFilter bff = new BackupFilenameFilter(basename, suffix, digits);
backupFiles = dirFile.listFiles(bff); // is clone needed?
// sort the backup files (based on integer found in the suffix) using a
{
File f = backupFiles[i];
BackupFilenameParts bfp = new BackupFilenameParts(f, basename, suffix,
- digits, extension);
+ digits);
bfHashMap.put(bfp.indexNum(), f);
}
TreeMap<Integer, File> bfTreeMap = new TreeMap<>();