+ deleteFiles.clear();
+ }
+
+ private TreeMap<Integer, File> 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);
+ bfHashMap.put(bfp.indexNum(), f);
+ }
+ TreeMap<Integer, File> bfTreeMap = new TreeMap<>();
+ bfTreeMap.putAll(bfHashMap);
+ return bfTreeMap;
+ }
+
+ public boolean rollBackupsAndRenameTempFile()
+ {
+ boolean write = this.getWriteSuccess();
+
+ boolean roll = false;
+ boolean rename = false;
+ if (write)
+ {
+ roll = this.rollBackupFiles(false);
+ rename = this.renameTempFile();
+ }
+
+ /*
+ * Not sure that this confirmation is desirable. By this stage the new file is
+ * already written successfully, but something (e.g. disk full) has happened while
+ * trying to roll the backup files, and most likely the filename needed will already
+ * be vacant so renaming the temp file is nearly always correct!
+ */
+ boolean okay = roll && rename;
+ if (!okay)
+ {
+ StringBuilder messageSB = new StringBuilder();
+ messageSB.append(MessageManager.getString( "label.backupfiles_confirm_save_file_backupfiles_roll_wrong"));
+ if (rename)
+ {
+ if (messageSB.length() > 0)
+ {
+ messageSB.append("\n");
+ }
+ messageSB.append(MessageManager.getString(
+ "label.backupfiles_confirm_save_new_saved_file_ok"));
+ }
+ else
+ {
+ if (messageSB.length() > 0)
+ {
+ messageSB.append("\n");
+ }
+ messageSB.append(MessageManager.getString(
+ "label.backupfiles_confirm_save_new_saved_file_not_ok"));
+ }
+
+ int confirmButton = JvOptionPane.showConfirmDialog(Desktop.desktop,
+ messageSB.toString(),
+ MessageManager
+ .getString("label.backupfiles_confirm_save_file"),
+ JvOptionPane.OK_OPTION, JvOptionPane.WARNING_MESSAGE);
+ okay = confirmButton == JvOptionPane.OK_OPTION;
+ }
+ if (okay)
+ {
+ tidyUpFiles();
+ }
+
+ return rename;
+ }
+
+ public static TreeMap<Integer, File> getBackupFilesAsTreeMap(
+ String fileName, String suffix, int digits)
+ {
+ File[] backupFiles = null;
+
+ File file = new File(fileName);
+
+ File dirFile;
+ try
+ {
+ dirFile = file.getParentFile();
+ } catch (Exception e)
+ {
+ System.out.println(
+ "Could not get canonical path for file '" + file + "'");
+ return new TreeMap<>();
+ }
+
+ String filename = file.getName();
+ String basename = filename;
+
+ // find existing backup files
+ 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
+ // 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);
+ bfHashMap.put(bfp.indexNum(), f);
+ }
+ TreeMap<Integer, File> bfTreeMap = new TreeMap<>();
+ bfTreeMap.putAll(bfHashMap);
+
+ return bfTreeMap;
+ }
+
+ /*
+ private boolean addDeleteFile(File fileToBeDeleted, File originalFile,
+ boolean delete, boolean newer)
+ {
+ return addDeleteFile(fileToBeDeleted, originalFile, null, delete, newer);
+ }
+ */
+ private boolean addDeleteFile(File fileToBeDeleted)
+ {
+ boolean ret = false;
+ int pos = deleteFiles.indexOf(fileToBeDeleted);
+ if (pos > -1)
+ {
+ return true;
+ }
+ else
+ {
+ deleteFiles.add(fileToBeDeleted);
+ }