quick fix for nullpointer in column selection when saving jalview project (David...
authorjprocter <Jim Procter>
Wed, 14 Oct 2009 16:16:59 +0000 (16:16 +0000)
committerjprocter <Jim Procter>
Wed, 14 Oct 2009 16:16:59 +0000 (16:16 +0000)
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/Jalview2XML.java

index 45a0c85..db2eac1 100755 (executable)
@@ -1249,7 +1249,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       viewport.historyList.push(command);
       viewport.redoList.clear();
       updateEditMenuBar();
-      viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+      viewport.hasHiddenColumns = (viewport.colSel!=null && viewport.colSel.getHiddenColumns() != null && viewport.colSel.getHiddenColumns().size()>0);
     }
   }
 
@@ -1296,7 +1296,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     if (originalSource != null)
     {
-      originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+      originalSource.hasHiddenColumns = (viewport.colSel!=null && viewport.colSel.getHiddenColumns() != null && viewport.colSel.getHiddenColumns().size()>0);
       originalSource.firePropertyChange("alignment", null,
               originalSource.alignment.getSequences());
     }
@@ -1324,7 +1324,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     if (originalSource != null)
     {
-      originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+      originalSource.hasHiddenColumns = (viewport.colSel!=null && viewport.colSel.getHiddenColumns() != null && viewport.colSel.getHiddenColumns().size()>0);
       originalSource.firePropertyChange("alignment", null,
               originalSource.alignment.getSequences());
     }
index f279910..289fab7 100755 (executable)
@@ -232,9 +232,11 @@ public class AlignViewport implements SelectionSource
     if (hiddenColumns != null)
     {
       this.colSel = hiddenColumns;
-      if (hiddenColumns.getHiddenColumns() != null)
+      if (hiddenColumns.getHiddenColumns() != null && hiddenColumns.getHiddenColumns().size()>0)
       {
         hasHiddenColumns = true;
+      } else {
+        hasHiddenColumns = false;
       }
     }
     init();
@@ -267,9 +269,11 @@ public class AlignViewport implements SelectionSource
     if (hiddenColumns != null)
     {
       this.colSel = hiddenColumns;
-      if (hiddenColumns.getHiddenColumns() != null)
+      if (hiddenColumns.getHiddenColumns() != null && hiddenColumns.getHiddenColumns().size()>0)
       {
         hasHiddenColumns = true;
+      } else {
+        hasHiddenColumns = false;
       }
     }
     init();
index f9a2fa9..4d883c4 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);
@@ -1110,14 +1115,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 +1178,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 +1209,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)
@@ -1426,8 +1440,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)
   {
@@ -1733,13 +1747,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,
@@ -1913,14 +1927,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;
             }
           }
@@ -2139,7 +2156,8 @@ 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].getConsThreshold() != 0)
@@ -2257,7 +2275,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()));
@@ -2268,9 +2287,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;
           }
 
@@ -2387,27 +2407,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);
                 }
 
               }
@@ -2554,7 +2580,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());
 
@@ -2627,8 +2654,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().
@@ -2689,16 +2716,22 @@ 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()) {
+          // 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())
+          {
             gc.setThresh(setting.getThreshold());
             gc.setThreshType(setting.getThreshstate());
           }
-        } else {
+        }
+        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())
@@ -2817,7 +2850,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.
@@ -2830,11 +2864,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)
@@ -2924,7 +2958,9 @@ public class Jalview2XML
   }
 
   java.util.Hashtable datasetIds = null;
+
   java.util.IdentityHashMap dataset2Ids = null;
+
   private Alignment getDatasetFor(String datasetId)
   {
     if (datasetIds == null)
@@ -2947,35 +2983,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++)
@@ -3019,7 +3060,7 @@ public class Jalview2XML
       MappingChoice mc = m.getMappingChoice();
       if (mc.getDseqFor() != null)
       {
-        String dsfor = ""+mc.getDseqFor();
+        String dsfor = "" + mc.getDseqFor();
         if (seqRefIds.containsKey(dsfor))
         {
           /**
@@ -3095,9 +3136,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();
     }
@@ -3109,8 +3153,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]; } } }
      */
@@ -3173,8 +3218,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)
@@ -3206,9 +3252,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
    * 
    * 
    */