From a84906104415e9e65713af39a225090ebd7beff0 Mon Sep 17 00:00:00 2001 From: Ben Soares Date: Wed, 19 Jun 2019 12:50:36 +0100 Subject: [PATCH] JAL-3321 Last pieces of the getdown-launcher.jar upgrade puzzle --- build.gradle | 3 +- getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar | Bin 143814 -> 144321 bytes getdown/lib/getdown-launcher.jar | Bin 1490411 -> 1490919 bytes .../com/threerings/getdown/util/LaunchUtil.java | 31 +- .../threerings/getdown/launcher/GetdownApp.java | 2 +- gradle.properties | 2 +- j11lib/getdown-core.jar | Bin 143814 -> 144321 bytes j8lib/getdown-core.jar | Bin 143814 -> 144321 bytes src/jalview/bin/Cache.java | 4 +- src/jalview/bin/Jalview.java | 1723 +++++++++----------- 10 files changed, 780 insertions(+), 985 deletions(-) diff --git a/build.gradle b/build.gradle index af9a26f..84d5f73 100644 --- a/build.gradle +++ b/build.gradle @@ -819,9 +819,8 @@ task getdownWebsite() { } copy { - from project.ext.getdownWebsiteDir + from getdownLauncher into project.ext.getdownWebsiteDir - include(file(getdownLauncher).getName()) rename(file(getdownLauncher).getName(), getdown_launcher_new) } diff --git a/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar b/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar index 8828380ad7c27f7e4f87ff17b80a748870fad716..965e75d9aaadd946c6e607a258f8f947a2965ce9 100644 GIT binary patch delta 6887 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 delta 6338 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 delta 59938 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

m7KbtshrUbBRmqERCC*BCDX%0Ff77k*4)aI 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 delta 6338 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 delta 6338 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 dasSources) - { - final long id = System.currentTimeMillis(); - queued++; - final FeatureFetcher us = this; - new Thread(new Runnable() - { - - @Override - public void run() - { - synchronized (us) - { - queued--; - running++; - } - - af.setProgressBar(MessageManager - .getString("status.das_features_being_retrived"), id); - af.featureSettings_actionPerformed(null); - af.setProgressBar(null, id); - synchronized (us) - { - running--; - } - } - }).start(); - } - - public synchronized boolean allFinished() - { - return queued == 0 && running == 0; - } - - } - - public static Jalview getInstance() - { - return instance; - } - - /** - * main class for Jalview application - * - * @param args - * open filename - */ - public static void main(String[] args) - { - instance = new Jalview(); - instance.doMain(args); - } - - /** - * @param args - */ - void doMain(String[] args) - { - System.setSecurityManager(null); - System.out - .println("Java version: " + System.getProperty("java.version")); - System.out.println(System.getProperty("os.arch") + " " - + System.getProperty("os.name") + " " - + System.getProperty("os.version")); - // report Jalview version - Cache.loadBuildProperties(true); - - 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(); - - } - 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) - { - System.out.println( - "CMD [-props " + usrPropsFile + "] executed successfully!"); - } - - // 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) - { - int p = defs.indexOf('='); - if (p == -1) - { - System.err.println("Ignoring invalid setprop argument : " + defs); - } - 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)); - } - defs = aparser.getValue("setprop"); - } - if (System.getProperty("java.awt.headless") != null - && System.getProperty("java.awt.headless").equals("true")) - { - headless = true; - } - System.setProperty("http.agent", - "Jalview Desktop/" + Cache.getDefault("VERSION", "Unknown")); - try - { - Cache.initLogger(); - } catch (NoClassDefFoundError error) - { - error.printStackTrace(); - System.out.println("\nEssential logging libraries not found." - + "\nUse: java -classpath \"$PATH_TO_LIB$/*:$PATH_TO_CLASSES$\" jalview.bin.Jalview"); - System.exit(0); - } - - desktop = null; - - try - { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception ex) - { - System.err.println("Unexpected Look and Feel Exception"); - ex.printStackTrace(); - } - if (Platform.isAMac()) - { - - 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); - } 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"); - } catch (Throwable e) - { - System.err.println( - "Failed to reset look and feel: " + e.toString()); - } - } - } - - /* - * configure 'full' SO model if preferences say to, - * else use the default (SO Lite) - */ - if (Cache.getDefault("USE_FULL_SO", false)) - { - SequenceOntologyFactory.setInstance(new SequenceOntology()); - } - - if (!headless) - { - desktop = new Desktop(); - desktop.setInBatchMode(true); // indicate we are starting up - - 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(); - } - - desktop.setVisible(true); - desktop.startServiceDiscovery(); - if (!aparser.contains("nousagestats")) - { - startUsageStats(desktop); - } - else - { - 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 - 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!"); - } - - if (!aparser.contains("nonews")) - { - desktop.checkForNews(); - } - - BioJsHTMLOutput.updateBioJS(); - } - - String file = null, data = null; - FileFormatI format = null; - DataSourceType protocol = null; - FileLoader fileLoader = new FileLoader(!headless); - - String groovyscript = null; // 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); - - 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"); - if (vamsasImport != null || vamsasSession != null) - { - if (desktop == null || headless) - { - System.out.println( - "Headless vamsas sessions not yet supported. Sorry."); - System.exit(1); - } - // if we have a file, start a new session and import it. - boolean inSession = false; - if (vamsasImport != null) - { - try - { - DataSourceType viprotocol = AppletFormatAdapter - .checkProtocol(vamsasImport); - if (viprotocol == DataSourceType.FILE) - { - inSession = desktop.vamsasImport(new File(vamsasImport)); - } - else if (viprotocol == DataSourceType.URL) - { - inSession = desktop.vamsasImport(new URL(vamsasImport)); - } - - } catch (Exception e) - { - System.err.println("Exeption when importing " + vamsasImport - + " as a vamsas document."); - e.printStackTrace(); - } - if (!inSession) - { - System.err.println("Failed to import " + vamsasImport - + " as a vamsas document."); - } - else - { - System.out.println("Imported Successfully into new session " - + desktop.getVamsasApplication().getCurrentSession()); - } - } - if (vamsasSession != null) - { - if (vamsasImport != null) - { - // close the newly imported session and import the Jalview specific - // remnants into the new session later on. - desktop.vamsasStop_actionPerformed(null); - } - // now join the new session - try - { - if (desktop.joinVamsasSession(vamsasSession)) - { - System.out.println( - "Successfully joined vamsas session " + vamsasSession); - } - else - { - System.err.println("WARNING: Failed to join vamsas session " - + vamsasSession); - } - } catch (Exception e) - { - System.err.println( - "ERROR: Failed to join vamsas session " + vamsasSession); - e.printStackTrace(); - } - if (vamsasImport != null) - { - // the Jalview specific remnants can now be imported into the new - // session at the user's leisure. - Cache.log.info( - "Skipping Push for import of data into existing vamsas session."); // TODO: - // enable - // this - // when - // debugged - // desktop.getVamsasApplication().push_update(); - } - } - } - long progress = -1; - // Finally, deal with the remaining input data. - if (file != null) - { - if (!headless) - { - desktop.setProgressBar( - MessageManager - .getString("status.processing_commandline_args"), - progress = System.currentTimeMillis()); - } - System.out.println("CMD [-open " + file + "] executed successfully!"); - - if (!file.startsWith("http://")) - { - if (!(new File(file)).exists()) - { - System.out.println("Can't find " + file); - if (headless) - { - System.exit(1); - } - } - } - - protocol = AppletFormatAdapter.checkProtocol(file); - - try - { - format = new IdentifyFile().identify(file, protocol); - } catch (FileFormatException e1) - { - // TODO ? - } - - AlignFrame af = fileLoader.LoadFileWaitTillLoaded(file, protocol, - format); - if (af == null) - { - System.out.println("error"); - } - else - { - setCurrentAlignFrame(af); - data = aparser.getValue("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("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("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("annotations", true); - if (data != null) - { - af.loadJalviewDataFile(data, null, null, null); - // System.out.println("Added " + data); - System.out.println( - "CMD [-annotations " + data + "] executed successfully!"); - } - // set or clear the sortbytree flag. - if (aparser.contains("sortbytree")) - { - af.getViewport().setSortByTree(true); - if (af.getViewport().getSortByTree()) - { - System.out.println("CMD [-sortbytree] executed successfully!"); - } - } - if (aparser.contains("no-annotation")) - { - af.getViewport().setShowAnnotation(false); - if (!af.getViewport().isShowAnnotation()) - { - System.out.println("CMD no-annotation executed successfully!"); - } - } - if (aparser.contains("nosortbytree")) - { - af.getViewport().setSortByTree(false); - if (!af.getViewport().getSortByTree()) - { - System.out - .println("CMD [-nosortbytree] executed successfully!"); - } - } - data = aparser.getValue("tree", true); - if (data != null) - { - try - { - System.out.println( - "CMD [-tree " + data + "] executed successfully!"); - NewickFile nf = new NewickFile(data, - AppletFormatAdapter.checkProtocol(data)); - af.getViewport() - .setCurrentTree(af.showNewickTree(nf, data).getTree()); - } 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) - if (groovyscript != null) - { - // Execute the groovy script after we've done all the rendering stuff - // and before any images or figures are generated. - System.out.println("Executing script " + groovyscript); - executeGroovyScript(groovyscript, af); - System.out.println("CMD groovy[" + groovyscript - + "] executed successfully!"); - groovyscript = null; - } - String imageName = "unnamed.png"; - while (aparser.getSize() > 1) - { - 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.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; - } - 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; - } - - if (af.saveAlignment(file, format)) - { - System.out.println("Written alignment in " + format - + " format to " + file); - } - else - { - System.out.println("Error writing file " + file + " in " - + format + " format!!"); - } - - } - - while (aparser.getSize() > 0) - { - System.out.println("Unknown arg: " + aparser.nextValue()); - } - } - } - AlignFrame startUpAlframe = null; - // We'll only open the default file if the desktop is visible. - // And the user - // //////////////////// - - if (!headless && file == null && vamsasImport == null - && jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true)) - { - file = jalview.bin.Cache.getDefault("STARTUP_FILE", - jalview.bin.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 - jalview.bin.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? - } - } - - startUpAlframe = fileLoader.LoadFileWaitTillLoaded(file, protocol, - format); - // extract groovy arguments before anything else. - } - - // Once all other stuff is done, execute any groovy scripts (in order) - if (groovyscript != null) - { - if (Cache.groovyJarsPresent()) - { - System.out.println("Executing script " + groovyscript); - executeGroovyScript(groovyscript, startUpAlframe); - } - else - { - System.err.println( - "Sorry. Groovy Support is not available, so ignoring the provided groovy script " - + groovyscript); - } - } - // and finally, turn off batch mode indicator - if the desktop still exists - if (desktop != null) - { - if (progress != -1) - { - desktop.setProgressBar(null, progress); - } - desktop.setInBatchMode(false); - } - } - - private static void showUsage() - { - System.out.println( - "Usage: jalview -open [FILE] [OUTPUT_FORMAT] [OUTPUT_FILE]\n\n" - + "-nodisplay\tRun Jalview without User Interface.\n" - + "-props FILE\tUse the given Jalview properties file instead of users default.\n" - + "-colour COLOURSCHEME\tThe colourscheme to be applied to the alignment\n" - + "-annotations FILE\tAdd precalculated annotations to the alignment.\n" - + "-tree FILE\tLoad the given newick format tree file onto the alignment\n" - + "-features FILE\tUse the given file to mark features on the alignment.\n" - + "-fasta FILE\tCreate alignment file FILE in Fasta format.\n" - + "-clustal FILE\tCreate alignment file FILE in Clustal format.\n" - + "-pfam FILE\tCreate alignment file FILE in PFAM format.\n" - + "-msf FILE\tCreate alignment file FILE in MSF format.\n" - + "-pileup FILE\tCreate alignment file FILE in Pileup format\n" - + "-pir FILE\tCreate alignment file FILE in PIR format.\n" - + "-blc FILE\tCreate alignment file FILE in BLC format.\n" - + "-json FILE\tCreate alignment file FILE in JSON format.\n" - + "-jalview FILE\tCreate alignment file FILE in Jalview format.\n" - + "-png FILE\tCreate PNG image FILE from alignment.\n" - + "-svg FILE\tCreate SVG image FILE from alignment.\n" - + "-html FILE\tCreate HTML file from alignment.\n" - + "-biojsMSA FILE\tCreate BioJS MSA Viewer HTML file from alignment.\n" - + "-imgMap FILE\tCreate HTML file FILE with image map of PNG image.\n" - + "-eps FILE\tCreate EPS file FILE from alignment.\n" - + "-questionnaire URL\tQueries the given URL for information about any Jalview user questionnaires.\n" - + "-noquestionnaire\tTurn off questionnaire check.\n" - + "-nonews\tTurn off check for Jalview news.\n" - + "-nousagestats\tTurn off google analytics tracking for this session.\n" - + "-sortbytree OR -nosortbytree\tEnable or disable sorting of the given alignment by the given tree\n" - // + - // "-setprop PROPERTY=VALUE\tSet the given Jalview property, - // after all other properties files have been read\n\t - // (quote the 'PROPERTY=VALUE' pair to ensure spaces are - // passed in correctly)" - + "-jabaws URL\tSpecify URL for Jabaws services (e.g. for a local installation).\n" - + "-fetchfrom nickname\tQuery nickname for features for the alignments and display them.\n" - // + - // "-vdoc vamsas-document\tImport vamsas document into new - // session or join existing session with same URN\n" - // + "-vses vamsas-session\tJoin session with given URN\n" - + "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed (if FILE is the text 'STDIN' then the file will be read from STDIN)\n" - + "\n~Read documentation in Application or visit http://www.jalview.org for description of Features and Annotations file~\n\n"); - } - - private static void startUsageStats(final Desktop desktop) - { - /** - * start a User Config prompt asking if we can log usage statistics. - */ - PromptUserConfig prompter = new PromptUserConfig(Desktop.desktop, - "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)", - new Runnable() - { - @Override - public void run() - { - Cache.log.debug( - "Initialising googletracker for usage stats."); - Cache.initGoogleTracker(); - Cache.log.debug("Tracking enabled."); - } - }, new Runnable() - { - @Override - public void run() - { - Cache.log.debug("Not enabling Google Tracking."); - } - }, null, true); - desktop.addDialogThread(prompter); - } - - /** - * Locate the given string as a file and pass it to the groovy interpreter. - * - * @param groovyscript - * the script to execute - * @param jalviewContext - * the Jalview Desktop object passed in to the groovy binding as the - * 'Jalview' object. - */ - private void executeGroovyScript(String groovyscript, AlignFrame af) - { - /** - * for scripts contained in files - */ - File tfile = null; - /** - * script's URI - */ - URL sfile = null; - if (groovyscript.trim().equals("STDIN")) - { - // read from stdin into a tempfile and execute it - try - { - tfile = File.createTempFile("jalview", "groovy"); - PrintWriter outfile = new PrintWriter( - new OutputStreamWriter(new FileOutputStream(tfile))); - BufferedReader br = new BufferedReader( - new InputStreamReader(System.in)); - String line = null; - while ((line = br.readLine()) != null) - { - outfile.write(line + "\n"); - } - br.close(); - outfile.flush(); - outfile.close(); - - } catch (Exception ex) - { - System.err.println("Failed to read from STDIN into tempfile " - + ((tfile == null) ? "(tempfile wasn't created)" - : tfile.toString())); - ex.printStackTrace(); - return; - } - try - { - sfile = tfile.toURI().toURL(); - } catch (Exception x) - { - System.err.println( - "Unexpected Malformed URL Exception for temporary file created from STDIN: " - + tfile.toURI()); - x.printStackTrace(); - return; - } - } - else - { - try - { - sfile = new URI(groovyscript).toURL(); - } catch (Exception x) - { - tfile = new File(groovyscript); - if (!tfile.exists()) - { - System.err.println("File '" + groovyscript + "' does not exist."); - return; - } - if (!tfile.canRead()) - { - System.err.println("File '" + groovyscript + "' cannot be read."); - return; - } - if (tfile.length() < 1) - { - System.err.println("File '" + groovyscript + "' is empty."); - return; - } - try - { - sfile = tfile.getAbsoluteFile().toURI().toURL(); - } catch (Exception ex) - { - System.err.println("Failed to create a file URL for " - + tfile.getAbsoluteFile()); - return; - } - } - } - try - { - Map vbinding = new HashMap<>(); - vbinding.put("Jalview", this); - if (af != null) - { - vbinding.put("currentAlFrame", af); - } - Binding gbinding = new Binding(vbinding); - GroovyScriptEngine gse = new GroovyScriptEngine(new URL[] { sfile }); - gse.run(sfile.toString(), gbinding); - if ("STDIN".equals(groovyscript)) - { - // delete temp file that we made - - // only if it was successfully executed - tfile.delete(); - } - } catch (Exception e) - { - System.err.println("Exception Whilst trying to execute file " + sfile - + " as a groovy script."); - e.printStackTrace(System.err); - - } - } - - 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() } - : Desktop.getAlignFrames(); - - } - - /** - * Quit method delegates to Desktop.quit - unless running in headless mode - * when it just ends the JVM - */ - public void quit() - { - if (desktop != null) - { - desktop.quit(); - } - else - { - System.exit(0); - } - } - - public static AlignFrame getCurrentAlignFrame() - { - return Jalview.currentAlignFrame; - } - - public static void setCurrentAlignFrame(AlignFrame currentAlignFrame) - { - Jalview.currentAlignFrame = currentAlignFrame; - } + /* + * singleton instance of this class + */ + private static Jalview instance; + + private Desktop desktop; + + public static AlignFrame currentAlignFrame; + + static { + // grab all the rights we can 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() { + } + }); + } + + /** + * keep track of feature fetching tasks. + * + * @author JimP + * + */ + class FeatureFetcher { + /* + * TODO: generalise to track all jalview events to orchestrate batch processing + * events. + */ + + private int queued = 0; + + private int running = 0; + + public FeatureFetcher() { + + } + + public void addFetcher(final AlignFrame af, final Vector dasSources) { + final long id = System.currentTimeMillis(); + queued++; + final FeatureFetcher us = this; + new Thread(new Runnable() { + + @Override + public void run() { + synchronized (us) { + queued--; + running++; + } + + af.setProgressBar(MessageManager.getString("status.das_features_being_retrived"), id); + af.featureSettings_actionPerformed(null); + af.setProgressBar(null, id); + synchronized (us) { + running--; + } + } + }).start(); + } + + public synchronized boolean allFinished() { + return queued == 0 && running == 0; + } + + } + + public static Jalview getInstance() { + return instance; + } + + /** + * main class for Jalview application + * + * @param args open filename + */ + public static void main(String[] args) { + instance = new Jalview(); + instance.doMain(args); + } + + /** + * @param args + */ + void doMain(String[] args) { + System.setSecurityManager(null); + System.out.println("Java version: " + System.getProperty("java.version")); + System.out.println(System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + + System.getProperty("os.version")); + // report Jalview version + Cache.loadBuildProperties(true); + + 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) { + System.out.println("CMD [-props " + usrPropsFile + "] executed successfully!"); + } + + // 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) { + int p = defs.indexOf('='); + if (p == -1) { + System.err.println("Ignoring invalid setprop argument : " + defs); + } 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)); + } + defs = aparser.getValue("setprop"); + } + if (System.getProperty("java.awt.headless") != null && System.getProperty("java.awt.headless").equals("true")) { + headless = true; + } + System.setProperty("http.agent", "Jalview Desktop/" + Cache.getDefault("VERSION", "Unknown")); + try { + Cache.initLogger(); + } catch (NoClassDefFoundError error) { + error.printStackTrace(); + System.out.println("\nEssential logging libraries not found." + + "\nUse: java -classpath \"$PATH_TO_LIB$/*:$PATH_TO_CLASSES$\" jalview.bin.Jalview"); + System.exit(0); + } + + desktop = null; + + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception ex) { + System.err.println("Unexpected Look and Feel Exception"); + ex.printStackTrace(); + } + if (Platform.isAMac()) { + + 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); + } 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"); + } catch (Throwable e) { + System.err.println("Failed to reset look and feel: " + e.toString()); + } + } + } + + /* + * configure 'full' SO model if preferences say to, else use the default (SO + * Lite) + */ + if (Cache.getDefault("USE_FULL_SO", false)) { + SequenceOntologyFactory.setInstance(new SequenceOntology()); + } + + if (!headless) { + desktop = new Desktop(); + desktop.setInBatchMode(true); // indicate we are starting up + + 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(); + } + + desktop.setVisible(true); + desktop.startServiceDiscovery(); + if (!aparser.contains("nousagestats")) { + startUsageStats(desktop); + } else { + 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 + 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!"); + } + + if (!aparser.contains("nonews")) { + desktop.checkForNews(); + } + + BioJsHTMLOutput.updateBioJS(); + } + + // 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(); + } + + String file = null, data = null; + FileFormatI format = null; + DataSourceType protocol = null; + FileLoader fileLoader = new FileLoader(!headless); + + String groovyscript = null; // 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); + + 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"); + if (vamsasImport != null || vamsasSession != null) { + if (desktop == null || headless) { + System.out.println("Headless vamsas sessions not yet supported. Sorry."); + System.exit(1); + } + // if we have a file, start a new session and import it. + boolean inSession = false; + if (vamsasImport != null) { + try { + DataSourceType viprotocol = AppletFormatAdapter.checkProtocol(vamsasImport); + if (viprotocol == DataSourceType.FILE) { + inSession = desktop.vamsasImport(new File(vamsasImport)); + } else if (viprotocol == DataSourceType.URL) { + inSession = desktop.vamsasImport(new URL(vamsasImport)); + } + + } catch (Exception e) { + System.err.println("Exeption when importing " + vamsasImport + " as a vamsas document."); + e.printStackTrace(); + } + if (!inSession) { + System.err.println("Failed to import " + vamsasImport + " as a vamsas document."); + } else { + System.out.println("Imported Successfully into new session " + + desktop.getVamsasApplication().getCurrentSession()); + } + } + if (vamsasSession != null) { + if (vamsasImport != null) { + // close the newly imported session and import the Jalview specific + // remnants into the new session later on. + desktop.vamsasStop_actionPerformed(null); + } + // now join the new session + try { + if (desktop.joinVamsasSession(vamsasSession)) { + System.out.println("Successfully joined vamsas session " + vamsasSession); + } else { + System.err.println("WARNING: Failed to join vamsas session " + vamsasSession); + } + } catch (Exception e) { + System.err.println("ERROR: Failed to join vamsas session " + vamsasSession); + e.printStackTrace(); + } + if (vamsasImport != null) { + // the Jalview specific remnants can now be imported into the new + // session at the user's leisure. + Cache.log.info("Skipping Push for import of data into existing vamsas session."); // TODO: + // enable + // this + // when + // debugged + // desktop.getVamsasApplication().push_update(); + } + } + } + long progress = -1; + // Finally, deal with the remaining input data. + if (file != null) { + if (!headless) { + desktop.setProgressBar(MessageManager.getString("status.processing_commandline_args"), + progress = System.currentTimeMillis()); + } + System.out.println("CMD [-open " + file + "] executed successfully!"); + + if (!file.startsWith("http://")) { + if (!(new File(file)).exists()) { + System.out.println("Can't find " + file); + if (headless) { + System.exit(1); + } + } + } + + protocol = AppletFormatAdapter.checkProtocol(file); + + try { + format = new IdentifyFile().identify(file, protocol); + } catch (FileFormatException e1) { + // TODO ? + } + + AlignFrame af = fileLoader.LoadFileWaitTillLoaded(file, protocol, format); + if (af == null) { + System.out.println("error"); + } else { + setCurrentAlignFrame(af); + data = aparser.getValue("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("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("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("annotations", true); + if (data != null) { + af.loadJalviewDataFile(data, null, null, null); + // System.out.println("Added " + data); + System.out.println("CMD [-annotations " + data + "] executed successfully!"); + } + // set or clear the sortbytree flag. + if (aparser.contains("sortbytree")) { + af.getViewport().setSortByTree(true); + if (af.getViewport().getSortByTree()) { + System.out.println("CMD [-sortbytree] executed successfully!"); + } + } + if (aparser.contains("no-annotation")) { + af.getViewport().setShowAnnotation(false); + if (!af.getViewport().isShowAnnotation()) { + System.out.println("CMD no-annotation executed successfully!"); + } + } + if (aparser.contains("nosortbytree")) { + af.getViewport().setSortByTree(false); + if (!af.getViewport().getSortByTree()) { + System.out.println("CMD [-nosortbytree] executed successfully!"); + } + } + data = aparser.getValue("tree", true); + if (data != null) { + try { + System.out.println("CMD [-tree " + data + "] executed successfully!"); + NewickFile nf = new NewickFile(data, AppletFormatAdapter.checkProtocol(data)); + af.getViewport().setCurrentTree(af.showNewickTree(nf, data).getTree()); + } 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) + if (groovyscript != null) { + // Execute the groovy script after we've done all the rendering stuff + // and before any images or figures are generated. + System.out.println("Executing script " + groovyscript); + executeGroovyScript(groovyscript, af); + System.out.println("CMD groovy[" + groovyscript + "] executed successfully!"); + groovyscript = null; + } + String imageName = "unnamed.png"; + while (aparser.getSize() > 1) { + 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.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; + } 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; + } + + if (af.saveAlignment(file, format)) { + System.out.println("Written alignment in " + format + " format to " + file); + } else { + System.out.println("Error writing file " + file + " in " + format + " format!!"); + } + + } + + while (aparser.getSize() > 0) { + System.out.println("Unknown arg: " + aparser.nextValue()); + } + } + } + AlignFrame startUpAlframe = null; + // We'll only open the default file if the desktop is visible. + // And the user + // //////////////////// + + if (!headless && file == null && vamsasImport == null + && jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true)) { + file = jalview.bin.Cache.getDefault("STARTUP_FILE", + jalview.bin.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 + jalview.bin.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? + } + } + + startUpAlframe = fileLoader.LoadFileWaitTillLoaded(file, protocol, format); + // extract groovy arguments before anything else. + } + + // Once all other stuff is done, execute any groovy scripts (in order) + if (groovyscript != null) { + if (Cache.groovyJarsPresent()) { + System.out.println("Executing script " + groovyscript); + executeGroovyScript(groovyscript, startUpAlframe); + } else { + System.err.println("Sorry. Groovy Support is not available, so ignoring the provided groovy script " + + groovyscript); + } + } + // and finally, turn off batch mode indicator - if the desktop still exists + if (desktop != null) { + if (progress != -1) { + desktop.setProgressBar(null, progress); + } + desktop.setInBatchMode(false); + } + } + + private static void showUsage() { + System.out.println("Usage: jalview -open [FILE] [OUTPUT_FORMAT] [OUTPUT_FILE]\n\n" + + "-nodisplay\tRun Jalview without User Interface.\n" + + "-props FILE\tUse the given Jalview properties file instead of users default.\n" + + "-colour COLOURSCHEME\tThe colourscheme to be applied to the alignment\n" + + "-annotations FILE\tAdd precalculated annotations to the alignment.\n" + + "-tree FILE\tLoad the given newick format tree file onto the alignment\n" + + "-features FILE\tUse the given file to mark features on the alignment.\n" + + "-fasta FILE\tCreate alignment file FILE in Fasta format.\n" + + "-clustal FILE\tCreate alignment file FILE in Clustal format.\n" + + "-pfam FILE\tCreate alignment file FILE in PFAM format.\n" + + "-msf FILE\tCreate alignment file FILE in MSF format.\n" + + "-pileup FILE\tCreate alignment file FILE in Pileup format\n" + + "-pir FILE\tCreate alignment file FILE in PIR format.\n" + + "-blc FILE\tCreate alignment file FILE in BLC format.\n" + + "-json FILE\tCreate alignment file FILE in JSON format.\n" + + "-jalview FILE\tCreate alignment file FILE in Jalview format.\n" + + "-png FILE\tCreate PNG image FILE from alignment.\n" + + "-svg FILE\tCreate SVG image FILE from alignment.\n" + + "-html FILE\tCreate HTML file from alignment.\n" + + "-biojsMSA FILE\tCreate BioJS MSA Viewer HTML file from alignment.\n" + + "-imgMap FILE\tCreate HTML file FILE with image map of PNG image.\n" + + "-eps FILE\tCreate EPS file FILE from alignment.\n" + + "-questionnaire URL\tQueries the given URL for information about any Jalview user questionnaires.\n" + + "-noquestionnaire\tTurn off questionnaire check.\n" + "-nonews\tTurn off check for Jalview news.\n" + + "-nousagestats\tTurn off google analytics tracking for this session.\n" + + "-sortbytree OR -nosortbytree\tEnable or disable sorting of the given alignment by the given tree\n" + // + + // "-setprop PROPERTY=VALUE\tSet the given Jalview property, + // after all other properties files have been read\n\t + // (quote the 'PROPERTY=VALUE' pair to ensure spaces are + // passed in correctly)" + + "-jabaws URL\tSpecify URL for Jabaws services (e.g. for a local installation).\n" + + "-fetchfrom nickname\tQuery nickname for features for the alignments and display them.\n" + // + + // "-vdoc vamsas-document\tImport vamsas document into new + // session or join existing session with same URN\n" + // + "-vses vamsas-session\tJoin session with given URN\n" + + "-groovy FILE\tExecute groovy script in FILE, after all other arguments have been processed (if FILE is the text 'STDIN' then the file will be read from STDIN)\n" + + "\n~Read documentation in Application or visit http://www.jalview.org for description of Features and Annotations file~\n\n"); + } + + private static void startUsageStats(final Desktop desktop) { + /** + * start a User Config prompt asking if we can log usage statistics. + */ + PromptUserConfig prompter = new PromptUserConfig(Desktop.desktop, "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)", + new Runnable() { + @Override + public void run() { + Cache.log.debug("Initialising googletracker for usage stats."); + Cache.initGoogleTracker(); + Cache.log.debug("Tracking enabled."); + } + }, new Runnable() { + @Override + public void run() { + Cache.log.debug("Not enabling Google Tracking."); + } + }, null, true); + desktop.addDialogThread(prompter); + } + + /** + * Locate the given string as a file and pass it to the groovy interpreter. + * + * @param groovyscript the script to execute + * @param jalviewContext the Jalview Desktop object passed in to the groovy + * binding as the 'Jalview' object. + */ + private void executeGroovyScript(String groovyscript, AlignFrame af) { + /** + * for scripts contained in files + */ + File tfile = null; + /** + * script's URI + */ + URL sfile = null; + if (groovyscript.trim().equals("STDIN")) { + // read from stdin into a tempfile and execute it + try { + tfile = File.createTempFile("jalview", "groovy"); + PrintWriter outfile = new PrintWriter(new OutputStreamWriter(new FileOutputStream(tfile))); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String line = null; + while ((line = br.readLine()) != null) { + outfile.write(line + "\n"); + } + br.close(); + outfile.flush(); + outfile.close(); + + } catch (Exception ex) { + System.err.println("Failed to read from STDIN into tempfile " + + ((tfile == null) ? "(tempfile wasn't created)" : tfile.toString())); + ex.printStackTrace(); + return; + } + try { + sfile = tfile.toURI().toURL(); + } catch (Exception x) { + System.err.println( + "Unexpected Malformed URL Exception for temporary file created from STDIN: " + tfile.toURI()); + x.printStackTrace(); + return; + } + } else { + try { + sfile = new URI(groovyscript).toURL(); + } catch (Exception x) { + tfile = new File(groovyscript); + if (!tfile.exists()) { + System.err.println("File '" + groovyscript + "' does not exist."); + return; + } + if (!tfile.canRead()) { + System.err.println("File '" + groovyscript + "' cannot be read."); + return; + } + if (tfile.length() < 1) { + System.err.println("File '" + groovyscript + "' is empty."); + return; + } + try { + sfile = tfile.getAbsoluteFile().toURI().toURL(); + } catch (Exception ex) { + System.err.println("Failed to create a file URL for " + tfile.getAbsoluteFile()); + return; + } + } + } + try { + Map vbinding = new HashMap<>(); + vbinding.put("Jalview", this); + if (af != null) { + vbinding.put("currentAlFrame", af); + } + Binding gbinding = new Binding(vbinding); + GroovyScriptEngine gse = new GroovyScriptEngine(new URL[] { sfile }); + gse.run(sfile.toString(), gbinding); + if ("STDIN".equals(groovyscript)) { + // delete temp file that we made - + // only if it was successfully executed + tfile.delete(); + } + } catch (Exception e) { + System.err.println("Exception Whilst trying to execute file " + sfile + " as a groovy script."); + e.printStackTrace(System.err); + + } + } + + 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() } : Desktop.getAlignFrames(); + + } + + /** + * Quit method delegates to Desktop.quit - unless running in headless mode when + * it just ends the JVM + */ + public void quit() { + if (desktop != null) { + desktop.quit(); + } else { + System.exit(0); + } + } + + public static AlignFrame getCurrentAlignFrame() { + return Jalview.currentAlignFrame; + } + + public static void setCurrentAlignFrame(AlignFrame currentAlignFrame) { + Jalview.currentAlignFrame = currentAlignFrame; + } } -- 1.7.10.2