Merge branch 'feature/JAL-3063jaxbNoCastor' into feature/JAL-3141_Create_a_backup_whe...
[jalview.git] / src / jalview / project / Jalview2XML.java
index 4a4c0c2..9980e04 100644 (file)
@@ -68,6 +68,7 @@ import jalview.gui.StructureViewer;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.gui.StructureViewerBase;
 import jalview.gui.TreePanel;
+import jalview.io.BackupFiles;
 import jalview.io.DataSourceType;
 import jalview.io.FileFormat;
 import jalview.io.NewickFile;
@@ -550,24 +551,36 @@ public class Jalview2XML
   public void saveState(File statefile)
   {
     FileOutputStream fos = null;
+    // create backupfiles object and get new temp filename destination
+    BackupFiles backupfiles = new BackupFiles(statefile);
+
     try
     {
-      fos = new FileOutputStream(statefile);
+
+      fos = new FileOutputStream(backupfiles.getTempFilePath());
+
       JarOutputStream jout = new JarOutputStream(fos);
       saveState(jout);
+      fos.close();
+      backupfiles.setWriteSuccess(true);
+      backupfiles.rollBackupsAndRenameTempFile();
 
     } catch (Exception e)
     {
+      Cache.log.error("Couln't write Jalview state to " + statefile
+              + ". Temporary file is at: " + backupfiles.getTempFile(), e);
       // TODO: inform user of the problem - they need to know if their data was
       // not saved !
       if (errorMessage == null)
       {
-        errorMessage = "Couldn't write Jalview Archive to output file '"
+        errorMessage = "Did't write Jalview Archive to output file '"
                 + statefile + "' - See console error log for details";
       }
       else
       {
-        errorMessage += "(output file was '" + statefile + "')";
+        errorMessage += "(Didn't write Jalview Archive to output file '"
+                + statefile + "\nTemporary file is at: "
+                + backupfiles.getTempFile() + ")";
       }
       e.printStackTrace();
     } finally
@@ -737,7 +750,11 @@ public class Jalview2XML
   {
     try
     {
-      FileOutputStream fos = new FileOutputStream(jarFile);
+      // create backupfiles object and get new temp filename destination
+      BackupFiles backupfiles = new BackupFiles(jarFile);
+      FileOutputStream fos = new FileOutputStream(
+              backupfiles.getTempFilePath());
+
       JarOutputStream jout = new JarOutputStream(fos);
       List<AlignFrame> frames = new ArrayList<>();
 
@@ -759,7 +776,12 @@ public class Jalview2XML
       }
       ;
       jout.close();
-      return true;
+      boolean success = true;
+
+      backupfiles.setWriteSuccess(success);
+      success = backupfiles.rollBackupsAndRenameTempFile();
+
+      return success;
     } catch (Exception ex)
     {
       errorMessage = "Couldn't Write alignment view to Jalview Archive - see error output for details";