X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalview.java;h=cfcc2f7f89078df68bae18b83cc135e8b09c96ae;hb=59335e0ce3c6c5e84efd9a31c42aab43a6e17814;hp=a5cf48f8cae72881af76037484afe718dcfa70cf;hpb=9127252ea6d58c1ddf67507ed5d51c443240f250;p=jalview.git
diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java
index a5cf48f..cfcc2f7 100755
--- a/src/jalview/bin/Jalview.java
+++ b/src/jalview/bin/Jalview.java
@@ -20,27 +20,6 @@
*/
package jalview.bin;
-import jalview.ext.so.SequenceOntology;
-import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
-import jalview.gui.PromptUserConfig;
-import jalview.io.AppletFormatAdapter;
-import jalview.io.BioJsHTMLOutput;
-import jalview.io.DataSourceType;
-import jalview.io.FileFormat;
-import jalview.io.FileFormatException;
-import jalview.io.FileFormatI;
-import jalview.io.FileLoader;
-import jalview.io.HtmlSvgOutput;
-import jalview.io.IdentifyFile;
-import jalview.io.NewickFile;
-import jalview.io.gff.SequenceOntologyFactory;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.ColourSchemeProperty;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.ws.jws2.Jws2Discoverer;
-
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
@@ -60,6 +39,9 @@ import java.security.Policy;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
@@ -68,6 +50,26 @@ import com.threerings.getdown.util.LaunchUtil;
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
+import jalview.ext.so.SequenceOntology;
+import jalview.gui.AlignFrame;
+import jalview.gui.Desktop;
+import jalview.gui.PromptUserConfig;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.BioJsHTMLOutput;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormat;
+import jalview.io.FileFormatException;
+import jalview.io.FileFormatI;
+import jalview.io.FileLoader;
+import jalview.io.HtmlSvgOutput;
+import jalview.io.IdentifyFile;
+import jalview.io.NewickFile;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeProperty;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.ws.jws2.Jws2Discoverer;
/**
* Main class for Jalview Application
@@ -86,9 +88,13 @@ import groovy.util.GroovyScriptEngine;
*/
public class Jalview
{
- /*
- * singleton instance of this class
- */
+ static
+ {
+ Platform.getURLCommandArguments();
+ }
+
+ // singleton instance of this class
+
private static Jalview instance;
private Desktop desktop;
@@ -97,22 +103,30 @@ public class Jalview
static
{
- // grab all the rights we can the JVM
- Policy.setPolicy(new Policy()
+ if (!Platform.isJS())
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
- @Override
- public PermissionCollection getPermissions(CodeSource codesource)
+ // grab all the rights we can for the JVM
+ Policy.setPolicy(new Policy()
{
- Permissions perms = new Permissions();
- perms.add(new AllPermission());
- return (perms);
- }
+ @Override
+ public PermissionCollection getPermissions(CodeSource codesource)
+ {
+ Permissions perms = new Permissions();
+ perms.add(new AllPermission());
+ return (perms);
+ }
- @Override
- public void refresh()
- {
- }
- });
+ @Override
+ public void refresh()
+ {
+ }
+ });
+ }
}
/**
@@ -183,32 +197,87 @@ public class Jalview
* main class for Jalview application
*
* @param args
- * open filename
+ * open filename
*/
public static void main(String[] args)
{
+ // setLogging(); // BH - for event debugging in JavaScript
instance = new Jalview();
instance.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);
+ }
+
+ @SuppressWarnings("unused")
+ private static void setLogging()
+ {
+
+ /**
+ * @j2sIgnore
+ *
+ */
+ {
+ System.out.println("not in js");
+ }
+
+ // 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");
+ }
+
+ }
+
/**
* @param args
*/
void doMain(String[] args)
{
- System.setSecurityManager(null);
+
+ if (!Platform.isJS())
+ {
+ System.setSecurityManager(null);
+ }
+
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"));
- System.out.println("Install4j version: "
- + System.getProperty("sys.install4jVersion"));
- System.out.println("Install4j template version: "
- + System.getProperty("installer_template_version"));
- System.out.println(
- "Launcher version: " + System.getProperty("launcher_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);
+ }
// report Jalview version
Cache.loadBuildProperties(true);
@@ -216,17 +285,6 @@ public class Jalview
ArgsParser aparser = new ArgsParser(args);
boolean headless = false;
- if (aparser.contains("help") || aparser.contains("h"))
- {
- showUsage();
- System.exit(0);
- }
- if (aparser.contains("nodisplay") || aparser.contains("nogui")
- || aparser.contains("headless"))
- {
- System.setProperty("java.awt.headless", "true");
- headless = true;
- }
String usrPropsFile = aparser.getValue("props");
Cache.loadProperties(usrPropsFile); // must do this before
if (usrPropsFile != null)
@@ -235,23 +293,42 @@ public class Jalview
"CMD [-props " + usrPropsFile + "] executed successfully!");
}
- // anything else!
-
- final String jabawsUrl = aparser.getValue("jabaws");
- if (jabawsUrl != null)
+ if (!Platform.isJS())
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
- try
+ if (aparser.contains("help") || aparser.contains("h"))
{
- Jws2Discoverer.getDiscoverer().setPreferredUrl(jabawsUrl);
- System.out.println(
- "CMD [-jabaws " + jabawsUrl + "] executed successfully!");
- } catch (MalformedURLException e)
+ showUsage();
+ System.exit(0);
+ }
+ if (aparser.contains("nodisplay") || aparser.contains("nogui")
+ || aparser.contains("headless"))
{
- System.err.println(
- "Invalid jabaws parameter: " + jabawsUrl + " ignored");
+ System.setProperty("java.awt.headless", "true");
+ headless = true;
}
- }
+ // anything else!
+ final String jabawsUrl = aparser.getValue("jabaws");
+ if (jabawsUrl != null)
+ {
+ try
+ {
+ Jws2Discoverer.getDiscoverer().setPreferredUrl(jabawsUrl);
+ System.out.println(
+ "CMD [-jabaws " + jabawsUrl + "] executed successfully!");
+ } catch (MalformedURLException e)
+ {
+ System.err.println(
+ "Invalid jabaws parameter: " + jabawsUrl + " ignored");
+ }
+ }
+
+ }
String defs = aparser.getValue("setprop");
while (defs != null)
{
@@ -263,9 +340,10 @@ public class Jalview
else
{
System.out.println("Executing setprop argument: " + defs);
- // 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));
+ if (Platform.isJS())
+ {
+ Cache.setProperty(defs.substring(0, p), defs.substring(p + 1));
+ }
}
defs = aparser.getValue("setprop");
}
@@ -289,57 +367,60 @@ public class Jalview
desktop = null;
- try
- {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- } catch (Exception ex)
- {
- System.err.println("Unexpected Look and Feel Exception");
- ex.printStackTrace();
- }
- if (Platform.isAMac())
+ // property laf = "crossplatform", "system", "gtk" or "mac"
+ // If not set (or chosen laf fails), use the normal SystemLaF and if on Mac,
+ // try Quaqua/Vaqua.
+ String laf = System.getProperty("laf", "none");
+ boolean lafSet = false;
+ switch (laf)
{
-
- LookAndFeel lookAndFeel = ch.randelshofer.quaqua.QuaquaManager
- .getLookAndFeel();
- System.setProperty("com.apple.mrj.application.apple.menu.about.name",
- "Jalview");
- System.setProperty("apple.laf.useScreenMenuBar", "true");
- if (lookAndFeel != null)
+ case "crossplatform":
+ lafSet = setCrossPlatformLookAndFeel();
+ if (!lafSet)
{
- try
- {
- UIManager.setLookAndFeel(lookAndFeel);
- } catch (Throwable e)
- {
- System.err.println(
- "Failed to set QuaQua look and feel: " + e.toString());
- }
+ System.err.println("Could not set requested laf=" + laf);
}
- if (lookAndFeel == null
- || !(lookAndFeel.getClass().isAssignableFrom(
- UIManager.getLookAndFeel().getClass()))
- || !UIManager.getLookAndFeel().getClass().toString()
- .toLowerCase().contains("quaqua"))
+ break;
+ case "system":
+ lafSet = setSystemLookAndFeel();
+ if (!lafSet)
{
- try
- {
- System.err.println(
- "Quaqua LaF not available on this plaform. Using VAqua(4).\nSee https://issues.jalview.org/browse/JAL-2976");
- UIManager.setLookAndFeel("org.violetlib.aqua.AquaLookAndFeel");
- } catch (Throwable e)
- {
- System.err.println(
- "Failed to reset look and feel: " + e.toString());
- }
+ System.err.println("Could not set requested laf=" + laf);
+ }
+ break;
+ case "gtk":
+ lafSet = setGtkLookAndFeel();
+ {
+ System.err.println("Could not set requested laf=" + laf);
+ }
+ break;
+ case "mac":
+ lafSet = setMacLookAndFeel();
+ if (!lafSet)
+ {
+ System.err.println("Could not set requested laf=" + laf);
+ }
+ break;
+ case "none":
+ break;
+ default:
+ System.err.println("Requested laf=" + laf + " not implemented");
+ }
+ if (!lafSet)
+ {
+ setSystemLookAndFeel();
+ if (Platform.isAMacAndNotJS())
+ {
+ setMacLookAndFeel();
}
}
/*
- * configure 'full' SO model if preferences say to, else use the default (SO
- * Lite)
+ * configure 'full' SO model if preferences say to, else use the default (full SO)
+ * - as JS currently doesn't have OBO parsing, it must use 'Lite' version
*/
- if (Cache.getDefault("USE_FULL_SO", true))
+ boolean soDefault = !Platform.isJS();
+ if (Cache.getDefault("USE_FULL_SO", soDefault))
{
SequenceOntologyFactory.setInstance(new SequenceOntology());
}
@@ -352,66 +433,71 @@ public class Jalview
try
{
JalviewTaskbar.setTaskbar(this);
- } catch (Exception e)
- {
- System.out.println("Cannot set Taskbar");
- // e.printStackTrace();
} catch (Throwable t)
{
- System.out.println("Cannot set Taskbar");
- // t.printStackTrace();
+ System.out.println("Error setting Taskbar: " + t.getMessage());
}
desktop.setVisible(true);
- desktop.startServiceDiscovery();
- if (!aparser.contains("nousagestats"))
- {
- startUsageStats(desktop);
- }
- else
- {
- System.err.println("CMD [-nousagestats] executed successfully!");
- }
- if (!aparser.contains("noquestionnaire"))
+ if (!Platform.isJS())
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
- String url = aparser.getValue("questionnaire");
- if (url != null)
+ desktop.startServiceDiscovery();
+ if (!aparser.contains("nousagestats"))
{
- // Start the desktop questionnaire prompter with the specified
- // questionnaire
- Cache.log.debug("Starting questionnaire url at " + url);
- desktop.checkForQuestionnaire(url);
- System.out.println(
- "CMD questionnaire[-" + url + "] executed successfully!");
+ startUsageStats(desktop);
}
else
{
- if (Cache.getProperty("NOQUESTIONNAIRES") == null)
+ System.err.println("CMD [-nousagestats] executed successfully!");
+ }
+
+ if (!aparser.contains("noquestionnaire"))
+ {
+ String url = aparser.getValue("questionnaire");
+ if (url != null)
{
// Start the desktop questionnaire prompter with the specified
// questionnaire
- // String defurl =
- // "http://anaplog.compbio.dundee.ac.uk/cgi-bin/questionnaire.pl";
- // //
- String defurl = "http://www.jalview.org/cgi-bin/questionnaire.pl";
- Cache.log.debug(
- "Starting questionnaire with default url: " + defurl);
- desktop.checkForQuestionnaire(defurl);
+ Cache.log.debug("Starting questionnaire url at " + url);
+ desktop.checkForQuestionnaire(url);
+ System.out.println("CMD questionnaire[-" + url
+ + "] executed successfully!");
+ }
+ else
+ {
+ if (Cache.getProperty("NOQUESTIONNAIRES") == null)
+ {
+ // Start the desktop questionnaire prompter with the specified
+ // questionnaire
+ // String defurl =
+ // "http://anaplog.compbio.dundee.ac.uk/cgi-bin/questionnaire.pl";
+ // //
+ String defurl = "http://www.jalview.org/cgi-bin/questionnaire.pl";
+ Cache.log.debug(
+ "Starting questionnaire with default url: " + defurl);
+ desktop.checkForQuestionnaire(defurl);
+ }
}
}
- }
- else
- {
- System.err.println("CMD [-noquestionnaire] executed successfully!");
- }
+ else
+ {
+ System.err
+ .println("CMD [-noquestionnaire] executed successfully!");
+ }
- if (!aparser.contains("nonews"))
- {
- desktop.checkForNews();
- }
+ if (!aparser.contains("nonews"))
+ {
+ desktop.checkForNews();
+ }
- BioJsHTMLOutput.updateBioJS();
+ BioJsHTMLOutput.updateBioJS();
+ }
}
// Move any new getdown-launcher-new.jar into place over old
@@ -462,14 +548,23 @@ public class Jalview
}
System.out.println("CMD [-open " + file + "] executed successfully!");
- if (!file.startsWith("http://"))
+ if (!Platform.isJS())
+ /**
+ * ignore in JavaScript -- can't just file existence - could load it?
+ *
+ * @j2sIgnore
+ */
{
- if (!(new File(file)).exists())
+ if (!file.startsWith("http://") && !file.startsWith("https://"))
+ // BH 2019 added https check for Java
{
- System.out.println("Can't find " + file);
- if (headless)
+ if (!(new File(file)).exists())
{
- System.exit(1);
+ System.out.println("Can't find " + file);
+ if (headless)
+ {
+ System.exit(1);
+ }
}
}
}
@@ -660,7 +755,8 @@ public class Jalview
continue;
}
- if (af.saveAlignment(file, format))
+ af.saveAlignment(file, format);
+ if (af.isSaveAlignmentSuccessful())
{
System.out.println("Written alignment in " + format
+ " format to " + file);
@@ -684,12 +780,16 @@ public class Jalview
// And the user
// ////////////////////
- if (!headless && file == null
- && jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true))
+ if (!Platform.isJS() && !headless && file == null
+ && Cache.getDefault("SHOW_STARTUP_FILE", true))
+ /**
+ * Java only
+ *
+ * @j2sIgnore
+ */
{
- file = jalview.bin.Cache.getDefault("STARTUP_FILE",
- jalview.bin.Cache.getDefault("www.jalview.org",
- "http://www.jalview.org")
+ 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"))
@@ -697,7 +797,7 @@ public class Jalview
// hardwire upgrade of the startup file
file.replace("_2_3.jar", "_2_7.jar");
// and remove the stale setting
- jalview.bin.Cache.removeProperty("STARTUP_FILE");
+ Cache.removeProperty("STARTUP_FILE");
}
protocol = DataSourceType.FILE;
@@ -753,6 +853,94 @@ public class Jalview
}
}
+ private static boolean setCrossPlatformLookAndFeel()
+ {
+ boolean set = false;
+ try
+ {
+ UIManager.setLookAndFeel(
+ UIManager.getCrossPlatformLookAndFeelClassName());
+ set = true;
+ } catch (Exception ex)
+ {
+ System.err.println("Unexpected Look and Feel Exception");
+ ex.printStackTrace();
+ }
+ return set;
+ }
+
+ private static boolean setSystemLookAndFeel()
+ {
+ boolean set = false;
+ try
+ {
+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ set = true;
+ } catch (Exception ex)
+ {
+ System.err.println("Unexpected Look and Feel Exception");
+ ex.printStackTrace();
+ }
+ return set;
+ }
+
+ private static boolean setGtkLookAndFeel()
+ {
+ boolean set = false;
+ String laf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
+ try
+ {
+ UIManager.setLookAndFeel(laf);
+ set = true;
+ } catch (Exception ex)
+ {
+ System.err.println("Unexpected Look and Feel Exception");
+ ex.printStackTrace();
+ }
+ return set;
+ }
+
+ private static boolean setMacLookAndFeel()
+ {
+ boolean set = false;
+ LookAndFeel lookAndFeel = ch.randelshofer.quaqua.QuaquaManager
+ .getLookAndFeel();
+ System.setProperty("com.apple.mrj.application.apple.menu.about.name",
+ "Jalview");
+ System.setProperty("apple.laf.useScreenMenuBar", "true");
+ if (lookAndFeel != null)
+ {
+ try
+ {
+ UIManager.setLookAndFeel(lookAndFeel);
+ set = true;
+ } catch (Throwable e)
+ {
+ System.err.println(
+ "Failed to set QuaQua look and feel: " + e.toString());
+ }
+ }
+ if (lookAndFeel == null
+ || !(lookAndFeel.getClass().isAssignableFrom(
+ UIManager.getLookAndFeel().getClass()))
+ || !UIManager.getLookAndFeel().getClass().toString()
+ .toLowerCase().contains("quaqua"))
+ {
+ try
+ {
+ System.err.println(
+ "Quaqua LaF not available on this plaform. Using VAqua(4).\nSee https://issues.jalview.org/browse/JAL-2976");
+ UIManager.setLookAndFeel("org.violetlib.aqua.AquaLookAndFeel");
+ set = true;
+ } catch (Throwable e)
+ {
+ System.err
+ .println("Failed to reset look and feel: " + e.toString());
+ }
+ }
+ return set;
+ }
+
private static void showUsage()
{
System.out.println(
@@ -829,10 +1017,10 @@ public class Jalview
* Locate the given string as a file and pass it to the groovy interpreter.
*
* @param groovyscript
- * the script to execute
+ * the script to execute
* @param jalviewContext
- * the Jalview Desktop object passed in to the groovy
- * binding as the 'Jalview' object.
+ * the Jalview Desktop object passed in to the groovy binding as the
+ * 'Jalview' object.
*/
private void executeGroovyScript(String groovyscript, AlignFrame af)
{
@@ -961,8 +1149,8 @@ public class Jalview
}
/**
- * Quit method delegates to Desktop.quit - unless running in headless mode when
- * it just ends the JVM
+ * Quit method delegates to Desktop.quit - unless running in headless mode
+ * when it just ends the JVM
*/
public void quit()
{