javadoc
[jalview.git] / src / jalview / gui / Jalview2XML.java
index 8497df7..51e26b8 100755 (executable)
@@ -401,13 +401,13 @@ public class Jalview2XML
    * JarOutputStream
    * 
    * @param ap
-   *                panel to create jalview model for
+   *          panel to create jalview model for
    * @param fileName
-   *                name of alignment panel written to output stream
+   *          name of alignment panel written to output stream
    * @param jout
-   *                jar output stream
+   *          jar output stream
    * @param out
-   *                jar entry name
+   *          jar entry name
    */
   public JalviewModel SaveState(AlignmentPanel ap, String fileName,
           JarOutputStream jout)
@@ -574,17 +574,21 @@ public class Jalview2XML
           AppJmol jmol;
           // This must have been loaded, is it still visible?
           JInternalFrame[] frames = Desktop.desktop.getAllFrames();
-          String matchedFile=null;
+          String matchedFile = null;
           for (int f = frames.length - 1; f > -1; f--)
           {
             if (frames[f] instanceof AppJmol)
             {
               jmol = (AppJmol) frames[f];
-              if (!jmol.pdbentry.getId().equals(entry.getId()) 
-                      && !(entry.getId().length()>4 
-                              && entry.getId().toLowerCase().startsWith(jmol.pdbentry.getId().toLowerCase())))
+              if (!jmol.pdbentry.getId().equals(entry.getId())
+                      && !(entry.getId().length() > 4 && entry.getId()
+                              .toLowerCase().startsWith(
+                                      jmol.pdbentry.getId().toLowerCase())))
                 continue;
-              matchedFile = jmol.pdbentry.getFile(); // record the file so we can get at it if the ID match is ambiguous (e.g. 1QIP==1qipA)
+              matchedFile = jmol.pdbentry.getFile(); // record the file so we
+                                                     // can get at it if the ID
+                                                     // match is ambiguous (e.g.
+                                                     // 1QIP==1qipA)
               StructureState state = new StructureState();
               state.setVisible(true);
               state.setXpos(jmol.getX());
@@ -607,13 +611,13 @@ public class Jalview2XML
             }
           }
 
-          if (matchedFile!=null || entry.getFile() != null )
+          if (matchedFile != null || entry.getFile() != null)
           {
-            if (entry.getFile()!=null)
+            if (entry.getFile() != null)
             {
               // use entry's file
               matchedFile = entry.getFile();
-            } 
+            }
             pdb.setFile(matchedFile); // entry.getFile());
             if (pdbfiles == null)
             {
@@ -685,9 +689,10 @@ public class Jalview2XML
         for (int p = 0; p < jac[i].aaWidth; p++)
         {
           Alcodon cmap = new Alcodon();
-          if (jac[i].codons[p]!=null)
+          if (jac[i].codons[p] != null)
           {
-            // Null codons indicate a gapped column in the translated peptide alignment. 
+            // Null codons indicate a gapped column in the translated peptide
+            // alignment.
             cmap.setPos1(jac[i].codons[p][0]);
             cmap.setPos2(jac[i].codons[p][1]);
             cmap.setPos3(jac[i].codons[p][2]);
@@ -702,7 +707,7 @@ public class Jalview2XML
           for (int m = 0; m < pmaps.length; m++)
           {
             AlcodMap alcmap = new AlcodMap();
-            alcmap.setDnasq(seqHash(dnas[m])); 
+            alcmap.setDnasq(seqHash(dnas[m]));
             alcmap.setMapping(createVamsasMapping(pmaps[m], dnas[m], null,
                     false));
             alc.addAlcodMap(alcmap);
@@ -757,6 +762,10 @@ public class Jalview2XML
     }
 
     // SAVE ANNOTATIONS
+    /**
+     * store forward refs from an annotationRow to any groups
+     */
+    IdentityHashMap groupRefs = new IdentityHashMap();
     if (jal.getAlignmentAnnotation() != null)
     {
       jalview.datamodel.AlignmentAnnotation[] aa = jal
@@ -773,15 +782,7 @@ public class Jalview2XML
 
         an.setId(aa[i].annotationId);
 
-        if (aa[i] == av.quality || aa[i] == av.conservation
-                || aa[i] == av.consensus)
-        {
-          an.setLabel(aa[i].label);
-          an.setGraph(true);
-          vamsasSet.addAnnotation(an);
-          continue;
-        }
-
+        
         an.setVisible(aa[i].visible);
 
         an.setDescription(aa[i].description);
@@ -792,6 +793,27 @@ public class Jalview2XML
           // sequence rather than its display name
           an.setSequenceRef(aa[i].sequenceRef.getName());
         }
+        if (aa[i].groupRef!=null)
+        {
+          Object groupIdr = groupRefs.get(aa[i].groupRef);
+          if (groupIdr==null)
+          {
+            // make a locally unique String
+            groupRefs.put(aa[i].groupRef, groupIdr = (""+System.currentTimeMillis()+aa[i].groupRef.getName()+groupRefs.size()));
+          }
+          an.setGroupRef(groupIdr.toString());
+        }
+        if (aa[i] == av.quality || aa[i] == av.conservation
+                || aa[i] == av.consensus || aa[i].autoCalculated)
+        {
+          // new way of indicating autocalculated annotation - 
+          an.setAutoCalculated(aa[i].autoCalculated);
+          // write a stub for this annotation - indicate presence of autocalc rows
+          an.setLabel(aa[i].label);
+          an.setGraph(true);
+          vamsasSet.addAnnotation(an);
+          continue;
+        }
 
         if (aa[i].graph > 0)
         {
@@ -860,7 +882,6 @@ public class Jalview2XML
         vamsasSet.addAnnotation(an);
       }
     }
-
     // SAVE GROUPS
     if (jal.getGroups() != null)
     {
@@ -874,9 +895,11 @@ public class Jalview2XML
                 .getGroups().elementAt(i);
         groups[i].setStart(sg.getStartRes());
         groups[i].setEnd(sg.getEndRes());
-        groups[i].setName(sg.getName()); // TODO later sequence group should
-        // specify IDs of sequences, not just
-        // names
+        groups[i].setName(sg.getName()); 
+        if (groupRefs.containsKey(sg)) {
+          // group has references so set it's ID field 
+          groups[i].setId(groupRefs.get(sg).toString());
+        }
         if (sg.cs != null)
         {
           if (sg.cs.conservationApplied())
@@ -922,6 +945,9 @@ public class Jalview2XML
         groups[i].setTextCol2(sg.textColour2.getRGB());
         groups[i].setTextColThreshold(sg.thresholdTextColour);
         groups[i].setShowUnconserved(sg.getShowunconserved());
+        groups[i].setIgnoreGapsinConsensus(sg.getIgnoreGapsConsensus());
+        groups[i].setShowConsensusHistogram(sg.isShowConsensusHistogram());
+        groups[i].setShowConsensusProfile(sg.isIncludeAllConsSymbols());
         for (int s = 0; s < sg.getSize(); s++)
         {
           jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence) sg
@@ -1033,7 +1059,15 @@ public class Jalview2XML
     view.setTextCol1(av.textColour.getRGB());
     view.setTextCol2(av.textColour2.getRGB());
     view.setTextColThreshold(av.thresholdTextColour);
-
+    view.setShowConsensusHistogram(av.isShowConsensusHistogram());
+    view.setShowConsensusProfile(av.isShowConsensusProfile());
+    view.setShowGroupConsensus(av.isShowGroupConsensus());
+    view.setShowGroupConservation(av.isShowGroupConservation());
+    view.setShowNPfeatureTooltip(av.isShowNpFeats());
+    view.setShowDbRefTooltip(av.isShowDbRefs());
+    view.setFollowHighlight(av.followHighlight);
+    view.setFollowSelection(av.followSelection);
+    view.setIgnoreGapsinConsensus(av.getIgnoreGapsConsensus());
     if (av.featuresDisplayed != null)
     {
       jalview.schemabinding.version2.FeatureSettings fs = new jalview.schemabinding.version2.FeatureSettings();
@@ -1041,13 +1075,27 @@ public class Jalview2XML
       String[] renderOrder = ap.seqPanel.seqCanvas.getFeatureRenderer().renderOrder;
 
       Vector settingsAdded = new Vector();
+      Object gstyle=null;
+      GraduatedColor gcol = null; 
       for (int ro = 0; ro < renderOrder.length; ro++)
       {
+        gstyle = ap.seqPanel.seqCanvas.getFeatureRenderer().getFeatureStyle(renderOrder[ro]);
         Setting setting = new Setting();
         setting.setType(renderOrder[ro]);
-        setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer()
-                .getColour(renderOrder[ro]).getRGB());
-
+        if (gstyle instanceof GraduatedColor) {
+          gcol  = (GraduatedColor) gstyle;
+          setting.setColour(gcol.getMaxColor().getRGB());
+          setting.setMincolour(gcol.getMinColor().getRGB());
+          setting.setMin(gcol.getMin());
+          setting.setMax(gcol.getMax());
+          setting.setColourByLabel(gcol.isColourByLabel());
+          setting.setAutoScale(gcol.isAutoScale());
+          setting.setThreshold(gcol.getThresh());
+          setting.setThreshstate(gcol.getThreshType());
+        } else {
+          setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer()      .getColour(renderOrder[ro]).getRGB());
+        }
+        
         setting.setDisplay(av.featuresDisplayed
                 .containsKey(renderOrder[ro]));
         float rorder = ap.seqPanel.seqCanvas.getFeatureRenderer().getOrder(
@@ -1110,14 +1158,23 @@ public class Jalview2XML
 
     if (av.hasHiddenColumns)
     {
-      for (int c = 0; c < av.getColumnSelection().getHiddenColumns().size(); c++)
+      if (av.getColumnSelection() == null
+              || av.getColumnSelection().getHiddenColumns() == null)
       {
-        int[] region = (int[]) av.getColumnSelection().getHiddenColumns()
-                .elementAt(c);
-        HiddenColumns hc = new HiddenColumns();
-        hc.setStart(region[0]);
-        hc.setEnd(region[1]);
-        view.addHiddenColumns(hc);
+        warn("REPORT BUG: avoided null columnselection bug (DMAM reported). Please contact Jim about this.");
+      }
+      else
+      {
+        for (int c = 0; c < av.getColumnSelection().getHiddenColumns()
+                .size(); c++)
+        {
+          int[] region = (int[]) av.getColumnSelection().getHiddenColumns()
+                  .elementAt(c);
+          HiddenColumns hc = new HiddenColumns();
+          hc.setStart(region[0]);
+          hc.setEnd(region[1]);
+          view.addHiddenColumns(hc);
+        }
       }
     }
 
@@ -1164,7 +1221,7 @@ public class Jalview2XML
    * exist, the result of the hashcode call for the object.
    * 
    * @param jvobj
-   *                jalview data object
+   *          jalview data object
    * @return unique ID for referring to jvobj
    */
   private String makeHashCode(Object jvobj, String altCode)
@@ -1195,7 +1252,7 @@ public class Jalview2XML
    * return local jalview object mapped to ID, if it exists
    * 
    * @param idcode
-   *                (may be null)
+   *          (may be null)
    * @return null or object bound to idcode
    */
   private Object retrieveExistingObj(String idcode)
@@ -1334,11 +1391,15 @@ public class Jalview2XML
   {
     String id = null;
     jalview.schemes.UserColourScheme ucs = (jalview.schemes.UserColourScheme) cs;
-
+    boolean newucs=false;
     if (!userColours.contains(ucs))
     {
       userColours.add(ucs);
-
+      newucs=true;
+    }
+    id = "ucs" + userColours.indexOf(ucs);
+    if (newucs) {
+      // actually create the scheme's entry in the XML model
       java.awt.Color[] colours = ucs.getColours();
       jalview.schemabinding.version2.UserColours uc = new jalview.schemabinding.version2.UserColours();
       jalview.schemabinding.version2.UserColourScheme jbucs = new jalview.schemabinding.version2.UserColourScheme();
@@ -1362,7 +1423,6 @@ public class Jalview2XML
         }
       }
 
-      id = "ucs" + userColours.indexOf(ucs);
       uc.setId(id);
       uc.setUserColourScheme(jbucs);
       jms.addUserColours(uc);
@@ -1426,8 +1486,8 @@ public class Jalview2XML
   /**
    * Load a jalview project archive from a jar file
    * 
-   * @param file -
-   *                HTTP URL or filename
+   * @param file
+   *          - HTTP URL or filename
    */
   public AlignFrame LoadJalviewAlign(final String file)
   {
@@ -1603,8 +1663,10 @@ public class Jalview2XML
               + ex + "\n");
     } catch (OutOfMemoryError e)
     {
-      new jalview.gui.OOMWarning("loading jalview XML file", e,
-              Desktop.instance);
+      // Don't use the OOM Window here
+      errorMessage = "Out of memory loading jalview XML file";
+      System.err.println("Out of memory whilst loading jalview XML file");
+      e.printStackTrace();
     }
 
     if (Desktop.instance != null)
@@ -1731,13 +1793,13 @@ public class Jalview2XML
    * Load alignment frame from jalview XML DOM object
    * 
    * @param object
-   *                DOM
+   *          DOM
    * @param file
-   *                filename source string
+   *          filename source string
    * @param loadTreesAndStructures
-   *                when false only create Viewport
+   *          when false only create Viewport
    * @param jprovider
-   *                data source provider
+   *          data source provider
    * @return alignment frame created from view stored in DOM
    */
   AlignFrame LoadFromObject(JalviewModel object, String file,
@@ -1911,14 +1973,17 @@ public class Jalview2XML
           Alcodon[] alcods = alc[i].getAlcodon();
           for (int p = 0; p < cf.codons.length; p++)
           {
-            if (alcods[p].hasPos1() && alcods[p].hasPos2() && alcods[p].hasPos3())
+            if (alcods[p].hasPos1() && alcods[p].hasPos2()
+                    && alcods[p].hasPos3())
             {
               // translated codons require three valid positions
               cf.codons[p] = new int[3];
               cf.codons[p][0] = (int) alcods[p].getPos1();
               cf.codons[p][1] = (int) alcods[p].getPos2();
               cf.codons[p][2] = (int) alcods[p].getPos3();
-            } else {
+            }
+            else
+            {
               cf.codons[p] = null;
             }
           }
@@ -1957,6 +2022,10 @@ public class Jalview2XML
     // ////////////////////////////////
     // LOAD ANNOTATIONS
     boolean hideQuality = true, hideConservation = true, hideConsensus = true;
+    /**
+     * store any annotations which forward reference a group's ID
+     */
+    Hashtable groupAnnotRefs = new Hashtable();
 
     if (vamsasSet.getAnnotationCount() > 0)
     {
@@ -1979,7 +2048,7 @@ public class Jalview2XML
         {
           hideConsensus = false;
           continue;
-        }
+        }        
         // set visiblity for other annotation in this view
         if (an[i].getId() != null
                 && annotationIds.containsKey(an[i].getId()))
@@ -2067,14 +2136,31 @@ public class Jalview2XML
             al.findName(an[i].getSequenceRef()).addAlignmentAnnotation(jaa);
           }
         }
+        // and make a note of any group association
+        if (an[i].getGroupRef()!=null && an[i].getGroupRef().length()>0)
+        {
+          groupAnnotRefs.put(an[i].getGroupRef(),jaa);
+        }
+
         if (an[i].hasScore())
         {
           jaa.setScore(an[i].getScore());
         }
-
         if (an[i].hasVisible())
           jaa.visible = an[i].getVisible();
-
+        
+        if (an[i].hasCentreColLabels())
+          jaa.centreColLabels = an[i].getCentreColLabels();
+        
+        if (an[i].hasScaleColLabels())
+        {
+          jaa.scaleColLabel = an[i].getScaleColLabels();
+        }
+        if (an[i].hasAutoCalculated() && an[i].isAutoCalculated())
+        {
+          // newer files have an 'autoCalculated' flag and store calculation state in viewport properties
+          jaa.autoCalculated = true; // means annotation will be marked for update at end of load. 
+        }
         al.addAnnotation(jaa);
       }
     }
@@ -2137,9 +2223,19 @@ public class Jalview2XML
 
         sg.textColour = new java.awt.Color(groups[i].getTextCol1());
         sg.textColour2 = new java.awt.Color(groups[i].getTextCol2());
-        sg.setShowunconserved(groups[i].hasShowUnconserved() ? groups[i].isShowUnconserved() : false);
+        sg.setShowunconserved(groups[i].hasShowUnconserved() ? groups[i]
+                .isShowUnconserved() : false);
         sg.thresholdTextColour = groups[i].getTextColThreshold();
-
+        if (groups[i].hasShowConsensusHistogram()) {
+          sg.setShowConsensusHistogram(groups[i].isShowConsensusHistogram());
+        };
+        if (groups[i].hasShowConsensusProfile()) {
+          sg.setIncludeAllConsSymbols(groups[i].isShowConsensusProfile());
+        }
+        if (groups[i].hasIgnoreGapsinConsensus())
+        {
+          sg.setIgnoreGapsConsensus(groups[i].getIgnoreGapsinConsensus());
+        }
         if (groups[i].getConsThreshold() != 0)
         {
           jalview.analysis.Conservation c = new jalview.analysis.Conservation(
@@ -2149,8 +2245,19 @@ public class Jalview2XML
           c.verdict(false, 25);
           sg.cs.setConservation(c);
         }
-
+        
+        if (groups[i].getId()!=null
+                && groupAnnotRefs.size()>0)
+        {
+          // re-instate unique group/annotation row reference
+          jalview.datamodel.AlignmentAnnotation jaa = (jalview.datamodel.AlignmentAnnotation) groupAnnotRefs.get(groups[i].getId());
+          if (jaa!=null)
+          {
+            jaa.groupRef = sg;
+          }
+        }
         al.addGroup(sg);
+        
       }
     }
 
@@ -2255,7 +2362,8 @@ public class Jalview2XML
           else
           {
             // update local tree attributes ?
-            // TODO: should check if tp has been manipulated by user - if so its settings shouldn't be modified
+            // TODO: should check if tp has been manipulated by user - if so its
+            // settings shouldn't be modified
             tp.setTitle(tree.getTitle());
             tp.setBounds(new Rectangle(tree.getXpos(), tree.getYpos(), tree
                     .getWidth(), tree.getHeight()));
@@ -2266,9 +2374,10 @@ public class Jalview2XML
             tp.treeCanvas.ap = ap; // af.alignPanel;
 
           }
-         if (tp==null)
+          if (tp == null)
           {
-            warn("There was a problem recovering stored Newick tree: \n"+tree.getNewick());
+            warn("There was a problem recovering stored Newick tree: \n"
+                    + tree.getNewick());
             continue;
           }
 
@@ -2385,27 +2494,33 @@ public class Jalview2XML
               {
                 // create a new Jmol window
                 String state = ids[p].getStructureState(s).getContent();
-                StringBuffer newFileLoc=null;
-                if (state.indexOf("load")>-1) {
-                newFileLoc = new StringBuffer(state.substring(
-                        0, state.indexOf("\"", state.indexOf("load")) + 1));
-
-                newFileLoc.append(jpdb.getFile());
-                newFileLoc.append(state.substring(state.indexOf("\"", state
-                        .indexOf("load \"") + 6)));
-                } else {
-                  System.err.println("Ignoring incomplete Jmol state for PDB "+ids[p].getId());
-                  
+                StringBuffer newFileLoc = null;
+                if (state.indexOf("load") > -1)
+                {
+                  newFileLoc = new StringBuffer(state.substring(0, state
+                          .indexOf("\"", state.indexOf("load")) + 1));
+
+                  newFileLoc.append(jpdb.getFile());
+                  newFileLoc.append(state.substring(state.indexOf("\"",
+                          state.indexOf("load \"") + 6)));
+                }
+                else
+                {
+                  System.err
+                          .println("Ignoring incomplete Jmol state for PDB "
+                                  + ids[p].getId());
+
                   newFileLoc = new StringBuffer(state);
                   newFileLoc.append("; load \"");
                   newFileLoc.append(jpdb.getFile());
                   newFileLoc.append("\";");
                 }
-                
-                if (newFileLoc!=null) {
+
+                if (newFileLoc != null)
+                {
                   new AppJmol(pdbFile, ids[p].getId(), seq, af.alignPanel,
-                          newFileLoc.toString(), new java.awt.Rectangle(x, y,
-                                width, height), sviewid);
+                          newFileLoc.toString(), new java.awt.Rectangle(x,
+                                  y, width, height), sviewid);
                 }
 
               }
@@ -2552,7 +2667,8 @@ public class Jalview2XML
     af.viewport.textColour = new java.awt.Color(view.getTextCol1());
     af.viewport.textColour2 = new java.awt.Color(view.getTextCol2());
     af.viewport.thresholdTextColour = view.getTextColThreshold();
-    af.viewport.setShowUnconserved(view.hasShowUnconserved() ? view.isShowUnconserved() : false);
+    af.viewport.setShowUnconserved(view.hasShowUnconserved() ? view
+            .isShowUnconserved() : false);
     af.viewport.setStartRes(view.getStartRes());
     af.viewport.setStartSeq(view.getStartSeq());
 
@@ -2625,8 +2741,8 @@ public class Jalview2XML
 
                 /*
                  * if
-                 * (view.getAnnotationColours().getColourScheme().equals("None")) {
-                 * sg.cs = new AnnotationColourGradient(
+                 * (view.getAnnotationColours().getColourScheme().equals("None"
+                 * )) { sg.cs = new AnnotationColourGradient(
                  * af.viewport.alignment.getAlignmentAnnotation()[i], new
                  * java.awt.Color(view.getAnnotationColours(). getMinColour()),
                  * new java.awt.Color(view.getAnnotationColours().
@@ -2676,6 +2792,47 @@ public class Jalview2XML
     {
       af.viewport.showSequenceFeatures = true;
     }
+    if (view.hasCentreColumnLabels())
+    {
+      af.viewport.setCentreColumnLabels(view.getCentreColumnLabels());
+    }
+    if (view.hasIgnoreGapsinConsensus())
+    {
+      af.viewport.ignoreGapsInConsensusCalculation=view.getIgnoreGapsinConsensus();
+    }
+    if (view.hasFollowHighlight())
+    {
+      af.viewport.followHighlight = view.getFollowHighlight();
+    }
+    if (view.hasFollowSelection())
+    {
+      af.viewport.followSelection = view.getFollowSelection();
+    }
+    if (view.hasShowConsensusHistogram())
+    {
+      af.viewport.setShowConsensusHistogram(view.getShowConsensusHistogram());
+    }
+    if (view.hasShowConsensusProfile())
+    {
+      af.viewport.setShowConsensusProfile(view.getShowConsensusProfile());
+    }
+    if (view.hasShowDbRefTooltip())
+    {
+      af.viewport.setShowDbRefs(view.getShowDbRefTooltip());
+    }
+    if (view.hasShowNPfeatureTooltip())
+    {
+      af.viewport.setShowNpFeats(view.hasShowNPfeatureTooltip());
+    }
+    if (view.hasShowGroupConsensus())
+    {
+      af.viewport.setShowGroupConsensus(view.getShowGroupConsensus());
+    }
+    if (view.hasShowGroupConservation())
+    {
+      af.viewport.setShowGroupConservation(view.getShowGroupConservation());
+    }
+    
     // recover featre settings
     if (jms.getFeatureSettings() != null)
     {
@@ -2687,16 +2844,34 @@ public class Jalview2XML
         Setting setting = jms.getFeatureSettings().getSetting(fs);
         if (setting.hasMincolour())
         {
-          // TODO: determine how to set data independent bounds for a graduated colour scheme's range.
-          GraduatedColor gc = new GraduatedColor(new java.awt.Color(setting.getMincolour()), new java.awt.Color(setting.getColour()),
-                  0,1);
-          if (setting.hasThreshold()) {
+          GraduatedColor gc = setting.hasMin() ? new GraduatedColor(new java.awt.Color(setting
+                  .getMincolour()),
+                  new java.awt.Color(setting.getColour()), setting.getMin(), setting.getMax())
+          : new GraduatedColor(new java.awt.Color(setting
+                  .getMincolour()),
+                  new java.awt.Color(setting.getColour()), 0,1);
+          if (setting.hasThreshold())
+          {
             gc.setThresh(setting.getThreshold());
             gc.setThreshType(setting.getThreshstate());
           }
-        } else {
+          gc.setAutoScaled(true); // default
+          if (setting.hasAutoScale())
+          {
+            gc.setAutoScaled(setting.getAutoScale());
+          }
+          if (setting.hasColourByLabel())
+          {
+            gc.setColourByLabel(setting.getColourByLabel());
+          }
+          // and put in the feature colour table.
+          af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(setting.getType(),gc);
+        }
+        else
+        {
           af.alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(
-                  setting.getType(), new java.awt.Color(setting.getColour()));
+                  setting.getType(),
+                  new java.awt.Color(setting.getColour()));
         }
         renderOrder[fs] = setting.getType();
         if (setting.hasOrder())
@@ -2733,6 +2908,7 @@ public class Jalview2XML
     }
 
     af.setMenusFromViewport(af.viewport);
+    af.alignPanel.updateAnnotation(false); // recompute any autoannotation
     // TODO: we don't need to do this if the viewport is aready visible.
     Desktop.addInternalFrame(af, view.getTitle(), view.getWidth(), view
             .getHeight());
@@ -2815,7 +2991,8 @@ public class Jalview2XML
       SequenceI[] dsseqs = new SequenceI[dseqs.size()];
       dseqs.copyInto(dsseqs);
       ds = new jalview.datamodel.Alignment(dsseqs);
-      debug("Created new dataset "+vamsasSet.getDatasetId()+" for alignment "+System.identityHashCode(al));
+      debug("Created new dataset " + vamsasSet.getDatasetId()
+              + " for alignment " + System.identityHashCode(al));
       addDatasetRef(vamsasSet.getDatasetId(), ds);
     }
     // set the dataset for the newly imported alignment.
@@ -2828,11 +3005,11 @@ public class Jalview2XML
   /**
    * 
    * @param vamsasSeq
-   *                sequence definition to create/merge dataset sequence for
+   *          sequence definition to create/merge dataset sequence for
    * @param ds
-   *                dataset alignment
+   *          dataset alignment
    * @param dseqs
-   *                vector to add new dataset sequence to
+   *          vector to add new dataset sequence to
    */
   private void ensureJalviewDatasetSequence(Sequence vamsasSeq,
           AlignmentI ds, Vector dseqs)
@@ -2922,7 +3099,9 @@ public class Jalview2XML
   }
 
   java.util.Hashtable datasetIds = null;
+
   java.util.IdentityHashMap dataset2Ids = null;
+
   private Alignment getDatasetFor(String datasetId)
   {
     if (datasetIds == null)
@@ -2945,35 +3124,40 @@ public class Jalview2XML
     }
     datasetIds.put(datasetId, dataset);
   }
+
   /**
    * make a new dataset ID for this jalview dataset alignment
+   * 
    * @param dataset
    * @return
    */
   private String getDatasetIdRef(jalview.datamodel.Alignment dataset)
   {
-    if (dataset.getDataset()!=null)
+    if (dataset.getDataset() != null)
     {
       warn("Serious issue!  Dataset Object passed to getDatasetIdRef is not a Jalview DATASET alignment...");
     }
-    String datasetId=makeHashCode(dataset, null);
-    if (datasetId==null)
+    String datasetId = makeHashCode(dataset, null);
+    if (datasetId == null)
     {
       // make a new datasetId and record it
       if (dataset2Ids == null)
       {
         dataset2Ids = new IdentityHashMap();
-      } else {
+      }
+      else
+      {
         datasetId = (String) dataset2Ids.get(dataset);
       }
-      if (datasetId==null)
+      if (datasetId == null)
       {
-        datasetId = "ds"+dataset2Ids.size()+1;
-        dataset2Ids.put(dataset,datasetId);
+        datasetId = "ds" + dataset2Ids.size() + 1;
+        dataset2Ids.put(dataset, datasetId);
       }
     }
     return datasetId;
   }
+
   private void addDBRefs(SequenceI datasetSequence, Sequence sequence)
   {
     for (int d = 0; d < sequence.getDBRefCount(); d++)
@@ -3017,7 +3201,7 @@ public class Jalview2XML
       MappingChoice mc = m.getMappingChoice();
       if (mc.getDseqFor() != null)
       {
-        String dsfor = ""+mc.getDseqFor();
+        String dsfor = "" + mc.getDseqFor();
         if (seqRefIds.containsKey(dsfor))
         {
           /**
@@ -3093,9 +3277,12 @@ public class Jalview2XML
     else
     {
       uniqueSetSuffix = "";
-      jm.getJalviewModelSequence().getViewport(0).setId(null); // we don't overwrite the view we just copied
+      jm.getJalviewModelSequence().getViewport(0).setId(null); // we don't
+                                                               // overwrite the
+                                                               // view we just
+                                                               // copied
     }
-    if (this.frefedSequence==null)
+    if (this.frefedSequence == null)
     {
       frefedSequence = new Vector();
     }
@@ -3107,8 +3294,9 @@ 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) {
+     * 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]; } } }
      */
@@ -3171,8 +3359,9 @@ public class Jalview2XML
 
   private void debug(String string)
   {
-    debug(string,null);
+    debug(string, null);
   }
+
   private void debug(String msg, Exception e)
   {
     if (Cache.log != null)
@@ -3204,9 +3393,9 @@ public class Jalview2XML
    * alignment objects containing dataset sequences
    * 
    * @param vobj2jv
-   *                Map from ID strings to jalview datamodel
+   *          Map from ID strings to jalview datamodel
    * @param jv2vobj
-   *                Map from jalview datamodel to ID strings
+   *          Map from jalview datamodel to ID strings
    * 
    * 
    */