apply version 2.7 copyright
[jalview.git] / src / jalview / gui / Jalview2XML.java
old mode 100755 (executable)
new mode 100644 (file)
index 2df51b1..cb29ab5
@@ -1,6 +1,6 @@
 /*
- * 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, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -48,7 +48,7 @@ import jalview.util.jarInputStreamProvider;
  * will be :)
  * 
  * @author $author$
- * @version $Revision$
+ * @version $Revision: 1.134 $
  */
 public class Jalview2XML
 {
@@ -624,6 +624,7 @@ public class Jalview2XML
                     state.setAlignwithAlignPanel(jmol.isUsedforaligment(ap));
                     state.setColourwithAlignPanel(jmol
                             .isUsedforcolourby(ap));
+                    state.setColourByJmol(jmol.isColouredByJmol());
                     if (!jmolViewIds.contains(state.getViewId()))
                     {
                       // Make sure we only store a Jmol state once in each XML
@@ -841,7 +842,7 @@ public class Jalview2XML
         an.setCentreColLabels(aa[i].centreColLabels);
         an.setScaleColLabels(aa[i].scaleColLabel);
         an.setShowAllColLabels(aa[i].showAllColLabels);
-        
+
         if (aa[i].graph > 0)
         {
           an.setGraph(true);
@@ -908,7 +909,9 @@ public class Jalview2XML
             an.addAnnotationElement(ae);
             if (aa[i].autoCalculated)
             {
-              // only write one non-null entry into the annotation row - sufficient to get the visualization attributes necessary to display data
+              // only write one non-null entry into the annotation row -
+              // sufficient to get the visualization attributes necessary to
+              // display data
               continue;
             }
           }
@@ -1116,40 +1119,43 @@ public class Jalview2XML
       Vector settingsAdded = new Vector();
       Object gstyle = null;
       GraduatedColor gcol = null;
-      for (int ro = 0; ro < renderOrder.length; ro++)
+      if (renderOrder != null)
       {
-        gstyle = ap.seqPanel.seqCanvas.getFeatureRenderer()
-                .getFeatureStyle(renderOrder[ro]);
-        Setting setting = new Setting();
-        setting.setType(renderOrder[ro]);
-        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
+        for (int ro = 0; ro < renderOrder.length; ro++)
         {
-          setting.setColour(ap.seqPanel.seqCanvas.getFeatureRenderer()
-                  .getColour(renderOrder[ro]).getRGB());
-        }
+          gstyle = ap.seqPanel.seqCanvas.getFeatureRenderer()
+                  .getFeatureStyle(renderOrder[ro]);
+          Setting setting = new Setting();
+          setting.setType(renderOrder[ro]);
+          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(
-                renderOrder[ro]);
-        if (rorder > -1)
-        {
-          setting.setOrder(rorder);
+          setting.setDisplay(av.featuresDisplayed
+                  .containsKey(renderOrder[ro]));
+          float rorder = ap.seqPanel.seqCanvas.getFeatureRenderer()
+                  .getOrder(renderOrder[ro]);
+          if (rorder > -1)
+          {
+            setting.setOrder(rorder);
+          }
+          fs.addSetting(setting);
+          settingsAdded.addElement(renderOrder[ro]);
         }
-        fs.addSetting(setting);
-        settingsAdded.addElement(renderOrder[ro]);
       }
 
       // Make sure we save none displayed feature settings
@@ -2087,7 +2093,7 @@ public class Jalview2XML
     /**
      * store any annotations which forward reference a group's ID
      */
-    Hashtable<String,ArrayList<jalview.datamodel.AlignmentAnnotation>> groupAnnotRefs = new Hashtable<String,ArrayList<jalview.datamodel.AlignmentAnnotation>>();
+    Hashtable<String, ArrayList<jalview.datamodel.AlignmentAnnotation>> groupAnnotRefs = new Hashtable<String, ArrayList<jalview.datamodel.AlignmentAnnotation>>();
 
     if (vamsasSet.getAnnotationCount() > 0)
     {
@@ -2110,7 +2116,9 @@ public class Jalview2XML
             an[i].setAutoCalculated(true);
           }
         }
-        if (autoForView  || (an[i].hasAutoCalculated() && an[i].isAutoCalculated())) {
+        if (autoForView
+                || (an[i].hasAutoCalculated() && an[i].isAutoCalculated()))
+        {
           // remove ID - we don't recover annotation from other views for
           // view-specific annotation
           an[i].setId(null);
@@ -2167,12 +2175,13 @@ public class Jalview2XML
 
         if (an[i].getGraph())
         {
-          float llim=0,hlim=0;
- //         if (autoForView || an[i].isAutoCalculated()) {
-  //          hlim=11f;
-   //       }
+          float llim = 0, hlim = 0;
+          // if (autoForView || an[i].isAutoCalculated()) {
+          // hlim=11f;
+          // }
           jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
-                  an[i].getDescription(), anot, llim, hlim, an[i].getGraphType());
+                  an[i].getDescription(), anot, llim, hlim,
+                  an[i].getGraphType());
 
           jaa.graphGroup = an[i].getGraphGroup();
 
@@ -2184,9 +2193,11 @@ public class Jalview2XML
                     an[i].getThresholdLine().getColour())));
 
           }
-          if (autoForView || an[i].isAutoCalculated()) {
-            // Hardwire the symbol display line to ensure that labels for histograms are displayed
-            jaa.hasText=true;
+          if (autoForView || an[i].isAutoCalculated())
+          {
+            // Hardwire the symbol display line to ensure that labels for
+            // histograms are displayed
+            jaa.hasText = true;
           }
         }
         else
@@ -2217,10 +2228,12 @@ public class Jalview2XML
         // and make a note of any group association
         if (an[i].getGroupRef() != null && an[i].getGroupRef().length() > 0)
         {
-          ArrayList<jalview.datamodel.AlignmentAnnotation> aal=groupAnnotRefs.get(an[i].getGroupRef());
-          if (aal==null) { 
+          ArrayList<jalview.datamodel.AlignmentAnnotation> aal = groupAnnotRefs
+                  .get(an[i].getGroupRef());
+          if (aal == null)
+          {
             aal = new ArrayList<jalview.datamodel.AlignmentAnnotation>();
-            groupAnnotRefs.put(an[i].getGroupRef(),aal);
+            groupAnnotRefs.put(an[i].getGroupRef(), aal);
           }
           aal.add(jaa);
         }
@@ -2253,10 +2266,12 @@ public class Jalview2XML
         if (jaa.autoCalculated)
         {
           autoAlan.add(new JvAnnotRow(i, jaa));
-        } else 
+        }
+        else
         // if (!autoForView)
         {
-          // add autocalculated group annotation and any user created annotation for the view
+          // add autocalculated group annotation and any user created annotation
+          // for the view
           al.addAnnotation(jaa);
         }
       }
@@ -2351,19 +2366,24 @@ public class Jalview2XML
                   .get(groups[i].getId());
           if (jaal != null)
           {
-            for (jalview.datamodel.AlignmentAnnotation jaa:jaal) {
+            for (jalview.datamodel.AlignmentAnnotation jaa : jaal)
+            {
               jaa.groupRef = sg;
               if (jaa.autoCalculated)
               {
-                // match up and try to set group autocalc alignment row for this annotation
-                if (jaa.label.startsWith("Consensus for ")) {
+                // match up and try to set group autocalc alignment row for this
+                // annotation
+                if (jaa.label.startsWith("Consensus for "))
+                {
                   sg.setConsensus(jaa);
                 }
-                // match up and try to set group autocalc alignment row for this annotation
-                if (jaa.label.startsWith("Conservation for ")) {
+                // match up and try to set group autocalc alignment row for this
+                // annotation
+                if (jaa.label.startsWith("Conservation for "))
+                {
                   sg.setConservationRow(jaa);
-                }              
                 }
+              }
             }
           }
         }
@@ -2573,11 +2593,12 @@ public class Jalview2XML
                 { new int[]
                 { x, y, width, height }, "",
                     new Hashtable<String, Object[]>(), new boolean[]
-                    { false, false } });
-                // Legacy pre-2.7 conversion JAL-823 : 
-                // do not assume any view has to be linked for colour by sequence
+                    { false, false, true } });
+                // Legacy pre-2.7 conversion JAL-823 :
+                // do not assume any view has to be linked for colour by
+                // sequence
               }
-              
+
               // assemble String[] { pdb files }, String[] { id for each
               // file }, orig_fileloc, SequenceI[][] {{ seqs_file 1 }, {
               // seqs_file 2}, boolean[] {
@@ -2591,6 +2612,10 @@ public class Jalview2XML
                       .hasColourwithAlignPanel() ? ids[p]
                       .getStructureState(s).getColourwithAlignPanel()
                       : false;
+              // default for pre-2.7 projects is that Jmol colouring is enabled
+              ((boolean[]) jmoldat[3])[2] &= ids[p].getStructureState(s)
+                      .hasColourByJmol() ? ids[p].getStructureState(s)
+                      .getColourByJmol() : true;
 
               if (((String) jmoldat[1]).length() < ids[p]
                       .getStructureState(s).getContent().length())
@@ -2599,22 +2624,32 @@ public class Jalview2XML
                   jmoldat[1] = ids[p].getStructureState(s).getContent();
                 }
               }
-              Object[] seqstrmaps = (Object[]) ((Hashtable) jmoldat[2])
-                      .get(ids[p].getFile());
-              if (seqstrmaps == null)
+              if (ids[p].getFile() != null)
               {
-                ((Hashtable) jmoldat[2]).put(
-                        new File(ids[p].getFile()).toString(),
-                        seqstrmaps = new Object[]
-                        { pdbFile, ids[p].getId(), new Vector(),
-                            new Vector() });
+                Object[] seqstrmaps = (Object[]) ((Hashtable) jmoldat[2])
+                        .get(ids[p].getFile());
+                if (seqstrmaps == null)
+                {
+                  ((Hashtable) jmoldat[2]).put(
+                          new File(ids[p].getFile()).toString(),
+                          seqstrmaps = new Object[]
+                          { pdbFile, ids[p].getId(), new Vector(),
+                              new Vector() });
+                }
+                if (!((Vector) seqstrmaps[2]).contains(seq))
+                {
+                  ((Vector) seqstrmaps[2]).addElement(seq);
+                  // ((Vector)seqstrmaps[3]).addElement(n) :
+                  // in principle, chains
+                  // should be stored here : do we need to
+                  // TODO: store and recover seq/pdb_id :
+                  // chain mappings
+                }
               }
-              if (!((Vector) seqstrmaps[2]).contains(seq))
+              else
               {
-                ((Vector) seqstrmaps[2]).addElement(seq);
-                // ((Vector)seqstrmaps[3]).addElement(n) : in principle, chains
-                // should be stored here : do we need to
-                // TODO: store and recover seq/pdb_id : chain mappings
+                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);
               }
             }
           }
@@ -2630,7 +2665,7 @@ public class Jalview2XML
           int[] geom = (int[]) svattrib[0];
           String state = (String) svattrib[1];
           Hashtable<String, Object[]> oldFiles = (Hashtable<String, Object[]>) svattrib[2];
-          final boolean useinJmolsuperpos = ((boolean[]) svattrib[3])[0], usetoColourbyseq = ((boolean[]) svattrib[3])[1];
+          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
           Vector<String> pdbfilenames = new Vector<String>();
@@ -2786,8 +2821,8 @@ public class Jalview2XML
                     try
                     {
                       sview = new AppJmol(pdbf, id, sq, alf.alignPanel,
-                              useinJmolsuperpos, usetoColourbyseq, fileloc,
-                              rect, vid);
+                              useinJmolsuperpos, usetoColourbyseq,
+                              jmolColouring, fileloc, rect, vid);
                     } catch (OutOfMemoryError ex)
                     {
                       new OOMWarning("restoring structure view for PDB id "
@@ -2828,9 +2863,8 @@ public class Jalview2XML
               String pdbFile = (String) filedat[0];
               SequenceI[] seq = (SequenceI[]) ((Vector<SequenceI>) filedat[2])
                       .toArray(new SequenceI[0]);
-              StructureSelectionManager.getStructureSelectionManager()
-                      .setMapping(seq, null, pdbFile,
-                              jalview.io.AppletFormatAdapter.FILE);
+              ((AppJmol) comp).jmb.ssm.setMapping(seq, null, pdbFile,
+                      jalview.io.AppletFormatAdapter.FILE);
               ((AppJmol) comp).jmb.addSequenceForStructFile(pdbFile, seq);
             }
             // and add the AlignmentPanel's reference to the Jmol view
@@ -2845,7 +2879,8 @@ public class Jalview2XML
             }
             if (usetoColourbyseq)
             {
-              ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap);
+              ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap,
+                      !jmolColouring);
             }
             else
             {
@@ -3227,14 +3262,14 @@ public class Jalview2XML
     Desktop.addInternalFrame(af, view.getTitle(), view.getWidth(),
             view.getHeight());
     af.alignPanel.updateAnnotation(false); // recompute any autoannotation
-    reorderAutoannotation(af,al,autoAlan);
+    reorderAutoannotation(af, al, autoAlan);
     return af;
   }
 
   private void reorderAutoannotation(AlignFrame af, Alignment al,
           ArrayList<JvAnnotRow> autoAlan)
   {
- // copy over visualization settings for autocalculated annotation in the
+    // copy over visualization settings for autocalculated annotation in the
     // view
     if (al.getAlignmentAnnotation() != null)
     {
@@ -3265,32 +3300,34 @@ public class Jalview2XML
           if (valan != null)
           {
             // delete the auto calculated row from the alignment
-            al.deleteAnnotation(al.getAlignmentAnnotation()[h],false);
+            al.deleteAnnotation(al.getAlignmentAnnotation()[h], false);
             hSize--;
             h--;
             if (valan != nullAnnot)
             {
-              if (jalan!=valan.template) { 
+              if (jalan != valan.template)
+              {
                 // newly created autoannotation row instance
                 // so keep a reference to the visible annotation row
                 // and copy over all relevant attributes
-                  if (valan.template.graphHeight >= 0)
-              
-              {
-                jalan.graphHeight = valan.template.graphHeight;
-              }
-              jalan.visible = valan.template.visible;
+                if (valan.template.graphHeight >= 0)
+
+                {
+                  jalan.graphHeight = valan.template.graphHeight;
+                }
+                jalan.visible = valan.template.visible;
               }
               reorder.add(new JvAnnotRow(valan.order, jalan));
             }
           }
         }
       }
-      int s=0,srt[] = new int[reorder.size()];
+      int s = 0, srt[] = new int[reorder.size()];
       JvAnnotRow[] rws = new JvAnnotRow[reorder.size()];
-      for (JvAnnotRow jvar:reorder) {
+      for (JvAnnotRow jvar : reorder)
+      {
         rws[s] = jvar;
-        srt[s++]=jvar.order;
+        srt[s++] = jvar.order;
       }
       reorder.clear();
       jalview.util.QuickSort.sort(srt, rws);