*/
package jalview.bin;
+import jalview.api.AlignViewportI;
+import jalview.api.JalviewApp;
+import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
import jalview.ext.so.SequenceOntology;
import jalview.gui.AlignFrame;
import jalview.gui.Desktop;
+import jalview.gui.Preferences;
import jalview.gui.PromptUserConfig;
import jalview.io.AppletFormatAdapter;
import jalview.io.BioJsHTMLOutput;
* @author $author$
* @version $Revision$
*/
-public class Jalview
+public class Jalview implements ApplicationSingletonI
{
- /**
- * // find first query parameter (if any) that doesn't start with j2s // and
- * set as space-delimited arguments to Jalview main
- *
- * @j2sNative
- *
- * var hr = decodeURI(document.location.href); var pos =
- * hr.indexOf("?"); if (pos > 0) { q = hr.substring(pos+1); args =
- * q.split("&"); for (i = 0 ; i < args.length; i++) { arg1 =
- * args[i]; if (!arg1.startsWith("j2s")) { thisApplet.__Info.args =
- * arg1.split(" "); break; } } }
- */
- /*
- * singleton instance of this class
- */
- private static Jalview instance;
+ public static Jalview getInstance()
+ {
+ return (Jalview) ApplicationSingletonProvider
+ .getInstance(Jalview.class);
+ }
+
+ private Jalview()
+ {
+ }
+
+ static
+ {
+ Platform.getURLCommandArguments();
+ }
+
+ private boolean headless;
+
+ public static boolean isHeadlessMode()
+ {
+ return getInstance().headless;
+ }
private Desktop desktop;
- public static AlignFrame currentAlignFrame;
+ private AlignFrame currentAlignFrame;
+
+ public boolean isJavaAppletTag;
+
+ public String appletResourcePath;
+
+ public static AlignFrame getCurrentAlignFrame()
+ {
+ return getInstance().currentAlignFrame;
+ }
+
+ public static void setCurrentAlignFrame(AlignFrame currentAlignFrame)
+ {
+ getInstance().currentAlignFrame = currentAlignFrame;
+ }
static
{
/**
* Java only
*
- * @j2sNative
+ * @j2sIgnore
*/
{
// 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()
+ {
+ }
+ });
}
}
}
- public static Jalview getInstance()
- {
- return instance;
- }
-
/**
* main class for Jalview application
*
*/
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
+ 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()
{
- // BH - for event debugging in JavaScript (Java mode only)
- if (!Platform.isJS())// !(/** @j2sNative true ||*/false))
+
+ /**
+ * @j2sIgnore
+ *
+ */
+ {
+ System.out.println("not in js");
+ }
+
+ // BH - for event debugging in JavaScript (Java mode only)
+ if (!Platform.isJS())
/**
* Java only
*
- * @j2sNative
+ * @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
+ System.getProperty("os.version"));
ArgsParser aparser = new ArgsParser(args);
- boolean headless = false;
- String usrPropsFile = aparser.getValue("props");
- Cache.loadProperties(usrPropsFile); // must do this before
- if (usrPropsFile != null)
+ String usrPropsFile = aparser.getValue(ArgsParser.PROPS);
+ Cache.loadProperties(usrPropsFile);
+ if (Platform.isJS())
{
+ isJavaAppletTag = aparser.isApplet();
+ if (isJavaAppletTag)
+ {
+ Preferences.setAppletDefaults();
+ Cache.loadProperties(usrPropsFile); // again, because we
+ // might be changing defaults here?
+ }
System.out.println(
- "CMD [-props " + usrPropsFile + "] executed successfully!");
+ "<Applet> found: " + aparser.getValue("Info.j2sAppletID"));
+ appletResourcePath = aparser.getValue("Info.resourcePath");
}
-
- if (!Platform.isJS())
+ else
/**
- * ignore in JavaScript
+ * Java only
*
- * @j2sNative
+ * @j2sIgnore
*/
{
+ if (usrPropsFile != null)
+ {
+ System.out.println(
+ "CMD [-props " + usrPropsFile + "] executed successfully!");
+ }
+
if (aparser.contains("help") || aparser.contains("h"))
{
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
{
- Jws2Discoverer.getDiscoverer().setPreferredUrl(jabawsUrl);
+ Jws2Discoverer.getInstance().setPreferredUrl(jabawsUrl);
System.out.println(
"CMD [-jabaws " + jabawsUrl + "] executed successfully!");
} catch (MalformedURLException e)
}
}
- String defs = aparser.getValue("setprop");
+ // check for property setting
+ String defs = aparser.getValue(ArgsParser.SETPROP);
while (defs != null)
{
int p = defs.indexOf('=');
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"));
"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"))
{
*/
if (Cache.getDefault("USE_FULL_SO", false))
{
- SequenceOntologyFactory.setInstance(new SequenceOntology());
+ SequenceOntologyFactory.setSequenceOntology(new SequenceOntology());
}
if (!headless)
{
- desktop = new Desktop()
-// {
-// // BH testing
-// @Override
-// protected void processEvent(AWTEvent e) {
-// System.out.println("Jalview.java " + e);
-// super.processEvent(e);
-// }
-// }
- ;
+ desktop = Desktop.getInstance();
desktop.setInBatchMode(true); // indicate we are starting up
desktop.setVisible(true);
/**
* Java only
*
- * @j2sNative
+ * @j2sIgnore
*/
{
desktop.startServiceDiscovery();
- if (!aparser.contains("nousagestats"))
+ if (!aparser.contains(ArgsParser.NOUSAGESTATS))
{
startUsageStats(desktop);
}
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
.println("CMD [-noquestionnaire] executed successfully!");
}
- if (!aparser.contains("nonews"))
+ if (!aparser.contains(ArgsParser.NONEWS))
{
desktop.checkForNews();
}
}
}
- 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)
System.out.println("CMD [-open " + file + "] executed successfully!");
if (!Platform.isJS())
- /**
- * ignore in JavaScript -- can't just file existence - could load it?
- *
- * @j2sNative
- */
+ /**
+ * 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
}
}
- protocol = AppletFormatAdapter.checkProtocol(file);
+ protocol = AppletFormatAdapter.checkProtocol(file);
try
{
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)
{
}
// 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,
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,
"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);
"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())
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())
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())
.println("CMD [-nosortbytree] executed successfully!");
}
}
- data = aparser.getValue("tree", true);
+ data = aparser.getValue(ArgsParser.TREE, true);
if (data != null)
{
try
+ "] executed successfully!");
groovyscript = null;
}
- String imageName = "unnamed.png";
- while (aparser.getSize() > 1)
+
+ if (isJavaAppletTag)
+ {
+ loadAppletParams(aparser, af);
+ }
+ else
{
- String outputFormat = aparser.nextValue();
- file = aparser.nextValue();
- if (outputFormat.equalsIgnoreCase("png"))
- {
- af.createPNG(new File(file));
- imageName = (new File(file)).getName();
- System.out.println("Creating PNG image: " + file);
- continue;
- }
- else if (outputFormat.equalsIgnoreCase("svg"))
- {
- File imageFile = new File(file);
- imageName = imageFile.getName();
- af.createSVG(imageFile);
- System.out.println("Creating SVG image: " + file);
- continue;
- }
- else if (outputFormat.equalsIgnoreCase("html"))
+ String imageName = "unnamed.png";
+ while (aparser.getSize() > 1)
{
- File imageFile = new File(file);
- imageName = imageFile.getName();
- HtmlSvgOutput htmlSVG = new HtmlSvgOutput(af.alignPanel);
- htmlSVG.exportHTML(file);
+ // PNG filename
+ // SVG filename
+ // HTML filename
+ // biojsmsa filename
+ String outputFormat = aparser.nextValue();
+ file = aparser.nextValue();
+
+ if (outputFormat.equalsIgnoreCase("png"))
+ {
+ af.createPNG(new File(file));
+ imageName = (new File(file)).getName();
+ System.out.println("Creating PNG image: " + file);
+ continue;
+ }
+ else if (outputFormat.equalsIgnoreCase("svg"))
+ {
+ File imageFile = new File(file);
+ imageName = imageFile.getName();
+ af.createSVG(imageFile);
+ System.out.println("Creating SVG image: " + file);
+ continue;
+ }
+ else if (outputFormat.equalsIgnoreCase("html"))
+ {
+ File imageFile = new File(file);
+ imageName = imageFile.getName();
+ HtmlSvgOutput htmlSVG = new HtmlSvgOutput(af.alignPanel);
+ htmlSVG.exportHTML(file);
- System.out.println("Creating HTML image: " + file);
- continue;
- }
- else if (outputFormat.equalsIgnoreCase("biojsmsa"))
- {
- if (file == null)
+ System.out.println("Creating HTML image: " + file);
+ continue;
+ }
+ else if (outputFormat.equalsIgnoreCase("biojsmsa"))
{
- System.err.println("The output html file must not be null");
- return;
+ if (file == null)
+ {
+ System.err.println("The output html file must not be null");
+ return;
+ }
+ try
+ {
+ BioJsHTMLOutput.refreshVersionInfo(
+ BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY);
+ } catch (URISyntaxException e)
+ {
+ e.printStackTrace();
+ }
+ BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel);
+ bjs.exportHTML(file);
+ System.out.println(
+ "Creating BioJS MSA Viwer HTML file: " + file);
+ continue;
}
- try
+ else if (outputFormat.equalsIgnoreCase("imgMap"))
{
- BioJsHTMLOutput.refreshVersionInfo(
- BioJsHTMLOutput.BJS_TEMPLATES_LOCAL_DIRECTORY);
- } catch (URISyntaxException e)
+ af.createImageMap(new File(file), imageName);
+ System.out.println("Creating image map: " + file);
+ continue;
+ }
+ else if (outputFormat.equalsIgnoreCase("eps"))
{
- e.printStackTrace();
+ File outputFile = new File(file);
+ System.out.println(
+ "Creating EPS file: " + outputFile.getAbsolutePath());
+ af.createEPS(outputFile);
+ continue;
+ }
+
+ af.saveAlignment(file, format);
+ if (af.isSaveAlignmentSuccessful())
+ {
+ System.out.println("Written alignment in " + format
+ + " format to " + file);
+ }
+ else
+ {
+ System.out.println("Error writing file " + file + " in "
+ + format + " format!!");
}
- BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel);
- bjs.exportHTML(file);
- System.out
- .println("Creating BioJS MSA Viwer HTML file: " + file);
- continue;
- }
- else if (outputFormat.equalsIgnoreCase("imgMap"))
- {
- af.createImageMap(new File(file), imageName);
- System.out.println("Creating image map: " + file);
- continue;
- }
- else if (outputFormat.equalsIgnoreCase("eps"))
- {
- File outputFile = new File(file);
- System.out.println(
- "Creating EPS file: " + outputFile.getAbsolutePath());
- af.createEPS(outputFile);
- continue;
- }
- af.saveAlignment(file, format);
- if (af.isSaveAlignmentSuccessful())
- {
- System.out.println("Written alignment in " + format
- + " format to " + file);
}
- else
+
+ while (aparser.getSize() > 0)
{
- System.out.println("Error writing file " + file + " in "
- + format + " format!!");
+ System.out.println("Unknown arg: " + aparser.nextValue());
}
-
- }
-
- while (aparser.getSize() > 0)
- {
- System.out.println("Unknown arg: " + aparser.nextValue());
}
}
}
// And the user
// ////////////////////
- if (!Platform.isJS() && // /** @j2sNative false && */ // BH 2018
- !headless && file == null && vamsasImport == null
+ if (!Platform.isJS() && !headless && file == null
+ && vamsasImport == null
&& jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true))
/**
* Java only
*
- * @j2sNative
+ * @j2sIgnore
*/
{
file = jalview.bin.Cache.getDefault("STARTUP_FILE",
/**
* 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)",
}
}
- 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() }
}
}
- public static AlignFrame getCurrentAlignFrame()
+ /**
+ * Get the SwingJS applet ID and combine that with the frameType
+ *
+ * @param frameType
+ * "alignment", "desktop", etc., or null
+ * @return
+ */
+ public static String getAppID(String frameType)
{
- return Jalview.currentAlignFrame;
+ String id = Cache.getProperty("Info.j2sAppletID");
+ if (id == null)
+ {
+ id = "jalview";
+ }
+ return id + (frameType == null ? "" : "-" + frameType);
}
- public static void setCurrentAlignFrame(AlignFrame currentAlignFrame)
+ private void loadAppletParams(ArgsParser aparser, AlignFrame af)
{
- Jalview.currentAlignFrame = currentAlignFrame;
+ Jalview me = this;
+ JalviewApp app = new JalviewApp()
+ {
+
+
+ @Override
+ public String getParameter(String name)
+ {
+ return aparser.getAppletValue(name, null);
+ }
+
+ @Override
+ public boolean getDefaultParameter(String name, boolean def)
+ {
+ String stn;
+ return ((stn = getParameter(name)) == null ? def
+ : "true".equalsIgnoreCase(stn));
+ }
+
+ @Override
+ public URL getDocumentBase()
+ {
+ return Platform.getDocumentBase();
+ }
+
+ @Override
+ public URL getCodeBase()
+ {
+ return Platform.getCodeBase();
+ }
+
+ @Override
+ public AlignViewportI getViewport()
+ {
+ return Jalview.getCurrentAlignFrame().getViewport();
+ }
+
+ @Override
+ public boolean loadScoreFile(String sScoreFile) throws IOException
+ {
+ Jalview.getCurrentAlignFrame().loadJalviewDataFile(sScoreFile, null,
+ null, null);
+ return true;
+ }
+
+ @Override
+ public boolean parseFeaturesFile(String filename,
+ DataSourceType protocol)
+ {
+ return af.parseFeaturesFile(filename, protocol);
+ }
+
+ @Override
+ public void loadTree(NewickFile fin, String treeFile)
+ throws IOException
+ {
+ // n/a -- already done
+ }
+
+ @Override
+ public void setAlignPdbStructures(boolean defaultParameter)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void newStructureView(PDBEntry pdb, SequenceI[] seqs,
+ String[] chains, DataSourceType protocol)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void alignedStructureView(PDBEntry[] pdb, SequenceI[][] seqs,
+ String[][] chains, String[] protocols)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateForLoader()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void setFeatureGroupState(String[] groups, boolean state)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void newFeatureSettings()
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ };
+
+ new JalviewAppLoader(true).load(app);
+
}
+
}