X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FJalview.java;h=474c7075e25b22131eff84603055e4272a54a5f2;hb=f5d6c0018555b2c453c2c0354c84cd5d2d81e3b9;hp=cd4d138a68200fa3cdac750e9c35d710792ef88f;hpb=ee198b3ca3687f18a2ee186f4e7c7330f4ea30f0;p=jalview.git diff --git a/src/jalview/bin/Jalview.java b/src/jalview/bin/Jalview.java index cd4d138..474c707 100755 --- a/src/jalview/bin/Jalview.java +++ b/src/jalview/bin/Jalview.java @@ -20,9 +20,7 @@ */ package jalview.bin; -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; @@ -36,13 +34,15 @@ 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.schemes.UserColourScheme; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.ws.jws2.Jws2Discoverer; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; @@ -52,6 +52,7 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.security.AllPermission; import java.security.CodeSource; @@ -61,19 +62,37 @@ 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.Timer; import javax.swing.UIManager; +import groovy.lang.Binding; +import groovy.util.GroovyScriptEngine; + /** * Main class for Jalview Application
*
- * start with java -Djava.ext.dirs=$PATH_TO_LIB$ jalview.bin.Jalview + * start with: java -classpath "$PATH_TO_LIB$/*:$PATH_TO_CLASSES$" \ + * jalview.bin.Jalview + * + * or on Windows: java -classpath "$PATH_TO_LIB$/*;$PATH_TO_CLASSES$" \ + * jalview.bin.Jalview jalview.bin.Jalview + * + * (ensure -classpath arg is quoted to avoid shell expansion of '*' and do not + * embellish '*' to e.g. '*.jar') * * @author $author$ * @version $Revision$ */ public class Jalview { + + // BH 6/19/2018 starting to work on JS version - just discovering issues + /* * singleton instance of this class */ @@ -83,8 +102,22 @@ public class Jalview public static AlignFrame currentAlignFrame; + /** + * Answers true if Jalview is running as Javascript, else false. The value is + * set at compile time. + * + * @return + */ + public static boolean isJS() + { + return /** @j2sNative true || */ + false; + } + static { + if (!isJS()) + { // BH 2018 // grab all the rights we can the JVM Policy.setPolicy(new Policy() { @@ -101,6 +134,8 @@ public class Jalview { } }); + + } } /** @@ -146,7 +181,6 @@ public class Jalview af.setProgressBar(MessageManager .getString("status.das_features_being_retrived"), id); af.featureSettings_actionPerformed(null); - af.featureSettings.fetchDasFeatures(dasSources, true); af.setProgressBar(null, id); synchronized (us) { @@ -176,18 +210,53 @@ public class Jalview */ 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() + { + // BH - for event debugging in JavaScript (Java mode only) + if (!(/** @j2sNative true ||*/false)) + { + 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); - System.out.println("Java version: " - + System.getProperty("java.version")); + + if (!isJS()) + { + 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")); @@ -195,42 +264,49 @@ 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) { - System.out.println("CMD [-props " + usrPropsFile - + "] executed successfully!"); + System.out.println( + "CMD [-props " + usrPropsFile + "] executed successfully!"); } - // anything else! - - final String jabawsUrl = aparser.getValue("jabaws"); - if (jabawsUrl != null) + /** + * BH 2018 ignoring this section for JS + * + * @j2sNative + */ { - 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) { @@ -261,9 +337,8 @@ public class Jalview } catch (NoClassDefFoundError error) { error.printStackTrace(); - System.out - .println("\nEssential logging libraries not found." - + "\nUse: java -Djava.ext.dirs=$PATH_TO_LIB$ jalview.bin.Jalview"); + System.out.println("\nEssential logging libraries not found." + + "\nUse: java -classpath \"$PATH_TO_LIB$/*:$PATH_TO_CLASSES$\" jalview.bin.Jalview"); System.exit(0); } @@ -274,77 +349,128 @@ public class Jalview UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) { + System.err.println("Unexpected Look and Feel Exception"); + ex.printStackTrace(); } - if (Platform.isAMac()) + if (Platform.isAMacAndNotJS()) { + + LookAndFeel lookAndFeel = ch.randelshofer.quaqua.QuaquaManager + .getLookAndFeel(); System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Jalview"); System.setProperty("apple.laf.useScreenMenuBar", "true"); - try + if (lookAndFeel != null) { - UIManager.setLookAndFeel(ch.randelshofer.quaqua.QuaquaManager - .getLookAndFeel()); - } catch (Throwable e) + 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")) { - System.err.println("Failed to set QuaQua look and feel: " - + e.toString()); + 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 = new Desktop() +// { +// // BH testing +// @Override +// protected void processEvent(AWTEvent e) { +// System.out.println("Jalview.java " + e); +// super.processEvent(e); +// } +// } + ; desktop.setInBatchMode(true); // indicate we are starting up desktop.setVisible(true); - desktop.startServiceDiscovery(); - if (!aparser.contains("nousagestats")) - { - startUsageStats(desktop); - } - else - { - System.err.println("CMD [-nousagestats] executed successfully!"); - } - if (!aparser.contains("noquestionnaire")) + /** + * BH 2018 JS bypass this section + * + * @j2sNative + * + */ { - 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!"); - } - desktop.checkForNews(); - } + else + { + System.err + .println("CMD [-noquestionnaire] executed successfully!"); + } - if (!isHeadlessMode()) - { - BioJsHTMLOutput.updateBioJS(); + if (!aparser.contains("nonews")) + { + desktop.checkForNews(); + } + + BioJsHTMLOutput.updateBioJS(); + } } String file = null, data = null; @@ -372,8 +498,8 @@ public class Jalview { if (desktop == null || headless) { - System.out - .println("Headless vamsas sessions not yet supported. Sorry."); + 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. @@ -423,8 +549,8 @@ public class Jalview { if (desktop.joinVamsasSession(vamsasSession)) { - System.out.println("Successfully joined vamsas session " - + vamsasSession); + System.out.println( + "Successfully joined vamsas session " + vamsasSession); } else { @@ -433,16 +559,16 @@ public class Jalview } } catch (Exception e) { - System.err.println("ERROR: Failed to join vamsas session " - + vamsasSession); + 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: + Cache.log.info( + "Skipping Push for import of data into existing vamsas session."); // TODO: // enable // this // when @@ -457,13 +583,14 @@ public class Jalview { if (!headless) { - desktop.setProgressBar(MessageManager - .getString("status.processing_commandline_args"), + desktop.setProgressBar( + MessageManager + .getString("status.processing_commandline_args"), progress = System.currentTimeMillis()); } System.out.println("CMD [-open " + file + "] executed successfully!"); - if (!file.startsWith("http://")) + if (!isJS() && !file.startsWith("http://")) { if (!(new File(file)).exists()) { @@ -475,7 +602,7 @@ public class Jalview } } - protocol = AppletFormatAdapter.checkProtocol(file); + protocol = AppletFormatAdapter.checkProtocol(file); try { @@ -499,19 +626,13 @@ public class Jalview { data.replaceAll("%20", " "); - ColourSchemeI cs = ColourSchemeProperty.getColour(af - .getViewport().getAlignment(), data); + ColourSchemeI cs = ColourSchemeProperty + .getColourScheme(af.getViewport().getAlignment(), data); - if (cs == null) + if (cs != null) { - UserColourScheme ucs = new UserColourScheme("white"); - ucs.parseAppletParameter(data); - cs = ucs; - } - else - { - System.out.println("CMD [-color " + data - + "] executed successfully!"); + System.out.println( + "CMD [-color " + data + "] executed successfully!"); } af.changeColour(cs); } @@ -523,8 +644,8 @@ public class Jalview af.parseFeaturesFile(data, AppletFormatAdapter.checkProtocol(data)); // System.out.println("Added " + data); - System.out.println("CMD groups[-" + data - + "] executed successfully!"); + System.out.println( + "CMD groups[-" + data + "] executed successfully!"); } data = aparser.getValue("features", true); if (data != null) @@ -532,8 +653,8 @@ public class Jalview af.parseFeaturesFile(data, AppletFormatAdapter.checkProtocol(data)); // System.out.println("Added " + data); - System.out.println("CMD [-features " + data - + "] executed successfully!"); + System.out.println( + "CMD [-features " + data + "] executed successfully!"); } data = aparser.getValue("annotations", true); @@ -541,8 +662,8 @@ public class Jalview { af.loadJalviewDataFile(data, null, null, null); // System.out.println("Added " + data); - System.out.println("CMD [-annotations " + data - + "] executed successfully!"); + System.out.println( + "CMD [-annotations " + data + "] executed successfully!"); } // set or clear the sortbytree flag. if (aparser.contains("sortbytree")) @@ -573,18 +694,14 @@ public class Jalview data = aparser.getValue("tree", true); if (data != null) { - jalview.io.NewickFile fin = null; try { - System.out.println("CMD [-tree " + data - + "] executed successfully!"); - fin = new NewickFile(data, + System.out.println( + "CMD [-tree " + data + "] executed successfully!"); + NewickFile nf = new NewickFile(data, AppletFormatAdapter.checkProtocol(data)); - if (fin != null) - { - af.getViewport().setCurrentTree( - af.ShowNewickTree(fin, data).getTree()); - } + af.getViewport() + .setCurrentTree(af.showNewickTree(nf, data).getTree()); } catch (IOException ex) { System.err.println("Couldn't add tree " + data); @@ -650,10 +767,33 @@ public class Jalview { File imageFile = new File(file); imageName = imageFile.getName(); - new HtmlSvgOutput(new File(file), af.alignPanel); + 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); @@ -663,13 +803,14 @@ public class Jalview else if (outputFormat.equalsIgnoreCase("eps")) { File outputFile = new File(file); - System.out.println("Creating EPS file: " - + outputFile.getAbsolutePath()); + System.out.println( + "Creating EPS file: " + outputFile.getAbsolutePath()); af.createEPS(outputFile); continue; } - if (af.saveAlignment(file, format)) + af.saveAlignment(file, format); + if (af.isSaveAlignmentSuccessful()) { System.out.println("Written alignment in " + format + " format to " + file); @@ -693,15 +834,16 @@ public class Jalview // And the user // //////////////////// - if (!headless && file == null && vamsasImport == null + if (/** @j2sNative false && */ // BH 2018 + !headless && file == null && vamsasImport == null && jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true)) { - file = jalview.bin.Cache.getDefault( - "STARTUP_FILE", + 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")) + 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"); @@ -757,8 +899,8 @@ public class Jalview } else { - System.err - .println("Sorry. Groovy Support is not available, so ignoring the provided groovy script " + System.err.println( + "Sorry. Groovy Support is not available, so ignoring the provided groovy script " + groovyscript); } } @@ -775,8 +917,8 @@ public class Jalview private static void showUsage() { - System.out - .println("Usage: jalview -open [FILE] [OUTPUT_FORMAT] [OUTPUT_FILE]\n\n" + 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" @@ -795,21 +937,27 @@ public class Jalview + "-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)" + // "-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" + "-dasserver nickname=URL\tAdd and enable a das server with given nickname\n\t\t\t(alphanumeric or underscores only) for retrieval of features for all alignments.\n" + "\t\t\tSources that also support the sequence command may be specified by prepending the URL with sequence:\n" + "\t\t\t e.g. sequence:http://localdas.somewhere.org/das/source)\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" + // "-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"); @@ -820,10 +968,8 @@ public class Jalview /** * 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.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)", @@ -832,8 +978,8 @@ public class Jalview @Override public void run() { - Cache.log - .debug("Initialising googletracker for usage stats."); + Cache.log.debug( + "Initialising googletracker for usage stats."); Cache.initGoogleTracker(); Cache.log.debug("Tracking enabled."); } @@ -873,10 +1019,10 @@ public class Jalview try { tfile = File.createTempFile("jalview", "groovy"); - PrintWriter outfile = new PrintWriter(new OutputStreamWriter( - new FileOutputStream(tfile))); - BufferedReader br = new BufferedReader(new InputStreamReader( - System.in)); + 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) { @@ -889,8 +1035,8 @@ public class Jalview } catch (Exception ex) { System.err.println("Failed to read from STDIN into tempfile " - + ((tfile == null) ? "(tempfile wasn't created)" : tfile - .toString())); + + ((tfile == null) ? "(tempfile wasn't created)" + : tfile.toString())); ex.printStackTrace(); return; } @@ -899,8 +1045,8 @@ public class Jalview sfile = tfile.toURI().toURL(); } catch (Exception x) { - System.err - .println("Unexpected Malformed URL Exception for temporary file created from STDIN: " + System.err.println( + "Unexpected Malformed URL Exception for temporary file created from STDIN: " + tfile.toURI()); x.printStackTrace(); return; @@ -942,7 +1088,7 @@ public class Jalview } try { - Map vbinding = new HashMap(); + Map vbinding = new HashMap<>(); vbinding.put("Jalview", this); if (af != null) { @@ -987,9 +1133,8 @@ public class Jalview nickname = data.substring(0, pos); } url = data.substring(pos + 1); - if (url != null - && (url.startsWith("http:") || url - .startsWith("sequence:http:"))) + if (url != null && (url.startsWith("http:") + || url.startsWith("sequence:http:"))) { if (nickname == null) { @@ -1004,17 +1149,17 @@ public class Jalview locsources += "\t"; } locsources = locsources + nickname + "|" + url; - System.err - .println("NOTE! dasserver parameter not yet really supported (got args of " + System.err.println( + "NOTE! dasserver parameter not yet really supported (got args of " + nickname + "|" + url); if (source == null) { - source = new Vector(); + source = new Vector<>(); } source.addElement(nickname); } - System.out.println("CMD [-dasserver " + data - + "] executed successfully!"); + System.out.println( + "CMD [-dasserver " + data + "] executed successfully!"); } // loop until no more server entries are found. if (locsources != null && locsources.indexOf('|') > -1) { @@ -1027,7 +1172,7 @@ public class Jalview System.out.println("adding source '" + data + "'"); if (source == null) { - source = new Vector(); + source = new Vector<>(); } source.addElement(data); }