javatidy
[jalview.git] / src / jalview / gui / Jalview2XML.java
index b899ae9..9f109ee 100644 (file)
@@ -1,18 +1,18 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
- * 
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
+ *
  * This file is part of Jalview.
- * 
+ *
  * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
+ * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- * 
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
  */
 package jalview.gui;
@@ -29,7 +29,6 @@ import javax.swing.*;
 
 import org.exolab.castor.xml.*;
 
-import uk.ac.vamsas.objects.utils.MapList;
 import jalview.bin.Cache;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentAnnotation;
@@ -37,16 +36,16 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SequenceI;
 import jalview.schemabinding.version2.*;
 import jalview.schemes.*;
-import jalview.structure.StructureSelectionManager;
+import jalview.util.Platform;
 import jalview.util.jarInputStreamProvider;
 
 /**
  * Write out the current jalview desktop state as a Jalview XML stream.
- * 
+ *
  * Note: the vamsas objects referred to here are primitive versions of the
  * VAMSAS project schema elements - they are not the same and most likely never
  * will be :)
- * 
+ *
  * @author $author$
  * @version $Revision: 1.134 $
  */
@@ -54,7 +53,7 @@ public class Jalview2XML
 {
   /**
    * create/return unique hash string for sq
-   * 
+   *
    * @param sq
    * @return new or existing unique string for sq
    */
@@ -260,7 +259,7 @@ public class Jalview2XML
 
   /**
    * Writes a jalview project archive to the given Jar output stream.
-   * 
+   *
    * @param jout
    */
   public void SaveState(JarOutputStream jout)
@@ -401,7 +400,7 @@ public class Jalview2XML
   /**
    * create a JalviewModel from an algnment view and marshall it to a
    * JarOutputStream
-   * 
+   *
    * @param ap
    *          panel to create jalview model for
    * @param fileName
@@ -426,9 +425,9 @@ public class Jalview2XML
     object.setCreationDate(new java.util.Date(System.currentTimeMillis()));
     object.setVersion(jalview.bin.Cache.getProperty("VERSION"));
 
-    jalview.datamodel.AlignmentI jal = av.alignment;
+    jalview.datamodel.AlignmentI jal = av.getAlignment();
 
-    if (av.hasHiddenRows)
+    if (av.hasHiddenRows())
     {
       jal = jal.getHiddenSequences().getFullAlignment();
     }
@@ -497,15 +496,13 @@ public class Jalview2XML
 
       jseq.setId(id); // jseq id should be a string not a number
 
-      if (av.hasHiddenRows)
+      if (av.hasHiddenRows())
       {
-        jseq.setHidden(av.alignment.getHiddenSequences().isHidden(jds));
+        jseq.setHidden(av.getAlignment().getHiddenSequences().isHidden(jds));
 
-        if (av.hiddenRepSequences != null
-                && av.hiddenRepSequences.containsKey(jal.getSequenceAt(i)))
+        if (av.isHiddenRepSequence(jal.getSequenceAt(i)))
         {
-          jalview.datamodel.SequenceI[] reps = ((jalview.datamodel.SequenceGroup) av.hiddenRepSequences
-                  .get(jal.getSequenceAt(i))).getSequencesInOrder(jal);
+          jalview.datamodel.SequenceI[] reps = av.getRepresentedSequences(jal.getSequenceAt(i)).getSequencesInOrder(jal);
 
           for (int h = 0; h < reps.length; h++)
           {
@@ -612,7 +609,8 @@ public class Jalview2XML
 
                 for (int smap = 0; smap < jmol.jmb.sequence[peid].length; smap++)
                 {
-                  if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1)
+//                  if (jal.findIndex(jmol.jmb.sequence[peid][smap]) > -1)
+                  if (jds==jmol.jmb.sequence[peid][smap])
                   {
                     StructureState state = new StructureState();
                     state.setVisible(true);
@@ -706,9 +704,9 @@ public class Jalview2XML
       jms.addJSeq(jseq);
     }
 
-    if (av.hasHiddenRows)
+    if (av.hasHiddenRows())
     {
-      jal = av.alignment;
+      jal = av.getAlignment();
     }
     // SAVE MAPPINGS
     if (jal.getCodonFrames() != null && jal.getCodonFrames().length > 0)
@@ -764,7 +762,7 @@ public class Jalview2XML
           {
             TreePanel tp = (TreePanel) frames[t];
 
-            if (tp.treeCanvas.av.alignment == jal)
+            if (tp.treeCanvas.av.getAlignment() == jal)
             {
               Tree tree = new Tree();
               tree.setTitle(tp.getTitle());
@@ -842,6 +840,7 @@ public class Jalview2XML
         an.setCentreColLabels(aa[i].centreColLabels);
         an.setScaleColLabels(aa[i].scaleColLabel);
         an.setShowAllColLabels(aa[i].showAllColLabels);
+        an.setBelowAlignment(aa[i].belowAlignment);
 
         if (aa[i].graph > 0)
         {
@@ -864,8 +863,8 @@ public class Jalview2XML
 
         an.setLabel(aa[i].label);
 
-        if (aa[i] == av.quality || aa[i] == av.conservation
-                || aa[i] == av.consensus || aa[i].autoCalculated)
+        if (aa[i] == av.getAlignmentQualityAnnot() || aa[i] == av.getAlignmentConservationAnnotation()
+                || aa[i] == av.getAlignmentConsensusAnnotation() || aa[i].autoCalculated)
         {
           // new way of indicating autocalculated annotation -
           an.setAutoCalculated(aa[i].autoCalculated);
@@ -874,6 +873,12 @@ public class Jalview2XML
         {
           an.setScore(aa[i].getScore());
         }
+
+        if (aa[i].getCalcId()!=null)
+        {
+          an.setCalcId(aa[i].getCalcId());
+        }
+
         AnnotationElement ae;
         if (aa[i].annotations != null)
         {
@@ -927,13 +932,11 @@ public class Jalview2XML
     if (jal.getGroups() != null)
     {
       JGroup[] groups = new JGroup[jal.getGroups().size()];
-
-      for (int i = 0; i < groups.length; i++)
+      int i = -1;
+      for (jalview.datamodel.SequenceGroup sg:jal.getGroups())
       {
-        groups[i] = new JGroup();
+        groups[++i] = new JGroup();
 
-        jalview.datamodel.SequenceGroup sg = (jalview.datamodel.SequenceGroup) jal
-                .getGroups().elementAt(i);
         groups[i].setStart(sg.getStartRes());
         groups[i].setEnd(sg.getEndRes());
         groups[i].setName(sg.getName());
@@ -1204,7 +1207,7 @@ public class Jalview2XML
 
     }
 
-    if (av.hasHiddenColumns)
+    if (av.hasHiddenColumns())
     {
       if (av.getColumnSelection() == null
               || av.getColumnSelection().getHiddenColumns() == null)
@@ -1267,7 +1270,7 @@ public class Jalview2XML
   /**
    * Construct a unique ID for jvobj using either existing bindings or if none
    * exist, the result of the hashcode call for the object.
-   * 
+   *
    * @param jvobj
    *          jalview data object
    * @return unique ID for referring to jvobj
@@ -1298,7 +1301,7 @@ public class Jalview2XML
 
   /**
    * return local jalview object mapped to ID, if it exists
-   * 
+   *
    * @param idcode
    *          (may be null)
    * @return null or object bound to idcode
@@ -1534,7 +1537,7 @@ public class Jalview2XML
 
   /**
    * Load a jalview project archive from a jar file
-   * 
+   *
    * @param file
    *          - HTTP URL or filename
    */
@@ -1578,6 +1581,7 @@ public class Jalview2XML
     return new jarInputStreamProvider()
     {
 
+      @Override
       public JarInputStream getJarInputStream() throws IOException
       {
         if (_url != null)
@@ -1590,6 +1594,7 @@ public class Jalview2XML
         }
       }
 
+      @Override
       public String getFilename()
       {
         return file;
@@ -1602,7 +1607,7 @@ public class Jalview2XML
    * initialise uniqueSetSuffix, seqRefIds, viewportsAdded and frefedSequence
    * themselves. Any null fields will be initialised with default values,
    * non-null fields are left alone.
-   * 
+   *
    * @param jprovider
    * @return
    */
@@ -1754,6 +1759,7 @@ public class Jalview2XML
       {
         javax.swing.SwingUtilities.invokeLater(new Runnable()
         {
+          @Override
           public void run()
           {
             JOptionPane.showInternalMessageDialog(Desktop.desktop,
@@ -1778,7 +1784,7 @@ public class Jalview2XML
    * Currently (28th Sep 2008) things will go horribly wrong in vamsas document
    * sync if this is set to true.
    */
-  private boolean updateLocalViews = false;
+  private final boolean updateLocalViews = false;
 
   String loadPDBFile(jarInputStreamProvider jprovider, String pdbId)
   {
@@ -1822,9 +1828,9 @@ public class Jalview2XML
         }
         ;
         out.close();
-
-        alreadyLoadedPDB.put(pdbId, outFile.getAbsolutePath());
-        return outFile.getAbsolutePath();
+        String t=outFile.getAbsolutePath();
+        alreadyLoadedPDB.put(pdbId, t);
+        return t;
       }
       else
       {
@@ -1859,7 +1865,7 @@ public class Jalview2XML
 
   /**
    * Load alignment frame from jalview XML DOM object
-   * 
+   *
    * @param object
    *          DOM
    * @param file
@@ -1897,7 +1903,7 @@ public class Jalview2XML
 
       if (seqRefIds.get(seqId) != null)
       {
-        tmpseqs.add((jalview.datamodel.Sequence) seqRefIds.get(seqId));
+        tmpseqs.add(seqRefIds.get(seqId));
         multipleView = true;
       }
       else
@@ -1920,7 +1926,7 @@ public class Jalview2XML
           hiddenSeqs = new Vector();
         }
 
-        hiddenSeqs.addElement((jalview.datamodel.Sequence) seqRefIds
+        hiddenSeqs.addElement(seqRefIds
                 .get(seqId));
       }
 
@@ -2263,6 +2269,12 @@ public class Jalview2XML
         {
           jaa.graphHeight = an[i].getGraphHeight();
         }
+        if (an[i].hasBelowAlignment())
+        {
+          jaa.belowAlignment=an[i].isBelowAlignment();
+        }
+        jaa.setCalcId(an[i].getCalcId());
+
         if (jaa.autoCalculated)
         {
           autoAlan.add(new JvAnnotRow(i, jaa));
@@ -2603,7 +2615,7 @@ public class Jalview2XML
               // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, {
               // seqs_file 2}, boolean[] {
               // linkAlignPanel,superposeWithAlignpanel}} from hash
-              Object[] jmoldat = (Object[]) jmolViewIds.get(sviewid);
+              Object[] jmoldat = jmolViewIds.get(sviewid);
               ((boolean[]) jmoldat[3])[0] |= ids[p].getStructureState(s)
                       .hasAlignwithAlignPanel() ? ids[p].getStructureState(
                       s).getAlignwithAlignPanel() : false;
@@ -2626,12 +2638,13 @@ public class Jalview2XML
               }
               if (ids[p].getFile() != null)
               {
+                File mapkey=new File(ids[p].getFile());
                 Object[] seqstrmaps = (Object[]) ((Hashtable) jmoldat[2])
-                        .get(ids[p].getFile());
+                        .get(mapkey);
                 if (seqstrmaps == null)
                 {
                   ((Hashtable) jmoldat[2]).put(
-                          new File(ids[p].getFile()).toString(),
+                          mapkey,
                           seqstrmaps = new Object[]
                           { pdbFile, ids[p].getId(), new Vector(),
                               new Vector() });
@@ -2648,7 +2661,7 @@ public class Jalview2XML
               }
               else
               {
-                errorMessage = ("The Jmol views in the Jalview 2 project may\nnot be correctly bound to sequences in the alignment.\nIn the case of problems, see note at\nhttp://issues.jalview.org/browse/JAL-747");
+                errorMessage = ("The Jmol views in this project were imported\nfrom an older version of Jalview.\nPlease review the sequence colour associations\nin the Colour by section of the Jmol View menu.\n\nIn the case of problems, see note at\nhttp://issues.jalview.org/browse/JAL-747");
                 warn(errorMessage);
               }
             }
@@ -2664,7 +2677,7 @@ public class Jalview2XML
           Object[] svattrib = entry.getValue();
           int[] geom = (int[]) svattrib[0];
           String state = (String) svattrib[1];
-          Hashtable<String, Object[]> oldFiles = (Hashtable<String, Object[]>) svattrib[2];
+          Hashtable<File, Object[]> oldFiles = (Hashtable<File, Object[]>) svattrib[2];
           final boolean useinJmolsuperpos = ((boolean[]) svattrib[3])[0], usetoColourbyseq = ((boolean[]) svattrib[3])[1], jmolColouring = ((boolean[]) svattrib[3])[2];
           int x = geom[0], y = geom[1], width = geom[2], height = geom[3];
           // collate the pdbfile -> sequence mappings from this view
@@ -2728,6 +2741,8 @@ public class Jalview2XML
               {
                 newFileLoc = new StringBuffer();
               }
+              do {
+                // look for next filename in load statement
               newFileLoc.append(state.substring(cp,
                       ncp = (state.indexOf("\"", ncp + 1) + 1)));
               String oldfilenam = state.substring(ncp,
@@ -2735,16 +2750,16 @@ public class Jalview2XML
               // recover the new mapping data for this old filename
               // have to normalize filename - since Jmol and jalview do filename
               // translation differently.
-              Object[] filedat = oldFiles.get(new File(oldfilenam)
-                      .toString());
-              newFileLoc.append(((String) filedat[0]));
+              Object[] filedat = oldFiles.get(new File(oldfilenam));
+              newFileLoc.append(Platform.escapeString((String) filedat[0]));
               pdbfilenames.addElement((String) filedat[0]);
               pdbids.addElement((String) filedat[1]);
-              seqmaps.addElement((SequenceI[]) ((Vector<SequenceI>) filedat[2])
+              seqmaps.addElement(((Vector<SequenceI>) filedat[2])
                       .toArray(new SequenceI[0]));
               newFileLoc.append("\"");
               cp = ecp + 1; // advance beyond last \" and set cursor so we can
                             // look for next file statement.
+              } while ((ncp=state.indexOf("/*file*/",cp))>-1);
             }
             if (cp > 0)
             {
@@ -2757,7 +2772,7 @@ public class Jalview2XML
                       .print("Ignoring incomplete Jmol state for PDB ids: ");
               newFileLoc = new StringBuffer(state);
               newFileLoc.append("; load append ");
-              for (String id : oldFiles.keySet())
+              for (File id : oldFiles.keySet())
               {
                 // add this and any other pdb files that should be present in
                 // the viewer
@@ -2766,7 +2781,7 @@ public class Jalview2XML
                 newFileLoc.append(((String) filedat[0]));
                 pdbfilenames.addElement((String) filedat[0]);
                 pdbids.addElement((String) filedat[1]);
-                seqmaps.addElement((SequenceI[]) ((Vector<SequenceI>) filedat[2])
+                seqmaps.addElement(((Vector<SequenceI>) filedat[2])
                         .toArray(new SequenceI[0]));
                 newFileLoc.append(" \"");
                 newFileLoc.append((String) filedat[0]);
@@ -2802,10 +2817,10 @@ public class Jalview2XML
               // TODO: assemble String[] { pdb files }, String[] { id for each
               // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, {
               // seqs_file 2}} from hash
-              final String[] pdbf = (String[]) pdbfilenames
-                      .toArray(new String[pdbfilenames.size()]), id = (String[]) pdbids
+              final String[] pdbf = pdbfilenames
+                      .toArray(new String[pdbfilenames.size()]), id = pdbids
                       .toArray(new String[pdbids.size()]);
-              final SequenceI[][] sq = (SequenceI[][]) seqmaps
+              final SequenceI[][] sq = seqmaps
                       .toArray(new SequenceI[seqmaps.size()][]);
               final String fileloc = newFileLoc.toString(), vid = sviewid;
               final AlignFrame alf = af;
@@ -2815,6 +2830,7 @@ public class Jalview2XML
               {
                 javax.swing.SwingUtilities.invokeAndWait(new Runnable()
                 {
+                  @Override
                   public void run()
                   {
                     AppJmol sview = null;
@@ -2855,36 +2871,36 @@ public class Jalview2XML
 
             // add mapping for sequences in this view to an already open Jmol
             // instance
-            for (String id : oldFiles.keySet())
+            for (File id : oldFiles.keySet())
             {
               // add this and any other pdb files that should be present in the
               // viewer
               Object[] filedat = oldFiles.get(id);
               String pdbFile = (String) filedat[0];
-              SequenceI[] seq = (SequenceI[]) ((Vector<SequenceI>) filedat[2])
+              SequenceI[] seq = ((Vector<SequenceI>) filedat[2])
                       .toArray(new SequenceI[0]);
-              ((AppJmol) comp).jmb.ssm.setMapping(seq, null, pdbFile,
+              comp.jmb.ssm.setMapping(seq, null, pdbFile,
                       jalview.io.AppletFormatAdapter.FILE);
-              ((AppJmol) comp).jmb.addSequenceForStructFile(pdbFile, seq);
+              comp.jmb.addSequenceForStructFile(pdbFile, seq);
             }
             // and add the AlignmentPanel's reference to the Jmol view
-            ((AppJmol) comp).addAlignmentPanel(ap);
+            comp.addAlignmentPanel(ap);
             if (useinJmolsuperpos)
             {
-              ((AppJmol) comp).useAlignmentPanelForSuperposition(ap);
+              comp.useAlignmentPanelForSuperposition(ap);
             }
             else
             {
-              ((AppJmol) comp).excludeAlignmentPanelForSuperposition(ap);
+              comp.excludeAlignmentPanelForSuperposition(ap);
             }
             if (usetoColourbyseq)
             {
-              ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap,
+              comp.useAlignmentPanelForColourbyseq(ap,
                       !jmolColouring);
             }
             else
             {
-              ((AppJmol) comp).excludeAlignmentPanelForColourbyseq(ap);
+              comp.excludeAlignmentPanelForColourbyseq(ap);
             }
           }
         }
@@ -2907,7 +2923,7 @@ public class Jalview2XML
 
     for (int i = 0; i < JSEQ.length; i++)
     {
-      af.viewport.setSequenceColour(af.viewport.alignment.getSequenceAt(i),
+      af.viewport.setSequenceColour(af.viewport.getAlignment().getSequenceAt(i),
               new java.awt.Color(JSEQ[i].getColour()));
     }
 
@@ -2918,7 +2934,7 @@ public class Jalview2XML
       jalview.gui.AlignViewport av = (jalview.gui.AlignViewport) viewportsAdded
               .get(uniqueSeqSetId);
 
-      af.viewport.sequenceSetID = uniqueSeqSetId;
+      af.viewport.setSequenceSetId(uniqueSeqSetId);
       if (av != null)
       {
         // propagate shared settings to this new view
@@ -3008,18 +3024,18 @@ public class Jalview2XML
       else if (view.getBgColour().startsWith("Annotation"))
       {
         // int find annotation
-        if (af.viewport.alignment.getAlignmentAnnotation() != null)
+        if (af.viewport.getAlignment().getAlignmentAnnotation() != null)
         {
-          for (int i = 0; i < af.viewport.alignment
+          for (int i = 0; i < af.viewport.getAlignment()
                   .getAlignmentAnnotation().length; i++)
           {
-            if (af.viewport.alignment.getAlignmentAnnotation()[i].label
+            if (af.viewport.getAlignment().getAlignmentAnnotation()[i].label
                     .equals(view.getAnnotationColours().getAnnotation()))
             {
-              if (af.viewport.alignment.getAlignmentAnnotation()[i]
+              if (af.viewport.getAlignment().getAlignmentAnnotation()[i]
                       .getThreshold() == null)
               {
-                af.viewport.alignment.getAlignmentAnnotation()[i]
+                af.viewport.getAlignment().getAlignmentAnnotation()[i]
                         .setThreshold(new jalview.datamodel.GraphLine(view
                                 .getAnnotationColours().getThreshold(),
                                 "Threshold", java.awt.Color.black)
@@ -3031,7 +3047,7 @@ public class Jalview2XML
                       .equals("None"))
               {
                 cs = new AnnotationColourGradient(
-                        af.viewport.alignment.getAlignmentAnnotation()[i],
+                        af.viewport.getAlignment().getAlignmentAnnotation()[i],
                         new java.awt.Color(view.getAnnotationColours()
                                 .getMinColour()), new java.awt.Color(view
                                 .getAnnotationColours().getMaxColour()),
@@ -3041,7 +3057,7 @@ public class Jalview2XML
                       .startsWith("ucs"))
               {
                 cs = new AnnotationColourGradient(
-                        af.viewport.alignment.getAlignmentAnnotation()[i],
+                        af.viewport.getAlignment().getAlignmentAnnotation()[i],
                         GetUserColourScheme(jms, view
                                 .getAnnotationColours().getColourScheme()),
                         view.getAnnotationColours().getAboveThreshold());
@@ -3049,7 +3065,7 @@ public class Jalview2XML
               else
               {
                 cs = new AnnotationColourGradient(
-                        af.viewport.alignment.getAlignmentAnnotation()[i],
+                        af.viewport.getAlignment().getAlignmentAnnotation()[i],
                         ColourSchemeProperty.getColour(al, view
                                 .getAnnotationColours().getColourScheme()),
                         view.getAnnotationColours().getAboveThreshold());
@@ -3072,7 +3088,7 @@ public class Jalview2XML
                    * if
                    * (view.getAnnotationColours().getColourScheme().equals("None"
                    * )) { sg.cs = new AnnotationColourGradient(
-                   * af.viewport.alignment.getAlignmentAnnotation()[i], new
+                   * af.viewport.getAlignment().getAlignmentAnnotation()[i], new
                    * java.awt.Color(view.getAnnotationColours().
                    * getMinColour()), new
                    * java.awt.Color(view.getAnnotationColours().
@@ -3081,7 +3097,7 @@ public class Jalview2XML
                    */
                   {
                     sg.cs = new AnnotationColourGradient(
-                            af.viewport.alignment.getAlignmentAnnotation()[i],
+                            af.viewport.getAlignment().getAlignmentAnnotation()[i],
                             sg.cs, view.getAnnotationColours()
                                     .getAboveThreshold());
                   }
@@ -3103,7 +3119,7 @@ public class Jalview2XML
       if (cs != null)
       {
         cs.setThreshold(view.getPidThreshold(), true);
-        cs.setConsensus(af.viewport.hconsensus);
+        cs.setConsensus(af.viewport.getSequenceConsensusHash());
       }
     }
 
@@ -3129,8 +3145,8 @@ public class Jalview2XML
     }
     if (view.hasIgnoreGapsinConsensus())
     {
-      af.viewport.ignoreGapsInConsensusCalculation = view
-              .getIgnoreGapsinConsensus();
+      af.viewport.setIgnoreGapsConsensus(view
+              .getIgnoreGapsinConsensus(), null);
     }
     if (view.hasFollowHighlight())
     {
@@ -3151,11 +3167,11 @@ public class Jalview2XML
     }
     if (view.hasShowSequenceLogo())
     {
-      af.viewport.showSequenceLogo = view.getShowSequenceLogo();
+      af.viewport.setShowSequenceLogo(view.getShowSequenceLogo());
     }
     else
     {
-      af.viewport.showSequenceLogo = false;
+      af.viewport.setShowSequenceLogo(false);
     }
     if (view.hasShowDbRefTooltip())
     {
@@ -3344,7 +3360,7 @@ public class Jalview2XML
 
   /**
    * TODO remove this method
-   * 
+   *
    * @param view
    * @return AlignFrame bound to sequenceSetId from view, if one exists. private
    *         AlignFrame getSkippedFrame(Viewport view) { if (skipList==null) {
@@ -3355,7 +3371,7 @@ public class Jalview2XML
 
   /**
    * Check if the Jalview view contained in object should be skipped or not.
-   * 
+   *
    * @param object
    * @return true if view's sequenceSetId is a key in skipList
    */
@@ -3428,7 +3444,7 @@ public class Jalview2XML
   }
 
   /**
-   * 
+   *
    * @param vamsasSeq
    *          sequence definition to create/merge dataset sequence for
    * @param ds
@@ -3446,7 +3462,7 @@ public class Jalview2XML
     jalview.datamodel.SequenceI dsq = null;
     if (sq != null && sq.getDatasetSequence() != null)
     {
-      dsq = (jalview.datamodel.SequenceI) sq.getDatasetSequence();
+      dsq = sq.getDatasetSequence();
     }
 
     String sqid = vamsasSeq.getDsseqid();
@@ -3552,7 +3568,7 @@ public class Jalview2XML
 
   /**
    * make a new dataset ID for this jalview dataset alignment
-   * 
+   *
    * @param dataset
    * @return
    */
@@ -3719,11 +3735,11 @@ public class Jalview2XML
     af.closeMenuItem_actionPerformed(true);
 
     /*
-     * if(ap.av.alignment.getAlignmentAnnotation()!=null) { for(int i=0;
-     * i<ap.av.alignment.getAlignmentAnnotation().length; i++) {
-     * if(!ap.av.alignment.getAlignmentAnnotation()[i].autoCalculated) {
-     * af.alignPanel.av.alignment.getAlignmentAnnotation()[i] =
-     * ap.av.alignment.getAlignmentAnnotation()[i]; } } }
+     * if(ap.av.getAlignment().getAlignmentAnnotation()!=null) { for(int i=0;
+     * i<ap.av.getAlignment().getAlignmentAnnotation().length; i++) {
+     * if(!ap.av.getAlignment().getAlignmentAnnotation()[i].autoCalculated) {
+     * af.alignPanel.av.getAlignment().getAlignmentAnnotation()[i] =
+     * ap.av.getAlignment().getAlignmentAnnotation()[i]; } } }
      */
 
     return af.alignPanel;
@@ -3733,15 +3749,16 @@ public class Jalview2XML
    * flag indicating if hashtables should be cleared on finalization TODO this
    * flag may not be necessary
    */
-  private boolean _cleartables = true;
+  private final boolean _cleartables = true;
 
   private Hashtable jvids2vobj;
 
   /*
    * (non-Javadoc)
-   * 
+   *
    * @see java.lang.Object#finalize()
    */
+  @Override
   protected void finalize() throws Throwable
   {
     // really make sure we have no buried refs left.
@@ -3816,13 +3833,13 @@ public class Jalview2XML
    * finalize and clearSeqRefs will not clear the tables when the Jalview2XML
    * object goes out of scope. - also populates the datasetIds hashtable with
    * alignment objects containing dataset sequences
-   * 
+   *
    * @param vobj2jv
    *          Map from ID strings to jalview datamodel
    * @param jv2vobj
    *          Map from jalview datamodel to ID strings
-   * 
-   * 
+   *
+   *
    */
   public void setObjectMappingTables(Hashtable vobj2jv,
           IdentityHashMap jv2vobj)
@@ -3894,7 +3911,7 @@ public class Jalview2XML
    * set the uniqueSetSuffix used to prefix/suffix object IDs for jalview
    * objects created from the project archive. If string is null (default for
    * construction) then suffix will be set automatically.
-   * 
+   *
    * @param string
    */
   public void setUniqueSetSuffix(String string)
@@ -3906,7 +3923,7 @@ public class Jalview2XML
   /**
    * uses skipList2 as the skipList for skipping views on sequence sets
    * associated with keys in the skipList
-   * 
+   *
    * @param skipList2
    */
   public void setSkipList(Hashtable skipList2)