JAL-4160 JAL-3830 Improve jalview.bin.Launcher for launcher script launch with new...
[jalview.git] / src / jalview / bin / Jalview.java
index 09d83ce..59382fd 100755 (executable)
@@ -49,6 +49,7 @@ import java.util.Vector;
 import java.util.logging.ConsoleHandler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.stream.Collectors;
 
 import javax.swing.JDialog;
 import javax.swing.JFrame;
@@ -68,6 +69,7 @@ import groovy.lang.Binding;
 import groovy.util.GroovyScriptEngine;
 import jalview.bin.argparser.Arg;
 import jalview.bin.argparser.Arg.Opt;
+import jalview.bin.argparser.Arg.Type;
 import jalview.bin.argparser.ArgParser;
 import jalview.bin.argparser.BootstrapArgs;
 import jalview.ext.so.SequenceOntology;
@@ -140,9 +142,9 @@ public class Jalview
 
   private boolean QUIET = false;
 
-  public boolean quiet()
+  public static boolean quiet()
   {
-    return QUIET;
+    return Jalview.getInstance() != null && Jalview.getInstance().QUIET;
   }
 
   static
@@ -300,8 +302,11 @@ public class Jalview
       System.setSecurityManager(null);
     }
 
-    if (args == null)
+    if (args == null || args.length == 0 || (args.length == 1
+            && (args[0] == null || args[0].length() == 0)))
+    {
       args = new String[] {};
+    }
 
     // get args needed before proper ArgParser
     bootstrapArgs = BootstrapArgs.getBootstrapArgs(args);
@@ -329,7 +334,8 @@ public class Jalview
         }
       }
 
-      if (bootstrapArgs.contains(Arg.HELP))
+      if (bootstrapArgs.contains(Arg.HELP)
+              || bootstrapArgs.contains(Arg.VERSION))
       {
         QUIET = true;
       }
@@ -343,6 +349,7 @@ public class Jalview
       final File appdir = new File(appdirString);
       new Thread()
       {
+
         @Override
         public void run()
         {
@@ -354,12 +361,12 @@ public class Jalview
       }.start();
     }
 
-    if (!quiet())
+    if (!quiet() || bootstrapArgs.contains(Arg.VERSION))
     {
       System.out.println(
               "Java version: " + System.getProperty("java.version"));
-      System.out.println("Java Home: " + System.getProperty("java.home"));
-      System.out.println(System.getProperty("os.arch") + " "
+      System.out.println("Java home: " + System.getProperty("java.home"));
+      System.out.println("Java arch: " + System.getProperty("os.arch") + " "
               + System.getProperty("os.name") + " "
               + System.getProperty("os.version"));
 
@@ -390,7 +397,14 @@ public class Jalview
             .bootstrapProperties(bootstrapArgs.get(Arg.PROPS));
 
     // report Jalview version
-    Cache.loadBuildProperties(true);
+    Cache.loadBuildProperties(
+            !quiet() || bootstrapArgs.contains(Arg.VERSION));
+
+    // stop now if only after --version
+    if (bootstrapArgs.contains(Arg.VERSION))
+    {
+      Jalview.exit(null, 0);
+    }
 
     // old ArgsParser
     ArgsParser aparser = new ArgsParser(args);
@@ -465,7 +479,7 @@ public class Jalview
     if (bootstrapArgs.contains(Arg.ARGFILE))
     {
       argparser = ArgParser.parseArgFiles(
-              bootstrapArgs.getList(Arg.ARGFILE),
+              bootstrapArgs.getValueList(Arg.ARGFILE),
               bootstrapArgs.getBoolean(Arg.INITSUBSTITUTIONS),
               bootstrapArgs);
     }
@@ -485,12 +499,19 @@ public class Jalview
     {
       if (bootstrapArgs.contains(Arg.HELP))
       {
-        System.out.println(Arg.usage());
+        List<Map.Entry<Type, String>> helpArgs = bootstrapArgs
+                .getList(Arg.HELP);
+        System.out.println(Arg.usage(helpArgs.stream().map(e -> e.getKey())
+                .collect(Collectors.toList())));
         Jalview.exit(null, 0);
       }
       if (aparser.contains("help") || aparser.contains("h"))
       {
+        /*
+         * Now using new usage statement.
         showUsage();
+        */
+        System.out.println(Arg.usage());
         Jalview.exit(null, 0);
       }
 
@@ -535,7 +556,7 @@ public class Jalview
     List<String> setprops = new ArrayList<>();
     if (bootstrapArgs.contains(Arg.SETPROP))
     {
-      setprops = bootstrapArgs.getList(Arg.SETPROP);
+      setprops = bootstrapArgs.getValueList(Arg.SETPROP);
     }
     else
     {
@@ -1684,14 +1705,40 @@ public class Jalview
 
   public static void exit(String message, int exitcode)
   {
-    Console.debug("Using Jalview.exit");
-    if (message != null)
-      if (exitcode == 0)
-        Console.info(message);
-      else
-        Console.error(message);
+    if (Console.log == null)
+    {
+      // Don't start the logger just to exit!
+      if (message != null)
+      {
+        if (exitcode == 0)
+        {
+          System.out.println(message);
+        }
+        else
+        {
+          System.err.println(message);
+        }
+      }
+    }
+    else
+    {
+      Console.debug("Using Jalview.exit");
+      if (message != null)
+      {
+        if (exitcode == 0)
+        {
+          Console.info(message);
+        }
+        else
+        {
+          Console.error(message);
+        }
+      }
+    }
     if (exitcode > -1)
+    {
       System.exit(exitcode);
+    }
   }
 
   /*