merge from 2_4_Release branch
[jalview.git] / src / jalview / gui / AppJmol.java
index 50e5644..3a87f8c 100644 (file)
@@ -1,17 +1,17 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer
- * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
- *
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
+ * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
+ * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- *
+ * 
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
+ * 
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
@@ -39,32 +39,40 @@ import org.jmol.api.*;
 import org.jmol.adapter.smarter.SmarterJmolAdapter;
 import org.jmol.popup.*;
 
-
-public class AppJmol
-    extends GStructureViewer
-    implements StructureListener, JmolStatusListener, Runnable
+public class AppJmol extends GStructureViewer implements StructureListener,
+        JmolStatusListener, Runnable
 
 {
   JmolViewer viewer;
+
   JmolPopup jmolpopup;
+
   ScriptWindow scriptWindow;
+
   PDBEntry pdbentry;
+
   SequenceI[] sequence;
-  String [] chains;
+
+  String[] chains;
+
   StructureSelectionManager ssm;
+
   JSplitPane splitPane;
+
   RenderPanel renderPanel;
+
   AlignmentPanel ap;
+
   String fileLoadingError;
+
   boolean colourBySequence = true;
+
   boolean loadingFromArchive = false;
+
   Vector atomsPicked = new Vector();
 
-  public AppJmol(String file, String id,
-                 SequenceI[] seq,
-                 AlignmentPanel ap,
-                 String loadStatus,
-                 Rectangle bounds)
+  public AppJmol(String file, String id, SequenceI[] seq,
+          AlignmentPanel ap, String loadStatus, Rectangle bounds)
   {
     loadingFromArchive = true;
     pdbentry = new PDBEntry();
@@ -77,8 +85,8 @@ public class AppJmol
     colourBySequence = false;
     seqColour.setSelected(false);
 
-    //jalview.gui.Desktop.addInternalFrame(this, "Loading File",
-    //                                     bounds.width,bounds.height);
+    // jalview.gui.Desktop.addInternalFrame(this, "Loading File",
+    // bounds.width,bounds.height);
 
     initJmol(loadStatus);
 
@@ -91,78 +99,85 @@ public class AppJmol
     });
   }
 
-public synchronized void addSequence(SequenceI [] seq)
-   {
+  public synchronized void addSequence(SequenceI[] seq)
+  {
     Vector v = new Vector();
-     for(int i=0; i<sequence.length; i++)
-       v.addElement(sequence[i]);
+    for (int i = 0; i < sequence.length; i++)
+      v.addElement(sequence[i]);
 
-     for(int i=0; i<seq.length; i++)
-      if(!v.contains(seq[i]))
-          v.addElement(seq[i]);
+    for (int i = 0; i < seq.length; i++)
+      if (!v.contains(seq[i]))
+        v.addElement(seq[i]);
 
-     SequenceI [] tmp = new SequenceI[v.size()];
-     v.copyInto(tmp);
-     sequence = tmp;
-   }
+    SequenceI[] tmp = new SequenceI[v.size()];
+    v.copyInto(tmp);
+    sequence = tmp;
+  }
 
-  public AppJmol(PDBEntry pdbentry, SequenceI[] seq, String [] chains, AlignmentPanel ap)
+  public AppJmol(PDBEntry pdbentry, SequenceI[] seq, String[] chains,
+          AlignmentPanel ap)
   {
-    //////////////////////////////////
-    //Is the pdb file already loaded?
+    // ////////////////////////////////
+    // Is the pdb file already loaded?
     String alreadyMapped = StructureSelectionManager
-        .getStructureSelectionManager()
-        .alreadyMappedToFile(pdbentry.getId());
+            .getStructureSelectionManager().alreadyMappedToFile(
+                    pdbentry.getId());
 
     if (alreadyMapped != null)
     {
-      int option = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
-          pdbentry.getId() + " is already displayed."
-          + "\nDo you want to map sequences to the visible structure?",
-          "Map Sequences to Visible Window: " + pdbentry.getId(),
-          JOptionPane.YES_NO_OPTION);
+      int option = JOptionPane
+              .showInternalConfirmDialog(
+                      Desktop.desktop,
+                      pdbentry.getId()
+                              + " is already displayed."
+                              + "\nDo you want to map sequences to the visible structure?",
+                      "Map Sequences to Visible Window: "
+                              + pdbentry.getId(), JOptionPane.YES_NO_OPTION);
 
       if (option == JOptionPane.YES_OPTION)
       {
         StructureSelectionManager.getStructureSelectionManager()
-            .setMapping(seq, chains, alreadyMapped, AppletFormatAdapter.FILE);
-        if (ap.seqPanel.seqCanvas.fr!=null) {
+                .setMapping(seq, chains, alreadyMapped,
+                        AppletFormatAdapter.FILE);
+        if (ap.seqPanel.seqCanvas.fr != null)
+        {
           ap.seqPanel.seqCanvas.fr.featuresAdded();
           ap.paintAlignment(true);
         }
 
-        //Now this AppJmol is mapped to new sequences. We must add them to
+        // Now this AppJmol is mapped to new sequences. We must add them to
         // the exisiting array
-        JInternalFrame [] frames = Desktop.instance.getAllFrames();
+        JInternalFrame[] frames = Desktop.instance.getAllFrames();
 
-        for(int i=0; i<frames.length; i++)
+        for (int i = 0; i < frames.length; i++)
         {
-          if(frames[i] instanceof AppJmol)
+          if (frames[i] instanceof AppJmol)
           {
-           AppJmol topJmol = ((AppJmol)frames[i]);
-           if(topJmol.pdbentry.getFile().equals(alreadyMapped))
-           {
-             topJmol.addSequence(seq);
-             break;
-           }
+            AppJmol topJmol = ((AppJmol) frames[i]);
+            if (topJmol.pdbentry.getFile().equals(alreadyMapped))
+            {
+              topJmol.addSequence(seq);
+              break;
+            }
           }
         }
 
         return;
       }
     }
-    ///////////////////////////////////
+    // /////////////////////////////////
 
     this.ap = ap;
     this.pdbentry = pdbentry;
     this.sequence = seq;
-    this.setSize(400,400);
-    //jalview.gui.Desktop.addInternalFrame(this, "Jmol View"+(pdbentry.getId()!=null ? "for "+pdbentry.getId() 
-    //          : ""), 400, 400);
+    this.setSize(400, 400);
+    // jalview.gui.Desktop.addInternalFrame(this, "Jmol
+    // View"+(pdbentry.getId()!=null ? "for "+pdbentry.getId()
+    // : ""), 400, 400);
 
     if (pdbentry.getFile() != null)
     {
-      initJmol("load \""+pdbentry.getFile()+"\"");
+      initJmol("load \"" + pdbentry.getFile() + "\"");
     }
     else
     {
@@ -179,15 +194,14 @@ public synchronized void addSequence(SequenceI [] seq)
     });
   }
 
-
   void initJmol(String command)
   {
     renderPanel = new RenderPanel();
 
     this.getContentPane().add(renderPanel, java.awt.BorderLayout.CENTER);
 
-    StringBuffer title = new StringBuffer(sequence[0].getName() + ":" +
-                                          pdbentry.getId());
+    StringBuffer title = new StringBuffer(sequence[0].getName() + ":"
+            + pdbentry.getId());
 
     if (pdbentry.getProperty() != null)
     {
@@ -204,12 +218,11 @@ public synchronized void addSequence(SequenceI [] seq)
     }
 
     this.setTitle(title.toString());
-    jalview.gui.Desktop.addInternalFrame(this, title.toString(), 
-                                         getBounds().width,getBounds().height);
+    jalview.gui.Desktop.addInternalFrame(this, title.toString(),
+            getBounds().width, getBounds().height);
 
     viewer = org.jmol.api.JmolViewer.allocateViewer(renderPanel,
-        new SmarterJmolAdapter());
-
+            new SmarterJmolAdapter());
 
     viewer.setAppletContext("", null, null, "");
 
@@ -220,26 +233,25 @@ public synchronized void addSequence(SequenceI [] seq)
     viewer.evalStringQuiet(command);
   }
 
-
   void setChainMenuItems(Vector chains)
   {
     chainMenu.removeAll();
 
     JMenuItem menuItem = new JMenuItem("All");
     menuItem.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent evt)
+      {
+        allChainsSelected = true;
+        for (int i = 0; i < chainMenu.getItemCount(); i++)
         {
-          public void actionPerformed(ActionEvent evt)
-          {
-            allChainsSelected = true;
-            for(int i=0; i<chainMenu.getItemCount(); i++)
-            {
-              if (chainMenu.getItem(i) instanceof JCheckBoxMenuItem)
-                ( (JCheckBoxMenuItem) chainMenu.getItem(i)).setSelected(true);
-            }
-            centerViewer();
-            allChainsSelected = false;
-          }
-        });
+          if (chainMenu.getItem(i) instanceof JCheckBoxMenuItem)
+            ((JCheckBoxMenuItem) chainMenu.getItem(i)).setSelected(true);
+        }
+        centerViewer();
+        allChainsSelected = false;
+      }
+    });
 
     chainMenu.add(menuItem);
 
@@ -260,24 +272,25 @@ public synchronized void addSequence(SequenceI [] seq)
   }
 
   boolean allChainsSelected = false;
+
   void centerViewer()
   {
     StringBuffer cmd = new StringBuffer();
-    for(int i=0; i<chainMenu.getItemCount(); i++)
+    for (int i = 0; i < chainMenu.getItemCount(); i++)
     {
       if (chainMenu.getItem(i) instanceof JCheckBoxMenuItem)
       {
-       JCheckBoxMenuItem item = (JCheckBoxMenuItem) chainMenu.getItem(i);
-       if(item.isSelected())
-         cmd.append(":"+item.getText()+" or ");
+        JCheckBoxMenuItem item = (JCheckBoxMenuItem) chainMenu.getItem(i);
+        if (item.isSelected())
+          cmd.append(":" + item.getText() + " or ");
       }
     }
 
     if (cmd.length() > 0)
       cmd.setLength(cmd.length() - 4);
 
-    viewer.evalStringQuiet("select *;restrict "
-                      +cmd+";cartoon;center "+cmd);
+    viewer.evalStringQuiet("select *;restrict " + cmd + ";cartoon;center "
+            + cmd);
   }
 
   void closeViewer()
@@ -287,11 +300,10 @@ public synchronized void addSequence(SequenceI [] seq)
     viewer.setJmolStatusListener(null);
     viewer = null;
 
-    //We'll need to find out what other
+    // We'll need to find out what other
     // listeners need to be shut down in Jmol
-    StructureSelectionManager
-        .getStructureSelectionManager()
-        .removeStructureViewerListener(this, pdbentry.getFile());
+    StructureSelectionManager.getStructureSelectionManager()
+            .removeStructureViewerListener(this, pdbentry.getFile());
   }
 
   public void run()
@@ -301,10 +313,13 @@ public synchronized void addSequence(SequenceI [] seq)
       EBIFetchClient ebi = new EBIFetchClient();
       String query = "pdb:" + pdbentry.getId();
       pdbentry.setFile(ebi.fetchDataAsFile(query, "default", "raw")
-                       .getAbsolutePath());
-      initJmol("load "+pdbentry.getFile());
-    }
-    catch (Exception ex)
+              .getAbsolutePath());
+      initJmol("load " + pdbentry.getFile());
+    } catch (OutOfMemoryError oomerror)
+    {
+      new OOMWarning("Retrieving PDB id " + pdbentry.getId() + " from MSD",
+              oomerror);
+    } catch (Exception ex)
     {
       ex.printStackTrace();
     }
@@ -312,9 +327,8 @@ public synchronized void addSequence(SequenceI [] seq)
 
   public void pdbFile_actionPerformed(ActionEvent actionEvent)
   {
-    JalviewFileChooser chooser = new JalviewFileChooser(
-        jalview.bin.Cache.getProperty(
-            "LAST_DIRECTORY"));
+    JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache
+            .getProperty("LAST_DIRECTORY"));
 
     chooser.setFileView(new JalviewFileView());
     chooser.setDialogTitle("Save PDB File");
@@ -326,23 +340,21 @@ public synchronized void addSequence(SequenceI [] seq)
     {
       try
       {
-        BufferedReader in = new BufferedReader(new FileReader(pdbentry.getFile()));
+        BufferedReader in = new BufferedReader(new FileReader(pdbentry
+                .getFile()));
         File outFile = chooser.getSelectedFile();
 
         PrintWriter out = new PrintWriter(new FileOutputStream(outFile));
         String data;
-        while ( (data = in.readLine()) != null)
+        while ((data = in.readLine()) != null)
         {
-          if (
-              ! (data.indexOf("<PRE>") > -1 || data.indexOf("</PRE>") > -1)
-              )
+          if (!(data.indexOf("<PRE>") > -1 || data.indexOf("</PRE>") > -1))
           {
             out.println(data);
           }
         }
         out.close();
-      }
-      catch (Exception ex)
+      } catch (Exception ex)
       {
         ex.printStackTrace();
       }
@@ -352,18 +364,17 @@ public synchronized void addSequence(SequenceI [] seq)
   public void viewMapping_actionPerformed(ActionEvent actionEvent)
   {
     jalview.gui.CutAndPasteTransfer cap = new jalview.gui.CutAndPasteTransfer();
-    jalview.gui.Desktop.addInternalFrame(cap, "PDB - Sequence Mapping", 550,
-                                         600);
-    cap.setText(
-        StructureSelectionManager.getStructureSelectionManager().printMapping(
-            pdbentry.getFile())
-        );
+    jalview.gui.Desktop.addInternalFrame(cap, "PDB - Sequence Mapping",
+            550, 600);
+    cap.setText(StructureSelectionManager.getStructureSelectionManager()
+            .printMapping(pdbentry.getFile()));
   }
 
   /**
    * DOCUMENT ME!
-   *
-   * @param e DOCUMENT ME!
+   * 
+   * @param e
+   *                DOCUMENT ME!
    */
   public void eps_actionPerformed(ActionEvent e)
   {
@@ -372,8 +383,9 @@ public synchronized void addSequence(SequenceI [] seq)
 
   /**
    * DOCUMENT ME!
-   *
-   * @param e DOCUMENT ME!
+   * 
+   * @param e
+   *                DOCUMENT ME!
    */
   public void png_actionPerformed(ActionEvent e)
   {
@@ -389,31 +401,24 @@ public synchronized void addSequence(SequenceI [] seq)
 
     if (type == jalview.util.ImageMaker.PNG)
     {
-      im = new jalview.util.ImageMaker(this,
-                                       jalview.util.ImageMaker.PNG,
-                                       "Make PNG image from view",
-                                       width, height,
-                                       null, null);
+      im = new jalview.util.ImageMaker(this, jalview.util.ImageMaker.PNG,
+              "Make PNG image from view", width, height, null, null);
     }
     else
     {
-      im = new jalview.util.ImageMaker(this,
-                                       jalview.util.ImageMaker.EPS,
-                                       "Make EPS file from view",
-                                       width, height,
-                                       null, this.getTitle());
+      im = new jalview.util.ImageMaker(this, jalview.util.ImageMaker.EPS,
+              "Make EPS file from view", width, height, null, this
+                      .getTitle());
     }
 
     if (im.getGraphics() != null)
     {
       Rectangle rect = new Rectangle(width, height);
-      viewer.renderScreenImage(im.getGraphics(),
-                               rect.getSize(), rect);
+      viewer.renderScreenImage(im.getGraphics(), rect.getSize(), rect);
       im.writeImage();
     }
   }
 
-
   public void seqColour_actionPerformed(ActionEvent actionEvent)
   {
     lastCommand = null;
@@ -433,7 +438,7 @@ public synchronized void addSequence(SequenceI [] seq)
     colourBySequence = false;
     seqColour.setSelected(false);
     viewer.evalStringQuiet("select *;color white;select ASP,GLU;color red;"
-                      +"select LYS,ARG;color blue;select CYS;color yellow");
+            + "select LYS,ARG;color blue;select CYS;color yellow");
   }
 
   public void zappoColour_actionPerformed(ActionEvent actionEvent)
@@ -476,7 +481,7 @@ public synchronized void addSequence(SequenceI [] seq)
     colourBySequence = false;
     seqColour.setSelected(false);
 
-    if(cs==null)
+    if (cs == null)
       return;
 
     String res;
@@ -485,19 +490,17 @@ public synchronized void addSequence(SequenceI [] seq)
 
     Enumeration en = ResidueProperties.aa3Hash.keys();
     StringBuffer command = new StringBuffer("select *;color white;");
-    while(en.hasMoreElements())
+    while (en.hasMoreElements())
     {
       res = en.nextElement().toString();
       index = ((Integer) ResidueProperties.aa3Hash.get(res)).intValue();
-      if(index>20)
+      if (index > 20)
         continue;
 
       col = cs.findColour(ResidueProperties.aa[index].charAt(0));
 
-      command.append("select "+res+";color["
-                        + col.getRed() + ","
-                        + col.getGreen() + ","
-                        + col.getBlue() + "];");
+      command.append("select " + res + ";color[" + col.getRed() + ","
+              + col.getGreen() + "," + col.getBlue() + "];");
     }
 
     viewer.evalStringQuiet(command.toString());
@@ -511,40 +514,38 @@ public synchronized void addSequence(SequenceI [] seq)
   public void backGround_actionPerformed(ActionEvent actionEvent)
   {
     java.awt.Color col = JColorChooser.showDialog(this,
-                                                  "Select Background Colour",
-                                                  null);
+            "Select Background Colour", null);
 
     if (col != null)
     {
-      viewer.evalStringQuiet("background ["
-                        + col.getRed() + ","
-                        + col.getGreen() + ","
-                        + col.getBlue() + "];");
+      viewer.evalStringQuiet("background [" + col.getRed() + ","
+              + col.getGreen() + "," + col.getBlue() + "];");
     }
   }
 
-
   public void jmolHelp_actionPerformed(ActionEvent actionEvent)
   {
-       try{
-         jalview.util.BrowserLauncher.openURL(
-             "http://jmol.sourceforge.net/docs/JmolUserGuide/");
-       }catch(Exception ex){}
-   }
-
+    try
+    {
+      jalview.util.BrowserLauncher
+              .openURL("http://jmol.sourceforge.net/docs/JmolUserGuide/");
+    } catch (Exception ex)
+    {
+    }
+  }
 
-  //////////////////////////////////
-  ///StructureListener
+  // ////////////////////////////////
+  // /StructureListener
   public String getPdbFile()
   {
     return pdbentry.getFile();
   }
 
-  Pattern pattern = Pattern.compile(
-      "\\[(.*)\\]([0-9]+)(:[a-zA-Z]*)?\\.([a-zA-Z]+)(/[0-9]*)?"
-      );
+  Pattern pattern = Pattern
+          .compile("\\[(.*)\\]([0-9]+)(:[a-zA-Z]*)?\\.([a-zA-Z]+)(/[0-9]*)?");
 
   String lastMessage;
+
   public void mouseOverStructure(int atomIndex, String strInfo)
   {
     Matcher matcher = pattern.matcher(strInfo);
@@ -568,9 +569,11 @@ public synchronized void addSequence(SequenceI [] seq)
   }
 
   StringBuffer resetLastRes = new StringBuffer();
+
   StringBuffer eval = new StringBuffer();
 
-  public void highlightAtom(int atomIndex, int pdbResNum, String chain, String pdbfile)
+  public void highlightAtom(int atomIndex, int pdbResNum, String chain,
+          String pdbfile)
   {
     if (!pdbfile.equals(pdbentry.getFile()))
       return;
@@ -592,16 +595,18 @@ public synchronized void addSequence(SequenceI [] seq)
       resetLastRes.append(":" + chain);
     }
 
-    eval.append(";wireframe 100;"+eval.toString()+".CA;");
+    eval.append(";wireframe 100;" + eval.toString() + ".CA;");
 
-    resetLastRes.append(";wireframe 0;"+resetLastRes.toString()+".CA;spacefill 0;");
+    resetLastRes.append(";wireframe 0;" + resetLastRes.toString()
+            + ".CA;spacefill 0;");
 
     eval.append("spacefill 200;select none");
 
     viewer.evalStringQuiet(eval.toString());
   }
 
-  public Color getColour(int atomIndex, int pdbResNum, String chain, String pdbfile)
+  public Color getColour(int atomIndex, int pdbResNum, String chain,
+          String pdbfile)
   {
     if (!pdbfile.equals(pdbentry.getFile()))
       return null;
@@ -611,27 +616,27 @@ public synchronized void addSequence(SequenceI [] seq)
 
   public void updateColours(Object source)
   {
-    colourBySequence( (AlignmentPanel) source);
+    colourBySequence((AlignmentPanel) source);
   }
 
-
-//End StructureListener
-////////////////////////////
+  // End StructureListener
+  // //////////////////////////
 
   String lastCommand;
-  FeatureRenderer fr=null;
+
+  FeatureRenderer fr = null;
+
   public void colourBySequence(AlignmentPanel sourceap)
   {
     this.ap = sourceap;
 
-    if(!colourBySequence || ap.alignFrame.getCurrentView()!=ap.av)
+    if (!colourBySequence || ap.alignFrame.getCurrentView() != ap.av)
       return;
 
     StructureMapping[] mapping = ssm.getMapping(pdbentry.getFile());
 
     if (mapping.length < 1)
-     return;
-
+      return;
 
     SequenceRenderer sr = new SequenceRenderer(ap.av);
 
@@ -651,12 +656,12 @@ public synchronized void addSequence(SequenceI [] seq)
     StringBuffer command = new StringBuffer();
 
     int lastPos = -1;
-    for (int sp,s = 0; s < sequence.length; s++)
+    for (int sp, s = 0; s < sequence.length; s++)
     {
       for (int m = 0; m < mapping.length; m++)
       {
         if (mapping[m].getSequence() == sequence[s]
-            && (sp=ap.av.alignment.findIndex(sequence[s]))>-1)
+                && (sp = ap.av.alignment.findIndex(sequence[s])) > -1)
         {
           SequenceI asp = ap.av.alignment.getSequenceAt(sp);
           for (int r = 0; r < asp.getLength(); r++)
@@ -666,10 +671,9 @@ public synchronized void addSequence(SequenceI [] seq)
             {
               continue;
             }
-            int pos = mapping[m].getPDBResNum(
-                    asp.findPosition(r));
+            int pos = mapping[m].getPDBResNum(asp.findPosition(r));
 
-            if (pos < 1 || pos==lastPos)
+            if (pos < 1 || pos == lastPos)
               continue;
 
             lastPos = pos;
@@ -679,11 +683,10 @@ public synchronized void addSequence(SequenceI [] seq)
             if (showFeatures)
               col = fr.findFeatureColour(col, asp, r);
 
-            if (command.toString().endsWith(":" + mapping[m].getChain()+
-                                            ";color["
-                                            + col.getRed() + ","
-                                            + col.getGreen() + ","
-                                            + col.getBlue() + "]"))
+            if (command.toString().endsWith(
+                    ":" + mapping[m].getChain() + ";color[" + col.getRed()
+                            + "," + col.getGreen() + "," + col.getBlue()
+                            + "]"))
             {
               command = condenseCommand(command, pos);
               continue;
@@ -696,10 +699,8 @@ public synchronized void addSequence(SequenceI [] seq)
               command.append(":" + mapping[m].getChain());
             }
 
-            command.append(";color["
-                             + col.getRed() + ","
-                             + col.getGreen() + ","
-                             + col.getBlue() + "]");
+            command.append(";color[" + col.getRed() + "," + col.getGreen()
+                    + "," + col.getBlue() + "]");
 
           }
           break;
@@ -716,7 +717,8 @@ public synchronized void addSequence(SequenceI [] seq)
 
   StringBuffer condenseCommand(StringBuffer command, int pos)
   {
-    StringBuffer sb = new StringBuffer(command.substring(0, command.lastIndexOf("select")+7));
+    StringBuffer sb = new StringBuffer(command.substring(0, command
+            .lastIndexOf("select") + 7));
 
     command.delete(0, sb.length());
 
@@ -724,25 +726,25 @@ public synchronized void addSequence(SequenceI [] seq)
 
     if (command.indexOf("-") > -1)
     {
-      start = command.substring(0,command.indexOf("-"));
+      start = command.substring(0, command.indexOf("-"));
     }
     else
     {
       start = command.substring(0, command.indexOf(":"));
     }
 
-    sb.append(start+"-"+pos+command.substring(command.indexOf(":")));
+    sb.append(start + "-" + pos + command.substring(command.indexOf(":")));
 
     return sb;
   }
 
-  /////////////////////////////////
-  //JmolStatusListener
+  // ///////////////////////////////
+  // JmolStatusListener
 
   public String eval(String strEval)
   {
-   // System.out.println(strEval);
-   //"# 'eval' is implemented only for the applet.";
+    // System.out.println(strEval);
+    // "# 'eval' is implemented only for the applet.";
     return null;
   }
 
@@ -752,14 +754,14 @@ public synchronized void addSequence(SequenceI [] seq)
   }
 
   public void setCallbackFunction(String callbackType,
-                                  String callbackFunction)
-  {}
+          String callbackFunction)
+  {
+  }
 
   public void notifyFileLoaded(String fullPathName, String fileName,
-                               String modelName, Object clientFile,
-                               String errorMsg)
+          String modelName, Object clientFile, String errorMsg)
   {
-    if(errorMsg!=null)
+    if (errorMsg != null)
     {
       fileLoadingError = errorMsg;
       repaint();
@@ -771,27 +773,29 @@ public synchronized void addSequence(SequenceI [] seq)
     if (fileName != null)
     {
 
-      //FILE LOADED OK
+      // FILE LOADED OK
       ssm = StructureSelectionManager.getStructureSelectionManager();
-      MCview.PDBfile pdbFile = ssm.setMapping(sequence,chains,pdbentry.getFile(), AppletFormatAdapter.FILE);
+      MCview.PDBfile pdbFile = ssm.setMapping(sequence, chains, pdbentry
+              .getFile(), AppletFormatAdapter.FILE);
       ssm.addStructureViewerListener(this);
       Vector chains = new Vector();
-      for(int i=0; i<pdbFile.chains.size(); i++)
+      for (int i = 0; i < pdbFile.chains.size(); i++)
       {
-        chains.addElement(((MCview.PDBChain)pdbFile.chains.elementAt(i)).id);
+        chains
+                .addElement(((MCview.PDBChain) pdbFile.chains.elementAt(i)).id);
       }
       setChainMenuItems(chains);
 
       jmolpopup.updateComputedMenus();
 
-      if(!loadingFromArchive)
+      if (!loadingFromArchive)
       {
-        viewer.evalStringQuiet(
-             "select backbone;restrict;cartoon;wireframe off;spacefill off");
+        viewer
+                .evalStringQuiet("select backbone;restrict;cartoon;wireframe off;spacefill off");
 
         colourBySequence(ap);
       }
-      if (fr!=null)
+      if (fr != null)
         fr.featuresAdded();
 
       loadingFromArchive = false;
@@ -806,7 +810,8 @@ public synchronized void addSequence(SequenceI [] seq)
   }
 
   public void notifyScriptStart(String statusMessage, String additionalInfo)
-  {}
+  {
+  }
 
   public void sendConsoleEcho(String strEcho)
   {
@@ -837,7 +842,8 @@ public synchronized void addSequence(SequenceI [] seq)
   }
 
   public void notifyNewDefaultModeMeasurement(int count, String strInfo)
-  {}
+  {
+  }
 
   public void notifyAtomPicked(int atomIndex, String strInfo)
   {
@@ -851,22 +857,21 @@ public synchronized void addSequence(SequenceI [] seq)
     String picked = resnum;
 
     if (chainId != null)
-      picked+=(":"+chainId.substring(1, chainId.length()));
-
-    picked+=".CA";
+      picked += (":" + chainId.substring(1, chainId.length()));
 
+    picked += ".CA";
 
     if (!atomsPicked.contains(picked))
     {
-      if(chainId!=null)
-      viewer.evalString("select "+picked+";label %n %r:%c");
-    else
-      viewer.evalString("select "+picked+";label %n %r");
+      if (chainId != null)
+        viewer.evalString("select " + picked + ";label %n %r:%c");
+      else
+        viewer.evalString("select " + picked + ";label %n %r");
       atomsPicked.addElement(picked);
     }
     else
     {
-      viewer.evalString("select "+picked+";label off");
+      viewer.evalString("select " + picked + ";label off");
       atomsPicked.removeElement(picked);
     }
 
@@ -883,19 +888,21 @@ public synchronized void addSequence(SequenceI [] seq)
   }
 
   public void sendSyncScript(String script, String appletName)
-  {}
+  {
+  }
 
   public void showUrl(String url)
-  {}
+  {
+  }
 
   public void showConsole(boolean showConsole)
   {
     if (scriptWindow == null)
       scriptWindow = new ScriptWindow(this);
 
-    if(showConsole)
+    if (showConsole)
     {
-      if(splitPane==null)
+      if (splitPane == null)
       {
         splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
         splitPane.setTopComponent(renderPanel);
@@ -903,7 +910,7 @@ public synchronized void addSequence(SequenceI [] seq)
         this.getContentPane().add(splitPane, BorderLayout.CENTER);
       }
 
-      splitPane.setDividerLocation(getHeight()-200);
+      splitPane.setDividerLocation(getHeight() - 200);
       splitPane.validate();
     }
     else
@@ -924,14 +931,13 @@ public synchronized void addSequence(SequenceI [] seq)
     return 0;
   }
 
-  ///End JmolStatusListener
-  ///////////////////////////////
+  // /End JmolStatusListener
+  // /////////////////////////////
 
-
-  class RenderPanel
-      extends JPanel
+  class RenderPanel extends JPanel
   {
     final Dimension currentSize = new Dimension();
+
     final Rectangle rectClip = new Rectangle();
 
     public void paintComponent(Graphics g)
@@ -947,14 +953,14 @@ public synchronized void addSequence(SequenceI [] seq)
         g.setFont(new Font("Verdana", Font.BOLD, 14));
         g.drawString("Retrieving PDB data....", 20, currentSize.height / 2);
       }
-      else if(fileLoadingError!=null)
+      else if (fileLoadingError != null)
       {
         g.setColor(Color.black);
         g.fillRect(0, 0, currentSize.width, currentSize.height);
         g.setColor(Color.white);
         g.setFont(new Font("Verdana", Font.BOLD, 14));
         g.drawString("Error loading file..." + pdbentry.getId(), 20,
-                     currentSize.height / 2);
+                currentSize.height / 2);
       }
       else
       {