JAL-3446 from applet; JAL-3374
[jalview.git] / src / jalview / bin / Jalview.java
index 81193e6..4a5c733 100755 (executable)
@@ -297,6 +297,8 @@ public class Jalview implements ApplicationSingletonI
 
     Cache.loadProperties(usrPropsFile); // must do this before
 
+    boolean allowServices = true;
+    
     if (isJS)
     {
       j2sAppletID = Platform.getAppID(null);
@@ -336,7 +338,8 @@ public class Jalview implements ApplicationSingletonI
       // anything else!
 
       final String jabawsUrl = aparser.getValue(ArgsParser.JABAWS);
-      if (jabawsUrl != null)
+      allowServices = !("none".equals(jabawsUrl));
+      if (allowServices && jabawsUrl != null)
       {
         try
         {
@@ -469,7 +472,8 @@ public class Jalview implements ApplicationSingletonI
        * @j2sIgnore
        */
       {
-        desktop.startServiceDiscovery();
+        if (allowServices)
+          desktop.startServiceDiscovery();
         if (!aparser.contains("nousagestats"))
         {
           startUsageStats(desktop);
@@ -525,9 +529,11 @@ public class Jalview implements ApplicationSingletonI
   }
 
   /**
-   * Parse all command-line String[] arguments as well as all JavaScript-derived parameters from Info.
+   * Parse all command-line String[] arguments as well as all JavaScript-derived
+   * parameters from Info.
    * 
-   * We allow for this method to be run from JavaScript. Basically allowing simple scripting.
+   * We allow for this method to be run from JavaScript. Basically allowing
+   * simple scripting.
    * 
    * @param aparser
    * @param isStartup
@@ -573,6 +579,8 @@ public class Jalview implements ApplicationSingletonI
       System.exit(1);
     }
 
+    setDisplayParameters(aparser);
+    
     // time to open a file.
 
     long progress = -1;
@@ -582,7 +590,65 @@ public class Jalview implements ApplicationSingletonI
     // Finally, deal with the remaining input data.
     AlignFrame af = null;
 
-    if (file != null)
+    JalviewJSApp jsApp = (isJS ? new JalviewJSApp(this, aparser) : null);
+
+    if (file == null)
+    {
+      if (isJS)
+      {
+        // JalviewJS allows sequence1 sequence2 ....
+        
+      }
+      else if (!headless && Cache.getDefault("SHOW_STARTUP_FILE", true))
+      /**
+       * Java only
+       * 
+       * @j2sIgnore
+       */
+      {
+
+        // We'll only open the default file if the desktop is visible.
+        // And the user
+        // ////////////////////
+
+        file = Cache.getDefault("STARTUP_FILE",
+                Cache.getDefault("www.jalview.org",
+                        "http://www.jalview.org")
+                        + "/examples/exampleFile_2_7.jar");
+        if (file.equals(
+                "http://www.jalview.org/examples/exampleFile_2_3.jar"))
+        {
+          // hardwire upgrade of the startup file
+          file.replace("_2_3.jar", "_2_7.jar");
+          // and remove the stale setting
+          Cache.removeProperty("STARTUP_FILE");
+        }
+
+        protocol = DataSourceType.FILE;
+
+        if (file.indexOf("http:") > -1)
+        {
+          protocol = DataSourceType.URL;
+        }
+
+        if (file.endsWith(".jar"))
+        {
+          format = FileFormat.Jalview;
+        }
+        else
+        {
+          try
+          {
+            format = new IdentifyFile().identify(file, protocol);
+          } catch (FileFormatException e)
+          {
+            // TODO what?
+          }
+        }
+        af = fileLoader.LoadFileWaitTillLoaded(file, protocol, format);
+      }
+    }
+    else
     {
       if (!headless)
       {
@@ -613,6 +679,7 @@ public class Jalview implements ApplicationSingletonI
           }
         }
       }
+      
       String fileFormat = (isJS
               ? (String) aparser.getAppletValue("format", null, true)
               : null);
@@ -631,35 +698,11 @@ public class Jalview implements ApplicationSingletonI
         // TODO ?
       }
 
-      if (aparser.contains(ArgsParser.NOMENUBAR))
-      {
-        noMenuBar = true;
-        System.out.println("CMD [nomenu] executed successfully!");
-      }
-
-      if (aparser.contains(ArgsParser.NOSTATUS))
-      {
-        noStatus = true;
-        System.out.println("CMD [nostatus] executed successfully!");
-      }
-
-      if (aparser.contains(ArgsParser.NOANNOTATION)
-              || aparser.contains(ArgsParser.NOANNOTATION2))
-      {
-        noAnnotation = true;
-        System.out.println("CMD no-annotation executed successfully!");
-      }
-      if (aparser.contains(ArgsParser.NOCALCULATION))
-      {
-        noCalculation = true;
-        System.out.println("CMD [nocalculation] executed successfully!");
-      }
-
       af = new FileLoader(!headless).LoadFileWaitTillLoaded(file, protocol,
               format);
       if (af == null)
       {
-        System.out.println("error");
+        System.out.println("jalview error - AlignFrame was not created");
       }
       else
       {
@@ -694,133 +737,11 @@ public class Jalview implements ApplicationSingletonI
         }
         setCurrentAlignFrame(af);
 
-        String data = aparser.getValue(ArgsParser.COLOUR, true);
-        if (data != null)
-        {
-          data.replaceAll("%20", " ");
-
-          ColourSchemeI cs = ColourSchemeProperty.getColourScheme(
-                  af.getViewport(), af.getViewport().getAlignment(), data);
-
-          if (cs != null)
-          {
-            System.out.println(
-                    "CMD [-color " + data + "] executed successfully!");
-          }
-          af.changeColour(cs);
-        }
-
-        // Must maintain ability to use the groups flag
-        data = aparser.getValue(ArgsParser.GROUPS, true);
-        if (data != null)
-        {
-          af.parseFeaturesFile(data,
-                  AppletFormatAdapter.checkProtocol(data));
-          // System.out.println("Added " + data);
-          System.out.println(
-                  "CMD groups[-" + data + "]  executed successfully!");
-        }
-        data = aparser.getValue(ArgsParser.FEATURES, true);
-        if (data != null)
-        {
-          af.parseFeaturesFile(data,
-                  AppletFormatAdapter.checkProtocol(data));
-          // System.out.println("Added " + data);
-          System.out.println(
-                  "CMD [-features " + data + "]  executed successfully!");
-        }
-        data = aparser.getValue(ArgsParser.ANNOTATIONS, true);
-        if (data != null)
-        {
-          af.loadJalviewDataFile(data, null, null, null);
-          // System.out.println("Added " + data);
-          System.out.println(
-                  "CMD [-annotations " + data + "] executed successfully!");
-        }
-
-        // JavaScript feature
-
-        if (aparser.contains(ArgsParser.SHOWOVERVIEW))
-        {
-          af.overviewMenuItem_actionPerformed(null);
-          System.out.println("CMD [showoverview] executed successfully!");
-        }
-
-        // set or clear the sortbytree flag.
-        if (aparser.contains(ArgsParser.SORTBYTREE))
-        {
-          af.getViewport().setSortByTree(true);
-          if (af.getViewport().getSortByTree())
-          {
-            System.out.println("CMD [-sortbytree] executed successfully!");
-          }
-        }
-
-        boolean doUpdateAnnotation = false;
-        /**
-         * we do this earlier in JalviewJS because of a complication with
-         * SHOWOVERVIEW
-         * 
-         * For now, just fixing this in JalviewJS.
-         *
-         * 
-         * @j2sIgnore
-         * 
-         */
-        {
-          if (aparser.contains(ArgsParser.NOANNOTATION)
-                  || aparser.contains(ArgsParser.NOANNOTATION2))
-          {
-            af.getViewport().setShowAnnotation(false);
-            if (!af.getViewport().isShowAnnotation())
-            {
-              doUpdateAnnotation = true;
-              System.out
-                      .println("CMD no-annotation executed successfully!");
-            }
-          }
-        }
-
-        if (aparser.contains(ArgsParser.NOSORTBYTREE))
-        {
-          af.getViewport().setSortByTree(false);
-          if (!af.getViewport().getSortByTree())
-          {
-            doUpdateAnnotation = true;
-            System.out
-                    .println("CMD [-nosortbytree] executed successfully!");
-          }
-        }
-        if (doUpdateAnnotation)
-        { // BH 2019.07.24
-          af.setMenusForViewport();
-          af.alignPanel.updateLayout();
-        }
-
-        data = aparser.getValue(ArgsParser.TREE, true);
-        if (data != null)
-        {
-          try
-          {
-            NewickFile nf = new NewickFile(data,
-                    AppletFormatAdapter.checkProtocol(data));
-            af.getViewport()
-                    .setCurrentTree(af.showNewickTree(nf, data).getTree());
-            System.out.println(
-                    "CMD [-tree " + data + "] executed successfully!");
-          } catch (IOException ex)
-          {
-            System.err.println("Couldn't add tree " + data);
-            ex.printStackTrace(System.err);
-          }
-        }
-        // TODO - load PDB structure(s) to alignment JAL-629
-        // (associate with identical sequence in alignment, or a specified
-        // sequence)
-
+        setFrameDependentProperties(aparser, af);
+        
         if (isJS)
         {
-          new JalviewJSApp(this, aparser, af);
+          jsApp.initFromParams(af);
         }
         else
         /**
@@ -840,61 +761,10 @@ public class Jalview implements ApplicationSingletonI
                     + "] executed successfully!");
             groovyscript = null;
           }
-          createOutputFiles(aparser, af, format);
-        }
-      }
-    }
-    else
-    {
-      if (!isJS && !headless && Cache.getDefault("SHOW_STARTUP_FILE", true))
-      /**
-       * Java only
-       * 
-       * @j2sIgnore
-       */
-      {
-
-        // We'll only open the default file if the desktop is visible.
-        // And the user
-        // ////////////////////
-
-        file = Cache.getDefault("STARTUP_FILE",
-                Cache.getDefault("www.jalview.org",
-                        "http://www.jalview.org")
-                        + "/examples/exampleFile_2_7.jar");
-        if (file.equals(
-                "http://www.jalview.org/examples/exampleFile_2_3.jar"))
-        {
-          // hardwire upgrade of the startup file
-          file.replace("_2_3.jar", "_2_7.jar");
-          // and remove the stale setting
-          Cache.removeProperty("STARTUP_FILE");
-        }
-
-        protocol = DataSourceType.FILE;
-
-        if (file.indexOf("http:") > -1)
-        {
-          protocol = DataSourceType.URL;
         }
-
-        if (file.endsWith(".jar"))
-        {
-          format = FileFormat.Jalview;
+        if (!isJS || !isStartup) {
+          createOutputFiles(aparser, format);
         }
-        else
-        {
-          try
-          {
-            format = new IdentifyFile().identify(file, protocol);
-          } catch (FileFormatException e)
-          {
-            // TODO what?
-          }
-        }
-
-        af = fileLoader.LoadFileWaitTillLoaded(file, protocol, format);
-
       }
     }
     // extract groovy arguments before anything else.
@@ -923,9 +793,170 @@ public class Jalview implements ApplicationSingletonI
       }
       desktop.setInBatchMode(false);
     }
-
+    
+    if (jsApp != null) {
+      jsApp.callInitCallback();
+    }
   }
   
+  /**
+   * Set general display parameters irrespective of file loading or headlessness.
+   * 
+   * @param aparser
+   */
+  private void setDisplayParameters(ArgsParser aparser)
+  {
+    if (aparser.contains(ArgsParser.NOMENUBAR))
+    {
+      noMenuBar = true;
+      System.out.println("CMD [nomenu] executed successfully!");
+    }
+
+    if (aparser.contains(ArgsParser.NOSTATUS))
+    {
+      noStatus = true;
+      System.out.println("CMD [nostatus] executed successfully!");
+    }
+
+    if (aparser.contains(ArgsParser.NOANNOTATION)
+            || aparser.contains(ArgsParser.NOANNOTATION2))
+    {
+      noAnnotation = true;
+      System.out.println("CMD no-annotation executed successfully!");
+    }
+    if (aparser.contains(ArgsParser.NOCALCULATION))
+    {
+      noCalculation = true;
+      System.out.println("CMD [nocalculation] executed successfully!");
+    }
+  }
+
+
+  private void setFrameDependentProperties(ArgsParser aparser,
+          AlignFrame af)
+  {
+    String data = aparser.getValue(ArgsParser.COLOUR, true);
+    if (data != null)
+    {
+      data.replaceAll("%20", " ");
+
+      ColourSchemeI cs = ColourSchemeProperty.getColourScheme(
+              af.getViewport(), af.getViewport().getAlignment(), data);
+
+      if (cs != null)
+      {
+        System.out.println(
+                "CMD [-color " + data + "] executed successfully!");
+      }
+      af.changeColour(cs);
+    }
+
+    // Must maintain ability to use the groups flag
+    data = aparser.getValue(ArgsParser.GROUPS, true);
+    if (data != null)
+    {
+      af.parseFeaturesFile(data,
+              AppletFormatAdapter.checkProtocol(data));
+      // System.out.println("Added " + data);
+      System.out.println(
+              "CMD groups[-" + data + "]  executed successfully!");
+    }
+    data = aparser.getValue(ArgsParser.FEATURES, true);
+    if (data != null)
+    {
+      af.parseFeaturesFile(data,
+              AppletFormatAdapter.checkProtocol(data));
+      // System.out.println("Added " + data);
+      System.out.println(
+              "CMD [-features " + data + "]  executed successfully!");
+    }
+    data = aparser.getValue(ArgsParser.ANNOTATIONS, true);
+    if (data != null)
+    {
+      af.loadJalviewDataFile(data, null, null, null);
+      // System.out.println("Added " + data);
+      System.out.println(
+              "CMD [-annotations " + data + "] executed successfully!");
+    }
+
+    // JavaScript feature
+
+    if (aparser.contains(ArgsParser.SHOWOVERVIEW))
+    {
+      af.overviewMenuItem_actionPerformed(null);
+      System.out.println("CMD [showoverview] executed successfully!");
+    }
+
+    // set or clear the sortbytree flag.
+    if (aparser.contains(ArgsParser.SORTBYTREE))
+    {
+      af.getViewport().setSortByTree(true);
+      if (af.getViewport().getSortByTree())
+      {
+        System.out.println("CMD [-sortbytree] executed successfully!");
+      }
+    }
+
+    boolean doUpdateAnnotation = false;
+    /**
+     * we do this earlier in JalviewJS because of a complication with
+     * SHOWOVERVIEW
+     * 
+     * For now, just fixing this in JalviewJS.
+     *
+     * 
+     * @j2sIgnore
+     * 
+     */
+    {
+      if (noAnnotation)
+      {
+        af.getViewport().setShowAnnotation(false);
+        if (!af.getViewport().isShowAnnotation())
+        {
+          doUpdateAnnotation = true;
+        }
+      }
+    }
+
+    if (aparser.contains(ArgsParser.NOSORTBYTREE))
+    {
+      af.getViewport().setSortByTree(false);
+      if (!af.getViewport().getSortByTree())
+      {
+        doUpdateAnnotation = true;
+        System.out
+                .println("CMD [-nosortbytree] executed successfully!");
+      }
+    }
+    if (doUpdateAnnotation)
+    { // BH 2019.07.24
+      af.setMenusForViewport();
+      af.alignPanel.updateLayout();
+    }
+
+    data = aparser.getValue(ArgsParser.TREE, true);
+    if (data != null)
+    {
+      try
+      {
+        NewickFile nf = new NewickFile(data,
+                AppletFormatAdapter.checkProtocol(data));
+        af.getViewport()
+                .setCurrentTree(af.showNewickTree(nf, data).getTree());
+        System.out.println(
+                "CMD [-tree " + data + "] executed successfully!");
+      } catch (IOException ex)
+      {
+        System.err.println("Couldn't add tree " + data);
+        ex.printStackTrace(System.err);
+      }
+    }
+    // TODO - load PDB structure(s) to alignment JAL-629
+    // (associate with identical sequence in alignment, or a specified
+    // sequence)
+
+  }
 
   /**
    * Writes an output file for each format (if any) specified in the
@@ -943,12 +974,12 @@ public class Jalview implements ApplicationSingletonI
    * corresponding alignment image output.
    * 
    * @param aparser
-   * @param af
    * @param format
    */
-  private void createOutputFiles(ArgsParser aparser, AlignFrame af,
+  private void createOutputFiles(ArgsParser aparser,
           FileFormatI format)
   {
+    AlignFrame af = currentAlignFrame;
     while (aparser.getSize() >= 2)
     {
       String outputFormat = aparser.nextValue();
@@ -1265,5 +1296,18 @@ public class Jalview implements ApplicationSingletonI
     // System.out.println("Jalview worker " + worker.getClass().getSimpleName()
     // + " " + status);
   }
-  
+
+
+  private static boolean isInteractive = true;
+
+  public static boolean isInteractive()
+  {
+    return isInteractive;
+  }
+
+  public static void setInteractive(boolean tf)
+  {
+    isInteractive = tf;
+  }
+
 }