JAL-853 use service action attribute to index services in webservices menu and hardwi...
[jalview.git] / src / jalview / bin / JalviewLite.java
index 9a4d9e2..25c907d 100644 (file)
@@ -53,6 +53,7 @@ import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;\r
 import java.io.BufferedReader;\r
 import java.io.InputStreamReader;\r
+import java.net.URL;\r
 import java.util.Hashtable;\r
 import java.util.StringTokenizer;\r
 import java.util.Vector;\r
@@ -68,6 +69,10 @@ import netscape.javascript.JSObject;
 public class JalviewLite extends Applet implements StructureSelectionManagerProvider, JalviewLiteJsApi\r
 {\r
 \r
+  public StructureSelectionManager getStructureSelectionManager()\r
+  {\r
+    return StructureSelectionManager.getStructureSelectionManager(this);\r
+  }\r
   // /////////////////////////////////////////\r
   // The following public methods maybe called\r
   // externally, eg via javascript in HTML page\r
@@ -933,11 +938,44 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
       \r
     } catch (Exception ex)\r
     {\r
-      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"' and leftHandColumn='"+leftHandColumn+"'");\r
+      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"' and leftHandColumn='"+leftHandColumn+"')");\r
       ex.printStackTrace();\r
     }\r
   }\r
 \r
+  /* (non-Javadoc)\r
+   * @see jalview.javascript.JalviewLiteJsApi#scrollViewToRowIn(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
+  @Override\r
+  public void scrollViewToRowIn(AlignFrame alf, String topRow)\r
+  {\r
+    try {\r
+      alf.scrollToRow(new Integer(topRow).intValue());\r
+      \r
+    } catch (Exception ex)\r
+    {\r
+      System.err.println("Couldn't parse integer arguments (topRow='"+topRow+"')");\r
+      ex.printStackTrace();\r
+    }\r
+  }\r
+\r
+  /* (non-Javadoc)\r
+   * @see jalview.javascript.JalviewLiteJsApi#scrollViewToColumnIn(jalview.appletgui.AlignFrame, java.lang.String)\r
+   */\r
+  @Override\r
+  public void scrollViewToColumnIn(AlignFrame alf, String leftHandColumn)\r
+  {\r
+\r
+    try {\r
+      alf.scrollToColumn(new Integer(leftHandColumn).intValue());\r
+      \r
+    } catch (Exception ex)\r
+    {\r
+      System.err.println("Couldn't parse integer arguments (leftHandColumn='"+leftHandColumn+"')");\r
+      ex.printStackTrace();\r
+    } \r
+  }\r
+\r
   // //////////////////////////////////////////////\r
   // //////////////////////////////////////////////\r
 \r
@@ -1864,7 +1902,7 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
     {\r
       if (file.indexOf("://") == -1)\r
       {\r
-        String fl = applet.getDocumentBase() + file;\r
+        String fl = applet.resolveUrlForLocalOrAbsolute(file, getDocumentBase());\r
         try\r
         {\r
           if (new java.net.URL(fl).openStream() != null)\r
@@ -1880,20 +1918,17 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
         {\r
         }\r
         ;\r
-        fl = applet.getCodeBase() + file;\r
+        fl = applet.resolveUrlForLocalOrAbsolute(file, getCodeBase());\r
         try\r
         {\r
           if (new java.net.URL(fl).openStream() != null)\r
           {\r
             if (debug)\r
             {\r
-              if (debug)\r
-              {\r
-                System.err.println("Prepended codebase for resource: '"\r
-                        + file + "'");\r
-              }\r
-              return fl;\r
+              System.err.println("Prepended codebase for resource: '"\r
+                      + file + "'");\r
             }\r
+            return fl;\r
           }\r
         } catch (Exception x)\r
         {\r
@@ -2271,6 +2306,81 @@ public class JalviewLite extends Applet implements StructureSelectionManagerProv
 \r
   }\r
 \r
+  public void openJalviewHelpUrl()\r
+  {\r
+    String helpUrl=getParameter("jalviewhelpurl");\r
+    if (helpUrl==null || helpUrl.trim().length()<5)\r
+    {\r
+      helpUrl="http://www.jalview.org/help.html";\r
+    }\r
+    showURL(helpUrl, "HELP");    \r
+  }\r
+  \r
+  /**\r
+   * form a complete URL given a path to a resource and a reference location on the same server\r
+   * @param url - an absolute path on the same server as localref or a document located relative to localref\r
+   * @param localref - a URL on the same server as url\r
+   * @return a complete URL for the resource located by url\r
+   */\r
+  private String resolveUrlForLocalOrAbsolute(String url, URL localref)\r
+  {\r
+    String codebase = localref.toString();\r
+    if (url.indexOf("/") == 0)\r
+    {\r
+      url = codebase.substring(0, codebase.length()\r
+              - localref.getFile().length())\r
+              + url;\r
+    }\r
+    else\r
+    {\r
+      url = localref + url;\r
+    }\r
+    return url;\r
+  }\r
+\r
+  /**\r
+   * open a URL in the browser - resolving it according to relative refs and coping with javascript: protocol if necessary.\r
+   * @param url\r
+   * @param target\r
+   */\r
+  public void showURL(String url, String target)\r
+  {\r
+    try\r
+    {\r
+      if (url.indexOf(":") == -1)\r
+      {\r
+        // TODO: verify (Bas Vroling bug) prepend codebase or server URL to\r
+        // form valid URL\r
+        // Should really use docbase, not codebase.\r
+        URL prepend;\r
+        url = resolveUrlForLocalOrAbsolute(url, prepend=getDefaultParameter("resolvetocodebase", false) ? getDocumentBase() : getCodeBase());\r
+        if (debug) {\r
+          System.err.println("Show url (prepended "+prepend+" - toggle resolvetocodebase if code/docbase resolution is wrong): " + url);\r
+        }\r
+      }\r
+      else\r
+      {\r
+        if (debug) {\r
+          System.err.println("Show url: " + url);\r
+        }\r
+      }\r
+      if (url.indexOf("javascript:") == 0)\r
+      {\r
+        // no target for the javascript context\r
+        getAppletContext().showDocument(\r
+                new java.net.URL(url));\r
+      }\r
+      else\r
+      {\r
+        getAppletContext().showDocument(\r
+                new java.net.URL(url), target);\r
+      }\r
+    } catch (Exception ex)\r
+    {\r
+      ex.printStackTrace();\r
+    }\r
+  }\r
+\r
   /**\r
    * bind structures in a viewer to any matching sequences in an alignFrame (use\r
    * sequenceIds to limit scope of search to specific sequences)\r