JAL-3032 don't throw Exception to signal chain not found, return null
[jalview.git] / src / jalview / ext / jmol / JmolParser.java
index beaaf79..a9c5f5c 100644 (file)
@@ -28,7 +28,6 @@ import jalview.io.DataSourceType;
 import jalview.io.FileParse;
 import jalview.io.StructureFile;
 import jalview.schemes.ResidueProperties;
-import jalview.structure.StructureImportSettings;
 import jalview.util.Format;
 import jalview.util.MessageManager;
 
@@ -46,9 +45,9 @@ import org.jmol.c.STR;
 import org.jmol.modelset.ModelSet;
 import org.jmol.viewer.Viewer;
 
-import MCview.Atom;
-import MCview.PDBChain;
-import MCview.Residue;
+import mc_view.Atom;
+import mc_view.PDBChain;
+import mc_view.Residue;
 
 /**
  * Import and process files with Jmol for file like PDB, mmCIF
@@ -60,7 +59,14 @@ public class JmolParser extends StructureFile implements JmolStatusListener
 {
   Viewer viewer = null;
 
-  public JmolParser(String inFile, DataSourceType sourceType)
+  public JmolParser(boolean immediate, Object inFile,
+          DataSourceType sourceType) throws IOException
+  {
+    // BH 2018 File or String for filename
+    super(immediate, inFile, sourceType);
+  }
+
+  public JmolParser(Object inFile, DataSourceType sourceType)
           throws IOException
   {
     super(inFile, sourceType);
@@ -105,8 +111,9 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       // }
       // ;
       // instead, we distinguish .cif from non-.cif by filename
-      setStructureFileType(getDataName().toLowerCase().endsWith(".cif") ? PDBEntry.Type.MMCIF
-              .toString() : "PDB");
+      setStructureFileType(getDataName().toLowerCase().endsWith(".cif")
+              ? PDBEntry.Type.MMCIF.toString()
+              : "PDB");
 
       transformJmolModelToJalview(jmolModel.ms);
     }
@@ -127,15 +134,16 @@ public class JmolParser extends StructureFile implements JmolStatusListener
          * params -o (output to sysout) -n (nodisplay) -x (exit when finished)
          * see http://wiki.jmol.org/index.php/Jmol_Application
          */
-        viewer = (Viewer) JmolViewer.allocateViewer(null, null, null, null,
-                null, "-x -o -n", this);
+        
+        viewer = JalviewJmolBinding.getJmolData(this);
         // ensure the 'new' (DSSP) not 'old' (Ramachandran) SS method is used
         viewer.setBooleanProperty("defaultStructureDSSP", true);
       } catch (ClassCastException x)
       {
         throw new Error(MessageManager.formatMessage(
                 "error.jmol_version_not_compatible_with_jalview_version",
-                new String[] { JmolViewer.getJmolVersion() }), x);
+                new String[]
+                { JmolViewer.getJmolVersion() }), x);
       }
     }
     return viewer;
@@ -164,16 +172,16 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       List<Atom> significantAtoms = convertSignificantAtoms(ms);
       for (Atom tmpatom : significantAtoms)
       {
-        try
+        if (tmpatom.resNumIns.trim().equals(lastID))
+        {
+          // phosphorylated protein - seen both CA and P..
+          continue;
+        }
+        tmpchain = findChain(tmpatom.chain);
+        if (tmpchain != null)
         {
-          tmpchain = findChain(tmpatom.chain);
-          if (tmpatom.resNumIns.trim().equals(lastID))
-          {
-            // phosphorylated protein - seen both CA and P..
-            continue;
-          }
           tmpchain.atoms.addElement(tmpatom);
-        } catch (Exception e)
+        } else
         {
           tmpchain = new PDBChain(getId(), tmpatom.chain);
           getChains().add(tmpchain);
@@ -181,7 +189,11 @@ public class JmolParser extends StructureFile implements JmolStatusListener
         }
         lastID = tmpatom.resNumIns.trim();
       }
-      xferSettings();
+      if (isParseImmediately())
+      {
+        // configure parsing settings from the static singleton
+        xferSettings();
+      }
 
       makeResidueList();
       makeCaBondList();
@@ -198,18 +210,18 @@ public class JmolParser extends StructureFile implements JmolStatusListener
           prot.add(chainseq);
         }
 
-        if (StructureImportSettings.isProcessSecondaryStructure())
+        // look at local setting for adding secondary tructure
+        if (predictSecondaryStructure)
         {
           createAnnotation(chainseq, chain, ms.at);
         }
       }
     } catch (OutOfMemoryError er)
     {
-      System.out
-              .println("OUT OF MEMORY LOADING TRANSFORMING JMOL MODEL TO JALVIEW MODEL");
-      throw new IOException(
-              MessageManager
-                      .getString("exception.outofmemory_loading_mmcif_file"));
+      System.out.println(
+              "OUT OF MEMORY LOADING TRANSFORMING JMOL MODEL TO JALVIEW MODEL");
+      throw new IOException(MessageManager
+              .getString("exception.outofmemory_loading_mmcif_file"));
     }
   }
 
@@ -236,8 +248,9 @@ public class JmolParser extends StructureFile implements JmolStatusListener
         curAtom.number = atom.getAtomNumber();
         curAtom.resName = atom.getGroup3(true);
         curAtom.resNumber = atom.getResno();
-        curAtom.occupancy = ms.occupancies != null ? ms.occupancies[atom
-                .getIndex()] : Float.valueOf(atom.getOccupancy100());
+        curAtom.occupancy = ms.occupancies != null
+                ? ms.occupancies[atom.getIndex()]
+                : Float.valueOf(atom.getOccupancy100());
         String fmt = new Format("%4i").form(curAtom.resNumber);
         curAtom.resNumIns = (fmt + curAtom.insCode);
         curAtom.tfactor = atom.getBfactor100() / 100f;
@@ -259,7 +272,7 @@ public class JmolParser extends StructureFile implements JmolStatusListener
           HashMap<String, org.jmol.modelset.Atom> chainTerMap)
   {
     // System.out.println("Atom: " + curAtom.getAtomNumber()
-    // + "   Last atom index " + curAtom.group.lastAtomIndex);
+    // + " Last atom index " + curAtom.group.lastAtomIndex);
     if (chainTerMap == null || prevAtom == null)
     {
       return true;
@@ -282,7 +295,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
         {
           return false;
         }
-        if ((curAtom.getResno() - chainTerMap.get(curAtomChId).getResno()) < 5)
+        if ((curAtom.getResno()
+                - chainTerMap.get(curAtomChId).getResno()) < 5)
         {
           chainTerMap.put(curAtomChId, curAtom);
           return true;
@@ -297,7 +311,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       {
         return false;
       }
-      if ((curAtom.getResno() - chainTerMap.get(curAtomChId).getResno()) < 5)
+      if ((curAtom.getResno()
+              - chainTerMap.get(curAtomChId).getResno()) < 5)
       {
         chainTerMap.put(curAtomChId, curAtom);
         return true;
@@ -305,8 +320,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
       return false;
     }
     // HETATM with resNum jump > 2
-    return !(curAtom.isHetero() && ((curAtom.getResno() - prevAtom
-            .getResno()) > 2));
+    return !(curAtom.isHetero()
+            && ((curAtom.getResno() - prevAtom.getResno()) > 2));
   }
 
   private void createAnnotation(SequenceI sequence, PDBChain chain,
@@ -411,8 +426,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
    * @param secstr
    * @param secstrcode
    */
-  protected void setSecondaryStructure(STR proteinStructureSubType,
-          int pos, char[] secstr, char[] secstrcode)
+  protected void setSecondaryStructure(STR proteinStructureSubType, int pos,
+          char[] secstr, char[] secstrcode)
   {
     switch (proteinStructureSubType)
     {
@@ -489,8 +504,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
   @Override
   public void notifyCallback(CBK cbType, Object[] data)
   {
-    String strInfo = (data == null || data[1] == null ? null : data[1]
-            .toString());
+    String strInfo = (data == null || data[1] == null ? null
+            : data[1].toString());
     switch (cbType)
     {
     case ECHO:
@@ -590,7 +605,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
    * Not implemented - returns null
    */
   @Override
-  public float[][][] functionXYZ(String functionName, int nx, int ny, int nz)
+  public float[][][] functionXYZ(String functionName, int nx, int ny,
+          int nz)
   {
     return null;
   }
@@ -642,7 +658,8 @@ public class JmolParser extends StructureFile implements JmolStatusListener
     return predictSecondaryStructure;
   }
 
-  public void setPredictSecondaryStructure(boolean predictSecondaryStructure)
+  public void setPredictSecondaryStructure(
+          boolean predictSecondaryStructure)
   {
     this.predictSecondaryStructure = predictSecondaryStructure;
   }