Merge remote-tracking branch 'origin/feature/JAL-3141_backupfiles_for211' into merge...
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 28 Feb 2019 14:15:43 +0000 (14:15 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Thu, 28 Feb 2019 14:15:43 +0000 (14:15 +0000)
1  2 
src/jalview/gui/AlignFrame.java
src/jalview/project/Jalview2XML.java

@@@ -64,6 -64,7 +64,7 @@@ import jalview.gui.ColourMenuHelper.Col
  import jalview.gui.ViewSelectionMenu.ViewSetProvider;
  import jalview.io.AlignmentProperties;
  import jalview.io.AnnotationFile;
+ import jalview.io.BackupFiles;
  import jalview.io.BioJsHTMLOutput;
  import jalview.io.DataSourceType;
  import jalview.io.FileFormat;
@@@ -1187,9 -1188,13 +1188,13 @@@ public class AlignFrame extends GAlignF
        }
        else
        {
+         // create backupfiles object and get new temp filename destination
+         BackupFiles backupfiles = new BackupFiles(file);
          try
          {
-           PrintWriter out = new PrintWriter(new FileWriter(file));
+           PrintWriter out = new PrintWriter(
+                   new FileWriter(backupfiles.getTempFilePath()));
  
            out.print(output);
            out.close();
            success = false;
            ex.printStackTrace();
          }
+         backupfiles.setWriteSuccess(success);
+         // do the backup file roll and rename the temp file to actual file
+         success = backupfiles.rollBackupsAndRenameTempFile();
        }
      }
  
    @Override
    public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)
    {
 -    SequenceGroup sg = new SequenceGroup();
 -
 -    for (int i = 0; i < viewport.getAlignment().getSequences().size(); i++)
 -    {
 -      sg.addSequence(viewport.getAlignment().getSequenceAt(i), false);
 -    }
 +    SequenceGroup sg = new SequenceGroup(
 +            viewport.getAlignment().getSequences());
  
      sg.setEndRes(viewport.getAlignment().getWidth() - 1);
      viewport.setSelectionGroup(sg);
      viewport.setFollowHighlight(state);
      if (state)
      {
 -      alignPanel.scrollToPosition(viewport.getSearchResults(), false);
 +      alignPanel.scrollToPosition(viewport.getSearchResults());
      }
    }
  
@@@ -59,7 -59,6 +59,6 @@@ import jalview.gui.AppVarna
  import jalview.gui.ChimeraViewFrame;
  import jalview.gui.Desktop;
  import jalview.gui.FeatureRenderer;
- import jalview.gui.Jalview2XML_V1;
  import jalview.gui.JvOptionPane;
  import jalview.gui.OOMWarning;
  import jalview.gui.PCAPanel;
@@@ -69,6 -68,7 +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;
@@@ -551,24 -551,30 +551,30 @@@ public class Jalview2XM
    public void saveState(File statefile)
    {
      FileOutputStream fos = null;
      try
      {
        fos = new FileOutputStream(statefile);
        JarOutputStream jout = new JarOutputStream(fos);
        saveState(jout);
+       fos.close();
  
      } catch (Exception e)
      {
+       Cache.log.error("Couln't write Jalview state to " + statefile, 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 + ")";
        }
        e.printStackTrace();
      } finally
    {
      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<>();
  
        }
        ;
        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";
        ex.printStackTrace(System.err);
        if (attemptversion1parse)
        {
-         // Is Version 1 Jar file?
-         try
-         {
-           af = new Jalview2XML_V1(raiseGUI).LoadJalviewAlign(jprovider);
-         } catch (Exception ex2)
-         {
-           System.err.println("Exception whilst loading as jalviewXMLV1:");
-           ex2.printStackTrace();
-           af = null;
-         }
+         // used to attempt to parse as V1 castor-generated xml
        }
        if (Desktop.instance != null)
        {
      jalview.datamodel.Mapping jmap = new jalview.datamodel.Mapping(dsto, fr,
              fto, m.getMapFromUnit().intValue(),
              m.getMapToUnit().intValue());
 -    // if (m.getMappingChoice() != null)
 -    // {
 -    // MappingChoice mc = m.getMappingChoice();
 +
 +    /*
 +     * (optional) choice of dseqFor or Sequence
 +     */
      if (m.getDseqFor() != null)
      {
        String dsfor = m.getDseqFor();
        if (seqRefIds.containsKey(dsfor))
        {
 -        /**
 +        /*
           * recover from hash
           */
          jmap.setTo(seqRefIds.get(dsfor));
          frefedSequence.add(newMappingRef(dsfor, jmap));
        }
      }
 -    else
 +    else if (m.getSequence() != null)
      {
 -      /**
 +      /*
         * local sequence definition
         */
        Sequence ms = m.getSequence();