JAL-3253 preliminary static fixes for JavaScript
[jalview.git] / src / jalview / bin / Jalview.java
index 694fe00..fcda026 100755 (executable)
@@ -92,13 +92,58 @@ public class Jalview
     Platform.getURLCommandArguments();
   }
 
-  // singleton instance of this class
+  private boolean headless;
+
+  public static boolean isHeadlessMode()
+  {
+    return getInstance().headless;
+  }
+
+  /**
+   * singleton instance of this class in Java only
+   */
 
   private static Jalview instance;
 
+  public static Jalview getInstance()
+  {
+    Jalview j;
+    @SuppressWarnings("unused")
+    ThreadGroup g = Thread.currentThread().getThreadGroup();
+    /**
+     * @j2sNative j = g._jalviewInstance;
+     */
+    {
+      j = instance;
+    }
+    return j;
+  }
+
+  private static void setInstance(Jalview j)
+  {
+    @SuppressWarnings("unused")
+    ThreadGroup g = Thread.currentThread().getThreadGroup();
+    /**
+     * @j2s g._jalviewInstance = j;
+     */
+    {
+      instance = j;
+    }
+  }
+
   private Desktop desktop;
 
-  public static AlignFrame currentAlignFrame;
+  private AlignFrame currentAlignFrame;
+
+  public static AlignFrame getCurrentAlignFrame()
+  {
+    return getInstance().currentAlignFrame;
+  }
+
+  public static void setCurrentAlignFrame(AlignFrame currentAlignFrame)
+  {
+    getInstance().currentAlignFrame = currentAlignFrame;
+  }
 
   static
   {
@@ -110,21 +155,21 @@ public class Jalview
      */
     {
       // grab all the rights we can for the JVM
-           Policy.setPolicy(new Policy()
-           {
-             @Override
-             public PermissionCollection getPermissions(CodeSource codesource)
-             {
-               Permissions perms = new Permissions();
-               perms.add(new AllPermission());
-               return (perms);
-             }
-       
-             @Override
-             public void refresh()
-             {
-             }
-           });
+      Policy.setPolicy(new Policy()
+      {
+        @Override
+        public PermissionCollection getPermissions(CodeSource codesource)
+        {
+          Permissions perms = new Permissions();
+          perms.add(new AllPermission());
+          return (perms);
+        }
+
+        @Override
+        public void refresh()
+        {
+        }
+      });
     }
   }
 
@@ -187,11 +232,6 @@ public class Jalview
 
   }
 
-  public static Jalview getInstance()
-  {
-    return instance;
-  }
-
   /**
    * main class for Jalview application
    * 
@@ -200,23 +240,23 @@ public class Jalview
    */
   public static void main(String[] args)
   {
-//     setLogging(); // BH - for event debugging in JavaScript
-    instance = new Jalview();
-    instance.doMain(args);
-}
+    // setLogging(); // BH - for event debugging in JavaScript
+    setInstance(new Jalview());
+    getInstance().doMain(args);
+  }
 
-  private static void logClass(String name) 
-  {    
-         // BH - for event debugging in JavaScript
-      ConsoleHandler consoleHandler = new ConsoleHandler();
-      consoleHandler.setLevel(Level.ALL);
-      Logger logger = Logger.getLogger(name);
-      logger.setLevel(Level.ALL);
-      logger.addHandler(consoleHandler);
+  private static void logClass(String name)
+  {
+    // BH - for event debugging in JavaScript
+    ConsoleHandler consoleHandler = new ConsoleHandler();
+    consoleHandler.setLevel(Level.ALL);
+    Logger logger = Logger.getLogger(name);
+    logger.setLevel(Level.ALL);
+    logger.addHandler(consoleHandler);
   }
 
   @SuppressWarnings("unused")
-  private static void setLogging() 
+  private static void setLogging()
   {
 
     /**
@@ -227,26 +267,23 @@ public class Jalview
       System.out.println("not in js");
     }
 
-         // BH - for event debugging in JavaScript (Java mode only)
+    // BH - for event debugging in JavaScript (Java mode only)
     if (!Platform.isJS())
     /**
      * Java only
      * 
      * @j2sIgnore
      */
-       {
-               Logger.getLogger("").setLevel(Level.ALL);
-        logClass("java.awt.EventDispatchThread");
-        logClass("java.awt.EventQueue");
-        logClass("java.awt.Component");
-        logClass("java.awt.focus.Component");
-        logClass("java.awt.focus.DefaultKeyboardFocusManager"); 
-       }       
+    {
+      Logger.getLogger("").setLevel(Level.ALL);
+      logClass("java.awt.EventDispatchThread");
+      logClass("java.awt.EventQueue");
+      logClass("java.awt.Component");
+      logClass("java.awt.focus.Component");
+      logClass("java.awt.focus.DefaultKeyboardFocusManager");
+    }
 
   }
-  
-
-  
 
   /**
    * @param args
@@ -266,10 +303,9 @@ public class Jalview
             + System.getProperty("os.version"));
 
     ArgsParser aparser = new ArgsParser(args);
-    boolean headless = false;
 
-    String usrPropsFile = aparser.getValue("props");
-    Cache.loadProperties(usrPropsFile); // must do this before
+    String usrPropsFile = aparser.getValue(ArgsParser.PROPS);
+    Cache.loadProperties(usrPropsFile);
     if (usrPropsFile != null)
     {
       System.out.println(
@@ -288,15 +324,17 @@ public class Jalview
         showUsage();
         System.exit(0);
       }
-      if (aparser.contains("nodisplay") || aparser.contains("nogui")
-              || aparser.contains("headless"))
+      if (aparser.contains(ArgsParser.NODISPLAY)
+              || aparser.contains(ArgsParser.NOGUI)
+              || aparser.contains(ArgsParser.HEADLESS)
+              || "true".equals(System.getProperty("java.awt.headless")))
       {
-        System.setProperty("java.awt.headless", "true");
         headless = true;
       }
+
       // anything else!
 
-      final String jabawsUrl = aparser.getValue("jabaws");
+      final String jabawsUrl = aparser.getValue(ArgsParser.JABAWS);
       if (jabawsUrl != null)
       {
         try
@@ -312,7 +350,8 @@ public class Jalview
       }
 
     }
-    String defs = aparser.getValue("setprop");
+    // check for property setting
+    String defs = aparser.getValue(ArgsParser.SETPROP);
     while (defs != null)
     {
       int p = defs.indexOf('=');
@@ -325,15 +364,10 @@ public class Jalview
         System.out.println("Executing setprop argument: " + defs);
         if (Platform.isJS())
         {
-          Cache.setProperty(defs.substring(0,p), defs.substring(p+1));
+          Cache.setProperty(defs.substring(0, p), defs.substring(p + 1));
         }
       }
-      defs = aparser.getValue("setprop");
-    }
-    if (System.getProperty("java.awt.headless") != null
-            && System.getProperty("java.awt.headless").equals("true"))
-    {
-      headless = true;
+      defs = aparser.getValue(ArgsParser.SETPROP);
     }
     System.setProperty("http.agent",
             "Jalview Desktop/" + Cache.getDefault("VERSION", "Unknown"));
@@ -377,8 +411,9 @@ public class Jalview
                   "Failed to set QuaQua look and feel: " + e.toString());
         }
       }
-      if (lookAndFeel == null || !(lookAndFeel.getClass()
-              .isAssignableFrom(UIManager.getLookAndFeel().getClass()))
+      if (lookAndFeel == null
+              || !(lookAndFeel.getClass().isAssignableFrom(
+                      UIManager.getLookAndFeel().getClass()))
               || !UIManager.getLookAndFeel().getClass().toString()
                       .toLowerCase().contains("quaqua"))
       {
@@ -406,16 +441,7 @@ public class Jalview
 
     if (!headless)
     {
-      desktop = new Desktop() 
-//      {
-// // BH testing
-//       @Override
-//       protected void processEvent(AWTEvent e) {
-//               System.out.println("Jalview.java " + e);
-//               super.processEvent(e);
-//       }
-//       }
-      ;
+      desktop = new Desktop();
       desktop.setInBatchMode(true); // indicate we are starting up
       desktop.setVisible(true);
 
@@ -427,7 +453,7 @@ public class Jalview
        */
       {
         desktop.startServiceDiscovery();
-        if (!aparser.contains("nousagestats"))
+        if (!aparser.contains(ArgsParser.NOUSAGESTATS))
         {
           startUsageStats(desktop);
         }
@@ -436,9 +462,9 @@ public class Jalview
           System.err.println("CMD [-nousagestats] executed successfully!");
         }
 
-        if (!aparser.contains("noquestionnaire"))
+        if (!aparser.contains(ArgsParser.NOQUESTIONNAIRE))
         {
-          String url = aparser.getValue("questionnaire");
+          String url = aparser.getValue(ArgsParser.QUESTIONNAIRE);
           if (url != null)
           {
             // Start the desktop questionnaire prompter with the specified
@@ -470,7 +496,7 @@ public class Jalview
                   .println("CMD [-noquestionnaire] executed successfully!");
         }
 
-        if (!aparser.contains("nonews"))
+        if (!aparser.contains(ArgsParser.NONEWS))
         {
           desktop.checkForNews();
         }
@@ -479,24 +505,24 @@ public class Jalview
       }
     }
 
-    String file = null, data = null;
+    String data = null;
     FileFormatI format = null;
     DataSourceType protocol = null;
     FileLoader fileLoader = new FileLoader(!headless);
 
-    String groovyscript = null; // script to execute after all loading is
+    // script to execute after all loading is
     // completed one way or another
     // extract groovy argument and execute if necessary
-    groovyscript = aparser.getValue("groovy", true);
-    file = aparser.getValue("open", true);
+    String groovyscript = aparser.getValue(ArgsParser.GROOVY, true);
+    String file = aparser.getValue(ArgsParser.OPEN, true);
 
     if (file == null && desktop == null)
     {
       System.out.println("No files to open!");
       System.exit(1);
     }
-    String vamsasImport = aparser.getValue("vdoc");
-    String vamsasSession = aparser.getValue("vsess");
+    String vamsasImport = aparser.getValue(ArgsParser.VDOC);
+    String vamsasSession = aparser.getValue(ArgsParser.VSESS);
     if (vamsasImport != null || vamsasSession != null)
     {
       if (desktop == null || headless)
@@ -594,11 +620,12 @@ public class Jalview
       System.out.println("CMD [-open " + file + "] executed successfully!");
 
       if (!Platform.isJS())
-        /**
-         * ignore in JavaScript -- can't just file existence - could load it?
-         * 
-         * @j2sIgnore
-         */
+      /**
+       * ignore in JavaScript -- can't just check file existence - could load
+       * it?
+       * 
+       * @j2sIgnore
+       */
       {
         if (!file.startsWith("http://") && !file.startsWith("https://"))
         // BH 2019 added https check for Java
@@ -614,7 +641,7 @@ public class Jalview
         }
       }
 
-        protocol = AppletFormatAdapter.checkProtocol(file);
+      protocol = AppletFormatAdapter.checkProtocol(file);
 
       try
       {
@@ -633,14 +660,13 @@ public class Jalview
       else
       {
         setCurrentAlignFrame(af);
-        data = aparser.getValue("colour", true);
+        data = aparser.getValue(ArgsParser.COLOUR, true);
         if (data != null)
         {
           data.replaceAll("%20", " ");
 
-          ColourSchemeI cs = ColourSchemeProperty
-                  .getColourScheme(af.getViewport(),
-                          af.getViewport().getAlignment(), data);
+          ColourSchemeI cs = ColourSchemeProperty.getColourScheme(
+                  af.getViewport(), af.getViewport().getAlignment(), data);
 
           if (cs != null)
           {
@@ -651,7 +677,7 @@ public class Jalview
         }
 
         // Must maintain ability to use the groups flag
-        data = aparser.getValue("groups", true);
+        data = aparser.getValue(ArgsParser.GROUPS, true);
         if (data != null)
         {
           af.parseFeaturesFile(data,
@@ -660,7 +686,7 @@ public class Jalview
           System.out.println(
                   "CMD groups[-" + data + "]  executed successfully!");
         }
-        data = aparser.getValue("features", true);
+        data = aparser.getValue(ArgsParser.FEATURES, true);
         if (data != null)
         {
           af.parseFeaturesFile(data,
@@ -670,7 +696,7 @@ public class Jalview
                   "CMD [-features " + data + "]  executed successfully!");
         }
 
-        data = aparser.getValue("annotations", true);
+        data = aparser.getValue(ArgsParser.ANNOTATIONS, true);
         if (data != null)
         {
           af.loadJalviewDataFile(data, null, null, null);
@@ -679,7 +705,7 @@ public class Jalview
                   "CMD [-annotations " + data + "] executed successfully!");
         }
         // set or clear the sortbytree flag.
-        if (aparser.contains("sortbytree"))
+        if (aparser.contains(ArgsParser.SORTBYTREE))
         {
           af.getViewport().setSortByTree(true);
           if (af.getViewport().getSortByTree())
@@ -687,7 +713,8 @@ public class Jalview
             System.out.println("CMD [-sortbytree] executed successfully!");
           }
         }
-        if (aparser.contains("no-annotation"))
+        if (aparser.contains(ArgsParser.NOANNOTATION)
+                || aparser.contains(ArgsParser.NOANNOTATION2))
         {
           af.getViewport().setShowAnnotation(false);
           if (!af.getViewport().isShowAnnotation())
@@ -695,7 +722,7 @@ public class Jalview
             System.out.println("CMD no-annotation executed successfully!");
           }
         }
-        if (aparser.contains("nosortbytree"))
+        if (aparser.contains(ArgsParser.NOSORTBYTREE))
         {
           af.getViewport().setSortByTree(false);
           if (!af.getViewport().getSortByTree())
@@ -704,7 +731,7 @@ public class Jalview
                     .println("CMD [-nosortbytree] executed successfully!");
           }
         }
-        data = aparser.getValue("tree", true);
+        data = aparser.getValue(ArgsParser.TREE, true);
         if (data != null)
         {
           try
@@ -737,6 +764,10 @@ public class Jalview
         String imageName = "unnamed.png";
         while (aparser.getSize() > 1)
         {
+          // PNG filename
+          // SVG filename
+          // HTML filename
+          // biojsmsa filename
           String outputFormat = aparser.nextValue();
           file = aparser.nextValue();
 
@@ -951,8 +982,9 @@ public class Jalview
     /**
      * start a User Config prompt asking if we can log usage statistics.
      */
-    PromptUserConfig prompter = new PromptUserConfig(Desktop.desktop,
-            "USAGESTATS", "Jalview Usage Statistics",
+    PromptUserConfig prompter = new PromptUserConfig(
+            Desktop.getDesktopPane(), "USAGESTATS",
+            "Jalview Usage Statistics",
             "Do you want to help make Jalview better by enabling "
                     + "the collection of usage statistics with Google Analytics ?"
                     + "\n\n(you can enable or disable usage tracking in the preferences)",
@@ -1095,16 +1127,6 @@ public class Jalview
     }
   }
 
-  public static boolean isHeadlessMode()
-  {
-    String isheadless = System.getProperty("java.awt.headless");
-    if (isheadless != null && isheadless.equalsIgnoreCase("true"))
-    {
-      return true;
-    }
-    return false;
-  }
-
   public AlignFrame[] getAlignFrames()
   {
     return desktop == null ? new AlignFrame[] { getCurrentAlignFrame() }
@@ -1128,13 +1150,4 @@ public class Jalview
     }
   }
 
-  public static AlignFrame getCurrentAlignFrame()
-  {
-    return Jalview.currentAlignFrame;
-  }
-
-  public static void setCurrentAlignFrame(AlignFrame currentAlignFrame)
-  {
-    Jalview.currentAlignFrame = currentAlignFrame;
-  }
 }