Can specify PDB chain to map sequence to - only used by applet so far
[jalview.git] / src / jalview / bin / JalviewLite.java
index 4e2d4b7..292c659 100755 (executable)
@@ -157,19 +157,6 @@ public class JalviewLite
    */
   public void init()
   {
-    try
-    {
-      if (!System.getProperty("java.version").startsWith("1.1"))
-      {
-        Class.forName("org.jmol.adapter.smarter.SmarterJmolAdapter");
-        jmolAvailable = true;
-      }
-    }
-    catch (java.lang.ClassNotFoundException ex)
-    {
-      System.out.println("Jmol not available - Using MCview for structures");
-    }
-
     int r = 255;
     int g = 255;
     int b = 255;
@@ -217,6 +204,9 @@ public class JalviewLite
       }
     }
 
+    LoadJmolThread jmolAvailable = new LoadJmolThread();
+    jmolAvailable.start();
+
     final JalviewLite applet = this;
     if (getParameter("embedded") != null
         && getParameter("embedded").equalsIgnoreCase("true"))
@@ -246,33 +236,6 @@ public class JalviewLite
     }
   }
 
-  public static void main(String[] args)
-  {
-    if (args.length != 1)
-    {
-      System.out.println("\nUsage: java -jar jalviewApplet.jar fileName\n");
-      System.exit(1);
-    }
-
-    String format = new jalview.io.IdentifyFile().Identify(args[0],
-        AppletFormatAdapter.FILE);
-
-    Alignment al = null;
-    try
-    {
-      al = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.FILE,
-                                              format);
-    }
-    catch (java.io.IOException ex)
-    {
-      ex.printStackTrace();
-    }
-    if ( (al != null) && (al.getHeight() > 0))
-    {
-      AlignFrame af = new AlignFrame(al, null, args[0], false);
-      af.statusBar.setText("Successfully loaded file " + args[0]);
-    }
-  }
 
   /**
    * Initialises and displays a new java.awt.Frame
@@ -345,9 +308,30 @@ public class JalviewLite
       g.drawString("Jalview Applet", 50, this.getSize().height / 2 - 30);
       g.drawString("Loading Data...", 50, this.getSize().height / 2);
     }
+  }
+
 
+  class LoadJmolThread extends Thread
+  {
+    public void run()
+    {
+      try
+      {
+        if (!System.getProperty("java.version").startsWith("1.1"))
+        {
+          Class.forName("org.jmol.adapter.smarter.SmarterJmolAdapter");
+          jmolAvailable = true;
+          System.out.println("JMOL FOUND");
+        }
+      }
+      catch (java.lang.ClassNotFoundException ex)
+      {
+        System.out.println("Jmol not available - Using MCview for structures");
+      }
+    }
   }
 
+
   class LoadingThread
       extends Thread
   {
@@ -380,6 +364,11 @@ public class JalviewLite
 
     public void run()
     {
+      startLoading();
+    }
+
+    private void startLoading()
+    {
       Alignment al = null;
       try
       {
@@ -507,67 +496,106 @@ public class JalviewLite
           }
         }
 
+        /*
+         <param name="PDBfile" value="1gaq.txt PDB|1GAQ|1GAQ|A PDB|1GAQ|1GAQ|B PDB|1GAQ|1GAQ|C">
 
-        param = getParameter("PDBFILE");
-        if (param != null)
-        {
+         <param name="PDBfile2" value="1gaq.txt A=SEQA B=SEQB C=SEQB">
 
-          PDBEntry pdb = new PDBEntry();
+         <param name="PDBfile3" value="1q0o Q45135_9MICO">
+        */
 
-          String seqstring;
-          SequenceI [] seqs = null;
 
-          if(param.indexOf(" ")>-1)
+        int pdbFileCount = 0;
+        do{
+          if (pdbFileCount > 0)
+            param = getParameter("PDBFILE" + pdbFileCount);
+          else
+            param = getParameter("PDBFILE");
+
+          if (param != null)
           {
-            seqstring = param.substring(param.indexOf(" ")+1);
-            param = param.substring(0, param.indexOf(" "));
-            StringTokenizer st = new StringTokenizer(seqstring);
-            Vector tmp = new Vector();
-            while(st.hasMoreTokens())
+            PDBEntry pdb = new PDBEntry();
+
+            String seqstring;
+            SequenceI[] seqs = null;
+            String [] chains = null;
+
+            StringTokenizer st = new StringTokenizer(param, " ");
+
+            if (st.countTokens() < 2)
             {
-              tmp.addElement((Sequence) currentAlignFrame.
-                getAlignViewport().getAlignment().
-                findName(st.nextToken()));
-            }
+              String sequence = applet.getParameter("PDBSEQ");
+              if (sequence != null)
+                seqs = new SequenceI[]
+                    {
+                    (Sequence) currentAlignFrame.
+                    getAlignViewport().getAlignment().
+                    findName(sequence)};
 
-            seqs = new SequenceI[tmp.size()];
-            tmp.copyInto(seqs);
-          }
-          else
-          {
-            String sequence = applet.getParameter("PDBSEQ");
-            if (sequence != null)
-              seqs = new SequenceI[]
-                  {
-                  (Sequence) currentAlignFrame.
-                  getAlignViewport().getAlignment().
-                  findName(sequence)};
-          }
+            }
+            else
+            {
+              param = st.nextToken();
+              Vector tmp = new Vector();
+              Vector tmp2 = new Vector();
+
+              while (st.hasMoreTokens())
+              {
+                seqstring = st.nextToken();
+                StringTokenizer st2 = new StringTokenizer(seqstring,"=");
+                if(st2.countTokens()>1)
+                {
+                  //This is the chain
+                  tmp2.addElement(st2.nextToken());
+                  seqstring = st2.nextToken();
+                }
+                tmp.addElement( (Sequence) currentAlignFrame.
+                                 getAlignViewport().getAlignment().
+                                 findName(seqstring));
+              }
+
+              seqs = new SequenceI[tmp.size()];
+              tmp.copyInto(seqs);
+              if(tmp2.size()==tmp.size())
+              {
+                chains = new String[tmp2.size()];
+                tmp2.copyInto(chains);
+              }
+            }
 
-         // if (!inArchive(param) || jmolAvailable)
-          {
             param = addProtocol(param);
-          }
-
-          pdb.setFile(param);
+            pdb.setFile(param);
 
-          for(int i=0; i<seqs.length; i++)
-          {
-            ((Sequence)seqs[i]).addPDBId(pdb);
+            if(seqs!=null)
+            {
+              for (int i = 0; i < seqs.length; i++)
+              {
+                ( (Sequence) seqs[i]).addPDBId(pdb);
+              }
+
+              if (jmolAvailable)
+              {
+                new jalview.appletgui.AppletJmol(pdb,
+                                                 seqs,
+                                                 chains,
+                                                 currentAlignFrame.alignPanel,
+                                                 protocol);
+                lastFrameX += 40;
+                lastFrameY+=40;
+              }
+              else
+                    new MCview.AppletPDBViewer(pdb,
+                                           seqs,
+                                           chains,
+                                           currentAlignFrame.alignPanel,
+                                           protocol);
+            }
           }
 
-          if (jmolAvailable)
-            new jalview.appletgui.AppletJmol(pdb,
-                                             seqs,
-                                             currentAlignFrame.alignPanel,
-                                             protocol);
-          else
-
-            new MCview.AppletPDBViewer(pdb,
-                                       seqs,
-                                       currentAlignFrame.alignPanel,
-                                       protocol);
+          pdbFileCount++;
         }
+        while(pdbFileCount < 10);
+
       }
       else
       {