JAL-1807 Bob's first commit -- Applet loaded; needs image
[jalview.git] / src / jalview / bin / JalviewLite.java
index cb9d893..3ec841a 100644 (file)
  */
 package jalview.bin;
 
-import java.applet.Applet;
-import java.awt.Button;
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.EventQueue;
-import java.awt.Font;
-import java.awt.Frame;
-import java.awt.Graphics;
-import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import netscape.javascript.JSException;
-import netscape.javascript.JSObject;
-
+import jalview.analysis.SequenceIdMatcher;
 import jalview.api.StructureSelectionManagerProvider;
 import jalview.appletgui.AlignFrame;
 import jalview.appletgui.AlignViewport;
 import jalview.appletgui.EmbmenuFrame;
 import jalview.appletgui.FeatureSettings;
 import jalview.appletgui.SplitFrame;
+//import jalview.appletgui.AlignViewport;
+//import jalview.appletgui.EmbmenuFrame;
+//import jalview.appletgui.FeatureSettings;
+//import jalview.appletgui.SplitFrame;
 import jalview.datamodel.Alignment;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentOrder;
@@ -58,27 +39,63 @@ import jalview.datamodel.PDBEntry;
 import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
+import jalview.io.AlignFile;
 import jalview.io.AnnotationFile;
 import jalview.io.AppletFormatAdapter;
 import jalview.io.FileParse;
 import jalview.io.IdentifyFile;
-import jalview.io.JPredFile;
 import jalview.io.JnetAnnotationMaker;
+//import jalview.io.JPredFile;
+//import jalview.io.JnetAnnotationMaker;
 import jalview.io.NewickFile;
 import jalview.javascript.JSFunctionExec;
 import jalview.javascript.JalviewLiteJsApi;
 import jalview.javascript.JsCallBack;
+import jalview.javascript.JsSelectionSender;
+import jalview.javascript.MouseOverListener;
+import jalview.javascript.MouseOverStructureListener;
+import jalview.jsdev.GenericFileAdapter;
+//import jalview.javascript.MouseOverListener;
+//import jalview.javascript.MouseOverStructureListener;
+import jalview.schemes.ColourSchemeProperty;
+import jalview.schemes.UserColourScheme;
 import jalview.structure.SelectionListener;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
 
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.event.ActionEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+
+import netscape.javascript.JSObject;
+
+//import netscape.javascript.JSObject;
+
 /**
  * Jalview Applet. Runs in Java 1.18 runtime
  * 
  * @author $author$
  * @version $Revision: 1.92 $
  */
-public class JalviewLite extends Applet implements
+public class JalviewLite extends JApplet implements
         StructureSelectionManagerProvider, JalviewLiteJsApi
 {
 
@@ -178,7 +195,7 @@ public class JalviewLite extends Applet implements
           final String position, final String alignedPosition)
   {
     // TODO: could try to highlight in all alignments if alf==null
-    jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher(
+    SequenceIdMatcher matcher = new SequenceIdMatcher(
             alf.viewport.getAlignment().getSequencesArray());
     final SequenceI sq = matcher.findIdMatch(sequenceId);
     if (sq != null)
@@ -284,7 +301,7 @@ public class JalviewLite extends Applet implements
     final SequenceGroup sel = new SequenceGroup();
     final ColumnSelection csel = new ColumnSelection();
     AlignmentI al = alf.viewport.getAlignment();
-    jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher(
+    SequenceIdMatcher matcher = new SequenceIdMatcher(
             alf.viewport.getAlignment().getSequencesArray());
     int start = 0, end = al.getWidth(), alw = al.getWidth();
     boolean seqsfound = true;
@@ -598,7 +615,7 @@ public class JalviewLite extends Applet implements
     SequenceI[] sqs = null;
     if (ids != null && ids.length > 0)
     {
-      jalview.analysis.SequenceIdMatcher matcher = new jalview.analysis.SequenceIdMatcher(
+      SequenceIdMatcher matcher = new SequenceIdMatcher(
               alf.viewport.getAlignment().getSequencesArray());
       int s = 0;
       sqs = new SequenceI[ids.length];
@@ -847,7 +864,7 @@ public class JalviewLite extends Applet implements
    */
   public AlignFrame loadAlignment(String text, String title)
   {
-    Alignment al = null;
+    AlignmentI al = null;
 
     String format = new IdentifyFile().Identify(text,
             AppletFormatAdapter.PASTE);
@@ -876,7 +893,7 @@ public class JalviewLite extends Applet implements
     setMouseoverListener(currentAlignFrame, listener);
   }
 
-  private Vector<jalview.javascript.JSFunctionExec> javascriptListeners = new Vector<jalview.javascript.JSFunctionExec>();
+  private Vector<JSFunctionExec> javascriptListeners = new Vector<JSFunctionExec>();
 
   /*
    * (non-Javadoc)
@@ -897,7 +914,7 @@ public class JalviewLite extends Applet implements
         return;
       }
     }
-    jalview.javascript.MouseOverListener mol = new jalview.javascript.MouseOverListener(
+    MouseOverListener mol = new MouseOverListener(
             this, af, listener);
     javascriptListeners.addElement(mol);
     StructureSelectionManager.getStructureSelectionManager(this)
@@ -941,8 +958,7 @@ public class JalviewLite extends Applet implements
         return;
       }
     }
-    jalview.javascript.JsSelectionSender mol = new jalview.javascript.JsSelectionSender(
-            this, af, listener);
+    JsSelectionSender mol = new JsSelectionSender(this, af, listener);
     javascriptListeners.addElement(mol);
     StructureSelectionManager.getStructureSelectionManager(this)
             .addSelectionListener(mol);
@@ -974,7 +990,7 @@ public class JalviewLite extends Applet implements
         return;
       }
     }
-    jalview.javascript.MouseOverStructureListener mol = new jalview.javascript.MouseOverStructureListener(
+    MouseOverStructureListener mol = new MouseOverStructureListener(
             this, listener, separatorListToArray(modelSet));
     javascriptListeners.addElement(mol);
     StructureSelectionManager.getStructureSelectionManager(this)
@@ -1071,8 +1087,7 @@ public class JalviewLite extends Applet implements
     {
       while (javascriptListeners.size() > 0)
       {
-        jalview.javascript.JSFunctionExec mol = javascriptListeners
-                .elementAt(0);
+        JSFunctionExec mol = javascriptListeners.elementAt(0);
         javascriptListeners.removeElement(mol);
         if (mol instanceof SelectionListener)
         {
@@ -1098,7 +1113,7 @@ public class JalviewLite extends Applet implements
     StructureSelectionManager.release(this);
   }
 
-  private jalview.javascript.JSFunctionExec jsFunctionExec;
+  private JSFunctionExec jsFunctionExec;
 
   /*
    * (non-Javadoc)
@@ -1209,7 +1224,7 @@ public class JalviewLite extends Applet implements
   public void scrollViewToColumnIn(final AlignFrame alf,
           final String leftHandColumn)
   {
-    java.awt.EventQueue.invokeLater(new Runnable()
+    EventQueue.invokeLater(new Runnable()
     {
 
       @Override
@@ -1242,9 +1257,9 @@ public class JalviewLite extends Applet implements
 
   String file = "No file";
 
-  String file2 = "No file";
+  String file2 = null;
 
-  Button launcher = new Button(
+  JButton launcher = new JButton(
           MessageManager.getString("label.start_jalview"));
 
   /**
@@ -1374,6 +1389,7 @@ public class JalviewLite extends Applet implements
      * turn on extra applet debugging
      */
     debug = TRUE.equalsIgnoreCase(getParameter("debug"));
+    
     if (debug)
     {
 
@@ -1459,7 +1475,7 @@ public class JalviewLite extends Applet implements
         file = data.toString();
       }
     }
-    if ("true".equalsIgnoreCase(getParameter("enableSplitFrame")))
+    if (TRUE.equalsIgnoreCase(getParameter("enableSplitFrame")))
     {
       file2 = getParameter("file2");
     }
@@ -1468,7 +1484,14 @@ public class JalviewLite extends Applet implements
     if (embedded)
     {
       LoadingThread loader = new LoadingThread(file, file2, this);
-      loader.start();
+      /**
+       * @j2sNative
+       * 
+       * loader.run();
+       */
+      {
+       loader.start();
+      }
     }
     else if (file != null)
     {
@@ -1533,7 +1556,7 @@ public class JalviewLite extends Applet implements
         {
           notFailed = true;
         }
-      } catch (JSException jsex)
+      } catch (Exception jsex)
       {
         System.err.println("Attempt " + tries
                 + " to access LiveConnect javascript failed.");
@@ -1597,7 +1620,7 @@ public class JalviewLite extends Applet implements
    * @param height
    *          height of new frame
    */
-  public static void addFrame(final Frame frame, String title, int width,
+  public static void addFrame(final JFrame frame, String title, int width,
           int height)
   {
     frame.setLocation(lastFrameX, lastFrameY);
@@ -1818,23 +1841,29 @@ public class JalviewLite extends Applet implements
       applet = _applet;
     }
 
-    public void run()
-    {
-      LoadJmolThread jmolchecker = new LoadJmolThread();
-      jmolchecker.start();
-      while (jmolchecker.notFinished())
-      {
-        // wait around until the Jmol check is complete.
-        try
-        {
-          Thread.sleep(2);
-        } catch (Exception e)
-        {
-        }
-      }
-      startLoading();
-      // applet.callInitCallback();
-    }
+               public void run() {
+                       /**
+                        * 
+                        * @j2sNative
+                        * 
+                        * 
+                        * System.out.println("BYPASSING JMOL LOADING FOR NOW. THIS WILL BE DONE ANOTHER WAY")
+                        * 
+                        */
+                       {
+                               LoadJmolThread jmolchecker = new LoadJmolThread();
+                               jmolchecker.start();
+                               while (jmolchecker.notFinished()) {
+                                       // wait around until the Jmol check is complete.
+                                       try {
+                                               Thread.sleep(2);
+                                       } catch (Exception e) {
+                                       }
+                               }
+                       }
+                       startLoading();
+                       // applet.callInitCallback();
+               }
 
     /**
      * Load the alignment and any related files as specified by applet
@@ -1996,8 +2025,8 @@ public class JalviewLite extends Applet implements
       // alignPdbStructures is true)
       Vector pdbs = new Vector();
       // create a lazy matcher if we're asked to
-      jalview.analysis.SequenceIdMatcher matcher = (applet
-              .getDefaultParameter("relaxedidmatch", false)) ? new jalview.analysis.SequenceIdMatcher(
+      SequenceIdMatcher matcher = (applet.getDefaultParameter(
+              "relaxedidmatch", false)) ? new SequenceIdMatcher(
               alignFrame.getAlignViewport().getAlignment()
                       .getSequencesArray()) : null;
 
@@ -2158,7 +2187,7 @@ public class JalviewLite extends Applet implements
         try
         {
           param = setProtocolState(param);
-          JPredFile predictions = new JPredFile(param, protocol);
+          AlignFile predictions = GenericFileAdapter.getFile("JPredFile", param, protocol);
           JnetAnnotationMaker.add_annotation(predictions,
                   alignFrame.viewport.getAlignment(), 0, false);
           // false == do not add sequence profile from concise output
@@ -2853,13 +2882,12 @@ public class JalviewLite extends Applet implements
     {
       return defcolour;
     }
-    Color col = jalview.schemes.ColourSchemeProperty
-            .getAWTColorFromName(colprop);
+    Color col = ColourSchemeProperty.getAWTColorFromName(colprop);
     if (col == null)
     {
       try
       {
-        col = new jalview.schemes.UserColourScheme(colprop).findColour('A');
+        col = new UserColourScheme(colprop).findColour('A');
       } catch (Exception ex)
       {
         System.err.println("Couldn't parse '" + colprop
@@ -2895,17 +2923,19 @@ public class JalviewLite extends Applet implements
   private String resolveUrlForLocalOrAbsolute(String url, URL localref)
   {
     String codebase = localref.toString();
-    if (url.indexOf("/") == 0)
-    {
-      url = codebase.substring(0, codebase.length()
-              - localref.getFile().length())
-              + url;
-    }
-    else
-    {
-      url = localref + url;
-    }
-    return url;
+    // BH removing file name and query
+    int pt = codebase.indexOf("?");
+    if (pt < 0)
+       pt = codebase.length();
+    codebase = codebase.substring(0, pt);
+    codebase = codebase.substring(0, codebase.lastIndexOf("/") + 1);
+    // codebase is now http://...xxx/
+    if (url.indexOf("/") == 0 && !localref.getProtocol().equals("file"))
+    { //  http://  https://   we do NOT allow going to the root file system directory!
+       pt = codebase.indexOf("/", 8); 
+      return codebase.substring(0, pt) + url;
+    }
+    return codebase + url;
   }
 
   /**