applet can define groups as parameters
[jalview.git] / src / jalview / bin / JalviewLite.java
index 002b66b..222d049 100755 (executable)
@@ -1,6 +1,6 @@
 /*\r
 * Jalview - A Sequence Alignment Editor and Viewer\r
-* Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
+* Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
 *\r
 * This program is free software; you can redistribute it and/or\r
 * modify it under the terms of the GNU General Public License\r
@@ -28,6 +28,7 @@ import java.applet.*;
 \r
 import java.awt.*;\r
 import java.awt.event.*;\r
+import jalview.appletgui.FeatureSettings;\r
 \r
 \r
 /**\r
@@ -38,6 +39,96 @@ import java.awt.event.*;
  */\r
 public class JalviewLite extends Applet\r
 {\r
+\r
+  ///////////////////////////////////////////\r
+  //The following public methods maybe called\r
+  //externally, eg via javascript in HTML page\r
+\r
+  public String getSelectedSequences()\r
+    {\r
+      StringBuffer result = new StringBuffer("");\r
+\r
+      if(initialAlignFrame.viewport.getSelectionGroup()!=null)\r
+      {\r
+        SequenceI[] seqs = initialAlignFrame.viewport.getSelectionGroup().\r
+            getSequencesInOrder(\r
+                initialAlignFrame.viewport.getAlignment());\r
+\r
+        for (int i = 0; i < seqs.length; i++)\r
+          result.append(seqs[i].getName() + "¬");\r
+      }\r
+\r
+      return result.toString();\r
+    }\r
+\r
+    public String getAlignment(String format)\r
+    {\r
+      return getAlignment(format, "true");\r
+    }\r
+\r
+    public String getAlignment(String format, String suffix)\r
+    {\r
+      try\r
+      {\r
+        boolean seqlimits = suffix.equalsIgnoreCase("true");\r
+\r
+        String reply = new AppletFormatAdapter().formatSequences(format,\r
+            currentAlignFrame.viewport.getAlignment(), seqlimits);\r
+        return reply;\r
+      }\r
+      catch (Exception ex)\r
+      {\r
+        ex.printStackTrace();\r
+        return "Error retrieving alignment in " + format + " format. ";\r
+      }\r
+    }\r
+\r
+    public void loadAnnotation(String annotation)\r
+    {\r
+      if (new AnnotationFile().readAnnotationFile(\r
+          currentAlignFrame.getAlignViewport().getAlignment(), annotation,\r
+          AppletFormatAdapter.PASTE))\r
+      {\r
+        currentAlignFrame.alignPanel.fontChanged();\r
+        currentAlignFrame.alignPanel.setScrollValues(0, 0);\r
+      }\r
+      else\r
+      {\r
+        currentAlignFrame.parseFeaturesFile(annotation, AppletFormatAdapter.PASTE);\r
+      }\r
+    }\r
+\r
+    public String getFeatures(String format)\r
+    {\r
+      return currentAlignFrame.outputFeatures(false, format);\r
+    }\r
+\r
+    public String getAnnotation()\r
+    {\r
+      return currentAlignFrame.outputAnnotations(false);\r
+    }\r
+\r
+    public void loadAlignment(String text, String title)\r
+    {\r
+        Alignment al = null;\r
+        String format = new IdentifyFile().Identify(text, AppletFormatAdapter.PASTE);\r
+        try{\r
+          al = new AppletFormatAdapter().readFile(text,\r
+                                                  AppletFormatAdapter.PASTE,\r
+                                                  format);\r
+          if (al.getHeight() > 0)\r
+            new AlignFrame(al, this, title, false);\r
+        }catch(java.io.IOException ex)\r
+        {\r
+          ex.printStackTrace();\r
+        }\r
+   }\r
+\r
+    ////////////////////////////////////////////////\r
+    ////////////////////////////////////////////////\r
+\r
+\r
+\r
     static int lastFrameX = 200;\r
     static int lastFrameY = 200;\r
     boolean fileFound = true;\r
@@ -46,7 +137,7 @@ public class JalviewLite extends Applet
 \r
     //The currentAlignFrame is static, it will change\r
     //if and when the user selects a new window\r
-    static AlignFrame currentAlignFrame;\r
+    public static AlignFrame currentAlignFrame;\r
 \r
     //This is the first frame to be displayed, and does not change\r
     AlignFrame initialAlignFrame;\r
@@ -88,6 +179,20 @@ public class JalviewLite extends Applet
 \r
         file = getParameter("file");\r
 \r
+        if(file==null)\r
+        {\r
+          //Maybe the sequences are added as parameters\r
+          StringBuffer data = new StringBuffer("PASTE");\r
+          int i=1;\r
+          while( (file=getParameter("sequence"+i))!=null)\r
+          {\r
+            data.append(file.toString()+"\n");\r
+            i++;\r
+          }\r
+          if(data.length()>5)\r
+            file = data.toString();\r
+        }\r
+\r
         final JalviewLite applet = this;\r
         if(getParameter("embedded")!=null\r
            && getParameter("embedded").equalsIgnoreCase("true"))\r
@@ -128,16 +233,16 @@ public class JalviewLite extends Applet
 \r
       String format = new jalview.io.IdentifyFile().Identify(args[0],AppletFormatAdapter.FILE);\r
 \r
-      SequenceI[] sequences = null;\r
+     Alignment al = null;\r
      try{\r
-       sequences = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.FILE, format);\r
+       al = new AppletFormatAdapter().readFile(args[0], AppletFormatAdapter.FILE, format);\r
      }catch(java.io.IOException ex)\r
      {\r
        ex.printStackTrace();\r
      }\r
-      if ( (sequences != null) && (sequences.length > 0))\r
+      if ( (al != null) && (al.getHeight() > 0))\r
       {\r
-        AlignFrame af = new AlignFrame(new Alignment(sequences), null, args[0], false);\r
+        AlignFrame af = new AlignFrame(al, null, args[0], false);\r
         af.statusBar.setText("Successfully loaded file " + args[0]);\r
       }\r
     }\r
@@ -163,6 +268,8 @@ public class JalviewLite extends Applet
             {\r
                 public void windowClosing(WindowEvent e)\r
                 {\r
+                  if(frame instanceof AlignFrame)\r
+                    ((AlignFrame)frame).closeMenuItem_actionPerformed();\r
                     if(currentAlignFrame == frame)\r
                     {\r
                       currentAlignFrame = null;\r
@@ -182,44 +289,7 @@ public class JalviewLite extends Applet
         frame.setVisible(true);\r
     }\r
 \r
-    public String getSelectedSequences()\r
-    {\r
-      StringBuffer result = new StringBuffer("");\r
 \r
-      if(initialAlignFrame.viewport.getSelectionGroup()!=null)\r
-      {\r
-        SequenceI[] seqs = initialAlignFrame.viewport.getSelectionGroup().\r
-            getSequencesInOrder(\r
-                initialAlignFrame.viewport.getAlignment());\r
-\r
-        for (int i = 0; i < seqs.length; i++)\r
-          result.append(seqs[i].getName() + "¬");\r
-      }\r
-\r
-      return result.toString();\r
-    }\r
-\r
-    public String getAlignment(String format)\r
-    {\r
-      return getAlignment(format, "true");\r
-    }\r
-\r
-    public String getAlignment(String format, String suffix)\r
-    {\r
-      try\r
-      {\r
-        boolean seqlimits = suffix.equalsIgnoreCase("true");\r
-\r
-        String reply = new AppletFormatAdapter().formatSequences(format,\r
-            currentAlignFrame.viewport.getAlignment().getSequences(), seqlimits);\r
-        return reply;\r
-      }\r
-      catch (Exception ex)\r
-      {\r
-        ex.printStackTrace();\r
-        return "Error retrieving alignment in " + format + " format. ";\r
-      }\r
-    }\r
 \r
     /**\r
      * This paints the background surrounding the "Launch Jalview button"\r
@@ -243,8 +313,8 @@ public class JalviewLite extends Applet
         {\r
           g.setColor(Color.black);\r
           g.setFont(new Font("Arial", Font.BOLD, 24));\r
-          g.drawString("Jalview Applet", 50, this.size().height/2 -30);\r
-          g.drawString("Loading Data...", 50, this.size().height/2);\r
+          g.drawString("Jalview Applet", 50, this.getSize().height/2 -30);\r
+          g.drawString("Loading Data...", 50, this.getSize().height/2);\r
         }\r
 \r
 \r
@@ -261,7 +331,12 @@ public class JalviewLite extends Applet
                              JalviewLite _applet)\r
         {\r
             file = _file;\r
-            if(inArchive(file))\r
+            if(file.startsWith("PASTE"))\r
+            {\r
+              file = file.substring(5);\r
+              protocol = AppletFormatAdapter.PASTE;\r
+            }\r
+            else if(inArchive(file))\r
               protocol = AppletFormatAdapter.CLASSLOADER;\r
             else\r
             {\r
@@ -274,28 +349,33 @@ public class JalviewLite extends Applet
 \r
         public void run()\r
         {\r
-            SequenceI[] sequences = null;\r
+            Alignment al = null;\r
             try{\r
-              sequences = new AppletFormatAdapter().readFile(file, protocol,\r
+              al = new AppletFormatAdapter().readFile(file, protocol,\r
                   format);\r
             }catch(java.io.IOException ex)\r
             {\r
               ex.printStackTrace();\r
             }\r
-            if ((sequences != null) && (sequences.length > 0))\r
+            if ((al != null) && (al.getHeight() > 0))\r
             {\r
-              currentAlignFrame = new AlignFrame(new Alignment(sequences),\r
+              currentAlignFrame = new AlignFrame(al,\r
                                                  applet,\r
                                                  file,\r
                                                  embedded);\r
 \r
+              if(protocol==jalview.io.AppletFormatAdapter.PASTE)\r
+                currentAlignFrame.setTitle("Sequences from "+getDocumentBase());\r
 \r
               initialAlignFrame = currentAlignFrame;\r
 \r
               currentAlignFrame.statusBar.setText("Successfully loaded file " + file);\r
 \r
 \r
-                String treeFile = applet.getParameter("treeFile");\r
+                String treeFile = applet.getParameter("tree");\r
+                if(treeFile==null)\r
+                  treeFile = applet.getParameter("treeFile");\r
+\r
                 if (treeFile != null)\r
                 {\r
                   try\r
@@ -329,7 +409,14 @@ public class JalviewLite extends Applet
                 if( !inArchive(param) )\r
                   param = addProtocol( param );\r
 \r
-                currentAlignFrame.parseFeaturesFile(param);\r
+                currentAlignFrame.parseFeaturesFile(param, protocol);\r
+              }\r
+\r
+              param = getParameter("showFeatureSettings");\r
+              if(param !=null && param.equalsIgnoreCase("true"))\r
+              {\r
+                currentAlignFrame.viewport.showSequenceFeatures(true);\r
+                new FeatureSettings(currentAlignFrame.alignPanel);\r
               }\r
 \r
              param = getParameter("annotations");\r
@@ -338,37 +425,91 @@ public class JalviewLite extends Applet
                if( !inArchive(param) )\r
                   param = addProtocol( param );\r
 \r
-               new AnnotationReader().readAnnotationFile(\r
+               new AnnotationFile().readAnnotationFile(\r
                    currentAlignFrame.viewport.getAlignment(),\r
-                   param);\r
+                   param,\r
+                   protocol);\r
 \r
                currentAlignFrame.alignPanel.fontChanged();\r
                currentAlignFrame.alignPanel.setScrollValues(0,0);\r
 \r
              }\r
 \r
+             param = getParameter("jnetfile");\r
+             if (param != null)\r
+             {\r
+               try\r
+               {\r
+                 if (inArchive(param))\r
+                   protocol = AppletFormatAdapter.CLASSLOADER;\r
+                 else\r
+                 {\r
+                   protocol = AppletFormatAdapter.URL;\r
+                   param = addProtocol(param);\r
+                 }\r
+\r
+                 jalview.io.JPredFile predictions = new jalview.io.JPredFile(\r
+                     param, protocol);\r
+                 new JnetAnnotationMaker().add_annotation(predictions,\r
+                     currentAlignFrame.viewport.getAlignment(),\r
+                     0,false); // do not add sequence profile from concise output\r
+                 currentAlignFrame.alignPanel.fontChanged();\r
+                 currentAlignFrame.alignPanel.setScrollValues(0, 0);\r
+               } catch (Exception ex) {\r
+                 ex.printStackTrace();\r
+               }\r
+             }\r
+\r
 \r
-                String pdbfile = applet.getParameter("PDBFILE");\r
-                if(pdbfile!=null)\r
+                param = getParameter("PDBFILE");\r
+                if(param!=null)\r
                 {\r
-                  if( inArchive(pdbfile) )\r
+                  if( inArchive(param) )\r
                     protocol = AppletFormatAdapter.CLASSLOADER;\r
                   else\r
                   {\r
                     protocol = AppletFormatAdapter.URL;\r
-                    pdbfile = addProtocol(pdbfile);\r
+                    param = addProtocol(param);\r
                   }\r
 \r
                   String sequence = applet.getParameter("PDBSEQ");\r
 \r
                   if(sequence!=null)\r
                   {\r
-                    new MCview.AppletPDBViewer(pdbfile, protocol,\r
+                    new MCview.AppletPDBViewer(param, protocol,\r
                                                (Sequence)currentAlignFrame.getAlignViewport().getAlignment().findName(sequence),\r
                                                currentAlignFrame.getSeqcanvas());\r
                   }\r
 \r
                 }\r
+\r
+                int gIndex = 1;\r
+                param = getParameter("SEQUENCE_GROUP"+gIndex);\r
+                if(param!=null)\r
+                do{\r
+                  new AnnotationFile().readAnnotationFile(\r
+                   currentAlignFrame.viewport.getAlignment(),\r
+                   "JALVIEW_ANNOTATION\nSEQUENCE_GROUP\t"+param,\r
+                   AppletFormatAdapter.PASTE);\r
+                  gIndex++;\r
+                  param = applet.getParameter("SEQUENCE_GROUP"+gIndex);\r
+                  currentAlignFrame.alignPanel.repaint();\r
+                }while(param!=null);\r
+\r
+              gIndex = 1;\r
+              param = getParameter("PROPERTIES" + gIndex);\r
+              if (param != null)\r
+                do\r
+                {\r
+                  new AnnotationFile().readAnnotationFile(\r
+                      currentAlignFrame.viewport.getAlignment(),\r
+                      "JALVIEW_ANNOTATION\nPROPERTIES\t" + param,\r
+                      AppletFormatAdapter.PASTE);\r
+                  gIndex++;\r
+                  param = applet.getParameter("PROPERTIES" + gIndex);\r
+                  currentAlignFrame.alignPanel.repaint();\r
+                }\r
+                while (param != null);\r
             }\r
             else\r
             {\r