X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalview.java;h=cf73c81030be4e11c7bd22bd25413f5d9a188360;hb=ec24991b1786e17158a43f713c8ae9c4f8647393;hp=9e488dc2b5c471e37a8cbe9fb3488fc539c83f6e;hpb=2e59bc7938c0f10bde61fd30d1841bedb3d8319e;p=jalview.git diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index 9e488dc..cf73c81 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -39,7 +39,9 @@ import java.security.CodeSource; import java.security.PermissionCollection; import java.security.Permissions; import java.security.Policy; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; @@ -65,6 +67,7 @@ import com.threerings.getdown.util.LaunchUtil; import groovy.lang.Binding; import groovy.util.GroovyScriptEngine; import jalview.bin.argparser.Arg; +import jalview.bin.argparser.Arg.Opt; import jalview.bin.argparser.ArgParser; import jalview.bin.argparser.BootstrapArgs; import jalview.ext.so.SequenceOntology; @@ -131,6 +134,17 @@ public class Jalview public static AlignFrame currentAlignFrame; + public ArgParser argparser = null; + + public BootstrapArgs bootstrapArgs = null; + + private boolean QUIET = false; + + public static boolean quiet() + { + return Jalview.getInstance() != null && Jalview.getInstance().QUIET; + } + static { if (!Platform.isJS()) @@ -281,41 +295,26 @@ public class Jalview */ void doMain(String[] args) { - if (!Platform.isJS()) { System.setSecurityManager(null); } - // Move any new getdown-launcher-new.jar into place over old - // getdown-launcher.jar - String appdirString = System.getProperty("getdownappdir"); - if (appdirString != null && appdirString.length() > 0) - { - final File appdir = new File(appdirString); - new Thread() - { - @Override - public void run() - { - LaunchUtil.upgradeGetdown( - new File(appdir, "getdown-launcher-old.jar"), - new File(appdir, "getdown-launcher.jar"), - new File(appdir, "getdown-launcher-new.jar")); - } - }.start(); - } + if (args == null) + args = new String[] {}; // get args needed before proper ArgParser - BootstrapArgs bootstrapArgs = BootstrapArgs.getBootstrapArgs(args); + bootstrapArgs = BootstrapArgs.getBootstrapArgs(args); if (!Platform.isJS()) { // are we being --quiet ? if (bootstrapArgs.contains(Arg.QUIET)) { + QUIET = true; OutputStream devNull = new OutputStream() { + @Override public void write(int b) { @@ -329,29 +328,57 @@ public class Jalview System.setErr(new PrintStream(devNull)); } } - } - 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.getProperty("os.name") + " " - + System.getProperty("os.version")); - - String val = System.getProperty("sys.install4jVersion"); - if (val != null) - { - System.out.println("Install4j version: " + val); + if (bootstrapArgs.contains(Arg.HELP) + || bootstrapArgs.contains(Arg.VERSION)) + { + QUIET = true; + } } - val = System.getProperty("installer_template_version"); - if (val != null) + + // Move any new getdown-launcher-new.jar into place over old + // getdown-launcher.jar + String appdirString = System.getProperty("getdownappdir"); + if (appdirString != null && appdirString.length() > 0) { - System.out.println("Install4j template version: " + val); + final File appdir = new File(appdirString); + new Thread() + { + @Override + public void run() + { + LaunchUtil.upgradeGetdown( + new File(appdir, "getdown-launcher-old.jar"), + new File(appdir, "getdown-launcher.jar"), + new File(appdir, "getdown-launcher-new.jar")); + } + }.start(); } - val = System.getProperty("launcher_version"); - if (val != null) + + if (!quiet() || bootstrapArgs.contains(Arg.VERSION)) { - System.out.println("Launcher version: " + val); + System.out.println( + "Java version: " + System.getProperty("java.version")); + 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")); + + String val = System.getProperty("sys.install4jVersion"); + if (val != null) + { + System.out.println("Install4j version: " + val); + } + val = System.getProperty("installer_template_version"); + if (val != null) + { + System.out.println("Install4j template version: " + val); + } + val = System.getProperty("launcher_version"); + if (val != null) + { + System.out.println("Launcher version: " + val); + } } if (Platform.isLinux() && LaunchUtils.getJavaVersion() < 11) @@ -364,7 +391,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); @@ -376,7 +410,15 @@ public class Jalview try { - String logLevel = bootstrapArgs.contains(Arg.DEBUG) ? "DEBUG" : null; + String logLevel = null; + if (bootstrapArgs.contains(Arg.TRACE)) + { + logLevel = "TRACE"; + } + else if (bootstrapArgs.contains(Arg.DEBUG)) + { + logLevel = "DEBUG"; + } if (logLevel == null && !(bootstrapProperties == null)) { logLevel = bootstrapProperties.getProperty(Cache.JALVIEWLOGLEVEL); @@ -416,24 +458,30 @@ public class Jalview String usrPropsFile = bootstrapArgs.contains(Arg.PROPS) ? bootstrapArgs.get(Arg.PROPS) : aparser.getValue("props"); + // if usrPropsFile == null, loadProperties will use the Channel + // preferences.file + Cache.loadProperties(usrPropsFile); if (usrPropsFile != null) { - Cache.loadProperties(usrPropsFile); System.out.println( "CMD [-props " + usrPropsFile + "] executed successfully!"); + testoutput(bootstrapArgs, Arg.PROPS, + "test/jalview/bin/testProps.jvprops", usrPropsFile); } - // new ArgParser - ArgParser argparser; // --argfile=... -- OVERRIDES ALL NON-BOOTSTRAP ARGS if (bootstrapArgs.contains(Arg.ARGFILE)) { - argparser = ArgParser - .parseArgFiles(bootstrapArgs.getList(Arg.ARGFILE)); + argparser = ArgParser.parseArgFiles( + bootstrapArgs.getList(Arg.ARGFILE), + bootstrapArgs.getBoolean(Arg.INITSUBSTITUTIONS), + bootstrapArgs); } else { - argparser = new ArgParser(args); + argparser = new ArgParser(args, + bootstrapArgs.getBoolean(Arg.INITSUBSTITUTIONS), + bootstrapArgs); } if (!Platform.isJS()) @@ -443,10 +491,18 @@ public class Jalview * @j2sIgnore */ { - if (aparser.contains("help") || aparser.contains("h") - || argparser.getBool(Arg.HELP)) + if (bootstrapArgs.contains(Arg.HELP)) { + System.out.println(Arg.usage()); + 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); } @@ -454,7 +510,7 @@ public class Jalview { System.setProperty("java.awt.headless", "true"); // new - headlessArg = argparser.getBool(Arg.HEADLESS); + headlessArg = bootstrapArgs.getBoolean(Arg.HEADLESS); } if (aparser.contains("nodisplay") || aparser.contains("nogui") || aparser.contains("headless")) @@ -468,7 +524,9 @@ public class Jalview // allow https handshakes to download intermediate certs if necessary System.setProperty("com.sun.security.enableAIAcaIssuers", "true"); - final String jabawsUrl = aparser.getValue("jabaws"); + String jabawsUrl = bootstrapArgs.get(Arg.JABAWS); + if (jabawsUrl == null) + jabawsUrl = aparser.getValue("jabaws"); if (jabawsUrl != null) { try @@ -476,6 +534,8 @@ public class Jalview Jws2Discoverer.getDiscoverer().setPreferredUrl(jabawsUrl); System.out.println( "CMD [-jabaws " + jabawsUrl + "] executed successfully!"); + testoutput(bootstrapArgs, Arg.JABAWS, + "http://www.compbio.dundee.ac.uk/jabaws", jabawsUrl); } catch (MalformedURLException e) { System.err.println( @@ -484,26 +544,40 @@ public class Jalview } } - String defs = aparser.getValue("setprop"); - while (defs != null) + List setprops = new ArrayList<>(); + if (bootstrapArgs.contains(Arg.SETPROP)) { - int p = defs.indexOf('='); + setprops = bootstrapArgs.getList(Arg.SETPROP); + } + else + { + String sp = aparser.getValue("setprop"); + while (sp != null) + { + setprops.add(sp); + sp = aparser.getValue("setprop"); + } + } + for (String setprop : setprops) + { + int p = setprop.indexOf('='); if (p == -1) { - System.err.println("Ignoring invalid setprop argument : " + defs); + System.err + .println("Ignoring invalid setprop argument : " + setprop); } else { - System.out.println("Executing setprop argument: " + defs); + System.out.println("Executing setprop argument: " + setprop); if (Platform.isJS()) { - Cache.setProperty(defs.substring(0, p), defs.substring(p + 1)); + Cache.setProperty(setprop.substring(0, p), + setprop.substring(p + 1)); } // DISABLED FOR SECURITY REASONS // TODO: add a property to allow properties to be overriden by cli args - // Cache.setProperty(defs.substring(0,p), defs.substring(p+1)); + // Cache.setProperty(setprop.substring(0,p), setprop.substring(p+1)); } - defs = aparser.getValue("setprop"); } if (System.getProperty("java.awt.headless") != null && System.getProperty("java.awt.headless").equals("true")) @@ -542,7 +616,9 @@ public class Jalview if (!(headless || headlessArg)) { - Desktop.nosplash = aparser.contains("nosplash"); + Desktop.nosplash = "false".equals(bootstrapArgs.get(Arg.SPLASH)) + || aparser.contains("nosplash") + || Cache.getDefault("SPLASH", "true").equals("false"); desktop = new Desktop(); desktop.setInBatchMode(true); // indicate we are starting up @@ -602,20 +678,37 @@ public class Jalview } } - if (!aparser.contains("nowebservicediscovery")) + boolean webservicediscovery = bootstrapArgs + .getBoolean(Arg.WEBSERVICEDISCOVERY); + if (aparser.contains("nowebservicediscovery")) + webservicediscovery = false; + if (webservicediscovery) { desktop.startServiceDiscovery(); } - if (!aparser.contains("nousagestats")) + else + { + testoutput(argparser, Arg.WEBSERVICEDISCOVERY); + } + + boolean usagestats = bootstrapArgs.getBoolean(Arg.USAGESTATS); + if (aparser.contains("nousagestats")) + usagestats = false; + if (usagestats) { startUsageStats(desktop); + testoutput(argparser, Arg.USAGESTATS); } else { - System.err.println("CMD [-nousagestats] executed successfully!"); + System.out.println("CMD [-nousagestats] executed successfully!"); + testoutput(argparser, Arg.USAGESTATS); } - if (!aparser.contains("noquestionnaire")) + boolean questionnaire = bootstrapArgs.getBoolean(Arg.QUESTIONNAIRE); + if (aparser.contains("noquestionnaire")) + questionnaire = false; + if (questionnaire) { String url = aparser.getValue("questionnaire"); if (url != null) @@ -645,18 +738,21 @@ public class Jalview } else { - System.err + System.out .println("CMD [-noquestionnaire] executed successfully!"); + testoutput(argparser, Arg.QUESTIONNAIRE); } - if (!aparser.contains("nonews") - || Cache.getProperty("NONEWS") == null) + if ((!aparser.contains("nonews") + && Cache.getProperty("NONEWS") == null + && !"false".equals(bootstrapArgs.get(Arg.NEWS))) + || "true".equals(bootstrapArgs.get(Arg.NEWS))) { desktop.checkForNews(); } if (!aparser.contains("nohtmltemplates") - || Cache.getProperty("NOHTMLTEMPLATES") == null) + && Cache.getProperty("NOHTMLTEMPLATES") == null) { BioJsHTMLOutput.updateBioJS(); } @@ -1448,7 +1544,7 @@ public class Jalview * the Jalview Desktop object passed in to the groovy binding as the * 'Jalview' object. */ - private void executeGroovyScript(String groovyscript, AlignFrame af) + protected void executeGroovyScript(String groovyscript, AlignFrame af) { /** * for scripts contained in files @@ -1609,4 +1705,111 @@ public class Jalview if (exitcode > -1) System.exit(exitcode); } + + /* + * testoutput for string values + */ + protected static void testoutput(ArgParser ap, Arg a, String s1, + String s2) + { + BootstrapArgs bsa = ap.getBootstrapArgs(); + if (!bsa.getBoolean(Arg.TESTOUTPUT)) + return; + if (!((s1 == null && s2 == null) || (s1 != null && s1.equals(s2)))) + { + Console.debug("testoutput with unmatching values '" + s1 + "' and '" + + s2 + "' for arg " + a.argString()); + return; + } + boolean isset = a.hasOption(Opt.BOOTSTRAP) ? bsa.contains(a) + : ap.isSet(a); + if (!isset) + { + Console.warn("Arg '" + a.getName() + "' not set at all"); + return; + } + testoutput(true, a, s1, s2); + } + + protected static void testoutput(BootstrapArgs bsa, Arg a, String s1, + String s2) + { + if (!bsa.getBoolean(Arg.TESTOUTPUT)) + return; + if (!((s1 == null && s2 == null) || (s1 != null && s1.equals(s2)))) + { + Console.debug("testoutput with unmatching values '" + s1 + "' and '" + + s2 + "' for arg " + a.argString()); + return; + } + if (!a.hasOption(Opt.BOOTSTRAP)) + { + Console.error("Non-bootstrap Arg '" + a.getName() + + "' given to testoutput(BootstrapArgs bsa, Arg a, String s1, String s2) with only BootstrapArgs"); + } + if (!bsa.contains(a)) + { + Console.warn("Arg '" + a.getName() + "' not set at all"); + return; + } + testoutput(true, a, s1, s2); + } + + private static void testoutput(boolean yes, Arg a, String s1, String s2) + { + if (yes && ((s1 == null && s2 == null) + || (s1 != null && s1.equals(s2)))) + { + System.out.println("[TESTOUTPUT] arg " + a.argString() + "='" + s1 + + "' was set"); + } + } + + /* + * testoutput for boolean values + */ + protected static void testoutput(ArgParser ap, Arg a) + { + if (ap == null) + return; + BootstrapArgs bsa = ap.getBootstrapArgs(); + if (bsa == null) + return; + if (!bsa.getBoolean(Arg.TESTOUTPUT)) + return; + boolean val = a.hasOption(Opt.BOOTSTRAP) ? bsa.getBoolean(a) + : ap.getBoolean(a); + boolean isset = a.hasOption(Opt.BOOTSTRAP) ? bsa.contains(a) + : ap.isSet(a); + if (!isset) + { + Console.warn("Arg '" + a.getName() + "' not set at all"); + return; + } + testoutput(val, a); + } + + protected static void testoutput(BootstrapArgs bsa, Arg a) + { + if (!bsa.getBoolean(Arg.TESTOUTPUT)) + return; + if (!a.hasOption(Opt.BOOTSTRAP)) + { + Console.warn("Non-bootstrap Arg '" + a.getName() + + "' given to testoutput(BootstrapArgs bsa, Arg a) with only BootstrapArgs"); + + } + if (!bsa.contains(a)) + { + Console.warn("Arg '" + a.getName() + "' not set at all"); + return; + } + testoutput(bsa.getBoolean(a), a); + } + + private static void testoutput(boolean yes, Arg a) + { + System.out.println("[TESTOUTPUT] arg " + + (yes ? a.argString() : a.negateArgString()) + " was set"); + } }