patch for NPE (not clear if NPE is evidence of deeper bug in feature renderer state)
authorjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 14 Sep 2011 10:55:11 +0000 (11:55 +0100)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Wed, 14 Sep 2011 10:55:11 +0000 (11:55 +0100)
src/jalview/gui/Jalview2XML.java

index 1a9bc03..b899ae9 100644 (file)
@@ -842,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);
@@ -909,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;
             }
           }
@@ -1117,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
@@ -2088,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)
     {
@@ -2111,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);
@@ -2168,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();
 
@@ -2185,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
@@ -2218,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);
         }
@@ -2254,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);
         }
       }
@@ -2352,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);
-                }              
                 }
+              }
             }
           }
         }
@@ -2575,10 +2594,11 @@ public class Jalview2XML
                 { x, y, width, height }, "",
                     new Hashtable<String, Object[]>(), new boolean[]
                     { false, false, true } });
-                // Legacy pre-2.7 conversion JAL-823 : 
-                // do not assume any view has to be linked for colour by sequence
+                // 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[] {
@@ -2593,7 +2613,9 @@ public class Jalview2XML
                       .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;
+              ((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())
@@ -2626,7 +2648,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 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");
                 warn(errorMessage);
               }
             }
@@ -2643,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], jmolColouring=((boolean[])svattrib[3])[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
           Vector<String> pdbfilenames = new Vector<String>();
@@ -2799,8 +2821,8 @@ public class Jalview2XML
                     try
                     {
                       sview = new AppJmol(pdbf, id, sq, alf.alignPanel,
-                              useinJmolsuperpos, usetoColourbyseq, jmolColouring, fileloc,
-                              rect, vid);
+                              useinJmolsuperpos, usetoColourbyseq,
+                              jmolColouring, fileloc, rect, vid);
                     } catch (OutOfMemoryError ex)
                     {
                       new OOMWarning("restoring structure view for PDB id "
@@ -2842,7 +2864,7 @@ public class Jalview2XML
               SequenceI[] seq = (SequenceI[]) ((Vector<SequenceI>) filedat[2])
                       .toArray(new SequenceI[0]);
               ((AppJmol) comp).jmb.ssm.setMapping(seq, null, pdbFile,
-                              jalview.io.AppletFormatAdapter.FILE);
+                      jalview.io.AppletFormatAdapter.FILE);
               ((AppJmol) comp).jmb.addSequenceForStructFile(pdbFile, seq);
             }
             // and add the AlignmentPanel's reference to the Jmol view
@@ -2857,7 +2879,8 @@ public class Jalview2XML
             }
             if (usetoColourbyseq)
             {
-              ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap, !jmolColouring);
+              ((AppJmol) comp).useAlignmentPanelForColourbyseq(ap,
+                      !jmolColouring);
             }
             else
             {
@@ -3239,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)
     {
@@ -3277,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);